From 1ca9b23ad704888082eb093228a8275f90d51f4c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Dr=C3=B6ge?= <sebastian@centricular.com> Date: Wed, 24 Jun 2015 23:21:35 +0200 Subject: [PATCH] Imported Upstream version 1.5.2 --- ChangeLog | 951 +++++++++++++- Makefile.am | 1 + Makefile.in | 1 + NEWS | 2 +- RELEASE | 260 +--- autogen.sh | 29 +- common/Makefile.am | 2 +- common/Makefile.in | 2 +- common/gst-autogen.sh | 162 --- common/gst.supp | 14 + common/gtk-doc-plugins.mak | 37 +- common/gtk-doc.mak | 22 +- common/m4/gst-glib2.m4 | 4 + common/m4/introspection.m4 | 2 + common/mangle-db.py | 71 ++ common/mangle-tmpl.py | 165 --- config.h.in | 3 + configure | 45 +- configure.ac | 8 +- docs/plugins/Makefile.am | 3 - docs/plugins/Makefile.in | 35 +- docs/plugins/gst-plugins-good-plugins.args | 246 +++- .../gst-plugins-good-plugins.hierarchy | 3 +- docs/plugins/html/GstIirEqualizer.html | 4 - docs/plugins/html/ch01.html | 314 ++--- .../gst-plugins-good-plugins-1.0.devhelp2 | 24 + .../gst-plugins-good-plugins-3gppmux.html | 65 +- ...plugins-good-plugins-GstVideoMixerPad.html | 2 - .../gst-plugins-good-plugins-aacparse.html | 2 - .../html/gst-plugins-good-plugins-aasink.html | 62 +- .../gst-plugins-good-plugins-ac3parse.html | 2 - .../gst-plugins-good-plugins-agingtv.html | 6 +- .../gst-plugins-good-plugins-alawdec.html | 10 +- .../gst-plugins-good-plugins-alawenc.html | 10 +- .../html/gst-plugins-good-plugins-alpha.html | 10 +- .../gst-plugins-good-plugins-alphacolor.html | 11 +- .../gst-plugins-good-plugins-amrparse.html | 2 - .../gst-plugins-good-plugins-apedemux.html | 6 +- .../gst-plugins-good-plugins-apev2mux.html | 6 +- ...-plugins-good-plugins-aspectratiocrop.html | 6 +- ...gst-plugins-good-plugins-audioamplify.html | 6 +- ...st-plugins-good-plugins-audiochebband.html | 6 +- ...t-plugins-good-plugins-audiocheblimit.html | 6 +- ...gst-plugins-good-plugins-audiodynamic.html | 6 +- .../gst-plugins-good-plugins-audioecho.html | 6 +- ...t-plugins-good-plugins-audiofirfilter.html | 8 +- ...t-plugins-good-plugins-audioiirfilter.html | 8 +- .../gst-plugins-good-plugins-audioinvert.html | 6 +- ...gst-plugins-good-plugins-audiokaraoke.html | 6 +- ...st-plugins-good-plugins-audiopanorama.html | 6 +- ...t-plugins-good-plugins-audiowsincband.html | 4 +- ...-plugins-good-plugins-audiowsinclimit.html | 4 +- .../gst-plugins-good-plugins-auparse.html | 10 +- ...st-plugins-good-plugins-autoaudiosink.html | 6 +- ...gst-plugins-good-plugins-autoaudiosrc.html | 6 +- ...st-plugins-good-plugins-autovideosink.html | 6 +- ...gst-plugins-good-plugins-autovideosrc.html | 6 +- .../gst-plugins-good-plugins-avidemux.html | 6 +- .../html/gst-plugins-good-plugins-avimux.html | 6 +- .../gst-plugins-good-plugins-avisubtitle.html | 6 +- .../gst-plugins-good-plugins-cacasink.html | 6 +- ...gst-plugins-good-plugins-cairooverlay.html | 54 +- .../gst-plugins-good-plugins-capssetter.html | 10 +- .../html/gst-plugins-good-plugins-cutter.html | 6 +- .../gst-plugins-good-plugins-dcaparse.html | 2 - .../gst-plugins-good-plugins-deinterlace.html | 6 +- ...gst-plugins-good-plugins-deinterleave.html | 6 +- .../html/gst-plugins-good-plugins-dicetv.html | 34 +- ...-plugins-good-plugins-directsoundsink.html | 6 +- .../gst-plugins-good-plugins-dtmfsrc.html | 8 +- .../gst-plugins-good-plugins-dv1394src.html | 34 +- .../html/gst-plugins-good-plugins-dvdec.html | 6 +- .../gst-plugins-good-plugins-dvdemux.html | 6 +- .../html/gst-plugins-good-plugins-edgetv.html | 6 +- ...lugins-good-plugins-equalizer-10bands.html | 6 +- ...plugins-good-plugins-equalizer-3bands.html | 6 +- ...plugins-good-plugins-equalizer-nbands.html | 6 +- .../gst-plugins-good-plugins-flacdec.html | 6 +- .../gst-plugins-good-plugins-flacenc.html | 6 +- .../gst-plugins-good-plugins-flacparse.html | 6 +- .../gst-plugins-good-plugins-flactag.html | 6 +- .../gst-plugins-good-plugins-flvdemux.html | 6 +- .../html/gst-plugins-good-plugins-flvmux.html | 6 +- .../html/gst-plugins-good-plugins-flxdec.html | 10 +- .../html/gst-plugins-good-plugins-gamma.html | 4 +- ...st-plugins-good-plugins-gdkpixbufsink.html | 6 +- .../html/gst-plugins-good-plugins-goom.html | 8 +- .../gst-plugins-good-plugins-goom2k1.html | 8 +- .../gst-plugins-good-plugins-hdv1394src.html | 6 +- .../gst-plugins-good-plugins-icydemux.html | 6 +- .../gst-plugins-good-plugins-id3demux.html | 6 +- .../gst-plugins-good-plugins-id3v2mux.html | 6 +- .../gst-plugins-good-plugins-imagefreeze.html | 6 +- .../gst-plugins-good-plugins-interleave.html | 6 +- .../gst-plugins-good-plugins-ismlmux.html | 61 +- ...st-plugins-good-plugins-jackaudiosink.html | 6 +- ...gst-plugins-good-plugins-jackaudiosrc.html | 6 +- .../gst-plugins-good-plugins-jpegdec.html | 6 +- .../gst-plugins-good-plugins-jpegenc.html | 34 +- .../html/gst-plugins-good-plugins-level.html | 4 +- ...st-plugins-good-plugins-matroskademux.html | 6 +- .../gst-plugins-good-plugins-matroskamux.html | 6 +- .../html/gst-plugins-good-plugins-mj2mux.html | 61 +- .../gst-plugins-good-plugins-monoscope.html | 6 +- .../html/gst-plugins-good-plugins-mp4mux.html | 61 +- ...t-plugins-good-plugins-mpegaudioparse.html | 2 - .../gst-plugins-good-plugins-mulawdec.html | 10 +- .../gst-plugins-good-plugins-mulawenc.html | 10 +- ...st-plugins-good-plugins-multifilesink.html | 6 +- ...gst-plugins-good-plugins-multifilesrc.html | 6 +- ...t-plugins-good-plugins-multipartdemux.html | 4 +- ...gst-plugins-good-plugins-multipartmux.html | 4 +- ...gst-plugins-good-plugins-multiudpsink.html | 34 +- .../html/gst-plugins-good-plugins-optv.html | 6 +- .../gst-plugins-good-plugins-oss4sink.html | 6 +- .../gst-plugins-good-plugins-oss4src.html | 6 +- .../gst-plugins-good-plugins-osssink.html | 6 +- .../html/gst-plugins-good-plugins-osssrc.html | 6 +- ...gst-plugins-good-plugins-osxaudiosink.html | 6 +- .../gst-plugins-good-plugins-osxaudiosrc.html | 6 +- ...gst-plugins-good-plugins-osxvideosink.html | 6 +- .../gst-plugins-good-plugins-plugin-1394.html | 2 +- ...st-plugins-good-plugins-plugin-aasink.html | 2 +- .../gst-plugins-good-plugins-plugin-alaw.html | 2 +- ...gst-plugins-good-plugins-plugin-alpha.html | 2 +- ...lugins-good-plugins-plugin-alphacolor.html | 2 +- ...st-plugins-good-plugins-plugin-apetag.html | 2 +- ...t-plugins-good-plugins-plugin-audiofx.html | 2 +- ...t-plugins-good-plugins-plugin-auparse.html | 2 +- ...lugins-good-plugins-plugin-autodetect.html | 2 +- .../gst-plugins-good-plugins-plugin-avi.html | 2 +- ...-plugins-good-plugins-plugin-cacasink.html | 2 +- ...gst-plugins-good-plugins-plugin-cairo.html | 2 +- ...st-plugins-good-plugins-plugin-cutter.html | 2 +- ...gst-plugins-good-plugins-plugin-debug.html | 2 +- ...ugins-good-plugins-plugin-deinterlace.html | 2 +- .../gst-plugins-good-plugins-plugin-dtmf.html | 2 +- .../gst-plugins-good-plugins-plugin-dv.html | 2 +- ...t-plugins-good-plugins-plugin-effectv.html | 2 +- ...plugins-good-plugins-plugin-equalizer.html | 2 +- .../gst-plugins-good-plugins-plugin-flac.html | 2 +- .../gst-plugins-good-plugins-plugin-flv.html | 2 +- ...st-plugins-good-plugins-plugin-flxdec.html | 2 +- ...plugins-good-plugins-plugin-gdkpixbuf.html | 2 +- .../gst-plugins-good-plugins-plugin-goom.html | 2 +- ...t-plugins-good-plugins-plugin-goom2k1.html | 2 +- ...-plugins-good-plugins-plugin-icydemux.html | 2 +- ...-plugins-good-plugins-plugin-id3demux.html | 2 +- ...ugins-good-plugins-plugin-imagefreeze.html | 2 +- ...lugins-good-plugins-plugin-interleave.html | 2 +- ...st-plugins-good-plugins-plugin-isomp4.html | 2 +- .../gst-plugins-good-plugins-plugin-jack.html | 2 +- .../gst-plugins-good-plugins-plugin-jpeg.html | 2 +- ...gst-plugins-good-plugins-plugin-level.html | 2 +- ...-plugins-good-plugins-plugin-matroska.html | 2 +- ...gst-plugins-good-plugins-plugin-mulaw.html | 2 +- ...plugins-good-plugins-plugin-multifile.html | 2 +- ...plugins-good-plugins-plugin-multipart.html | 2 +- ...ns-good-plugins-plugin-navigationtest.html | 2 +- .../gst-plugins-good-plugins-plugin-oss4.html | 2 +- ...-plugins-good-plugins-plugin-ossaudio.html | 2 +- .../gst-plugins-good-plugins-plugin-png.html | 2 +- ...lugins-good-plugins-plugin-pulseaudio.html | 2 +- ...lugins-good-plugins-plugin-replaygain.html | 2 +- .../gst-plugins-good-plugins-plugin-rtp.html | 2 +- ...lugins-good-plugins-plugin-rtpmanager.html | 2 +- .../gst-plugins-good-plugins-plugin-rtsp.html | 2 +- ...plugins-good-plugins-plugin-shapewipe.html | 2 +- ...lugins-good-plugins-plugin-shout2send.html | 2 +- ...gst-plugins-good-plugins-plugin-smpte.html | 2 +- .../gst-plugins-good-plugins-plugin-soup.html | 2 +- ...-plugins-good-plugins-plugin-spectrum.html | 2 +- ...gst-plugins-good-plugins-plugin-speex.html | 2 +- ...st-plugins-good-plugins-plugin-taglib.html | 2 +- .../gst-plugins-good-plugins-plugin-udp.html | 2 +- ...gins-good-plugins-plugin-video4linux2.html | 2 +- ...-plugins-good-plugins-plugin-videobox.html | 2 +- ...plugins-good-plugins-plugin-videocrop.html | 2 +- ...ugins-good-plugins-plugin-videofilter.html | 2 +- ...lugins-good-plugins-plugin-videomixer.html | 2 +- .../gst-plugins-good-plugins-plugin-vpx.html | 2 +- ...st-plugins-good-plugins-plugin-wavenc.html | 2 +- ...t-plugins-good-plugins-plugin-wavpack.html | 2 +- ...-plugins-good-plugins-plugin-wavparse.html | 2 +- ...plugins-good-plugins-plugin-ximagesrc.html | 2 +- ...st-plugins-good-plugins-plugin-y4menc.html | 2 +- .../html/gst-plugins-good-plugins-pngdec.html | 6 +- .../html/gst-plugins-good-plugins-pngenc.html | 6 +- ...t-plugins-good-plugins-progressreport.html | 6 +- .../gst-plugins-good-plugins-pulsesink.html | 6 +- .../gst-plugins-good-plugins-pulsesrc.html | 6 +- .../gst-plugins-good-plugins-qtdemux.html | 30 +- ...st-plugins-good-plugins-qtmoovrecover.html | 10 - .../html/gst-plugins-good-plugins-qtmux.html | 76 +- .../gst-plugins-good-plugins-quarktv.html | 6 +- .../gst-plugins-good-plugins-radioactv.html | 6 +- .../html/gst-plugins-good-plugins-revtv.html | 6 +- .../gst-plugins-good-plugins-rganalysis.html | 4 +- .../gst-plugins-good-plugins-rglimiter.html | 4 +- .../gst-plugins-good-plugins-rgvolume.html | 4 +- .../gst-plugins-good-plugins-rippletv.html | 6 +- .../gst-plugins-good-plugins-rtpL16depay.html | 6 +- .../gst-plugins-good-plugins-rtpL16pay.html | 6 +- .../gst-plugins-good-plugins-rtpac3depay.html | 6 +- .../gst-plugins-good-plugins-rtpac3pay.html | 6 +- .../gst-plugins-good-plugins-rtpamrdepay.html | 6 +- .../gst-plugins-good-plugins-rtpamrpay.html | 6 +- .../html/gst-plugins-good-plugins-rtpbin.html | 147 +-- .../gst-plugins-good-plugins-rtpbvdepay.html | 8 +- .../gst-plugins-good-plugins-rtpbvpay.html | 8 +- .../html/gst-plugins-good-plugins-rtpdec.html | 114 +- .../gst-plugins-good-plugins-rtpdtmfmux.html | 8 +- .../gst-plugins-good-plugins-rtpdtmfsrc.html | 8 +- .../gst-plugins-good-plugins-rtpj2kpay.html | 10 +- ...-plugins-good-plugins-rtpjitterbuffer.html | 24 +- .../gst-plugins-good-plugins-rtpjpegpay.html | 10 +- .../html/gst-plugins-good-plugins-rtpmux.html | 4 +- .../gst-plugins-good-plugins-rtpptdemux.html | 22 +- ...st-plugins-good-plugins-rtprtxreceive.html | 6 +- .../gst-plugins-good-plugins-rtprtxsend.html | 10 +- .../gst-plugins-good-plugins-rtpsbcpay.html | 6 +- .../gst-plugins-good-plugins-rtpsession.html | 137 +- ...gst-plugins-good-plugins-rtpssrcdemux.html | 18 +- .../gst-plugins-good-plugins-rtspsrc.html | 31 +- .../gst-plugins-good-plugins-sbcparse.html | 10 +- .../gst-plugins-good-plugins-scaletempo.html | 6 +- ...gst-plugins-good-plugins-shagadelictv.html | 6 +- .../gst-plugins-good-plugins-shapewipe.html | 6 +- .../gst-plugins-good-plugins-shout2send.html | 30 +- .../html/gst-plugins-good-plugins-smpte.html | 6 +- .../gst-plugins-good-plugins-smptealpha.html | 6 +- .../gst-plugins-good-plugins-souphttpsrc.html | 19 +- .../gst-plugins-good-plugins-spectrum.html | 6 +- .../gst-plugins-good-plugins-speexdec.html | 6 +- .../gst-plugins-good-plugins-speexenc.html | 6 +- ...gst-plugins-good-plugins-splitfilesrc.html | 6 +- ...gst-plugins-good-plugins-splitmuxsink.html | 4 - .../gst-plugins-good-plugins-splitmuxsrc.html | 4 - .../gst-plugins-good-plugins-streaktv.html | 6 +- .../gst-plugins-good-plugins-taginject.html | 4 +- .../gst-plugins-good-plugins-udpsink.html | 6 +- .../html/gst-plugins-good-plugins-udpsrc.html | 6 +- .../gst-plugins-good-plugins-v4l2radio.html | 6 +- .../gst-plugins-good-plugins-v4l2sink.html | 6 +- .../gst-plugins-good-plugins-v4l2src.html | 34 +- .../gst-plugins-good-plugins-vertigotv.html | 34 +- ...gst-plugins-good-plugins-videobalance.html | 4 +- .../gst-plugins-good-plugins-videobox.html | 11 +- .../gst-plugins-good-plugins-videocrop.html | 6 +- .../gst-plugins-good-plugins-videoflip.html | 4 +- .../gst-plugins-good-plugins-videomixer.html | 4 +- .../html/gst-plugins-good-plugins-vp8dec.html | 6 +- .../html/gst-plugins-good-plugins-vp8enc.html | 6 +- .../html/gst-plugins-good-plugins-warptv.html | 6 +- ...gst-plugins-good-plugins-waveformsink.html | 6 +- .../html/gst-plugins-good-plugins-wavenc.html | 6 +- .../gst-plugins-good-plugins-wavpackdec.html | 6 +- .../gst-plugins-good-plugins-wavpackenc.html | 6 +- ...gst-plugins-good-plugins-wavpackparse.html | 2 - .../gst-plugins-good-plugins-wavparse.html | 4 +- .../gst-plugins-good-plugins-webmmux.html | 6 +- .../gst-plugins-good-plugins-ximagesrc.html | 6 +- .../html/gst-plugins-good-plugins-y4menc.html | 6 +- docs/plugins/html/index.html | 316 ++--- docs/plugins/html/index.sgml | 24 + docs/plugins/inspect/plugin-1394.xml | 2 +- docs/plugins/inspect/plugin-aasink.xml | 2 +- docs/plugins/inspect/plugin-alaw.xml | 2 +- docs/plugins/inspect/plugin-alpha.xml | 2 +- docs/plugins/inspect/plugin-alphacolor.xml | 2 +- docs/plugins/inspect/plugin-apetag.xml | 2 +- docs/plugins/inspect/plugin-audiofx.xml | 2 +- docs/plugins/inspect/plugin-audioparsers.xml | 2 +- docs/plugins/inspect/plugin-auparse.xml | 2 +- docs/plugins/inspect/plugin-autodetect.xml | 2 +- docs/plugins/inspect/plugin-avi.xml | 2 +- docs/plugins/inspect/plugin-cacasink.xml | 2 +- docs/plugins/inspect/plugin-cairo.xml | 2 +- docs/plugins/inspect/plugin-cutter.xml | 2 +- docs/plugins/inspect/plugin-debug.xml | 2 +- docs/plugins/inspect/plugin-deinterlace.xml | 2 +- docs/plugins/inspect/plugin-dtmf.xml | 2 +- docs/plugins/inspect/plugin-dv.xml | 2 +- docs/plugins/inspect/plugin-effectv.xml | 2 +- docs/plugins/inspect/plugin-equalizer.xml | 2 +- docs/plugins/inspect/plugin-flac.xml | 2 +- docs/plugins/inspect/plugin-flv.xml | 2 +- docs/plugins/inspect/plugin-flxdec.xml | 2 +- docs/plugins/inspect/plugin-gdkpixbuf.xml | 2 +- docs/plugins/inspect/plugin-goom.xml | 2 +- docs/plugins/inspect/plugin-goom2k1.xml | 2 +- docs/plugins/inspect/plugin-icydemux.xml | 2 +- docs/plugins/inspect/plugin-id3demux.xml | 2 +- docs/plugins/inspect/plugin-imagefreeze.xml | 2 +- docs/plugins/inspect/plugin-interleave.xml | 2 +- docs/plugins/inspect/plugin-isomp4.xml | 6 +- docs/plugins/inspect/plugin-jack.xml | 2 +- docs/plugins/inspect/plugin-jpeg.xml | 2 +- docs/plugins/inspect/plugin-level.xml | 2 +- docs/plugins/inspect/plugin-matroska.xml | 2 +- docs/plugins/inspect/plugin-mulaw.xml | 2 +- docs/plugins/inspect/plugin-multifile.xml | 2 +- docs/plugins/inspect/plugin-multipart.xml | 2 +- .../plugins/inspect/plugin-navigationtest.xml | 2 +- docs/plugins/inspect/plugin-oss4.xml | 2 +- docs/plugins/inspect/plugin-ossaudio.xml | 2 +- docs/plugins/inspect/plugin-png.xml | 2 +- docs/plugins/inspect/plugin-pulseaudio.xml | 2 +- docs/plugins/inspect/plugin-replaygain.xml | 2 +- docs/plugins/inspect/plugin-rtp.xml | 2 +- docs/plugins/inspect/plugin-rtpmanager.xml | 2 +- docs/plugins/inspect/plugin-rtsp.xml | 2 +- docs/plugins/inspect/plugin-shapewipe.xml | 2 +- docs/plugins/inspect/plugin-shout2send.xml | 2 +- docs/plugins/inspect/plugin-smpte.xml | 2 +- docs/plugins/inspect/plugin-soup.xml | 2 +- docs/plugins/inspect/plugin-spectrum.xml | 2 +- docs/plugins/inspect/plugin-speex.xml | 2 +- docs/plugins/inspect/plugin-taglib.xml | 2 +- docs/plugins/inspect/plugin-udp.xml | 2 +- docs/plugins/inspect/plugin-video4linux2.xml | 2 +- docs/plugins/inspect/plugin-videobox.xml | 2 +- docs/plugins/inspect/plugin-videocrop.xml | 2 +- docs/plugins/inspect/plugin-videofilter.xml | 2 +- docs/plugins/inspect/plugin-videomixer.xml | 2 +- docs/plugins/inspect/plugin-vpx.xml | 2 +- docs/plugins/inspect/plugin-wavenc.xml | 2 +- docs/plugins/inspect/plugin-wavpack.xml | 2 +- docs/plugins/inspect/plugin-wavparse.xml | 2 +- docs/plugins/inspect/plugin-ximagesrc.xml | 2 +- docs/plugins/inspect/plugin-y4menc.xml | 2 +- ext/pulse/pulsesrc.c | 22 +- ext/soup/gstsouphttpsrc.c | 42 +- ext/soup/gstsouphttpsrc.h | 1 + gst-plugins-good.doap | 10 + gst-plugins-good.spec | 2 +- gst/audiofx/audiopanoramaorc-dist.c | 36 +- gst/audioparsers/gstdcaparse.c | 2 +- gst/audioparsers/gstflacparse.c | 4 + gst/audioparsers/gstmpegaudioparse.c | 2 +- gst/deinterlace/tvtime-dist.c | 2 +- gst/flv/gstflvdemux.c | 10 +- gst/flv/gstflvmux.c | 122 +- gst/flv/gstflvmux.h | 4 +- gst/goom/goom_core.c | 3 + gst/goom/gstaudiovisualizer.c | 251 ++-- gst/goom2k1/gstaudiovisualizer.c | 249 ++-- gst/isomp4/atoms.c | 259 ++-- gst/isomp4/atoms.h | 30 +- gst/isomp4/atomsrecovery.c | 2 +- gst/isomp4/fourcc.h | 9 + gst/isomp4/gstqtmux.c | 1108 ++++++++++++++--- gst/isomp4/gstqtmux.h | 53 +- gst/isomp4/gstqtmuxmap.c | 8 +- gst/isomp4/qtdemux.c | 208 +++- gst/isomp4/qtdemux_dump.c | 58 +- gst/isomp4/qtdemux_dump.h | 4 + gst/isomp4/qtdemux_types.c | 5 + gst/matroska/lzo.c | 2 + gst/matroska/matroska-demux.c | 69 +- gst/matroska/matroska-ids.c | 3 + gst/matroska/matroska-ids.h | 14 + gst/matroska/matroska-mux.c | 57 +- gst/matroska/matroska-parse.c | 4 +- gst/multifile/gstsplitmuxpartreader.c | 35 +- gst/multifile/gstsplitmuxsink.c | 19 +- gst/multifile/gstsplitmuxsink.h | 1 + gst/multifile/gstsplitmuxsrc.c | 100 +- gst/rtp/gstasteriskh263.c | 2 +- gst/rtp/gstrtpac3pay.c | 4 +- gst/rtp/gstrtpamrpay.c | 4 +- gst/rtp/gstrtpceltdepay.c | 6 +- gst/rtp/gstrtpceltpay.c | 4 +- gst/rtp/gstrtpdvpay.c | 4 +- gst/rtp/gstrtpg723pay.c | 4 +- gst/rtp/gstrtpg729pay.c | 4 +- gst/rtp/gstrtpgsmpay.c | 4 +- gst/rtp/gstrtpgstpay.c | 4 +- gst/rtp/gstrtph263pay.c | 4 +- gst/rtp/gstrtph263ppay.c | 4 +- gst/rtp/gstrtph264depay.c | 4 +- gst/rtp/gstrtpj2kpay.c | 4 +- gst/rtp/gstrtpjpegpay.c | 4 +- gst/rtp/gstrtpmp2tpay.c | 4 +- gst/rtp/gstrtpmp4adepay.c | 4 +- gst/rtp/gstrtpmp4apay.c | 4 +- gst/rtp/gstrtpmp4gdepay.c | 4 +- gst/rtp/gstrtpmp4gpay.c | 4 +- gst/rtp/gstrtpmp4vpay.c | 8 +- gst/rtp/gstrtpmpapay.c | 4 +- gst/rtp/gstrtpmparobustdepay.c | 10 +- gst/rtp/gstrtpmpvpay.c | 4 +- gst/rtp/gstrtpqcelpdepay.c | 4 +- gst/rtp/gstrtpqdmdepay.c | 6 +- gst/rtp/gstrtpsbcpay.c | 4 +- gst/rtp/gstrtpspeexpay.c | 4 +- gst/rtp/gstrtpsv3vdepay.c | 2 +- gst/rtp/gstrtptheorapay.c | 4 +- gst/rtp/gstrtpvorbispay.c | 4 +- gst/rtp/gstrtpvp8pay.c | 9 +- gst/rtp/gstrtpvrawdepay.c | 2 +- gst/rtp/gstrtpvrawpay.c | 4 +- gst/rtpmanager/gstrtpbin.c | 138 +- gst/rtpmanager/gstrtpbin.h | 2 + gst/rtpmanager/gstrtpjitterbuffer.c | 11 +- gst/rtpmanager/gstrtpmux.c | 8 +- gst/rtpmanager/gstrtprtxqueue.c | 2 + gst/rtpmanager/gstrtpsession.c | 84 +- gst/rtpmanager/gstrtpsession.h | 9 + gst/rtpmanager/rtpjitterbuffer.c | 4 +- gst/rtpmanager/rtpsession.c | 2 +- gst/rtpmanager/rtpsource.c | 126 +- gst/rtpmanager/rtpstats.h | 2 +- gst/rtsp/gstrtspsrc.c | 31 + gst/rtsp/gstrtspsrc.h | 1 + gst/videomixer/videomixerorc-dist.c | 4 +- po/af.gmo | Bin 666 -> 666 bytes po/af.po | 2 +- po/az.gmo | Bin 723 -> 723 bytes po/az.po | 2 +- po/bg.gmo | Bin 11149 -> 11149 bytes po/bg.po | 2 +- po/ca.gmo | Bin 9124 -> 9124 bytes po/ca.po | 2 +- po/cs.gmo | Bin 13055 -> 13055 bytes po/cs.po | 2 +- po/da.gmo | Bin 12072 -> 12072 bytes po/da.po | 2 +- po/de.gmo | Bin 13197 -> 13197 bytes po/de.po | 2 +- po/el.gmo | Bin 11597 -> 11597 bytes po/el.po | 2 +- po/en_GB.gmo | Bin 671 -> 671 bytes po/en_GB.po | 2 +- po/eo.gmo | Bin 1328 -> 1328 bytes po/eo.po | 2 +- po/es.gmo | Bin 9369 -> 9369 bytes po/es.po | 2 +- po/eu.gmo | Bin 7626 -> 7626 bytes po/eu.po | 2 +- po/fi.gmo | Bin 8041 -> 8041 bytes po/fi.po | 2 +- po/fr.gmo | Bin 11048 -> 11048 bytes po/fr.po | 2 +- po/gl.gmo | Bin 10826 -> 10826 bytes po/gl.po | 2 +- po/gst-plugins-good-1.0.pot | 82 +- po/hr.gmo | Bin 8525 -> 8525 bytes po/hr.po | 2 +- po/hu.gmo | Bin 13188 -> 13188 bytes po/hu.po | 2 +- po/id.gmo | Bin 12084 -> 12084 bytes po/id.po | 2 +- po/it.gmo | Bin 8539 -> 8539 bytes po/it.po | 2 +- po/ja.gmo | Bin 11914 -> 11914 bytes po/ja.po | 2 +- po/lt.gmo | Bin 7460 -> 7460 bytes po/lt.po | 2 +- po/lv.gmo | Bin 10424 -> 10424 bytes po/lv.po | 2 +- po/mt.gmo | Bin 5942 -> 5942 bytes po/mt.po | 2 +- po/nb.gmo | Bin 11957 -> 11957 bytes po/nb.po | 2 +- po/nl.gmo | Bin 12455 -> 12454 bytes po/nl.po | 8 +- po/or.gmo | Bin 832 -> 832 bytes po/or.po | 2 +- po/pl.gmo | Bin 12976 -> 12976 bytes po/pl.po | 2 +- po/pt_BR.gmo | Bin 13057 -> 13057 bytes po/pt_BR.po | 2 +- po/ro.gmo | Bin 8001 -> 8001 bytes po/ro.po | 2 +- po/ru.gmo | Bin 16732 -> 16732 bytes po/ru.po | 2 +- po/sk.gmo | Bin 10655 -> 10655 bytes po/sk.po | 2 +- po/sl.gmo | Bin 10312 -> 10312 bytes po/sl.po | 2 +- po/sq.gmo | Bin 685 -> 685 bytes po/sq.po | 2 +- po/sr.gmo | Bin 16222 -> 16222 bytes po/sr.po | 2 +- po/sv.gmo | Bin 12399 -> 12399 bytes po/sv.po | 2 +- po/tr.gmo | Bin 12190 -> 12190 bytes po/tr.po | 2 +- po/uk.gmo | Bin 16823 -> 16823 bytes po/uk.po | 2 +- po/vi.gmo | Bin 14407 -> 14407 bytes po/vi.po | 2 +- po/zh_CN.gmo | Bin 6200 -> 6200 bytes po/zh_CN.po | 2 +- po/zh_HK.gmo | Bin 1571 -> 1571 bytes po/zh_HK.po | 2 +- po/zh_TW.gmo | Bin 1570 -> 1570 bytes po/zh_TW.po | 2 +- sys/osxaudio/gstosxcoreaudioremoteio.c | 2 +- sys/v4l2/ext/types-compat.h | 2 + sys/v4l2/ext/v4l2-common.h | 12 + sys/v4l2/ext/v4l2-controls.h | 70 ++ sys/v4l2/ext/videodev2.h | 416 ++++++- sys/v4l2/gstv4l2allocator.c | 19 +- sys/v4l2/gstv4l2allocator.h | 3 +- sys/v4l2/gstv4l2bufferpool.c | 10 +- sys/v4l2/gstv4l2object.c | 277 ++++- sys/v4l2/gstv4l2transform.c | 435 ++++++- tests/check/elements/qtmux.c | 206 ++- win32/common/config.h | 11 +- 511 files changed, 6535 insertions(+), 3625 deletions(-) create mode 100644 common/mangle-db.py delete mode 100644 common/mangle-tmpl.py diff --git a/ChangeLog b/ChangeLog index b93d4d88e..5da68cbd7 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,9 +1,956 @@ +=== release 1.5.2 === + +2015-06-24 Sebastian Dröge <slomo@coaxion.net> + + * configure.ac: + releasing 1.5.2 + +2015-06-24 22:56:12 +0200 Sebastian Dröge <sebastian@centricular.com> + + * po/af.po: + * po/az.po: + * po/bg.po: + * po/ca.po: + * po/cs.po: + * po/da.po: + * po/de.po: + * po/el.po: + * po/en_GB.po: + * po/eo.po: + * po/es.po: + * po/eu.po: + * po/fi.po: + * po/fr.po: + * po/gl.po: + * po/hr.po: + * po/hu.po: + * po/id.po: + * po/it.po: + * po/ja.po: + * po/lt.po: + * po/lv.po: + * po/mt.po: + * po/nb.po: + * po/nl.po: + * po/or.po: + * po/pl.po: + * po/pt_BR.po: + * po/ro.po: + * po/ru.po: + * po/sk.po: + * po/sl.po: + * po/sq.po: + * po/sr.po: + * po/sv.po: + * po/tr.po: + * po/uk.po: + * po/vi.po: + * po/zh_CN.po: + * po/zh_HK.po: + * po/zh_TW.po: + Update .po files + +2015-06-24 11:15:00 +0200 Sebastian Dröge <sebastian@centricular.com> + + * po/nl.po: + po: Update translations + +2015-06-23 18:42:59 -0400 Nicolas Dufresne <nicolas.dufresne@collabora.com> + + * tests/check/elements/qtmux.c: + qtmux: Correctly test each segments + In presence of gaps, qtdemux will emit multiple segments. The + second segment start should match the CTTS. + https://bugzilla.gnome.org/show_bug.cgi?id=751361 + +2015-06-23 17:54:31 -0400 Nicolas Dufresne <nicolas.dufresne@collabora.com> + + * gst/isomp4/gstqtmux.c: + * gst/isomp4/gstqtmux.h: + qtmux: Correctly calculate the elst media start + The media start has nothing to do with the shift we have applied + but with the value of the first PTS. This is defined as: + Dt(0) = 0 + Ct(0) = Dt(0) + CTTS(0) + So the media start is always the first CTTS. + https://bugzilla.gnome.org/show_bug.cgi?id=751361 + +2015-06-23 11:49:32 -0300 Thiago Santos <thiagoss@osg.samsung.com> + + * gst/isomp4/qtdemux.c: + qtdemux: accumulate previous edts entries into segment.base + Allows playing edts editted files with proper synchronization of + streams. This patch fixes the regression introduced by + bf95f93c0189aa04f18e264b86b6527e431c5d53 that was added to fix + segment seeks handling. + Having the accumulated_base separated from the main segment.base + allows handling both segment seeks and edts editted files. + https://bugzilla.gnome.org/show_bug.cgi?id=751361 + +2015-06-23 00:56:16 -0300 Thiago Santos <thiagoss@osg.samsung.com> + + * gst/isomp4/qtdemux.c: + qtdemux: improve some debug messages + Those messages are about the stream, use the pad as the + debug object to make it clear from the logs + https://bugzilla.gnome.org/show_bug.cgi?id=751361 + +2015-06-22 22:22:09 -0300 Thiago Santos <thiagoss@osg.samsung.com> + + * gst/isomp4/gstqtmux.c: + qtmux: store last_dts of the first buffer + Buffers need not to start at running-time 0 so the last_dts needs + to be the value of the first buffer's dts as it is used to compute + the duration of the buffers. If it was left at 0 the first buffer + would have a larger duration when it shouldn't + https://bugzilla.gnome.org/show_bug.cgi?id=751361 + +2015-06-23 17:11:57 +0900 Vineeth TM <vineeth.tm@samsung.com> + + * gst/audioparsers/gstflacparse.c: + flacparse: fix possible memory leak + when buffer is stored to seektable, and stop gets called due to + corrupt flac file, then the seektable is not being released + https://bugzilla.gnome.org/show_bug.cgi?id=751364 + +2015-06-23 16:28:40 +1000 Jan Schmidt <jan@centricular.com> + + * gst/multifile/gstsplitmuxsink.c: + * gst/multifile/gstsplitmuxsink.h: + Revert "splitmuxsink: Mask async-start/done while switching files." + This reverts commit d61e5393f110ed482815d77807245d78b52eff46. + Causes failures muxing larger GOP sizes for some reason. Reverting + while I figure it out + +2015-06-18 23:22:06 +1000 Jan Schmidt <jan@centricular.com> + + * gst/multifile/gstsplitmuxpartreader.c: + * gst/multifile/gstsplitmuxsrc.c: + splitmuxsrc: Fix startup and shutdown races. + Fix 2 startup races when things happen too quickly, and 1 + at shutdown by holding a ref to the pads in use until the + loop functions exit. + Handle errors activating file parts and publish them on + the bus. + https://bugzilla.gnome.org/show_bug.cgi?id=750747 + +2015-06-18 09:26:13 +1000 Jan Schmidt <jan@centricular.com> + + * gst/multifile/gstsplitmuxsink.c: + * gst/multifile/gstsplitmuxsink.h: + splitmuxsink: Mask async-start/done while switching files. + Sometimes, extra async-start/done from the internal sink + while the element is still starting up can cause splitmuxsink + to stall in PAUSED state when it has been set to PLAYING + by the app. Drop the child's async-start/done messages while + switching, so they don't cause state changes at the + splitmuxsink level. + https://bugzilla.gnome.org/show_bug.cgi?id=750747 + +2015-06-15 16:12:10 +1000 Jan Schmidt <jan@centricular.com> + + * gst/matroska/matroska-demux.c: + matroska-demux: Use gst_video_multiview_guess_half_aspect() + Use the gst_video_multiview_guess_half_aspect() utility function + to set the half-aspect flag (or not) on stereoscopic frame-packed + videos. + +2015-06-15 16:10:37 +1000 Jan Schmidt <jan@centricular.com> + + * gst/isomp4/qtdemux.c: + qtdemux: Move multiview caps calculations, add half-aspect heuristics + Move the multiview caps calculations to the configure_stream() + function, so the rest of the video info is available, and + use the gst_video_multiview_guess_half_aspect() function to + determine if the half-aspect flag should be set on frame-packed + video. + +2015-06-18 16:06:02 -0400 Nicolas Dufresne <nicolas.dufresne@collabora.com> + + * gst/isomp4/qtdemux.c: + qtdemux: Add cslg support + The cslg atom provide information about the DTS shift. This is + needed in recent version of ctts atom where the offset can be + negative. When cslg is missing, we parse the CTTS table as proposed + in the spec to calculate these values. + In this implementation, we only need to know the shift. As GStreamer + cannot transport negative timestamps, we shift the timestamps forward + using that value and adapt the segment to compensate. This patch also + removes bogus offset of ctts_soffset, this offset shall be included + in the edit list. + https://bugzilla.gnome.org/show_bug.cgi?id=751103 + +2015-06-19 18:37:59 -0400 Nicolas Dufresne <nicolas.dufresne@collabora.com> + + * tests/check/elements/qtmux.c: + qtmux: Test gaps at start of stream + https://bugzilla.gnome.org/show_bug.cgi?id=751242 + +2015-06-19 18:40:43 -0400 Nicolas Dufresne <nicolas.dufresne@collabora.com> + + * gst/isomp4/gstqtmux.c: + qtmux: Use PTS to figure-out presence of gaps + We need to look at the presentation timestamp in order to conclude if + there is a gap at the start of a stream. + https://bugzilla.gnome.org/show_bug.cgi?id=751242 + +2015-06-19 16:45:02 -0400 Nicolas Dufresne <nicolas.dufresne@collabora.com> + + * gst/isomp4/gstqtmux.c: + qtmux: Set edit list to compensate DTS shift + We shift DTS forward to avoid negative timestamps which cannot be + represented with version 0 of the CTTS table. To stick with that + version (backward compatibility), the spec recommend using an + edit list entry to move back the presentation time to where it + should be. + https://bugzilla.gnome.org/show_bug.cgi?id=751242 + +2015-06-22 14:35:52 -0400 Nicolas Dufresne <nicolas.dufresne@collabora.co.uk> + + * gst/flv/gstflvmux.c: + flvmux: Insert AVC end of sequence + This FLV specific mark is needed to prevent Flow Player (most likely + all Flash base player) from going into buffering state when near EOS. + https://bugzilla.gnome.org/show_bug.cgi?id=751320 + +2015-06-22 13:05:29 +0900 Vineeth TM <vineeth.tm@samsung.com> + + * gst/matroska/matroska-demux.c: + * gst/matroska/matroska-parse.c: + matroska: remove useless check + No need to check for context availability while freeing. We are inside + inside a code block with a condition that dereferences context. + if (context->type == 0 ... + https://bugzilla.gnome.org/show_bug.cgi?id=751306 + +2015-06-22 19:35:57 +0900 Vineeth T M <vineeth.tm@samsung.com> + + * gst/matroska/lzo.c: + lzo: fix memory leak + the opened file is not being closed during test, which will result + in memory leak. + https://bugzilla.gnome.org/show_bug.cgi?id=751306 + +2015-06-22 19:30:58 +0900 Vineeth T M <vineeth.tm@samsung.com> + + * ext/mikmod/mikmod_reader.c: + mikmod_reader: Possible null pointer dereference: + gst_reader variable is being used before actually checking if it + allocated properly + https://bugzilla.gnome.org/show_bug.cgi?id=751306 + +2015-06-22 19:45:14 +0900 Sangkyu Park <sk1122.park@samsung.com> + + * gst/rtpmanager/gstrtpjitterbuffer.c: + * gst/rtpmanager/rtpjitterbuffer.c: + rtpjitterbuffer: Minor clean-up + 1. Fix the code which is wrong coding style. + 2. Fix a typing error of comment. + https://bugzilla.gnome.org/show_bug.cgi?id=751316 + +2015-06-22 11:28:13 +0200 Jose Antonio Santos Cadenas <santoscadenas@gmail.com> + + * gst/rtpmanager/rtpsource.c: + rtpsource: Do not try to push NULL buffers + If update_receiver_stats() fails, we can't really do anything with this buffer + anymore and have to drop it. This happens if there's a big seqnum + discontinuity for example. + https://bugzilla.gnome.org/show_bug.cgi?id=751311 + +2015-06-22 13:10:02 +0900 Vineeth TM <vineeth.tm@samsung.com> + + * gst/flv/gstflvdemux.c: + flvdemux: trivial cleanup + trivial patch to add proper ( while checking for if(G_UNLIKELY()) + https://bugzilla.gnome.org/show_bug.cgi?id=751306 + +2015-06-22 13:16:08 +0900 Vineeth TM <vineeth.tm@samsung.com> + + * gst/audioparsers/gstdcaparse.c: + dcaparse: initialize size variable + size can be used in cleanup without being initialized. Hence + setting it to 0 when declaring + https://bugzilla.gnome.org/show_bug.cgi?id=751306 + +2015-06-22 13:13:29 +0900 Vineeth TM <vineeth.tm@samsung.com> + + * gst/audioparsers/gstmpegaudioparse.c: + mpegaudioparse: initialze bpf variable + bpf variable might be used in cleanup without being intialized. + https://bugzilla.gnome.org/show_bug.cgi?id=751306 + +2015-06-19 14:50:59 +0200 Miguel ParÃs DÃaz <mparisdiaz@gmail.com> + + * gst/rtpmanager/gstrtprtxqueue.c: + rtprtxqueue: reverse pending list before pushing buffers + With this we send the RTX buffers in the same order + that they were requested. + https://bugzilla.gnome.org/show_bug.cgi?id=751297 + +2015-06-21 19:22:10 -0400 Nicolas Dufresne <nicolas.dufresne@collabora.co.uk> + + * gst/flv/gstflvmux.c: + flvmux: Fix DTS validity check + This check was up-side-down, causing a bad timestamp at start + and then all timestamp being delayed. + https://bugzilla.gnome.org/show_bug.cgi?id=751298 + +2015-06-17 15:19:47 -0400 Nicolas Dufresne <nicolas.dufresne@collabora.com> + + * gst/isomp4/fourcc.h: + * gst/isomp4/qtdemux_dump.c: + * gst/isomp4/qtdemux_dump.h: + * gst/isomp4/qtdemux_types.c: + cslg: Add Composition Shift Least Greatest Atom + This simply add fourcc and dump function for the cslg Atom. + https://bugzilla.gnome.org/show_bug.cgi?id=751103 + +2015-06-17 15:18:38 -0400 Nicolas Dufresne <nicolas.dufresne@collabora.com> + + * gst/isomp4/qtdemux_dump.c: + ctts_dump: Fix signess issues + It didn't bug, but use correct signess in traces. The number of + entries is unsigned while the offset can be signed according to + recent spec. + https://bugzilla.gnome.org/show_bug.cgi?id=751103 + +2015-06-16 17:48:08 -0400 Nicolas Dufresne <nicolas.dufresne@collabora.co.uk> + + * common: + Automatic update of common submodule + From 6015d26 to f74b2df + +2015-06-16 11:43:39 +0200 Sebastian Dröge <sebastian@centricular.com> + + * gst/rtpmanager/gstrtpjitterbuffer.c: + rtpjitterbuffer: gst_rtp_buffer_ext_timestamp() modifies its first argument, keep a copy around + +2015-06-16 10:30:34 +0200 Sebastian Dröge <sebastian@centricular.com> + + * gst/rtpmanager/gstrtpjitterbuffer.c: + rtpjitterbuffer: Compare ext RTP times, not plain RTP time and ext RTP time when calculating elapsed time + Otherwise all RTP times after a wraparound would be considered as going + backwards, they will always be smaller than the ext RTP time. + +2015-06-15 19:25:12 +0200 Sebastian Dröge <sebastian@centricular.com> + + * gst/rtpmanager/gstrtpbin.c: + rtpbin: The default rtp-profile should be AVP, not AVPF + +2015-06-15 14:32:21 +0900 Sangkyu Park <sk1122.park@samsung.com> + + * gst/rtpmanager/gstrtpjitterbuffer.c: + * gst/rtpmanager/rtpjitterbuffer.c: + rtpjitterbuffer: Minor cleanup + 1. Add Null check in 'free_item' function. + 2. Fix a typing error of comment. + https://bugzilla.gnome.org/show_bug.cgi?id=750965 + +2015-06-12 17:44:51 -0400 Nicolas Dufresne <nicolas.dufresne@collabora.com> + + * gst/flv/gstflvmux.c: + flmux: Make sure best_time is initialized + +2015-06-12 23:29:19 +0200 Sebastian Dröge <sebastian@centricular.com> + + * gst/rtpmanager/gstrtpbin.c: + * gst/rtpmanager/gstrtpbin.h: + * gst/rtpmanager/gstrtpsession.c: + * gst/rtpmanager/gstrtpsession.h: + rtpbin/session: Add new ntp-time-source property and deprecate use-pipeline-clock property + The new property allows to select the time source that should be used for the + NTP time in RTCP packets. By default it will continue to calculate the NTP + timestamp (1900 epoch) based on the realtime clock. Alternatively it can use + the UNIX timestamp (1970 epoch), the pipeline's running time or the pipeline's + clock time. The latter is especially useful for synchronizing multiple + receivers if all of them share the same clock. + If use-pipeline-clock is set to TRUE, it will override the ntp-time-source + setting and continue to use the running time plus 70 years. This is only kept + for backwards compatibility. + +2015-04-07 16:03:42 -0300 Thiago Santos <thiagoss@osg.samsung.com> + + * tests/check/elements/qtmux.c: + tests: qtmux: test for muxing with DTS outside the segment + https://bugzilla.gnome.org/show_bug.cgi?id=740575 + +2015-06-11 17:26:49 -0400 Nicolas Dufresne <nicolas.dufresne@collabora.com> + + * gst/isomp4/qtdemux.c: + qtdemux: Adjust segment according to ctts offset + In presence of a CTTS, the segment start/stop must be offset so + the segment start/stop include the PTS. This is needed since the + PTS cannot be negative in this format. This fixes issues where the + running time of the first buffer isn't at the start. + https://bugzilla.gnome.org/show_bug.cgi?id=740575 + +2015-04-03 20:34:42 -0400 Nicolas Dufresne <nicolas.dufresne@collabora.com> + + * gst/isomp4/gstqtmux.c: + * gst/isomp4/gstqtmux.h: + qtmux: Handle DTS with negative running time + As QT works with duration, simply bring back first DTS to 0 and shift + forward the PTS of the same amount. + https://bugzilla.gnome.org/show_bug.cgi?id=740575 + +2015-06-10 18:15:52 -0400 Nicolas Dufresne <nicolas.dufresne@collabora.com> + + * gst/flv/gstflvmux.c: + * gst/flv/gstflvmux.h: + flvmux: Add negative runtime DTS support + This is done by using new feature of the CollectPad clip function + which sets the DTS as a gint64 in the collected data. It also simplify + the code a bit. + https://bugzilla.gnome.org/show_bug.cgi?id=740575 + +2015-06-12 23:06:24 +0200 Sebastian Dröge <sebastian@centricular.com> + + * gst/rtpmanager/gstrtpbin.c: + rtpbin: Rename some variables and debug output to make more sense + Local and remote were mixed up in a few places, and the time we store here is + not UNIX time (1970 epoch), but NTP time (1900 epoch) in nanoseconds. + +2015-06-12 19:21:10 +0300 Ilya Konstantinov <ilya.konstantinov@gmail.com> + + * sys/osxaudio/gstosxcoreaudioremoteio.c: + osxaudio: fix latency property query on RemoteIO + AudioUnitGetProperty would fail with kParamErr (-50) every time, + simply because size wasn't initialized. + Now it returns zero latency, but at least it doesn't fail. + https://bugzilla.gnome.org/show_bug.cgi?id=750868 + +2015-04-07 14:06:16 +0530 Arun Raghavan <git@arunraghavan.net> + + * ext/pulse/pulsesrc.c: + pulsesrc: Fix mapping of latency parameters to buffer attributes + +2015-06-12 01:56:37 +1000 Jan Schmidt <jan@centricular.com> + + * gst/matroska/matroska-demux.c: + matroska-demux: Actually set detected 3D info into output caps. + Use the information read from the StereoMode info + to configure multiview-mode and multiview-flags in the + video caps. + +2015-06-11 13:36:54 +1000 Jan Schmidt <jan@centricular.com> + + * gst/multifile/gstsplitmuxpartreader.c: + * gst/multifile/gstsplitmuxsink.c: + * gst/multifile/gstsplitmuxsink.h: + splitmuxsink: Take released-but-not-yet-output bytes into account + When deciding whether it's time to switch to a new file, take into + account data that's been released for pushing, but hasn't yet + been pushed - because downstream is slow or the threads haven't been + scheduled. + Fixes a race in the unit test and probably in practice - sometimes + failing to switch when it should for an extra GOP or two. + Also fix a problem in splitmuxsrc where playback sometimes + stalls at startup if types are found too quickly. + https://bugzilla.gnome.org/show_bug.cgi?id=750747 + +2015-06-11 01:04:51 -0300 Thiago Santos <thiagoss@osg.samsung.com> + + * gst/isomp4/atoms.c: + atoms: remove custom gst_buffer_new function in favor of core version + Remove a custom specialized version of gst_buffer_new_wrapped by + using gst_buffer_new_wrapped_full inside a macro to simplify + parameters and give it a more meaningful name. + It is only used to create temporary buffers to have its data copied. + +2015-06-11 00:14:41 -0300 Thiago Santos <thiagoss@osg.samsung.com> + + * gst/isomp4/atoms.c: + atoms: simplify free form data atoms creation + Avoid creating an intermediary buffer or memory area just + to copy into an atom's data area. + +2015-06-10 22:27:27 -0300 Thiago Santos <thiagoss@osg.samsung.com> + + * gst/isomp4/atoms.c: + * gst/isomp4/atoms.h: + * gst/isomp4/fourcc.h: + * gst/isomp4/gstqtmux.c: + * gst/isomp4/gstqtmux.h: + * gst/isomp4/gstqtmuxmap.c: + qtmux: add AC-3 muxing support + Adds AC-3 muxing support. It is defined for mp4 and 3gp formats. + One extra feature that was added was the ability to add extension + atoms after set_caps as the AC-3 extension atom needs some data + that has to be extracted from the stream itself and is not + present on caps. + +2015-06-10 22:36:59 -0300 Thiago Santos <thiagoss@osg.samsung.com> + + * gst/isomp4/atoms.c: + * gst/isomp4/atoms.h: + qtmux: remove unused type MP4S + +2015-06-10 22:29:01 -0300 Thiago Santos <thiagoss@osg.samsung.com> + + * gst/isomp4/gstqtmux.c: + qtmux: remove duplicate attribute value set + It is also set a few lines below + +2015-06-11 00:22:54 +1000 Jan Schmidt <jan@centricular.com> + + * gst/matroska/matroska-demux.c: + * gst/matroska/matroska-ids.c: + * gst/matroska/matroska-ids.h: + * gst/matroska/matroska-mux.c: + matroska: Implement basic stereoscopic video support + Implement support for the packed video formats WebM + uses, not all the values that Matroska might use. + In practice, it's really hard to find any samples in the + wild of any. + Supported in both the muxer and demuxer. + +2015-06-10 01:26:15 +1000 Jan Schmidt <jan@centricular.com> + + * gst/isomp4/fourcc.h: + * gst/isomp4/qtdemux.c: + * gst/isomp4/qtdemux_dump.c: + * gst/isomp4/qtdemux_dump.h: + * gst/isomp4/qtdemux_types.c: + qtdemux: Add basic support for MPEG-A stereoscopic video + The MPEG-A format provides an extension to the ISO base media + file format to store stereoscopic content encoded with different + codecs like H.264 and MPEG-4:2. The stereo video media information(svmi) + atom declares the presence and storage method for the video. + Stereo video information for MPEG-A can also be supplied through + the 'stvi' atom (ref: ISO/IEC_14496-12, ISO/IEC_23000-11), which + is not implemented in this patch. + Also missing is support for stereo video encoded as separate video tracks + for now. + Based on a patch by Sreerenj Balachandran <sreerenj.balachandran@intel.com> + https://bugzilla.gnome.org/show_bug.cgi?id=611157 + +2015-06-02 16:15:35 -0400 Xavier Claessens <xavier.claessens@collabora.com> + + * ext/soup/gstsouphttpsrc.c: + * ext/soup/gstsouphttpsrc.h: + souphttpsrc: Add tls-database property + https://bugzilla.gnome.org/show_bug.cgi?id=750298 + +2015-06-10 14:33:50 +0200 Sebastian Dröge <sebastian@centricular.com> + + * gst/rtp/gstasteriskh263.c: + * gst/rtp/gstrtpac3pay.c: + * gst/rtp/gstrtpamrpay.c: + * gst/rtp/gstrtpceltdepay.c: + * gst/rtp/gstrtpceltpay.c: + * gst/rtp/gstrtpdvpay.c: + * gst/rtp/gstrtpg723pay.c: + * gst/rtp/gstrtpg729pay.c: + * gst/rtp/gstrtpgsmpay.c: + * gst/rtp/gstrtpgstpay.c: + * gst/rtp/gstrtph263pay.c: + * gst/rtp/gstrtph263ppay.c: + * gst/rtp/gstrtph264depay.c: + * gst/rtp/gstrtpj2kpay.c: + * gst/rtp/gstrtpjpegpay.c: + * gst/rtp/gstrtpmp2tpay.c: + * gst/rtp/gstrtpmp4adepay.c: + * gst/rtp/gstrtpmp4apay.c: + * gst/rtp/gstrtpmp4gdepay.c: + * gst/rtp/gstrtpmp4gpay.c: + * gst/rtp/gstrtpmp4vpay.c: + * gst/rtp/gstrtpmpapay.c: + * gst/rtp/gstrtpmparobustdepay.c: + * gst/rtp/gstrtpmpvpay.c: + * gst/rtp/gstrtpqcelpdepay.c: + * gst/rtp/gstrtpqdmdepay.c: + * gst/rtp/gstrtpsbcpay.c: + * gst/rtp/gstrtpspeexpay.c: + * gst/rtp/gstrtpsv3vdepay.c: + * gst/rtp/gstrtptheorapay.c: + * gst/rtp/gstrtpvorbispay.c: + * gst/rtp/gstrtpvrawdepay.c: + * gst/rtp/gstrtpvrawpay.c: + * gst/rtpmanager/gstrtpmux.c: + * gst/rtpmanager/gstrtpsession.c: + * gst/rtpmanager/rtpsession.c: + * gst/rtpmanager/rtpsource.c: + rtp: Use GST_BUFFER_PTS() instead of GST_BUFFER_TIMESTAMP() + The mix between all these in the RTP code is confusing, let's try to be + consistent. + +2015-06-10 14:49:50 +0300 Ilya Konstantinov <ilya.konstantinov@gmail.com> + + * gst/rtpmanager/rtpsource.c: + rtpmanager: clarify negative lost packets in stats + Also: + - Move notes on units before field documentation. + - Unify documentation style. + https://bugzilla.gnome.org/show_bug.cgi?id=750653 + +2015-06-10 06:38:39 -0400 Xavier Claessens <xavier.claessens@collabora.com> + + * ext/soup/gstsouphttpsrc.c: + souphttpsrc: fix getter of "ssl-use-system-ca-file" + https://bugzilla.gnome.org/show_bug.cgi?id=750298 + +2015-06-10 09:49:47 +0900 Vineeth TM <vineeth.tm@samsung.com> + + * gst/isomp4/qtdemux.c: + qtdemux: fix reverse playback + When performing seek, segment->start is being updated with desired_offset, + but in case of reverse playback segment->start should be 0 and + segment->stop should be updated with desired offset. + https://bugzilla.gnome.org/show_bug.cgi?id=750675 + +2015-01-21 18:09:03 +0100 Philipp Zabel <p.zabel@pengutronix.de> + + * sys/v4l2/gstv4l2allocator.c: + * sys/v4l2/gstv4l2allocator.h: + * sys/v4l2/gstv4l2bufferpool.c: + gstv4l2bufferpool: handle -EPIPE from DQBUF to signal EOS + The V4L2 decoder signals EOS by returning -EPIPE from DQBUF after the + last buffer. + https://bugzilla.gnome.org/show_bug.cgi?id=743338 + +2015-06-06 21:09:19 -0400 Xavier Claessens <xavier.claessens@collabora.com> + + * gst/rtsp/gstrtspsrc.c: + * gst/rtsp/gstrtspsrc.h: + rtspsrc: Add a GTlsInteraction property + It can be used for TLS client authentication. + https://bugzilla.gnome.org/show_bug.cgi?id=750471 + +2015-01-09 11:36:11 +0100 Enrico Jorns <ejo@pengutronix.de> + + * sys/v4l2/gstv4l2transform.c: + v4l2: Allow scaling in the v4l2*convert element + This is inspired of videoscale and videoconvert elements. + https://bugzilla.gnome.org/show_bug.cgi?id=742917 + +2015-06-09 19:02:55 +0300 Ilya Konstantinov <ilya.konstantinov@gmail.com> + + * gst/rtpmanager/rtpsource.c: + * gst/rtpmanager/rtpstats.h: + rtpmanager: document units of stats and arguments + Also, minor spelling and style corrections. + https://bugzilla.gnome.org/show_bug.cgi?id=750653 + +2015-06-09 14:42:27 +0200 Stefan Sauer <ensonic@users.sf.net> + + * Makefile.am: + cruft: add the obsolete tmpl dir to cruft-dirs + +2015-06-09 11:30:22 +0200 Edward Hervey <bilboed@bilboed.com> + + * common: + Automatic update of common submodule + From d9a3353 to 6015d26 + +2015-06-09 07:04:07 +0200 Edward Hervey <bilboed@bilboed.com> + + * common: + Fix common version + Was accidently downgraded by 87a4884acd8655a6591d735a1d944ecb5ea3de16 + +2015-06-08 19:11:41 -0400 Nicolas Dufresne <nicolas.dufresne@collabora.com> + + * sys/v4l2/gstv4l2object.c: + v4l2: Also set colorimetry on output devices + This completes the code that set the colorimetry on output + device. + +2015-06-08 19:10:34 -0400 Nicolas Dufresne <nicolas.dufresne@collabora.com> + + * common: + * sys/v4l2/gstv4l2object.c: + v4l2: Add missing SMTP240M matrix + This is missing in the doc, but was in the header. + +2015-06-08 23:00:16 +0100 Luis de Bethencourt <luis.bg@samsung.com> + + * gst/goom/goom_core.c: + goom: possible uninitialized variables warning + Build fails with the latest snapshot of gcc-4.9 because param1 and param2 might + possibly be used uninitialized. They are set depending on the cases of a switch + statement and the compiler sees this as not a complete guarantee. + Set them to 0 if the switch statement falls down to the default case. + https://bugzilla.gnome.org/show_bug.cgi?id=750566#c6 + +2015-06-08 17:24:38 -0400 Nicolas Dufresne <nicolas.dufresne@collabora.com> + + * sys/v4l2/gstv4l2object.c: + v4l2object: Fully implement colorimetry support + This fixes wrong mapping for sRGB as in GStreamer sRGB correctly + apply to RGB formats, while in V4L2 it's an alias for sYCC. Also + add support for the new quantization (range), ycbcr_encoding (matrix) + and xfer_func (transfer) enumeration. + +2015-06-08 17:01:15 -0400 Nicolas Dufresne <nicolas.dufresne@collabora.com> + + * sys/v4l2/ext/types-compat.h: + * sys/v4l2/ext/v4l2-common.h: + * sys/v4l2/ext/v4l2-controls.h: + * sys/v4l2/ext/videodev2.h: + v4l2: Update kernel headers to latest from media tree + This is the latest from media tree. This should enable more development + of the v4l2 elements. This includes new flags requires to fix draining + path in decoder, colorimetry and much more. + +2015-06-08 23:07:55 +0200 Stefan Sauer <ensonic@users.sf.net> + + * common: + Automatic update of common submodule + From d37af32 to d9a3353 + +2015-06-08 19:42:30 +0100 Chris Clayton <chris2553@googlemail.com> + + * gst/rtp/gstrtpvp8pay.c: + rtpvp8depay: potential access beyond end of array + Compiling (with gcc-4.9-20150603) produces an error because of an access beyond + the end of an array. This patch fixes the error by initializing the loop + control/array index variable (i) to 1 and returning i - 1 when a match is found. + Also, because the values stored in the array increase in value as the index + increases, the >= test unnecessary, so it is removed. + +2015-04-30 02:52:58 +1000 Jan Schmidt <jan@centricular.com> + + * gst/multifile/gstsplitmuxsink.c: + splitmuxsink: Don't accumulate more than 2 GOPs + Don't allow large amounts of data to queue up - we only need + the GOP we're writing, and the GOP we're accumulating. + +2015-04-16 10:44:49 +1000 Jan Schmidt <jan@centricular.com> + + * gst/isomp4/gstqtmux.c: + isomp4: fsync after sending updates in robust mode + Use the new GstBuffer SYNC_AFTER flag to trigger an fsync + after updating the moov or mdat atom, and after updating the free + atom to make it visible. + +2015-04-03 00:57:20 +1100 Jan Schmidt <jan@centricular.com> + + * gst/isomp4/gstqtmux.c: + isomp4: Only set moov header into streamheader at EOS + Only update the moov header into the caps if it's the finalised + moov at EOS time. Avoids posting a bogus moov at startup and + repeated updates in robust-recording mode + +2015-04-03 01:44:15 +1100 Jan Schmidt <jan@centricular.com> + + * tests/check/elements/qtmux.c: + tests: Update mp4 mux test for mdat placeholder change + The mp4 muxer now writes a place-holder mdat as a free + atom followed by a 0-byte mdat that covers the rest of the + file, making it possible to rewrite it as 64-bit, or leave + it as-is if nothing else is written afterward + +2015-04-01 11:15:38 +1100 Jan Schmidt <jan@centricular.com> + + * gst/isomp4/atoms.c: + * gst/isomp4/atoms.h: + * gst/isomp4/atomsrecovery.c: + * gst/isomp4/gstqtmux.c: + * gst/isomp4/gstqtmux.h: + isomp4: Implement robust muxing using ping-pong strategy + Implement a robust recording mode, where the output + file is always in a playable state, seeking and rewriting + the moov header at a configurable interval. Rewriting + moov is done using reserved space at the start of + the file, and a ping-pong strategy where the moov + is replaced atomically so it's never invalid. + Track when tags have actually changed, and don't write them into + the moov unless they've changed. Clear any existing tags when + re-writing them, so we can do progressive moov updating in robust + recording mode. + Write placeholder mdat as a free atom plus a 32-bit mdat + with '0' size, which means "rest of the file" in the spec. + Re-write it later to a full 64-bit extended size atom if needed. + +2015-04-01 00:58:52 +1100 Jan Schmidt <jan@centricular.com> + + * gst/isomp4/atoms.c: + * gst/isomp4/atoms.h: + * gst/isomp4/gstqtmux.c: + isomp4: Update edit list when re-writing moov + Correctly update any edit lists each time the moov is recalculated, + updating existing table entries if they already exist instead of just + adding new ones. + +2015-04-08 01:41:18 +1000 Jan Schmidt <jan@centricular.com> + + * gst/isomp4/gstqtmux.c: + isomp4: Remove an extra bracket in a comment. + +2015-03-19 20:29:44 +1100 Jan Schmidt <jan@centricular.com> + + * gst/multifile/gstsplitmuxsrc.c: + splitmuxsrc: Protect total_duration state variable with the object lock. + Prevent deadlocks from downstream querying duration from the streaming thread. + +2015-06-07 23:06:20 +0200 Stefan Sauer <ensonic@users.sf.net> + + * common: + Automatic update of common submodule + From 21ba2e5 to d37af32 + +2015-06-07 19:24:20 +0100 Luis de Bethencourt <luis.bg@samsung.com> + + * gst/goom/gstaudiovisualizer.c: + goom: clean dereferences of private structure + https://bugzilla.gnome.org/show_bug.cgi?id=742875 + +2015-06-07 19:20:04 +0100 Luis de Bethencourt <luis.bg@samsung.com> + + * gst/goom2k1/gstaudiovisualizer.c: + goom2k1: clean dereferences of private structure + https://bugzilla.gnome.org/show_bug.cgi?id=742875 + +2015-06-07 17:32:01 +0200 Stefan Sauer <ensonic@users.sf.net> + + * common: + Automatic update of common submodule + From c408583 to 21ba2e5 + +2015-06-07 17:01:37 +0200 Stefan Sauer <ensonic@users.sf.net> + + * docs/plugins/Makefile.am: + docs: remove variables that we define in the snippet from common + This is syncing our Makefile.am with upstream gtkdoc. + +2015-06-07 17:16:19 +0200 Stefan Sauer <ensonic@users.sf.net> + + * autogen.sh: + * common: + Automatic update of common submodule + From d676993 to c408583 + +2015-06-07 16:44:37 +0200 Sebastian Dröge <sebastian@centricular.com> + + * configure.ac: + Back to development + === release 1.5.1 === -2015-06-07 Sebastian Dröge <slomo@coaxion.net> +2015-06-07 10:46:34 +0200 Sebastian Dröge <sebastian@centricular.com> + * ChangeLog: + * NEWS: + * RELEASE: * configure.ac: - releasing 1.5.1 + * docs/plugins/gst-plugins-good-plugins.args: + * docs/plugins/gst-plugins-good-plugins.hierarchy: + * docs/plugins/inspect/plugin-1394.xml: + * docs/plugins/inspect/plugin-aasink.xml: + * docs/plugins/inspect/plugin-alaw.xml: + * docs/plugins/inspect/plugin-alpha.xml: + * docs/plugins/inspect/plugin-alphacolor.xml: + * docs/plugins/inspect/plugin-apetag.xml: + * docs/plugins/inspect/plugin-audiofx.xml: + * docs/plugins/inspect/plugin-audioparsers.xml: + * docs/plugins/inspect/plugin-auparse.xml: + * docs/plugins/inspect/plugin-autodetect.xml: + * docs/plugins/inspect/plugin-avi.xml: + * docs/plugins/inspect/plugin-cacasink.xml: + * docs/plugins/inspect/plugin-cairo.xml: + * docs/plugins/inspect/plugin-cutter.xml: + * docs/plugins/inspect/plugin-debug.xml: + * docs/plugins/inspect/plugin-deinterlace.xml: + * docs/plugins/inspect/plugin-dtmf.xml: + * docs/plugins/inspect/plugin-dv.xml: + * docs/plugins/inspect/plugin-effectv.xml: + * docs/plugins/inspect/plugin-equalizer.xml: + * docs/plugins/inspect/plugin-flac.xml: + * docs/plugins/inspect/plugin-flv.xml: + * docs/plugins/inspect/plugin-flxdec.xml: + * docs/plugins/inspect/plugin-gdkpixbuf.xml: + * docs/plugins/inspect/plugin-goom.xml: + * docs/plugins/inspect/plugin-goom2k1.xml: + * docs/plugins/inspect/plugin-icydemux.xml: + * docs/plugins/inspect/plugin-id3demux.xml: + * docs/plugins/inspect/plugin-imagefreeze.xml: + * docs/plugins/inspect/plugin-interleave.xml: + * docs/plugins/inspect/plugin-isomp4.xml: + * docs/plugins/inspect/plugin-jack.xml: + * docs/plugins/inspect/plugin-jpeg.xml: + * docs/plugins/inspect/plugin-level.xml: + * docs/plugins/inspect/plugin-matroska.xml: + * docs/plugins/inspect/plugin-mulaw.xml: + * docs/plugins/inspect/plugin-multifile.xml: + * docs/plugins/inspect/plugin-multipart.xml: + * docs/plugins/inspect/plugin-navigationtest.xml: + * docs/plugins/inspect/plugin-oss4.xml: + * docs/plugins/inspect/plugin-ossaudio.xml: + * docs/plugins/inspect/plugin-png.xml: + * docs/plugins/inspect/plugin-pulseaudio.xml: + * docs/plugins/inspect/plugin-replaygain.xml: + * docs/plugins/inspect/plugin-rtp.xml: + * docs/plugins/inspect/plugin-rtpmanager.xml: + * docs/plugins/inspect/plugin-rtsp.xml: + * docs/plugins/inspect/plugin-shapewipe.xml: + * docs/plugins/inspect/plugin-shout2send.xml: + * docs/plugins/inspect/plugin-smpte.xml: + * docs/plugins/inspect/plugin-soup.xml: + * docs/plugins/inspect/plugin-spectrum.xml: + * docs/plugins/inspect/plugin-speex.xml: + * docs/plugins/inspect/plugin-taglib.xml: + * docs/plugins/inspect/plugin-udp.xml: + * docs/plugins/inspect/plugin-video4linux2.xml: + * docs/plugins/inspect/plugin-videobox.xml: + * docs/plugins/inspect/plugin-videocrop.xml: + * docs/plugins/inspect/plugin-videofilter.xml: + * docs/plugins/inspect/plugin-videomixer.xml: + * docs/plugins/inspect/plugin-vpx.xml: + * docs/plugins/inspect/plugin-wavenc.xml: + * docs/plugins/inspect/plugin-wavpack.xml: + * docs/plugins/inspect/plugin-wavparse.xml: + * docs/plugins/inspect/plugin-ximagesrc.xml: + * docs/plugins/inspect/plugin-y4menc.xml: + * gst-plugins-good.doap: + * gst/deinterlace/tvtime-dist.c: + * gst/videomixer/videomixerorc-dist.c: + * win32/common/config.h: + Release 1.5.1 + +2015-06-07 10:38:28 +0200 Sebastian Dröge <sebastian@centricular.com> + + * po/af.po: + * po/az.po: + * po/bg.po: + * po/ca.po: + * po/cs.po: + * po/da.po: + * po/de.po: + * po/el.po: + * po/en_GB.po: + * po/eo.po: + * po/es.po: + * po/eu.po: + * po/fi.po: + * po/fr.po: + * po/gl.po: + * po/hr.po: + * po/hu.po: + * po/id.po: + * po/it.po: + * po/ja.po: + * po/lt.po: + * po/lv.po: + * po/mt.po: + * po/nb.po: + * po/nl.po: + * po/or.po: + * po/pl.po: + * po/pt_BR.po: + * po/ro.po: + * po/ru.po: + * po/sk.po: + * po/sl.po: + * po/sq.po: + * po/sr.po: + * po/sv.po: + * po/tr.po: + * po/uk.po: + * po/vi.po: + * po/zh_CN.po: + * po/zh_HK.po: + * po/zh_TW.po: + Update .po files 2015-06-07 10:32:38 +0200 Sebastian Dröge <sebastian@centricular.com> diff --git a/Makefile.am b/Makefile.am index c6da76461..6c9786fe2 100644 --- a/Makefile.am +++ b/Makefile.am @@ -68,6 +68,7 @@ CRUFT_FILES = \ $(top_builddir)/gst/videofilter/.libs/*gamma.{so,dll,DLL,dylib} CRUFT_DIRS = \ + $(top_srcdir)/docs/plugins/tmpl \ $(top_srcdir)/gst/median \ $(top_srcdir)/gst/qtdemux \ $(top_srcdir)/gst/quicktime \ diff --git a/Makefile.in b/Makefile.in index 7451d231a..91902bb5a 100644 --- a/Makefile.in +++ b/Makefile.in @@ -613,6 +613,7 @@ CRUFT_FILES = \ $(top_builddir)/gst/videofilter/.libs/*gamma.{so,dll,DLL,dylib} CRUFT_DIRS = \ + $(top_srcdir)/docs/plugins/tmpl \ $(top_srcdir)/gst/median \ $(top_srcdir)/gst/qtdemux \ $(top_srcdir)/gst/quicktime \ diff --git a/NEWS b/NEWS index ee6348fc0..916b1220d 100644 --- a/NEWS +++ b/NEWS @@ -1,2 +1,2 @@ -This is GStreamer Good Plugins 1.5.1 +This is GStreamer Good Plugins 1.5.2 diff --git a/RELEASE b/RELEASE index 53ab3bb48..a55e172c5 100644 --- a/RELEASE +++ b/RELEASE @@ -1,8 +1,8 @@ -Release notes for GStreamer Good Plugins 1.5.1 +Release notes for GStreamer Good Plugins 1.5.2 -The GStreamer team is pleased to announce the first release of the unstable +The GStreamer team is pleased to announce the second release of the unstable 1.5 release series. The 1.5 release series is adding new features on top of the 1.0, 1.2 and 1.4 series and is part of the API and ABI-stable 1.x release series of the GStreamer multimedia framework. The unstable 1.5 release series @@ -58,172 +58,26 @@ contains a set of codecs plugins based on libav (formerly gst-ffmpeg) Bugs fixed in this release - * 740130 : matroskamux: wrong duration on some files - * 699382 : v4l2: dmabuf handling is not complete - * 746747 : rtpsession: Also report internal sources in on-new-ssrc and on-ssrc-active - * 741783 : qtmux: crash when trying to mux ALAC - * 601733 : rtspsrc: Use specific error message when authentication is required - * 635701 : rtspsrc: seeking is broken - * 678124 : multifilesink: add support for time based file switching - * 682770 : v4l2src: should renegotiate - * 690646 : ximagesrc: Cursor offset with ximagesrc and xid - * 690719 : jackaudiosink: add new property (port-pattern) to specify which jack ports to autoconnect to - * 692473 : qtmux: does not store stream specific tags - * 708808 : qtmux: Error out when downstream is not seekable and no fast-start - * 711764 : osxaudiosrc: Produces broken audio for any sample rate other than 44100Hz - * 722567 : wavparse: loops on incorrect wav file - * 725335 : rtspsrc: Extract the payload type from sdp framesize attribute - * 726415 : rtpjpegpay/-depay: Remove incorrectly introduced framesize SDP attribute - * 726416 : rtph263pay/-depay: add framesize SDP attribute - * 730417 : rtspt: no timestamp from some rtsp source over tcp - * 731038 : playbin downmixes 5.0 multichannel-audio to stereo - * 732152 : multiudpsink: use sendmmsg() to send multiple packets to multiple recipients in one go - * 732866 : udpsink: client add/remove from app blocked while render function is stuck in g_socket_send_message() - * 732870 : jpegenc: add support for encoding from nv21 - * 733225 : Lockup while using Cheese on 1.3.91 - * 733444 : wavenc: does not support more than 2 channel - * 733539 : rtph264pay: append profile-level-id parameter to SDP if available - * 733556 : h264 payloader : append packetization-mode parameter for SDP - * 733616 : v4l2object: code cleanup - * 733750 : v4l2object: query minimum required buffers for output - * 734322 : RTP Jitterbuffer shouldn't force clock-rate on the caps - * 734443 : qtdemux: forward DISCONT from upstream to the output streams - * 734542 : speexenc: Improve annotation of internal function - * 734987 : udp: fix udpsrc documentation - * 735085 : y4mencode : port y4m encoder to use GstVideoEncoder base class - * 735378 : gstrtpjitterbuffer: requests retransmission periodically when no needed - * 735564 : gdkpixbufdec: Error when using gdkpixbufdec with ImageFreeze element - * 735581 : imagefreeze: Remove impossible error condition - * 735626 : multipartdemux: caps are NULL in pad-added callback (regression) - * 735627 : wavenc/wavparse: should support RF64 files - * 735795 : imagefreeze: Don't call gst_caps_unref() on NULL caps - * 735880 : imagefreeze: replace with gst_buffer_copy - * 735950 : gdkpixbufdec: free query after use - * 735971 : qtdemux: avdec_mjpeg does not get autoplugged for mjpeg in mov container - * 736072 : v4l2: set min_latency for output device according to required minimum number of buffers - * 736122 : ximagesrc: setting the screen-num property has no effect - * 736133 : v4l2: query crop configuration after each call of S_CROP - * 736252 : gdkpixbufdec: packetized mode logic - * 736462 : multifile: don't bitwise OR the same flag twice - * 736528 : udp: getting compilation error for implicit declaration of memcmp, memset - * 736543 : matroska:OR and Bitwise OR of the same flag twice - * 736872 : libpng: Removed redundant assignment - * 736873 : alpha: Removed unreachable break statements - * 736874 : audiofx: Removed unwanted variable - * 736875 : audiofx: Removed unwanted buffer_length variable - * 736876 : audiofx: Removed unreachable breaks, unwanted variable - * 736878 : audioparsers: Added index check before using the index - * 736879 : avi: Removed redundant assignment - * 736880 : avi: Removed unwanted hdl variable - * 736881 : deinterlace: Removed unwanted res variable - * 736883 : dtmf: Removed unwanted structure member and assignment - * 736884 : flv: Removed unreachable break statements - * 736887 : goom: Clarified precedence between % and ? - * 736888 : isomp4: Removed unreachable breaks - * 736890 : matroska: Removed unwanted instruction - * 736892 : rtpmanager: Removed unwanted variable and assignment - * 736893 : rtpmanager: Removed unwanted assignment - * 736894 : rtpmanager: Removed unwanted assignment in rtpsession - * 736897 : videobox: duplicate assignment - * 736903 : rtsp: Precedence in expression is not clear - * 736986 : qtdemux: handle AAC audio without ESDS atom - * 737095 : qtmux: subtitle muxing doesn't work - * 737127 : interleave: interleaving does not respect the channel positions default order - * 737359 : matroskademux: returns FLOW_FLUSHING when trying to reuse it - * 737708 : pngdec: change parse logic - * 737868 : rtspsrc: set stream caps on internal src TCP pads - * 738013 : v4l2allocator: issue with import_userptr() in single-planar API when n_planes > 1 - * 738707 : gst-plugins-good fails to build on Mac OS X 10.10 Yosemite due to deprecated NSOpenGLPFAFullScreen - * 738838 : videobox: critical error when element properties set as max/min - * 739344 : rtpjitterbuffer: ensure rtx_retry_period > = 0 - * 739366 : imagefreeze: Handle seqnums - * 739549 : v4l2bufferpool: fix typos in flags - * 739566 : gdkpixbufoverlay: Fix relative-x/y and widen their range to support scolling images in/out of frame with GstController - * 739930 : Port server-alsasrc-PCMA.py to version 1.x - * 739975 : Seeking through some AAC file freezes my application - * 740403 : v4l2object: reuse caps framerate if not overwritten by v4l2 device - * 740505 : rtspsrc: segmentation fault when requesting srtp key - * 740683 : rtspsrc: add retransmission handling for rtp - * 740987 : Fixes to osxaudiosrc and osxaudiosink - * 741115 : videomixer segfault when output height is smaller than input height and ypos is negative - * 741134 : v4l2: CREATE_BUF support is broken - * 741279 : qtmux: generating corrupted file when over 4GB - * 741398 : rtpptdemux: errors out on invalid rtp packet, e.g. if the version check failed (0 != 2) - * 741993 : souphttpsrc: leaking a buffer during flushing - * 742098 : rtp: Fails rtpaux and rtpcollision tests - * 742325 : ac3parse: requests minimum frame size that is too small - * 742363 : v4l2object: recognize and distinguish all bayer arrangements - * 742572 : qtdemux: EOS emitted after 10 seconds on a audio/mp4a file [REGRESSION] - * 742661 : qtdemux: EOS in push mode when seeking in m4a - * 743013 : v4l2bufferpool: set v4l2_buffer.field when queuing buffer in an output device - * 743186 : v4l2object: set colorspace in caps for capture devices - * 743407 : qtdemux: doesn't ignore data after last sample in mdat. - * 743518 : qtdemux: dead code while calculating segment base ? - * 743578 : qtdemux: Parse 'sidx' atom (for duration and indexing in fragmented files) - * 743906 : quarktv: doesn't work with planes=0, fix property range accordingly - * 744211 : interleave: assertion 'self- > func != NULL' failed - * 744461 : pulsesink: Enhance code readability in pulsesink_query - * 745192 : matroskademux: V_MS-VFW-FOURCC streams have DTS instead of PTS - * 745226 : Vorbis RTP payloader metadata is slightly wrong - * 745276 : avidemux: remove not needed code - * 745339 : qtdemux: key_unit seek doesn't work - * 745441 : v4l2: Detect lossed frame and warn - * 745515 : level: infinite loop when interval is set to low values - * 745587 : rtp: Add PLI and FIR counters to RTPSource statistics - * 745599 : rtsp: tcp transport fails - * 745973 : matroskademux: gst_tag_list_insert: assertion 'GST_IS_TAG_LIST (into)' failed - * 746065 : level: outputs random values if channels==1 - * 746242 : matroskaparse: send global tags - * 746274 : flvdemux: Less spam from no_more_pads warning - * 746390 : qtdemux: crash while playing MPEG DASH stream - * 746479 : rtsp: Only two second of playback with rtpsrc and test-mp4 (rtsp-server) - * 746543 : rtpsession: Properly implement T_rr_interval and allow sending multiple early feedback packets in a row - * 746810 : matroska: fix GValue leak when parsing tags - * 746822 : qtdemux: segment query reports wrong values after key-unit seek - * 746834 : v4l2sink: driver is not queried for minimum number of buffers when propose_allocation is not called - * 747204 : audiofirfilter creates strange noise for smaller filter kernels and even default kernel - * 747208 : rtpvp8depay: should have width/height in its caps so it can be fed to muxers - * 747358 : rtp: RTPJitterBufferMode enum missing from gtk-doc - * 747394 : rtpsession: Track RTX ssrc caps - * 747554 : suppressions: silence possible valgrind false positive - * 747595 : tests: Add test suite for alpha element - * 747597 : smpte: Remove unused fields - * 747863 : rtpsession: Use bandwidth calculation by default instead of some arbitrary hardcoded value - * 747922 : rtpjitterbuffer/rtxreceive: Don't reset the jitterbuffer if too old RTX packets arrive - * 748022 : audiofx: fix typos in example pipelines - * 748024 : icydemux: Fix segfault for 0-value metainterval - * 748041 : rtpjitterbuffer: Too early requested retransmission for future packets - * 748353 : rtspsrc: Leak of RTCP caps - * 748436 : rtpjitterbuffer: " stats " property docs - * 748584 : matroskademux: fix seek event leak in push mode - * 748617 : qtdemux: fix buffer leak on EOS with stop position in push mode - * 748627 : rtspsrc: Don't send NACKs and early RTCP in non-feedback profiles - * 748909 : jpegdec: fix frame leaks - * 749054 : qtdemux: Fix gst-launch pipeline in the documentation - * 749072 : flacparse: fix buffer leak - * 749122 : vp8enc: vp9enc: target bitrate is not working as expected - * 749129 : rtpg726depay: add block_align to output caps - * 749163 : po: update POTFILES.in - * 749543 : rtpg726depay: fix input buffer memleak - * 749544 : rtpg726pay: fix caps leak - * 749581 : rtpbasepayload: Try harder to reuse previously configured caps values and give more preference to anything set as properties - * 749669 : rtp: fix collection of statistic - * 749690 : splitfilesrc: Implement binary search in find_part_for_offset - * 749909 : matroska: overwritten value assignment - * 750327 : rtpssrcdemux: Add support for reduce size rtcp - * 750332 : rtpsession: Add support for reduced size rtcp - * 743925 : osxaudiosink won't reconfigure sink caps - * 744922 : osxaudiosrc: iOS resampling is stuttering - * 728353 : goom2k1: code does nothing, slowly - * 748068 : equalizer: not changing settings dynamically - * 731352 : flv: Container timestamp is DTS not PTS - * 732910 : v4l2src: Dectect and workaround decreasing HW timestamp - * 737810 : payloaders: VP8 and Opus payloader should probably suppport Google Chrome encoding-names - * 740787 : videocrop: No longer apply the new crop if caps have not changed - * 736396 : isomp4: duplicate if else branches in atoms.c - * 610364 : udpsrc: allocates buffers with size a lot bigger than needed - * 739305 : souphttpsrc: log connection events at info level - * 744213 : spectrum: assertion 'len > 0' failed + * 742917 : v4l2: Allow scaling in the v4l2*convert element + * 746146 : v4l2src: Seems to produce invalid or not-supported colorimetry field + * 750298 : souphttpsrc: add tls-database property + * 750471 : rtspsrc: Add support for TLS client authentication + * 750566 : goom: FTBFS: possible uninitialized variables compiler warning + * 750567 : rtpvp8depay: FTBFS because of access beyond end of array compiler warning + * 750653 : rtpmanager: document units of stats and arguments + * 750675 : qtdemux: reverse playback not working + * 750747 : splitmuxtest sometimes fails + * 750868 : osxaudio: fix latency property query on RemoteIO + * 750965 : rtpjitterbuffer: 1. Fix a typing error of comment, 2. Add null check in free_item function + * 751164 : rtspsrc does not respect the timeout value in the SETUP reply + * 751297 : rtprtxqueue: reverse pending list before pushing buffers + * 751298 : flvmux: produced files does not work well with common flash players + * 751306 : good plugins: fix some issues found using static analysis tool + * 751316 : rtpjitterbuffer : Fix a typing error of comment and the code which is wrong coding style. (trivial cleanup) + * 751320 : flvmux: Does not append AVC end of sequence + * 751361 : qtmux generates bad output timestamps + * 751364 : flacparse: fix possible memory leak + * 743338 : gstv4l2bufferpool: handle -EPIPE from DQBUF to signal EOS ==== Download ==== @@ -260,82 +114,22 @@ subscribe to the gstreamer-devel list. Contributors to this release - * Aleix Conchillo Flaqué - * Alex O'Konski - * Ananda - * Andrei Sarakeev - * Antonio Ospite - * Anuj Jaiswal * Arun Raghavan - * Aurélien Zanelli - * Benjamin Gaignard - * Brad Smith - * Branislav Katreniak - * David Sansome - * David Schleef + * Chris Clayton * Edward Hervey - * George Kiagiadakis - * Guillaume Desmottes - * Gwenole Beauchesne - * Göran Jönsson - * Hans de Goede - * Henning Heinold - * Hyunjun Ko + * Enrico Jorns * Ilya Konstantinov - * Jan Alexander Steffens (heftig) * Jan Schmidt - * Jason Litzinger - * Jesper Larsen - * Jimmy Ohn - * Jonas Holmberg * Jose Antonio Santos Cadenas - * Josep Torra - * Julien Isorce - * Jurgen Slowack - * Krzysztof Kotlenga - * Linus Svensson * Luis de Bethencourt - * Mark Nauwelaerts - * Matej Knopp - * Mathieu Duponchelle - * Matthew Waters - * Michael Smith * Miguel ParÃs DÃaz - * Nicola Murino * Nicolas Dufresne - * Nicolas Huet - * Nirbheek Chauhan - * Ognyan Tonchev - * Olivier Crête - * Patrick Radizi - * Paul Hyunil - * Peter G. Baum - * Peter Korsgaard - * Peter Seiderer - * Philippe De Muyter - * Philippe Normand - * Piotr DrÄ…g - * Ramiro Polla - * Ravi Kiran K N - * Reynaldo H. Verdejo Pinochet - * Sanjay NM - * Santiago Carot-Nemesio + * Philipp Zabel + * Sangkyu Park * Sebastian Dröge - * Sebastian Rasmussen - * Simon Farnsworth - * Sjoerd Simons - * Srimanta Panda * Stefan Sauer * Thiago Santos - * Thibault Saunier - * Tim-Philipp Müller - * Tobias Modschiedler - * Tom Greenwood - * Vincent Penquerc'h * Vineeth T M * Vineeth TM - * VÃctor Manuel Jáquez Leal - * Wim Taymans - * Youness Alaoui - * hark + * Xavier Claessens  \ No newline at end of file diff --git a/autogen.sh b/autogen.sh index 01d3fdab9..f7c047f28 100755 --- a/autogen.sh +++ b/autogen.sh @@ -13,7 +13,6 @@ test -n "$srcdir" || srcdir=. olddir=`pwd` cd "$srcdir" -DIE=0 package=gst-plugins-good srcfile=gst-plugins-good.doap @@ -56,13 +55,25 @@ fi autogen_options $@ printf "+ check for build tools" -if test ! -z "$NOCHECK"; then echo ": skipped version checks"; else echo; fi -version_check "autoreconf" "autoreconf " \ - "ftp://ftp.gnu.org/pub/gnu/autoconf/" 2 68 || DIE=1 -version_check "pkg-config" "" \ - "http://www.freedesktop.org/software/pkgconfig" 0 8 0 || DIE=1 - -die_check $DIE +if test -z "$NOCHECK"; then + echo + + printf " checking for autoreconf ... " + echo + which "autoreconf" 2>/dev/null || { + echo "not found! Please install the autoconf package." + exit 1 + } + + printf " checking for pkg-config ... " + echo + which "pkg-config" 2>/dev/null || { + echo "not found! Please install pkg-config." + exit 1 + } +else + echo ": skipped version checks" +fi # if no arguments specified then this will be printed if test -z "$*" && test -z "$NOCONFIGURE"; then @@ -76,7 +87,7 @@ fi toplevel_check $srcfile # autopoint -if test -d po ; then +if test -d po && grep ^AM_GNU_GETTEXT_VERSION configure.ac >/dev/null ; then tool_run "autopoint" "--force" fi diff --git a/common/Makefile.am b/common/Makefile.am index 25966fcb6..1eac7d8c3 100644 --- a/common/Makefile.am +++ b/common/Makefile.am @@ -8,7 +8,7 @@ EXTRA_DIST = \ parallel-subdirs.mak \ gst-autogen.sh \ check-exports \ - c-to-xml.py mangle-tmpl.py scangobj-merge.py \ + c-to-xml.py mangle-db.py scangobj-merge.py \ gtk-doc-plugins.mak \ plugins.xsl gstdoc-scangobj \ gst.supp check.mak \ diff --git a/common/Makefile.in b/common/Makefile.in index f775be575..b3940185d 100644 --- a/common/Makefile.in +++ b/common/Makefile.in @@ -533,7 +533,7 @@ EXTRA_DIST = \ parallel-subdirs.mak \ gst-autogen.sh \ check-exports \ - c-to-xml.py mangle-tmpl.py scangobj-merge.py \ + c-to-xml.py mangle-db.py scangobj-merge.py \ gtk-doc-plugins.mak \ plugins.xsl gstdoc-scangobj \ gst.supp check.mak \ diff --git a/common/gst-autogen.sh b/common/gst-autogen.sh index c5798d0b7..71049e60d 100644 --- a/common/gst-autogen.sh +++ b/common/gst-autogen.sh @@ -20,168 +20,6 @@ debug () fi } -version_get () -# based on the command's version output, set variables -# _MAJOR, _MINOR, _MICRO, _VERSION, using the given prefix as variable prefix -# -# arg 1: command binary name -# arg 2: (uppercased) variable name prefix -{ - COMMAND=$1 - VARPREFIX=`echo $2 | tr .,- _` - local ${VARPREFIX}_VERSION - - # strip everything that's not a digit, then use cut to get the first field - pkg_version=`$COMMAND --version|head -n 1|sed 's/^.*)[^0-9]*//'|cut -d' ' -f1` - debug "pkg_version $pkg_version" - # remove any non-digit characters from the version numbers to permit numeric - # comparison - pkg_major=`echo $pkg_version | cut -d. -f1 | sed s/[a-zA-Z\-].*//g` - pkg_minor=`echo $pkg_version | cut -d. -f2 | sed s/[a-zA-Z\-].*//g` - pkg_micro=`echo $pkg_version | cut -d. -f3 | sed s/[a-zA-Z\-].*//g` - test -z "$pkg_major" && pkg_major=0 - test -z "$pkg_minor" && pkg_minor=0 - test -z "$pkg_micro" && pkg_micro=0 - debug "found major $pkg_major minor $pkg_minor micro $pkg_micro" - eval ${VARPREFIX}_MAJOR=$pkg_major - eval ${VARPREFIX}_MINOR=$pkg_minor - eval ${VARPREFIX}_MICRO=$pkg_micro - eval ${VARPREFIX}_VERSION=$pkg_version -} - -version_compare () -# Checks whether the version of VARPREFIX is equal to or -# newer than the requested version -# arg1: VARPREFIX -# arg2: MAJOR -# arg3: MINOR -# arg4: MICRO -{ - VARPREFIX=`echo $1 | tr .,- _` - MAJOR=$2 - MINOR=$3 - MICRO=$4 - - eval pkg_major=\$${VARPREFIX}_MAJOR; - eval pkg_minor=\$${VARPREFIX}_MINOR; - eval pkg_micro=\$${VARPREFIX}_MICRO; - - #start checking the version - debug "version_compare: $VARPREFIX against $MAJOR.$MINOR.$MICRO" - - # reset check - WRONG= - - if [ ! "$pkg_major" -gt "$MAJOR" ]; then - debug "major: $pkg_major <= $MAJOR" - if [ "$pkg_major" -lt "$MAJOR" ]; then - debug "major: $pkg_major < $MAJOR" - WRONG=1 - elif [ ! "$pkg_minor" -gt "$MINOR" ]; then - debug "minor: $pkg_minor <= $MINOR" - if [ "$pkg_minor" -lt "$MINOR" ]; then - debug "minor: $pkg_minor < $MINOR" - WRONG=1 - elif [ "$pkg_micro" -lt "$MICRO" ]; then - debug "micro: $pkg_micro < $MICRO" - WRONG=1 - fi - fi - fi - if test ! -z "$WRONG"; then - debug "version_compare: $VARPREFIX older than $MAJOR.$MINOR.$MICRO" - return 1 - fi - debug "version_compare: $VARPREFIX equal to/newer than $MAJOR.$MINOR.$MICRO" - return 0 -} - - -version_check () -# check the version of a package -# first argument : package name (executable) -# second argument : optional path where to look for it instead -# third argument : source download url -# rest of arguments : major, minor, micro version -# all consecutive ones : suggestions for binaries to use -# (if not specified in second argument) -{ - PACKAGE=$1 - PKG_PATH=$2 - URL=$3 - MAJOR=$4 - MINOR=$5 - MICRO=$6 - - # for backwards compatibility, we let PKG_PATH=PACKAGE when PKG_PATH null - if test -z "$PKG_PATH"; then PKG_PATH=$PACKAGE; fi - debug "major $MAJOR minor $MINOR micro $MICRO" - VERSION=$MAJOR - if test ! -z "$MINOR"; then VERSION=$VERSION.$MINOR; else MINOR=0; fi - if test ! -z "$MICRO"; then VERSION=$VERSION.$MICRO; else MICRO=0; fi - - debug "major $MAJOR minor $MINOR micro $MICRO" - - for SUGGESTION in $PKG_PATH; do - COMMAND="$SUGGESTION" - - # don't check if asked not to - test -z "$NOCHECK" && { - printf " checking for $COMMAND >= $VERSION ... " - } || { - # we set a var with the same name as the package, but stripped of - # unwanted chars - VAR=`echo $PACKAGE | sed 's/-//g'` - debug "setting $VAR" - eval $VAR="$COMMAND" - return 0 - } - - which $COMMAND > /dev/null 2>&1 - if test $? -eq 1; - then - debug "$COMMAND not found" - continue - fi - - VARPREFIX=`echo $COMMAND | sed 's/-//g' | tr [:lower:] [:upper:]` - version_get $COMMAND $VARPREFIX - - version_compare $VARPREFIX $MAJOR $MINOR $MICRO - if test $? -ne 0; then - echo "found $pkg_version, not ok !" - continue - else - echo "found $pkg_version, ok." - # we set a var with the same name as the package, but stripped of - # unwanted chars - VAR=`echo $PACKAGE | sed 's/-//g'` - debug "setting $VAR" - eval $VAR="$COMMAND" - return 0 - fi - done - - echo "$PACKAGE not found !" - echo "You must have $PACKAGE installed to compile $package." - echo "Download the appropriate package for your distribution," - echo "or get the source tarball at $URL" - return 1; -} - -die_check () -{ - # call with $DIE - # if set to 1, we need to print something helpful then die - DIE=$1 - if test "x$DIE" = "x1"; - then - echo - echo "- Please get the right tools before proceeding." - echo "- Alternatively, if you're sure we're wrong, run with --nocheck." - exit 1 - fi -} autogen_options () { diff --git a/common/gst.supp b/common/gst.supp index 5e2aaf92b..81f98a99c 100644 --- a/common/gst.supp +++ b/common/gst.supp @@ -4006,3 +4006,17 @@ ... fun:_g_io_module_get_default } + +{ + <valgrind bug when trying to parse "infinity" from "interleaved"> + Memcheck:Addr8 + fun:__GI___strncasecmp_l + fun:____strtod_l_internal + fun:gst_value_deserialize_double +} + +{ + <glibc overreads/conditionals> + Memcheck:Addr8 + fun:do_lookup_x +} diff --git a/common/gtk-doc-plugins.mak b/common/gtk-doc-plugins.mak index f19e7d7ed..997a67277 100644 --- a/common/gtk-doc-plugins.mak +++ b/common/gtk-doc-plugins.mak @@ -16,6 +16,16 @@ help: update: scanobj-update $(MAKE) check-outdated-docs +if GTK_DOC_USE_LIBTOOL +GTKDOC_CC = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(INCLUDES) $(GTKDOC_DEPS_CFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +GTKDOC_LD = $(LIBTOOL) --tag=CC --mode=link $(CC) $(GTKDOC_DEPS_LIBS) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) +GTKDOC_RUN = $(LIBTOOL) --mode=execute +else +GTKDOC_CC = $(CC) $(INCLUDES) $(GTKDOC_DEPS_CFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +GTKDOC_LD = $(CC) $(GTKDOC_DEPS_LIBS) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) +GTKDOC_RUN = +endif + # We set GPATH here; this gives us semantics for GNU make # which are more like other make's VPATH, when it comes to # whether a source that is a target of one rule is then @@ -44,11 +54,9 @@ EXTRA_DIST = \ # maintainers and result is commited to git DOC_STAMPS = \ scan-build.stamp \ - tmpl-build.stamp \ sgml-build.stamp \ html-build.stamp \ scan.stamp \ - tmpl.stamp \ sgml.stamp \ html.stamp @@ -122,7 +130,7 @@ scanobj-build.stamp: $(SCANOBJ_DEPS) $(basefiles) scanobj_options="--verbose"; \ fi; \ $(INSPECT_ENVIRONMENT) \ - CC="$(GTKDOC_CC)" LD="$(GTKDOC_LD)" \ + CC="$(GTKDOC_CC)" LD="$(GTKDOC_LD)" RUN="$(GTKDOC_RUN)" \ CFLAGS="$(GTKDOC_CFLAGS) $(CFLAGS) $(WARNING_CFLAGS)" \ LDFLAGS="$(GTKDOC_LIBS) $(LDFLAGS)" \ $(GST_DOC_SCANOBJ) $$scanobj_options --type-init-func="gst_init(NULL,NULL)" \ @@ -161,29 +169,9 @@ scan-build.stamp: $(HFILE_GLOB) $(EXTRA_HFILES) $(basefiles) scanobj-build.stamp --ignore-headers="$(IGNORE_HFILES)"; \ touch scan-build.stamp -#### update templates; done on every build #### - -# in a non-srcdir build, we need to copy files from the previous step -# and the files from previous runs of this step -tmpl-build.stamp: $(DOC_MODULE)-decl.txt $(SCANOBJ_FILES) $(DOC_MODULE)-sections.txt $(DOC_OVERRIDES) - @echo ' DOC Rebuilding template files' - @if test x"$(srcdir)" != x. ; then \ - for f in $(SCANOBJ_FILES) $(SCAN_FILES); \ - do \ - if test -e $(srcdir)/$$f; then cp -u $(srcdir)/$$f . ; fi; \ - done; \ - fi - @gtkdoc-mktmpl --module=$(DOC_MODULE) - @$(PYTHON) \ - $(top_srcdir)/common/mangle-tmpl.py $(srcdir)/$(INSPECT_DIR) tmpl - @touch tmpl-build.stamp - -tmpl.stamp: tmpl-build.stamp - @true - #### xml #### -sgml-build.stamp: tmpl.stamp scan-build.stamp $(CFILE_GLOB) $(top_srcdir)/common/plugins.xsl $(expand_content_files) +sgml-build.stamp: scan-build.stamp $(CFILE_GLOB) $(top_srcdir)/common/plugins.xsl $(expand_content_files) @echo ' DOC Building XML' @-mkdir -p xml @for a in $(srcdir)/$(INSPECT_DIR)/*.xml; do \ @@ -199,6 +187,7 @@ sgml-build.stamp: tmpl.stamp scan-build.stamp $(CFILE_GLOB) $(top_srcdir)/common --output-format=xml \ --ignore-files="$(IGNORE_HFILES) $(IGNORE_CFILES)" \ $(MKDB_OPTIONS) + @$(PYTHON) $(top_srcdir)/common/mangle-db.py xml @cp ../version.entities xml @touch sgml-build.stamp diff --git a/common/gtk-doc.mak b/common/gtk-doc.mak index 9d76889e4..f8edf40b2 100644 --- a/common/gtk-doc.mak +++ b/common/gtk-doc.mak @@ -3,7 +3,16 @@ ########################################################################### # thomas: except of course that we did -# thomas: copied from glib-2 +if GTK_DOC_USE_LIBTOOL +GTKDOC_CC = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(INCLUDES) $(GTKDOC_DEPS_CFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +GTKDOC_LD = $(LIBTOOL) --tag=CC --mode=link $(CC) $(GTKDOC_DEPS_LIBS) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) +GTKDOC_RUN = $(LIBTOOL) --mode=execute +else +GTKDOC_CC = $(CC) $(INCLUDES) $(GTKDOC_DEPS_CFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +GTKDOC_LD = $(CC) $(GTKDOC_DEPS_LIBS) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) +GTKDOC_RUN = +endif + # We set GPATH here; this gives us semantics for GNU make # which are more like other make's VPATH, when it comes to # whether a source that is a target of one rule is then @@ -81,15 +90,22 @@ scan-build.stamp: $(HFILE_GLOB) $(CFILE_GLOB) --ignore-headers="$(IGNORE_HFILES)" @if grep -l '^..*$$' $(DOC_MODULE).types > /dev/null; then \ echo " DOC Introspecting gobjects"; \ + scanobj_options=""; \ + gtkdoc-scangobj 2>&1 --help | grep >/dev/null "\-\-verbose"; \ + if test "$$?" = "0"; then \ + if test "x$(V)" = "x1"; then \ + scanobj_options="--verbose"; \ + fi; \ + fi; \ GST_PLUGIN_SYSTEM_PATH_1_0=`cd $(top_builddir) && pwd` \ GST_PLUGIN_PATH_1_0= \ GST_REGISTRY_1_0=doc-registry.xml \ $(GTKDOC_EXTRA_ENVIRONMENT) \ - CC="$(GTKDOC_CC)" LD="$(GTKDOC_LD)" \ + CC="$(GTKDOC_CC)" LD="$(GTKDOC_LD)" RUN="$(GTKDOC_RUN)" \ CFLAGS="$(GTKDOC_CFLAGS) $(CFLAGS)" \ LDFLAGS="$(GTKDOC_LIBS) $(LDFLAGS)" \ gtkdoc-scangobj --type-init-func="gst_init(NULL,NULL)" \ - --module=$(DOC_MODULE) ; \ + $$scanobj_options --module=$(DOC_MODULE) ; \ else \ for i in $(SCANOBJ_FILES) ; do \ test -f $$i || touch $$i ; \ diff --git a/common/m4/gst-glib2.m4 b/common/m4/gst-glib2.m4 index 63f0f4612..5b9cd8bed 100644 --- a/common/m4/gst-glib2.m4 +++ b/common/m4/gst-glib2.m4 @@ -120,6 +120,10 @@ AC_DEFUN([AG_GST_GLIB_CHECK], GIO_LIBDIR="`$PKG_CONFIG --variable=libdir gio-2.0`" AC_DEFINE_UNQUOTED(GIO_LIBDIR, "$GIO_LIBDIR", [The GIO library directory.]) + GIO_PREFIX="`$PKG_CONFIG --variable=prefix gio-2.0`" + AC_DEFINE_UNQUOTED(GIO_PREFIX, "$GIO_PREFIX", + [The GIO install prefix.]) + AC_SUBST(GIO_CFLAGS) AC_SUBST(GIO_LIBS) AC_SUBST(GIO_LDFLAGS) diff --git a/common/m4/introspection.m4 b/common/m4/introspection.m4 index 589721c5a..162be57cb 100644 --- a/common/m4/introspection.m4 +++ b/common/m4/introspection.m4 @@ -62,6 +62,7 @@ m4_define([_GOBJECT_INTROSPECTION_CHECK_INTERNAL], INTROSPECTION_CFLAGS=`$PKG_CONFIG --cflags gobject-introspection-1.0` INTROSPECTION_LIBS=`$PKG_CONFIG --libs gobject-introspection-1.0` INTROSPECTION_MAKEFILE=`$PKG_CONFIG --variable=datadir gobject-introspection-1.0`/gobject-introspection-1.0/Makefile.introspection + INTROSPECTION_INIT="extern void gst_init(gint*,gchar**); gst_init(NULL,NULL);" fi AC_SUBST(INTROSPECTION_SCANNER) AC_SUBST(INTROSPECTION_COMPILER) @@ -71,6 +72,7 @@ m4_define([_GOBJECT_INTROSPECTION_CHECK_INTERNAL], AC_SUBST(INTROSPECTION_CFLAGS) AC_SUBST(INTROSPECTION_LIBS) AC_SUBST(INTROSPECTION_MAKEFILE) + AC_SUBST(INTROSPECTION_INIT) AM_CONDITIONAL(HAVE_INTROSPECTION, test "x$found_introspection" = "xyes") ]) diff --git a/common/mangle-db.py b/common/mangle-db.py new file mode 100644 index 000000000..463e5bc50 --- /dev/null +++ b/common/mangle-db.py @@ -0,0 +1,71 @@ +# -*- Mode: Python -*- +# vi:si:et:sw=4:sts=4:ts=4 + +""" +Insert includes for the element-*-details.xml files into the related docbook +files. +""" + +from __future__ import print_function, unicode_literals + +import codecs +import glob +import os +import sys + +import xml.dom.minidom + +def patch(related, details): + try: + doc = xml.dom.minidom.parse(related) + except IOError: + return + + # find the insertion point + elem = None + for e in doc.childNodes: + if e.nodeType == e.ELEMENT_NODE and e.localName == 'refentry': + elem = e + break + if elem == None: + return + + elem2 = None + for e in elem.childNodes: + if e.nodeType == e.ELEMENT_NODE and e.localName == 'refsect1': + id = e.getAttributeNode('id') + role = e.getAttributeNode('role') + if id and id.nodeValue.endswith('.description') and role and role.nodeValue == 'desc': + elem2 = e + break + if elem2 == None: + return + + # insert include + include = doc.createElement('include') + include.setAttribute('xmlns', 'http://www.w3.org/2003/XInclude') + include.setAttribute('href', details) + fallback = doc.createElement('fallback') + fallback.setAttribute('xmlns', 'http://www.w3.org/2003/XInclude') + include.appendChild(fallback) + elem2.appendChild(include) + + # store patched file + result = codecs.open(related, mode="w", encoding="utf-8") + #result = open(related, "wb") + doc.writexml(result) + result.close() + +def main(): + if not len(sys.argv) == 2: + sys.stderr.write('Please specify the xml/ dir') + sys.exit(1) + + xmldir = sys.argv[1] + + # parse all *-details.xml files and patch includes into the corresponding + # xml files + for details in glob.glob("%s/element-*-details.xml" % xmldir): + patch (details.replace("-details", ""), os.path.basename(details)) + +main() diff --git a/common/mangle-tmpl.py b/common/mangle-tmpl.py deleted file mode 100644 index 51ea8c2e5..000000000 --- a/common/mangle-tmpl.py +++ /dev/null @@ -1,165 +0,0 @@ -# -*- Mode: Python -*- -# vi:si:et:sw=4:sts=4:ts=4 - -""" -use the output from gst-xmlinspect.py to mangle tmpl/*.sgml and -insert/overwrite Short Description and Long Description -""" - -# FIXME: right now it uses pygst and scans on its own; -# we really should use inspect/*.xml instead since the result of -# gst-xmlinspect.py is committed by the docs maintainer, who can be -# expected to have pygst, but this step should be done for every docs build, -# so no pygst allowed - -# read in inspect/*.xml -# for every tmpl/element-(name).xml: mangle with details from element - -from __future__ import print_function, unicode_literals - -import glob -import re -import sys -import os - -class Tmpl: - def __init__(self, filename): - self.filename = filename - self._sectionids = [] - self._sections = {} - - def read(self): - """ - Read and parse the sections from the given file. - """ - lines = open(self.filename).readlines() - matcher = re.compile("<!-- ##### SECTION (\S+) ##### -->\n") - id = None - - for line in lines: - match = matcher.search(line) - if match: - id = match.expand("\\1") - self._sectionids.append(id) - self._sections[id] = [] - else: - if not id: - sys.stderr.write( - "WARNING: line before a SECTION header: %s" % line) - else: - self._sections[id].append(line) - - def get_section(self, id): - """ - Get the content from the given section. - """ - return self._sections[id] - - def set_section(self, id, content): - """ - Replace the given section id with the given content. - """ - self._sections[id] = content - - def output(self): - """ - Return the output of the current template in the tmpl/*.sgml format. - """ - lines = [] - for id in self._sectionids: - lines.append("<!-- ##### SECTION %s ##### -->\n" % id) - for line in self._sections[id]: - lines.append(line) - - return "".join(lines) - - def write(self, backup=False): - """ - Write out the template file again, backing up the previous one. - """ - if backup: - target = self.filename + ".mangle.bak" - os.rename(self.filename, target) - - handle = open(self.filename, "w") - handle.write(self.output()) - handle.close() - -import xml.dom.minidom - -def get_elements(file): - elements = {} - doc = xml.dom.minidom.parse(file) - - elem = None - for e in doc.childNodes: - if e.nodeType == e.ELEMENT_NODE and e.localName == 'plugin': - elem = e - break - if elem == None: - return None - - elem2 = None - for e in elem.childNodes: - if e.nodeType == e.ELEMENT_NODE and e.localName == 'elements': - elem2 = e - break - if elem2 == None: - return None - - elem = elem2 - - for e in elem.childNodes: - if e.nodeType == e.ELEMENT_NODE and e.localName == 'element': - name = None - description = None - - for e2 in e.childNodes: - if e2.nodeType == e2.ELEMENT_NODE and e2.localName == 'name': - name = e2.childNodes[0].nodeValue.encode("UTF-8") - elif e2.nodeType == e2.ELEMENT_NODE and e2.localName == 'description': - if e2.childNodes: - description = e2.childNodes[0].nodeValue.encode("UTF-8") - else: - description = 'No description' - - if name != None and description != None: - elements[name] = {'description': description} - - return elements - -def main(): - if not len(sys.argv) == 3: - sys.stderr.write('Please specify the inspect/ dir and the tmpl/ dir') - sys.exit(1) - - inspectdir = sys.argv[1] - tmpldir = sys.argv[2] - - # parse all .xml files; build map of element name -> short desc - #for file in glob.glob("inspect/plugin-*.xml"): - elements = {} - for file in glob.glob("%s/plugin-*.xml" % inspectdir): - elements.update(get_elements(file)) - - for file in glob.glob("%s/element-*.sgml" % tmpldir): - base = os.path.basename(file) - element = base[len("element-"):-len(".sgml")] - tmpl = Tmpl(file) - tmpl.read() - if element in elements.keys(): - description = elements[element]['description'] - tmpl.set_section("Short_Description", "%s\n\n" % description) - - # put in an include if not yet there - line = '<include xmlns="http://www.w3.org/2003/XInclude" href="' + \ - 'element-' + element + '-details.xml">' + \ - '<fallback xmlns="http://www.w3.org/2003/XInclude" />' + \ - '</include>\n' - section = tmpl.get_section("Long_Description") - if not section[0] == line: - section.insert(0, line) - tmpl.set_section("Long_Description", section) - tmpl.write() - -main() diff --git a/config.h.in b/config.h.in index 9ab6589fa..09bdbda58 100644 --- a/config.h.in +++ b/config.h.in @@ -34,6 +34,9 @@ /* The GIO modules directory. */ #undef GIO_MODULE_DIR +/* The GIO install prefix. */ +#undef GIO_PREFIX + /* GStreamer API Version */ #undef GST_API_VERSION diff --git a/configure b/configure index f2e014b35..0d65e4ffc 100755 --- a/configure +++ b/configure @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for GStreamer Good Plug-ins 1.5.1. +# Generated by GNU Autoconf 2.69 for GStreamer Good Plug-ins 1.5.2. # # Report bugs to <http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer>. # @@ -591,8 +591,8 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='GStreamer Good Plug-ins' PACKAGE_TARNAME='gst-plugins-good' -PACKAGE_VERSION='1.5.1' -PACKAGE_STRING='GStreamer Good Plug-ins 1.5.1' +PACKAGE_VERSION='1.5.2' +PACKAGE_STRING='GStreamer Good Plug-ins 1.5.2' PACKAGE_BUGREPORT='http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer' PACKAGE_URL='' @@ -1943,7 +1943,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures GStreamer Good Plug-ins 1.5.1 to adapt to many kinds of systems. +\`configure' configures GStreamer Good Plug-ins 1.5.2 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -2015,7 +2015,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of GStreamer Good Plug-ins 1.5.1:";; + short | recursive ) echo "Configuration of GStreamer Good Plug-ins 1.5.2:";; esac cat <<\_ACEOF @@ -2379,7 +2379,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -GStreamer Good Plug-ins configure 1.5.1 +GStreamer Good Plug-ins configure 1.5.2 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -3190,7 +3190,7 @@ cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by GStreamer Good Plug-ins $as_me 1.5.1, which was +It was created by GStreamer Good Plug-ins $as_me 1.5.2, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -4172,7 +4172,7 @@ fi # Define the identity of the package. PACKAGE='gst-plugins-good' - VERSION='1.5.1' + VERSION='1.5.2' cat >>confdefs.h <<_ACEOF @@ -4383,9 +4383,9 @@ fi - PACKAGE_VERSION_MAJOR=$(echo 1.5.1 | cut -d'.' -f1) - PACKAGE_VERSION_MINOR=$(echo 1.5.1 | cut -d'.' -f2) - PACKAGE_VERSION_MICRO=$(echo 1.5.1 | cut -d'.' -f3) + PACKAGE_VERSION_MAJOR=$(echo 1.5.2 | cut -d'.' -f1) + PACKAGE_VERSION_MINOR=$(echo 1.5.2 | cut -d'.' -f2) + PACKAGE_VERSION_MICRO=$(echo 1.5.2 | cut -d'.' -f3) @@ -4396,7 +4396,7 @@ fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking nano version" >&5 $as_echo_n "checking nano version... " >&6; } - NANO=$(echo 1.5.1 | cut -d'.' -f4) + NANO=$(echo 1.5.2 | cut -d'.' -f4) if test x"$NANO" = x || test "x$NANO" = "x0" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: 0 (release)" >&5 @@ -9052,10 +9052,10 @@ fi done - GST_CURRENT=501 + GST_CURRENT=502 GST_REVISION=0 - GST_AGE=501 - GST_LIBVERSION=501:0:501 + GST_AGE=502 + GST_LIBVERSION=502:0:502 @@ -13380,8 +13380,8 @@ CC="$lt_save_CC" -GST_REQ=1.5.1 -GSTPB_REQ=1.5.1 +GST_REQ=1.5.2 +GSTPB_REQ=1.5.2 @@ -24399,6 +24399,13 @@ cat >>confdefs.h <<_ACEOF #define GIO_LIBDIR "$GIO_LIBDIR" _ACEOF + GIO_PREFIX="`$PKG_CONFIG --variable=prefix gio-2.0`" + +cat >>confdefs.h <<_ACEOF +#define GIO_PREFIX "$GIO_PREFIX" +_ACEOF + + @@ -36387,7 +36394,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by GStreamer Good Plug-ins $as_me 1.5.1, which was +This file was extended by GStreamer Good Plug-ins $as_me 1.5.2, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -36453,7 +36460,7 @@ _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -GStreamer Good Plug-ins config.status 1.5.1 +GStreamer Good Plug-ins config.status 1.5.2 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" diff --git a/configure.ac b/configure.ac index 46e63af1a..a8eb50b50 100644 --- a/configure.ac +++ b/configure.ac @@ -5,7 +5,7 @@ dnl please read gstreamer/docs/random/autotools before changing this file dnl initialize autoconf dnl releases only do -Wall, git and prerelease does -Werror too dnl use a three digit version number for releases, and four for git/pre -AC_INIT([GStreamer Good Plug-ins],[1.5.1],[http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer],[gst-plugins-good]) +AC_INIT([GStreamer Good Plug-ins],[1.5.2],[http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer],[gst-plugins-good]) AG_GST_INIT @@ -43,11 +43,11 @@ AC_DEFINE_UNQUOTED(GST_API_VERSION, "$GST_API_VERSION", [GStreamer API Version]) AG_GST_LIBTOOL_PREPARE -AS_LIBTOOL(GST, 501, 0, 501) +AS_LIBTOOL(GST, 502, 0, 502) dnl *** required versions of GStreamer stuff *** -GST_REQ=1.5.1 -GSTPB_REQ=1.5.1 +GST_REQ=1.5.2 +GSTPB_REQ=1.5.2 dnl *** autotools stuff **** diff --git a/docs/plugins/Makefile.am b/docs/plugins/Makefile.am index 728574f5f..4e8ab0ff3 100644 --- a/docs/plugins/Makefile.am +++ b/docs/plugins/Makefile.am @@ -233,9 +233,6 @@ extra_files = GTKDOC_CFLAGS = $(GST_BASE_CFLAGS) -I$(top_builddir) GTKDOC_LIBS = $(GST_BASE_LIBS) -GTKDOC_CC=$(LIBTOOL) --tag=CC --mode=compile $(CC) -GTKDOC_LD=$(LIBTOOL) --tag=CC --mode=link $(CC) - # If you need to override some of the declarations, place them in this file # and uncomment this line. #DOC_OVERRIDES = $(DOC_MODULE)-overrides.txt diff --git a/docs/plugins/Makefile.in b/docs/plugins/Makefile.in index c358cb90e..022748ae9 100644 --- a/docs/plugins/Makefile.in +++ b/docs/plugins/Makefile.in @@ -721,13 +721,17 @@ extra_files = # contains GtkObjects/GObjects and you want to document signals and properties. GTKDOC_CFLAGS = $(GST_BASE_CFLAGS) -I$(top_builddir) GTKDOC_LIBS = $(GST_BASE_LIBS) -GTKDOC_CC = $(LIBTOOL) --tag=CC --mode=compile $(CC) -GTKDOC_LD = $(LIBTOOL) --tag=CC --mode=link $(CC) # If you need to override some of the declarations, place them in this file # and uncomment this line. #DOC_OVERRIDES = $(DOC_MODULE)-overrides.txt DOC_OVERRIDES = +@GTK_DOC_USE_LIBTOOL_FALSE@GTKDOC_CC = $(CC) $(INCLUDES) $(GTKDOC_DEPS_CFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +@GTK_DOC_USE_LIBTOOL_TRUE@GTKDOC_CC = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(INCLUDES) $(GTKDOC_DEPS_CFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +@GTK_DOC_USE_LIBTOOL_FALSE@GTKDOC_LD = $(CC) $(GTKDOC_DEPS_LIBS) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) +@GTK_DOC_USE_LIBTOOL_TRUE@GTKDOC_LD = $(LIBTOOL) --tag=CC --mode=link $(CC) $(GTKDOC_DEPS_LIBS) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) +@GTK_DOC_USE_LIBTOOL_FALSE@GTKDOC_RUN = +@GTK_DOC_USE_LIBTOOL_TRUE@GTKDOC_RUN = $(LIBTOOL) --mode=execute # We set GPATH here; this gives us semantics for GNU make # which are more like other make's VPATH, when it comes to @@ -757,11 +761,9 @@ EXTRA_DIST = \ # maintainers and result is commited to git DOC_STAMPS = \ scan-build.stamp \ - tmpl-build.stamp \ sgml-build.stamp \ html-build.stamp \ scan.stamp \ - tmpl.stamp \ sgml.stamp \ html.stamp @@ -1097,7 +1099,7 @@ update: scanobj-update @ENABLE_GTK_DOC_TRUE@ scanobj_options="--verbose"; \ @ENABLE_GTK_DOC_TRUE@ fi; \ @ENABLE_GTK_DOC_TRUE@ $(INSPECT_ENVIRONMENT) \ -@ENABLE_GTK_DOC_TRUE@ CC="$(GTKDOC_CC)" LD="$(GTKDOC_LD)" \ +@ENABLE_GTK_DOC_TRUE@ CC="$(GTKDOC_CC)" LD="$(GTKDOC_LD)" RUN="$(GTKDOC_RUN)" \ @ENABLE_GTK_DOC_TRUE@ CFLAGS="$(GTKDOC_CFLAGS) $(CFLAGS) $(WARNING_CFLAGS)" \ @ENABLE_GTK_DOC_TRUE@ LDFLAGS="$(GTKDOC_LIBS) $(LDFLAGS)" \ @ENABLE_GTK_DOC_TRUE@ $(GST_DOC_SCANOBJ) $$scanobj_options --type-init-func="gst_init(NULL,NULL)" \ @@ -1136,29 +1138,9 @@ update: scanobj-update @ENABLE_GTK_DOC_TRUE@ --ignore-headers="$(IGNORE_HFILES)"; \ @ENABLE_GTK_DOC_TRUE@ touch scan-build.stamp -#### update templates; done on every build #### - -# in a non-srcdir build, we need to copy files from the previous step -# and the files from previous runs of this step -@ENABLE_GTK_DOC_TRUE@tmpl-build.stamp: $(DOC_MODULE)-decl.txt $(SCANOBJ_FILES) $(DOC_MODULE)-sections.txt $(DOC_OVERRIDES) -@ENABLE_GTK_DOC_TRUE@ @echo ' DOC Rebuilding template files' -@ENABLE_GTK_DOC_TRUE@ @if test x"$(srcdir)" != x. ; then \ -@ENABLE_GTK_DOC_TRUE@ for f in $(SCANOBJ_FILES) $(SCAN_FILES); \ -@ENABLE_GTK_DOC_TRUE@ do \ -@ENABLE_GTK_DOC_TRUE@ if test -e $(srcdir)/$$f; then cp -u $(srcdir)/$$f . ; fi; \ -@ENABLE_GTK_DOC_TRUE@ done; \ -@ENABLE_GTK_DOC_TRUE@ fi -@ENABLE_GTK_DOC_TRUE@ @gtkdoc-mktmpl --module=$(DOC_MODULE) -@ENABLE_GTK_DOC_TRUE@ @$(PYTHON) \ -@ENABLE_GTK_DOC_TRUE@ $(top_srcdir)/common/mangle-tmpl.py $(srcdir)/$(INSPECT_DIR) tmpl -@ENABLE_GTK_DOC_TRUE@ @touch tmpl-build.stamp - -@ENABLE_GTK_DOC_TRUE@tmpl.stamp: tmpl-build.stamp -@ENABLE_GTK_DOC_TRUE@ @true - #### xml #### -@ENABLE_GTK_DOC_TRUE@sgml-build.stamp: tmpl.stamp scan-build.stamp $(CFILE_GLOB) $(top_srcdir)/common/plugins.xsl $(expand_content_files) +@ENABLE_GTK_DOC_TRUE@sgml-build.stamp: scan-build.stamp $(CFILE_GLOB) $(top_srcdir)/common/plugins.xsl $(expand_content_files) @ENABLE_GTK_DOC_TRUE@ @echo ' DOC Building XML' @ENABLE_GTK_DOC_TRUE@ @-mkdir -p xml @ENABLE_GTK_DOC_TRUE@ @for a in $(srcdir)/$(INSPECT_DIR)/*.xml; do \ @@ -1174,6 +1156,7 @@ update: scanobj-update @ENABLE_GTK_DOC_TRUE@ --output-format=xml \ @ENABLE_GTK_DOC_TRUE@ --ignore-files="$(IGNORE_HFILES) $(IGNORE_CFILES)" \ @ENABLE_GTK_DOC_TRUE@ $(MKDB_OPTIONS) +@ENABLE_GTK_DOC_TRUE@ @$(PYTHON) $(top_srcdir)/common/mangle-db.py xml @ENABLE_GTK_DOC_TRUE@ @cp ../version.entities xml @ENABLE_GTK_DOC_TRUE@ @touch sgml-build.stamp diff --git a/docs/plugins/gst-plugins-good-plugins.args b/docs/plugins/gst-plugins-good-plugins.args index df31626bc..73cf080a0 100644 --- a/docs/plugins/gst-plugins-good-plugins.args +++ b/docs/plugins/gst-plugins-good-plugins.args @@ -1038,6 +1038,16 @@ <DEFAULT>TRUE</DEFAULT> </ARG> +<ARG> +<NAME>GstRTSPSrc::tls-interaction</NAME> +<TYPE>GTlsInteraction*</TYPE> +<RANGE></RANGE> +<FLAGS>rw</FLAGS> +<NICK>TLS interaction</NICK> +<BLURB>A GTlsInteraction object to promt the user for password or certificate.</BLURB> +<DEFAULT></DEFAULT> +</ARG> + <ARG> <NAME>GstRTPDec::skip</NAME> <TYPE>gint</TYPE> @@ -4288,6 +4298,16 @@ <DEFAULT>TRUE</DEFAULT> </ARG> +<ARG> +<NAME>GstSoupHTTPSrc::tls-database</NAME> +<TYPE>GTlsDatabase*</TYPE> +<RANGE></RANGE> +<FLAGS>rw</FLAGS> +<NICK>TLS database</NICK> +<BLURB>TLS database with anchor certificate authorities used to validate the server certificate.</BLURB> +<DEFAULT></DEFAULT> +</ARG> + <ARG> <NAME>GstRTPDVPay::mode</NAME> <TYPE>GstDVPayMode</TYPE> @@ -21324,7 +21344,7 @@ <RANGE></RANGE> <FLAGS>rw</FLAGS> <NICK>Use pipeline clock</NICK> -<BLURB>Use the pipeline running-time to set the NTP time in the RTCP SR messages.</BLURB> +<BLURB>Use the pipeline running-time to set the NTP time in the RTCP SR messages (DEPRECATED: Use ntp-source property).</BLURB> <DEFAULT>FALSE</DEFAULT> </ARG> @@ -21385,7 +21405,17 @@ <FLAGS>rw</FLAGS> <NICK>RTP Profile</NICK> <BLURB>Default RTP profile of newly created sessions.</BLURB> -<DEFAULT>GST_RTP_PROFILE_AVPF</DEFAULT> +<DEFAULT>GST_RTP_PROFILE_AVP</DEFAULT> +</ARG> + +<ARG> +<NAME>GstRtpBin::ntp-time-source</NAME> +<TYPE>GstRtpNtpTimeSource</TYPE> +<RANGE></RANGE> +<FLAGS>rw</FLAGS> +<NICK>NTP Time Source</NICK> +<BLURB>NTP time source for RTCP packets.</BLURB> +<DEFAULT>NTP time based on realtime clock</DEFAULT> </ARG> <ARG> @@ -21644,7 +21674,7 @@ <RANGE></RANGE> <FLAGS>rw</FLAGS> <NICK>Use pipeline clock</NICK> -<BLURB>Use the pipeline running-time to set the NTP time in the RTCP SR messages.</BLURB> +<BLURB>Use the pipeline running-time to set the NTP time in the RTCP SR messages (DEPRECATED: Use ntp-source property).</BLURB> <DEFAULT>FALSE</DEFAULT> </ARG> @@ -21688,6 +21718,16 @@ <DEFAULT>GST_RTP_PROFILE_AVP</DEFAULT> </ARG> +<ARG> +<NAME>GstRtpSession::ntp-time-source</NAME> +<TYPE>GstRtpNtpTimeSource</TYPE> +<RANGE></RANGE> +<FLAGS>rw</FLAGS> +<NICK>NTP Time Source</NICK> +<BLURB>NTP time source for RTCP packets.</BLURB> +<DEFAULT>NTP time based on realtime clock</DEFAULT> +</ARG> + <ARG> <NAME>GstRtpRtxSend::rtx-payload-type</NAME> <TYPE>guint</TYPE> @@ -22468,6 +22508,46 @@ <DEFAULT>0</DEFAULT> </ARG> +<ARG> +<NAME>GstQTMux::reserved-bytes-per-sec</NAME> +<TYPE>guint</TYPE> +<RANGE><= 10000</RANGE> +<FLAGS>rwx</FLAGS> +<NICK>Reserved MOOV bytes per second, per track</NICK> +<BLURB>Multiplier for converting reserved-max-duration into bytes of header to reserve, per second, per track.</BLURB> +<DEFAULT>550</DEFAULT> +</ARG> + +<ARG> +<NAME>GstQTMux::reserved-duration-remaining</NAME> +<TYPE>guint64</TYPE> +<RANGE></RANGE> +<FLAGS>r</FLAGS> +<NICK>Report the approximate amount of remaining recording space (ns)</NICK> +<BLURB>Reports the approximate amount of remaining moov header space reserved using reserved-max-duration.</BLURB> +<DEFAULT>0</DEFAULT> +</ARG> + +<ARG> +<NAME>GstQTMux::reserved-max-duration</NAME> +<TYPE>guint64</TYPE> +<RANGE></RANGE> +<FLAGS>rw</FLAGS> +<NICK>Reserved maximum file duration (ns)</NICK> +<BLURB>When set to a value > 0, reserves space for index tables at the beginning of the file.</BLURB> +<DEFAULT>18446744073709551615</DEFAULT> +</ARG> + +<ARG> +<NAME>GstQTMux::reserved-moov-update-period</NAME> +<TYPE>guint64</TYPE> +<RANGE></RANGE> +<FLAGS>rw</FLAGS> +<NICK>Interval at which to update index tables (ns)</NICK> +<BLURB>When used with reserved-max-duration, periodically updates the index tables with information muxed so far.</BLURB> +<DEFAULT>18446744073709551615</DEFAULT> +</ARG> + <ARG> <NAME>GstQTMoovRecover::broken-input</NAME> <TYPE>gchar*</TYPE> @@ -22598,6 +22678,46 @@ <DEFAULT>0</DEFAULT> </ARG> +<ARG> +<NAME>GstMP4Mux::reserved-bytes-per-sec</NAME> +<TYPE>guint</TYPE> +<RANGE><= 10000</RANGE> +<FLAGS>rwx</FLAGS> +<NICK>Reserved MOOV bytes per second, per track</NICK> +<BLURB>Multiplier for converting reserved-max-duration into bytes of header to reserve, per second, per track.</BLURB> +<DEFAULT>550</DEFAULT> +</ARG> + +<ARG> +<NAME>GstMP4Mux::reserved-duration-remaining</NAME> +<TYPE>guint64</TYPE> +<RANGE></RANGE> +<FLAGS>r</FLAGS> +<NICK>Report the approximate amount of remaining recording space (ns)</NICK> +<BLURB>Reports the approximate amount of remaining moov header space reserved using reserved-max-duration.</BLURB> +<DEFAULT>0</DEFAULT> +</ARG> + +<ARG> +<NAME>GstMP4Mux::reserved-max-duration</NAME> +<TYPE>guint64</TYPE> +<RANGE></RANGE> +<FLAGS>rw</FLAGS> +<NICK>Reserved maximum file duration (ns)</NICK> +<BLURB>When set to a value > 0, reserves space for index tables at the beginning of the file.</BLURB> +<DEFAULT>18446744073709551615</DEFAULT> +</ARG> + +<ARG> +<NAME>GstMP4Mux::reserved-moov-update-period</NAME> +<TYPE>guint64</TYPE> +<RANGE></RANGE> +<FLAGS>rw</FLAGS> +<NICK>Interval at which to update index tables (ns)</NICK> +<BLURB>When used with reserved-max-duration, periodically updates the index tables with information muxed so far.</BLURB> +<DEFAULT>18446744073709551615</DEFAULT> +</ARG> + <ARG> <NAME>GstMJ2Mux::dts-method</NAME> <TYPE>GstQTMuxDtsMethods</TYPE> @@ -22688,6 +22808,46 @@ <DEFAULT>0</DEFAULT> </ARG> +<ARG> +<NAME>GstMJ2Mux::reserved-bytes-per-sec</NAME> +<TYPE>guint</TYPE> +<RANGE><= 10000</RANGE> +<FLAGS>rwx</FLAGS> +<NICK>Reserved MOOV bytes per second, per track</NICK> +<BLURB>Multiplier for converting reserved-max-duration into bytes of header to reserve, per second, per track.</BLURB> +<DEFAULT>550</DEFAULT> +</ARG> + +<ARG> +<NAME>GstMJ2Mux::reserved-duration-remaining</NAME> +<TYPE>guint64</TYPE> +<RANGE></RANGE> +<FLAGS>r</FLAGS> +<NICK>Report the approximate amount of remaining recording space (ns)</NICK> +<BLURB>Reports the approximate amount of remaining moov header space reserved using reserved-max-duration.</BLURB> +<DEFAULT>0</DEFAULT> +</ARG> + +<ARG> +<NAME>GstMJ2Mux::reserved-max-duration</NAME> +<TYPE>guint64</TYPE> +<RANGE></RANGE> +<FLAGS>rw</FLAGS> +<NICK>Reserved maximum file duration (ns)</NICK> +<BLURB>When set to a value > 0, reserves space for index tables at the beginning of the file.</BLURB> +<DEFAULT>18446744073709551615</DEFAULT> +</ARG> + +<ARG> +<NAME>GstMJ2Mux::reserved-moov-update-period</NAME> +<TYPE>guint64</TYPE> +<RANGE></RANGE> +<FLAGS>rw</FLAGS> +<NICK>Interval at which to update index tables (ns)</NICK> +<BLURB>When used with reserved-max-duration, periodically updates the index tables with information muxed so far.</BLURB> +<DEFAULT>18446744073709551615</DEFAULT> +</ARG> + <ARG> <NAME>GstISMLMux::dts-method</NAME> <TYPE>GstQTMuxDtsMethods</TYPE> @@ -22778,6 +22938,46 @@ <DEFAULT>0</DEFAULT> </ARG> +<ARG> +<NAME>GstISMLMux::reserved-bytes-per-sec</NAME> +<TYPE>guint</TYPE> +<RANGE><= 10000</RANGE> +<FLAGS>rwx</FLAGS> +<NICK>Reserved MOOV bytes per second, per track</NICK> +<BLURB>Multiplier for converting reserved-max-duration into bytes of header to reserve, per second, per track.</BLURB> +<DEFAULT>550</DEFAULT> +</ARG> + +<ARG> +<NAME>GstISMLMux::reserved-duration-remaining</NAME> +<TYPE>guint64</TYPE> +<RANGE></RANGE> +<FLAGS>r</FLAGS> +<NICK>Report the approximate amount of remaining recording space (ns)</NICK> +<BLURB>Reports the approximate amount of remaining moov header space reserved using reserved-max-duration.</BLURB> +<DEFAULT>0</DEFAULT> +</ARG> + +<ARG> +<NAME>GstISMLMux::reserved-max-duration</NAME> +<TYPE>guint64</TYPE> +<RANGE></RANGE> +<FLAGS>rw</FLAGS> +<NICK>Reserved maximum file duration (ns)</NICK> +<BLURB>When set to a value > 0, reserves space for index tables at the beginning of the file.</BLURB> +<DEFAULT>18446744073709551615</DEFAULT> +</ARG> + +<ARG> +<NAME>GstISMLMux::reserved-moov-update-period</NAME> +<TYPE>guint64</TYPE> +<RANGE></RANGE> +<FLAGS>rw</FLAGS> +<NICK>Interval at which to update index tables (ns)</NICK> +<BLURB>When used with reserved-max-duration, periodically updates the index tables with information muxed so far.</BLURB> +<DEFAULT>18446744073709551615</DEFAULT> +</ARG> + <ARG> <NAME>GstGPPMux::dts-method</NAME> <TYPE>GstQTMuxDtsMethods</TYPE> @@ -22958,6 +23158,46 @@ <DEFAULT>0</DEFAULT> </ARG> +<ARG> +<NAME>Gst3GPPMux::reserved-bytes-per-sec</NAME> +<TYPE>guint</TYPE> +<RANGE><= 10000</RANGE> +<FLAGS>rwx</FLAGS> +<NICK>Reserved MOOV bytes per second, per track</NICK> +<BLURB>Multiplier for converting reserved-max-duration into bytes of header to reserve, per second, per track.</BLURB> +<DEFAULT>550</DEFAULT> +</ARG> + +<ARG> +<NAME>Gst3GPPMux::reserved-duration-remaining</NAME> +<TYPE>guint64</TYPE> +<RANGE></RANGE> +<FLAGS>r</FLAGS> +<NICK>Report the approximate amount of remaining recording space (ns)</NICK> +<BLURB>Reports the approximate amount of remaining moov header space reserved using reserved-max-duration.</BLURB> +<DEFAULT>0</DEFAULT> +</ARG> + +<ARG> +<NAME>Gst3GPPMux::reserved-max-duration</NAME> +<TYPE>guint64</TYPE> +<RANGE></RANGE> +<FLAGS>rw</FLAGS> +<NICK>Reserved maximum file duration (ns)</NICK> +<BLURB>When set to a value > 0, reserves space for index tables at the beginning of the file.</BLURB> +<DEFAULT>18446744073709551615</DEFAULT> +</ARG> + +<ARG> +<NAME>Gst3GPPMux::reserved-moov-update-period</NAME> +<TYPE>guint64</TYPE> +<RANGE></RANGE> +<FLAGS>rw</FLAGS> +<NICK>Interval at which to update index tables (ns)</NICK> +<BLURB>When used with reserved-max-duration, periodically updates the index tables with information muxed so far.</BLURB> +<DEFAULT>18446744073709551615</DEFAULT> +</ARG> + <ARG> <NAME>GstSplitFileSrc::location</NAME> <TYPE>gchar*</TYPE> diff --git a/docs/plugins/gst-plugins-good-plugins.hierarchy b/docs/plugins/gst-plugins-good-plugins.hierarchy index 3d1150a22..c259c7983 100644 --- a/docs/plugins/gst-plugins-good-plugins.hierarchy +++ b/docs/plugins/gst-plugins-good-plugins.hierarchy @@ -33,7 +33,7 @@ GObject GstMuLawEnc GstSpeexEnc GstWavpackEnc - GstAudioVisualizer-ExtGom + GstAudioVisualizer-ExtGoom GstGoom GstAudioVisualizer-ExtGoom2k1 GstGoom2k1 @@ -309,6 +309,7 @@ GObject GstTaskPool GSocket GTlsDatabase + GTlsInteraction GUdevClient GUdevDevice GdkPixbuf diff --git a/docs/plugins/html/GstIirEqualizer.html b/docs/plugins/html/GstIirEqualizer.html index c8bd064e7..4a267e242 100644 --- a/docs/plugins/html/GstIirEqualizer.html +++ b/docs/plugins/html/GstIirEqualizer.html @@ -68,8 +68,6 @@ GstIirEqualizer implements </div> <div class="refsect1"> <a name="GstIirEqualizer.description"></a><h2>Description</h2> -<p> -</p> </div> <div class="refsect1"> <a name="GstIirEqualizer.functions_details"></a><h2>Functions</h2> @@ -80,8 +78,6 @@ GstIirEqualizer implements <div class="refsect2"> <a name="GstIirEqualizer-struct"></a><h3>struct GstIirEqualizer</h3> <pre class="programlisting">struct GstIirEqualizer;</pre> -<p> -</p> </div> </div> </div> diff --git a/docs/plugins/html/ch01.html b/docs/plugins/html/ch01.html index 82c3da8f0..61651a4bc 100644 --- a/docs/plugins/html/ch01.html +++ b/docs/plugins/html/ch01.html @@ -30,229 +30,229 @@ <span class="refentrytitle"><a href="gst-plugins-good-plugins-aacparse.html">aacparse</a></span><span class="refpurpose"> — AAC parser</span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-aasink.html">aasink</a></span><span class="refpurpose"> — An ASCII art videosink</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-aasink.html">aasink</a></span><span class="refpurpose"></span> </dt> <dt> <span class="refentrytitle"><a href="gst-plugins-good-plugins-ac3parse.html">ac3parse</a></span><span class="refpurpose"> — AC3 parser</span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-agingtv.html">agingtv</a></span><span class="refpurpose"> — AgingTV adds age to video input using scratches and dust</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-agingtv.html">agingtv</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-alpha.html">alpha</a></span><span class="refpurpose"> — Adds an alpha channel to video - uniform or via chroma-keying</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-alpha.html">alpha</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-alphacolor.html">alphacolor</a></span><span class="refpurpose"> — ARGB from/to AYUV colorspace conversion preserving the alpha channel</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-alphacolor.html">alphacolor</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-alawdec.html">alawdec</a></span><span class="refpurpose"> — Convert 8bit A law to 16bit PCM</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-alawdec.html">alawdec</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-alawenc.html">alawenc</a></span><span class="refpurpose"> — Convert 16bit PCM to 8bit A law</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-alawenc.html">alawenc</a></span><span class="refpurpose"></span> </dt> <dt> <span class="refentrytitle"><a href="gst-plugins-good-plugins-amrparse.html">amrparse</a></span><span class="refpurpose"> — AMR parser</span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-apedemux.html">apedemux</a></span><span class="refpurpose"> — Read and output APE tags while demuxing the contents</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-apedemux.html">apedemux</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-apev2mux.html">apev2mux</a></span><span class="refpurpose"> — Adds an APEv2 header to the beginning of files using taglib</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-apev2mux.html">apev2mux</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-aspectratiocrop.html">aspectratiocrop</a></span><span class="refpurpose"> — Crops video into a user-defined aspect-ratio</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-aspectratiocrop.html">aspectratiocrop</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-audioamplify.html">audioamplify</a></span><span class="refpurpose"> — Amplifies an audio stream by a given factor</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-audioamplify.html">audioamplify</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-audiochebband.html">audiochebband</a></span><span class="refpurpose"> — Chebyshev band pass and band reject filter</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-audiochebband.html">audiochebband</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-audiocheblimit.html">audiocheblimit</a></span><span class="refpurpose"> — Chebyshev low pass and high pass filter</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-audiocheblimit.html">audiocheblimit</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-audiofirfilter.html">audiofirfilter</a></span><span class="refpurpose"> — Generic audio FIR filter with custom filter kernel</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-audiofirfilter.html">audiofirfilter</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-audioiirfilter.html">audioiirfilter</a></span><span class="refpurpose"> — Generic audio IIR filter with custom filter kernel</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-audioiirfilter.html">audioiirfilter</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-audiowsincband.html">audiowsincband</a></span><span class="refpurpose"> — Band pass and band reject windowed sinc filter</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-audiowsincband.html">audiowsincband</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-audiowsinclimit.html">audiowsinclimit</a></span><span class="refpurpose"> — Low pass and high pass windowed sinc filter</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-audiowsinclimit.html">audiowsinclimit</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-audioecho.html">audioecho</a></span><span class="refpurpose"> — Adds an echo or reverb effect to an audio stream</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-audioecho.html">audioecho</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-audiodynamic.html">audiodynamic</a></span><span class="refpurpose"> — Compressor and Expander</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-audiodynamic.html">audiodynamic</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-audioinvert.html">audioinvert</a></span><span class="refpurpose"> — Swaps upper and lower half of audio samples</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-audioinvert.html">audioinvert</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-audiopanorama.html">audiopanorama</a></span><span class="refpurpose"> — Positions audio streams in the stereo panorama</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-audiopanorama.html">audiopanorama</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-audiokaraoke.html">audiokaraoke</a></span><span class="refpurpose"> — Removes voice from sound</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-audiokaraoke.html">audiokaraoke</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-auparse.html">auparse</a></span><span class="refpurpose"> — Parse an .au file into raw audio</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-auparse.html">auparse</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-autoaudiosink.html">autoaudiosink</a></span><span class="refpurpose"> — Wrapper audio sink for automatically detected audio sink</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-autoaudiosink.html">autoaudiosink</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-autoaudiosrc.html">autoaudiosrc</a></span><span class="refpurpose"> — Wrapper audio source for automatically detected audio source</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-autoaudiosrc.html">autoaudiosrc</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-autovideosink.html">autovideosink</a></span><span class="refpurpose"> — Wrapper video sink for automatically detected video sink</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-autovideosink.html">autovideosink</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-autovideosrc.html">autovideosrc</a></span><span class="refpurpose"> — Wrapper video source for automatically detected video source</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-autovideosrc.html">autovideosrc</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-avidemux.html">avidemux</a></span><span class="refpurpose"> — Demultiplex an avi file into audio and video</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-avidemux.html">avidemux</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-avimux.html">avimux</a></span><span class="refpurpose"> — Muxes audio and video into an avi stream</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-avimux.html">avimux</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-avisubtitle.html">avisubtitle</a></span><span class="refpurpose"> — Parse avi subtitle stream</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-avisubtitle.html">avisubtitle</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-cacasink.html">cacasink</a></span><span class="refpurpose"> — A colored ASCII art videosink</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-cacasink.html">cacasink</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-cairooverlay.html">cairooverlay</a></span><span class="refpurpose"> — Render overlay on a video stream using Cairo</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-cairooverlay.html">cairooverlay</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-capssetter.html">capssetter</a></span><span class="refpurpose"> — Set/merge caps on stream</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-capssetter.html">capssetter</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-cutter.html">cutter</a></span><span class="refpurpose"> — Audio Cutter to split audio into non-silent bits</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-cutter.html">cutter</a></span><span class="refpurpose"></span> </dt> <dt> <span class="refentrytitle"><a href="gst-plugins-good-plugins-dcaparse.html">dcaparse</a></span><span class="refpurpose"> — DCA (DTS Coherent Acoustics) parser</span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-deinterlace.html">deinterlace</a></span><span class="refpurpose"> — Deinterlace Methods ported from DScaler/TvTime</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-deinterlace.html">deinterlace</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-deinterleave.html">deinterleave</a></span><span class="refpurpose"> — Splits one interleaved multichannel audio stream into many mono audio streams</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-deinterleave.html">deinterleave</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-dicetv.html">dicetv</a></span><span class="refpurpose"> — 'Dices' the screen up into many small squares</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-dicetv.html">dicetv</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-directsoundsink.html">directsoundsink</a></span><span class="refpurpose"> — DirectSound audio sink</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-directsoundsink.html">directsoundsink</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-dtmfsrc.html">dtmfsrc</a></span><span class="refpurpose"> — Generates DTMF tones</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-dtmfsrc.html">dtmfsrc</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-dv1394src.html">dv1394src</a></span><span class="refpurpose"> — Source for DV video data from firewire port</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-dv1394src.html">dv1394src</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-dvdec.html">dvdec</a></span><span class="refpurpose"> — Uses libdv to decode DV video (smpte314) (libdv.sourceforge.net)</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-dvdec.html">dvdec</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-dvdemux.html">dvdemux</a></span><span class="refpurpose"> — Uses libdv to separate DV audio from DV video (libdv.sourceforge.net)</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-dvdemux.html">dvdemux</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-edgetv.html">edgetv</a></span><span class="refpurpose"> — Apply edge detect on video</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-edgetv.html">edgetv</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-equalizer-10bands.html">equalizer-10bands</a></span><span class="refpurpose"> — Direct Form 10 band IIR equalizer</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-equalizer-10bands.html">equalizer-10bands</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-equalizer-3bands.html">equalizer-3bands</a></span><span class="refpurpose"> — Direct Form 3 band IIR equalizer</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-equalizer-3bands.html">equalizer-3bands</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-equalizer-nbands.html">equalizer-nbands</a></span><span class="refpurpose"> — Direct Form IIR equalizer</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-equalizer-nbands.html">equalizer-nbands</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-flacdec.html">flacdec</a></span><span class="refpurpose"> — Decodes FLAC lossless audio streams</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-flacdec.html">flacdec</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-flacenc.html">flacenc</a></span><span class="refpurpose"> — Encodes audio with the FLAC lossless audio encoder</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-flacenc.html">flacenc</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-flacparse.html">flacparse</a></span><span class="refpurpose"> — Parses audio with the FLAC lossless audio codec</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-flacparse.html">flacparse</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-flactag.html">flactag</a></span><span class="refpurpose"> — Rewrite tags in a FLAC file</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-flactag.html">flactag</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-flvdemux.html">flvdemux</a></span><span class="refpurpose"> — Demux FLV feeds into digital streams</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-flvdemux.html">flvdemux</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-flvmux.html">flvmux</a></span><span class="refpurpose"> — Muxes video/audio streams into a FLV stream</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-flvmux.html">flvmux</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-flxdec.html">flxdec</a></span><span class="refpurpose"> — FLC/FLI/FLX video decoder</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-flxdec.html">flxdec</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-gamma.html">gamma</a></span><span class="refpurpose"> — Adjusts gamma on a video stream</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-gamma.html">gamma</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-gdkpixbufsink.html">gdkpixbufsink</a></span><span class="refpurpose"> — Output images as GdkPixbuf objects in bus messages</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-gdkpixbufsink.html">gdkpixbufsink</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-goom.html">goom</a></span><span class="refpurpose"> — Takes frames of data and outputs video frames using the GOOM filter</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-goom.html">goom</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-goom2k1.html">goom2k1</a></span><span class="refpurpose"> — Takes frames of data and outputs video frames using the GOOM 2k1 filter</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-goom2k1.html">goom2k1</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-hdv1394src.html">hdv1394src</a></span><span class="refpurpose"> — Source for MPEG-TS video data from firewire port</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-hdv1394src.html">hdv1394src</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-icydemux.html">icydemux</a></span><span class="refpurpose"> — Read and output ICY tags while demuxing the contents</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-icydemux.html">icydemux</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-id3demux.html">id3demux</a></span><span class="refpurpose"> — Read and output ID3v1 and ID3v2 tags while demuxing the contents</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-id3demux.html">id3demux</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-id3v2mux.html">id3v2mux</a></span><span class="refpurpose"> — Adds an ID3v2 header to the beginning of MP3 files using taglib</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-id3v2mux.html">id3v2mux</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-imagefreeze.html">imagefreeze</a></span><span class="refpurpose"> — Generates a still frame stream from an image</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-imagefreeze.html">imagefreeze</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-interleave.html">interleave</a></span><span class="refpurpose"> — Folds many mono channels into one interleaved audio stream</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-interleave.html">interleave</a></span><span class="refpurpose"></span> </dt> <dt> <span class="refentrytitle"><a href="gst-plugins-good-plugins-ismlmux.html">ismlmux</a></span><span class="refpurpose"> — Muxer for ISML smooth streaming (.isml) files</span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-jackaudiosrc.html">jackaudiosrc</a></span><span class="refpurpose"> — Captures audio from a JACK server</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-jackaudiosrc.html">jackaudiosrc</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-jackaudiosink.html">jackaudiosink</a></span><span class="refpurpose"> — Output audio to a JACK server</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-jackaudiosink.html">jackaudiosink</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-jpegdec.html">jpegdec</a></span><span class="refpurpose"> — Decode images from JPEG format</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-jpegdec.html">jpegdec</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-jpegenc.html">jpegenc</a></span><span class="refpurpose"> — Encode images in JPEG format</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-jpegenc.html">jpegenc</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-level.html">level</a></span><span class="refpurpose"> — RMS/Peak/Decaying Peak Level messager for audio/raw</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-level.html">level</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-matroskamux.html">matroskamux</a></span><span class="refpurpose"> — Muxes video/audio/subtitle streams into a matroska stream</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-matroskamux.html">matroskamux</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-matroskademux.html">matroskademux</a></span><span class="refpurpose"> — Demuxes Matroska/WebM streams into video/audio/subtitles</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-matroskademux.html">matroskademux</a></span><span class="refpurpose"></span> </dt> <dt> <span class="refentrytitle"><a href="gst-plugins-good-plugins-mj2mux.html">mj2mux</a></span><span class="refpurpose"> — Muxer for Motion JPEG-2000 (.mj2) files</span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-monoscope.html">monoscope</a></span><span class="refpurpose"> — Displays a highly stabilised waveform of audio input</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-monoscope.html">monoscope</a></span><span class="refpurpose"></span> </dt> <dt> <span class="refentrytitle"><a href="gst-plugins-good-plugins-mpegaudioparse.html">mpegaudioparse</a></span><span class="refpurpose"> — MPEG audio parser</span> @@ -261,70 +261,70 @@ <span class="refentrytitle"><a href="gst-plugins-good-plugins-mp4mux.html">mp4mux</a></span><span class="refpurpose"> — Muxer for ISO MPEG-4 (.mp4) files</span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-mulawdec.html">mulawdec</a></span><span class="refpurpose"> — Convert 8bit mu law to 16bit PCM</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-mulawdec.html">mulawdec</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-mulawenc.html">mulawenc</a></span><span class="refpurpose"> — Convert 16bit PCM to 8bit mu law</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-mulawenc.html">mulawenc</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-multifilesink.html">multifilesink</a></span><span class="refpurpose"> — Write buffers to a sequentially named set of files</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-multifilesink.html">multifilesink</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-multifilesrc.html">multifilesrc</a></span><span class="refpurpose"> — Read a sequentially named set of files into buffers</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-multifilesrc.html">multifilesrc</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-multipartdemux.html">multipartdemux</a></span><span class="refpurpose"> — demux multipart streams</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-multipartdemux.html">multipartdemux</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-multipartmux.html">multipartmux</a></span><span class="refpurpose"> — mux multipart streams</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-multipartmux.html">multipartmux</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-multiudpsink.html">multiudpsink</a></span><span class="refpurpose"> — Send data over the network via UDP to one or multiple recipients which can be added or removed at runtime using action signals</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-multiudpsink.html">multiudpsink</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-optv.html">optv</a></span><span class="refpurpose"> — Optical art meets real-time video effect</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-optv.html">optv</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-oss4sink.html">oss4sink</a></span><span class="refpurpose"> — Output to a sound card via OSS version 4</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-oss4sink.html">oss4sink</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-oss4src.html">oss4src</a></span><span class="refpurpose"> — Capture from a sound card via OSS version 4</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-oss4src.html">oss4src</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-osssink.html">osssink</a></span><span class="refpurpose"> — Output to a sound card via OSS</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-osssink.html">osssink</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-osssrc.html">osssrc</a></span><span class="refpurpose"> — Capture from a sound card via OSS</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-osssrc.html">osssrc</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-osxaudiosink.html">osxaudiosink</a></span><span class="refpurpose"> — Output to a sound card in OS X</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-osxaudiosink.html">osxaudiosink</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-osxaudiosrc.html">osxaudiosrc</a></span><span class="refpurpose"> — Input from a sound card in OS X</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-osxaudiosrc.html">osxaudiosrc</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-osxvideosink.html">osxvideosink</a></span><span class="refpurpose"> — OSX native videosink</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-osxvideosink.html">osxvideosink</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-pngdec.html">pngdec</a></span><span class="refpurpose"> — Decode a png video frame to a raw image</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-pngdec.html">pngdec</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-pngenc.html">pngenc</a></span><span class="refpurpose"> — Encode a video frame to a .png image</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-pngenc.html">pngenc</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-progressreport.html">progressreport</a></span><span class="refpurpose"> — Periodically query and report on processing progress</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-progressreport.html">progressreport</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-pulsesink.html">pulsesink</a></span><span class="refpurpose"> — Plays audio to a PulseAudio server</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-pulsesink.html">pulsesink</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-pulsesrc.html">pulsesrc</a></span><span class="refpurpose"> — Captures audio from a PulseAudio server</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-pulsesrc.html">pulsesrc</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-quarktv.html">quarktv</a></span><span class="refpurpose"> — Motion dissolver</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-quarktv.html">quarktv</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-qtdemux.html">qtdemux</a></span><span class="refpurpose"> — Demultiplex a QuickTime file into audio and video streams</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-qtdemux.html">qtdemux</a></span><span class="refpurpose"></span> </dt> <dt> <span class="refentrytitle"><a href="gst-plugins-good-plugins-qtmux.html">qtmux</a></span><span class="refpurpose"> — Muxer for quicktime(.mov) files</span> @@ -333,127 +333,127 @@ <span class="refentrytitle"><a href="gst-plugins-good-plugins-qtmoovrecover.html">qtmoovrecover</a></span><span class="refpurpose"> — Utility element for recovering unfinished quicktime files</span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-radioactv.html">radioactv</a></span><span class="refpurpose"> — motion-enlightment effect</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-radioactv.html">radioactv</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-revtv.html">revtv</a></span><span class="refpurpose"> — A video waveform monitor for each line of video processed</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-revtv.html">revtv</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-rganalysis.html">rganalysis</a></span><span class="refpurpose"> — Perform the ReplayGain analysis</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-rganalysis.html">rganalysis</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-rglimiter.html">rglimiter</a></span><span class="refpurpose"> — Apply signal compression to raw audio data</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-rglimiter.html">rglimiter</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-rgvolume.html">rgvolume</a></span><span class="refpurpose"> — Apply ReplayGain volume adjustment</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-rgvolume.html">rgvolume</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-rippletv.html">rippletv</a></span><span class="refpurpose"> — RippleTV does ripple mark effect on the video input</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-rippletv.html">rippletv</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-rtpdec.html">rtpdec</a></span><span class="refpurpose"> — Accepts raw RTP and RTCP packets and sends them forward</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-rtpdec.html">rtpdec</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-rtpac3depay.html">rtpac3depay</a></span><span class="refpurpose"> — Extracts AC3 audio from RTP packets (RFC 4184)</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-rtpac3depay.html">rtpac3depay</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-rtpac3pay.html">rtpac3pay</a></span><span class="refpurpose"> — Payload AC3 audio as RTP packets (RFC 4184)</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-rtpac3pay.html">rtpac3pay</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-rtpamrdepay.html">rtpamrdepay</a></span><span class="refpurpose"> — Extracts AMR or AMR-WB audio from RTP packets (RFC 3267)</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-rtpamrdepay.html">rtpamrdepay</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-rtpamrpay.html">rtpamrpay</a></span><span class="refpurpose"> — Payload-encode AMR or AMR-WB audio into RTP packets (RFC 3267)</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-rtpamrpay.html">rtpamrpay</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-rtpbvdepay.html">rtpbvdepay</a></span><span class="refpurpose"> — Extracts BroadcomVoice audio from RTP packets (RFC 4298)</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-rtpbvdepay.html">rtpbvdepay</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-rtpbvpay.html">rtpbvpay</a></span><span class="refpurpose"> — Packetize BroadcomVoice audio streams into RTP packets (RFC 4298)</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-rtpbvpay.html">rtpbvpay</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-rtpL16depay.html">rtpL16depay</a></span><span class="refpurpose"> — Extracts raw audio from RTP packets</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-rtpL16depay.html">rtpL16depay</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-rtpL16pay.html">rtpL16pay</a></span><span class="refpurpose"> — Payload-encode Raw audio into RTP packets (RFC 3551)</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-rtpL16pay.html">rtpL16pay</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-rtpj2kpay.html">rtpj2kpay</a></span><span class="refpurpose"> — Payload-encodes JPEG 2000 pictures into RTP packets (RFC 5371)</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-rtpj2kpay.html">rtpj2kpay</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-rtpjpegpay.html">rtpjpegpay</a></span><span class="refpurpose"> — Payload-encodes JPEG pictures into RTP packets (RFC 2435)</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-rtpjpegpay.html">rtpjpegpay</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-rtpsbcpay.html">rtpsbcpay</a></span><span class="refpurpose"> — Payload SBC audio as RTP packets</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-rtpsbcpay.html">rtpsbcpay</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-rtspsrc.html">rtspsrc</a></span><span class="refpurpose"> — Receive data over the network via RTSP (RFC 2326)</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-rtspsrc.html">rtspsrc</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-rtpbin.html">rtpbin</a></span><span class="refpurpose"> — Real-Time Transport Protocol bin</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-rtpbin.html">rtpbin</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-rtpdtmfmux.html">rtpdtmfmux</a></span><span class="refpurpose"> — mixes RTP DTMF streams into other RTP streams</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-rtpdtmfmux.html">rtpdtmfmux</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-rtpdtmfsrc.html">rtpdtmfsrc</a></span><span class="refpurpose"> — Generates RTP DTMF packets</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-rtpdtmfsrc.html">rtpdtmfsrc</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-rtpjitterbuffer.html">rtpjitterbuffer</a></span><span class="refpurpose"> — A buffer that deals with network jitter and other transmission faults</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-rtpjitterbuffer.html">rtpjitterbuffer</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-rtpmux.html">rtpmux</a></span><span class="refpurpose"> — multiplex N rtp streams into one</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-rtpmux.html">rtpmux</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-rtpptdemux.html">rtpptdemux</a></span><span class="refpurpose"> — Parses codec streams transmitted in the same RTP session</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-rtpptdemux.html">rtpptdemux</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-rtpsession.html">rtpsession</a></span><span class="refpurpose"> — Implement an RTP session</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-rtpsession.html">rtpsession</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-rtpssrcdemux.html">rtpssrcdemux</a></span><span class="refpurpose"> — Splits RTP streams based on the SSRC</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-rtpssrcdemux.html">rtpssrcdemux</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-rtprtxsend.html">rtprtxsend</a></span><span class="refpurpose"> — Retransmit RTP packets when needed, according to RFC4588</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-rtprtxsend.html">rtprtxsend</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-rtprtxreceive.html">rtprtxreceive</a></span><span class="refpurpose"> — Receive retransmitted RTP packets according to RFC4588</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-rtprtxreceive.html">rtprtxreceive</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-sbcparse.html">sbcparse</a></span><span class="refpurpose"> — Parses an SBC bluetooth audio stream</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-sbcparse.html">sbcparse</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-scaletempo.html">scaletempo</a></span><span class="refpurpose"> — Sync audio tempo with playback rate</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-scaletempo.html">scaletempo</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-shagadelictv.html">shagadelictv</a></span><span class="refpurpose"> — Oh behave, ShagedelicTV makes images shagadelic!</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-shagadelictv.html">shagadelictv</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-shapewipe.html">shapewipe</a></span><span class="refpurpose"> — Adds a shape wipe transition to a video stream</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-shapewipe.html">shapewipe</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-shout2send.html">shout2send</a></span><span class="refpurpose"> — Sends data to an icecast server</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-shout2send.html">shout2send</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-smpte.html">smpte</a></span><span class="refpurpose"> — Apply the standard SMPTE transitions on video images</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-smpte.html">smpte</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-smptealpha.html">smptealpha</a></span><span class="refpurpose"> — Apply the standard SMPTE transitions as alpha on video images</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-smptealpha.html">smptealpha</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-souphttpsrc.html">souphttpsrc</a></span><span class="refpurpose"> — Receive data as a client over the network via HTTP using SOUP</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-souphttpsrc.html">souphttpsrc</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-spectrum.html">spectrum</a></span><span class="refpurpose"> — Run an FFT on the audio signal, output spectrum data</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-spectrum.html">spectrum</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-speexenc.html">speexenc</a></span><span class="refpurpose"> — Encodes audio in Speex format</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-speexenc.html">speexenc</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-speexdec.html">speexdec</a></span><span class="refpurpose"> — decode speex streams to audio</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-speexdec.html">speexdec</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-splitfilesrc.html">splitfilesrc</a></span><span class="refpurpose"> — Read a sequentially named set of files as if it was one large file</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-splitfilesrc.html">splitfilesrc</a></span><span class="refpurpose"></span> </dt> <dt> <span class="refentrytitle"><a href="gst-plugins-good-plugins-splitmuxsrc.html">splitmuxsrc</a></span><span class="refpurpose"> — Split Demuxer bin that recombines files created by @@ -463,79 +463,79 @@ the splitmuxsink element.</span> <span class="refentrytitle"><a href="gst-plugins-good-plugins-splitmuxsink.html">splitmuxsink</a></span><span class="refpurpose"> — Muxer wrapper for splitting output stream by size or time</span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-streaktv.html">streaktv</a></span><span class="refpurpose"> — StreakTV makes after images of moving objects</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-streaktv.html">streaktv</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-taginject.html">taginject</a></span><span class="refpurpose"> — inject metadata tags</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-taginject.html">taginject</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-udpsrc.html">udpsrc</a></span><span class="refpurpose"> — Receive data over the network via UDP</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-udpsrc.html">udpsrc</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-udpsink.html">udpsink</a></span><span class="refpurpose"> — Send data over the network via UDP</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-udpsink.html">udpsink</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-v4l2src.html">v4l2src</a></span><span class="refpurpose"> — Reads frames from a Video4Linux2 device</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-v4l2src.html">v4l2src</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-v4l2sink.html">v4l2sink</a></span><span class="refpurpose"> — Displays frames on a video4linux2 device</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-v4l2sink.html">v4l2sink</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-v4l2radio.html">v4l2radio</a></span><span class="refpurpose"> — Controls a Video4Linux2 radio device</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-v4l2radio.html">v4l2radio</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-vertigotv.html">vertigotv</a></span><span class="refpurpose"> — A loopback alpha blending effector with rotating and scaling</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-vertigotv.html">vertigotv</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-videobalance.html">videobalance</a></span><span class="refpurpose"> — Adjusts brightness, contrast, hue, saturation on a video stream</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-videobalance.html">videobalance</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-videobox.html">videobox</a></span><span class="refpurpose"> — Resizes a video by adding borders or cropping</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-videobox.html">videobox</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-videocrop.html">videocrop</a></span><span class="refpurpose"> — Crops video into a user-defined region</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-videocrop.html">videocrop</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-videoflip.html">videoflip</a></span><span class="refpurpose"> — Flips and rotates video</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-videoflip.html">videoflip</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-videomixer.html">videomixer</a></span><span class="refpurpose"> — Mix multiple video streams</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-videomixer.html">videomixer</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-vp8dec.html">vp8dec</a></span><span class="refpurpose"> — Decode VP8 video streams</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-vp8dec.html">vp8dec</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-vp8enc.html">vp8enc</a></span><span class="refpurpose"> — Encode VP8 video streams</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-vp8enc.html">vp8enc</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-warptv.html">warptv</a></span><span class="refpurpose"> — WarpTV does realtime goo'ing of the video input</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-warptv.html">warptv</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-wavenc.html">wavenc</a></span><span class="refpurpose"> — Encode raw audio into WAV</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-wavenc.html">wavenc</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-waveformsink.html">waveformsink</a></span><span class="refpurpose"> — WaveForm audio sink</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-waveformsink.html">waveformsink</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-wavpackdec.html">wavpackdec</a></span><span class="refpurpose"> — Decodes Wavpack audio data</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-wavpackdec.html">wavpackdec</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-wavpackenc.html">wavpackenc</a></span><span class="refpurpose"> — Encodes audio with the Wavpack lossless/lossy audio codec</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-wavpackenc.html">wavpackenc</a></span><span class="refpurpose"></span> </dt> <dt> <span class="refentrytitle"><a href="gst-plugins-good-plugins-wavpackparse.html">wavpackparse</a></span><span class="refpurpose"> — Wavpack parser</span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-wavparse.html">wavparse</a></span><span class="refpurpose"> — Parse a .wav file into raw audio</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-wavparse.html">wavparse</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-webmmux.html">webmmux</a></span><span class="refpurpose"> — Muxes video and audio streams into a WebM stream</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-webmmux.html">webmmux</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-ximagesrc.html">ximagesrc</a></span><span class="refpurpose"> — Creates a screenshot video stream</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-ximagesrc.html">ximagesrc</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-y4menc.html">y4menc</a></span><span class="refpurpose"> — Encodes a YUV frame into the yuv4mpeg format (mjpegtools)</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-y4menc.html">y4menc</a></span><span class="refpurpose"></span> </dt> </dl></div> </div> diff --git a/docs/plugins/html/gst-plugins-good-plugins-1.0.devhelp2 b/docs/plugins/html/gst-plugins-good-plugins-1.0.devhelp2 index 0b2add678..26c5a1266 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-1.0.devhelp2 +++ b/docs/plugins/html/gst-plugins-good-plugins-1.0.devhelp2 @@ -262,6 +262,10 @@ <keyword type="property" name="The “presentation-time†property" link="gst-plugins-good-plugins-3gppmux.html#Gst3GPPMux--presentation-time"/> <keyword type="property" name="The “streamable†property" link="gst-plugins-good-plugins-3gppmux.html#Gst3GPPMux--streamable"/> <keyword type="property" name="The “trak-timescale†property" link="gst-plugins-good-plugins-3gppmux.html#Gst3GPPMux--trak-timescale"/> + <keyword type="property" name="The “reserved-bytes-per-sec†property" link="gst-plugins-good-plugins-3gppmux.html#Gst3GPPMux--reserved-bytes-per-sec"/> + <keyword type="property" name="The “reserved-duration-remaining†property" link="gst-plugins-good-plugins-3gppmux.html#Gst3GPPMux--reserved-duration-remaining"/> + <keyword type="property" name="The “reserved-max-duration†property" link="gst-plugins-good-plugins-3gppmux.html#Gst3GPPMux--reserved-max-duration"/> + <keyword type="property" name="The “reserved-moov-update-period†property" link="gst-plugins-good-plugins-3gppmux.html#Gst3GPPMux--reserved-moov-update-period"/> <keyword type="struct" name="struct GstAacParse" link="gst-plugins-good-plugins-aacparse.html#GstAacParse-struct"/> <keyword type="struct" name="struct GstAASink" link="gst-plugins-good-plugins-aasink.html#GstAASink-struct"/> <keyword type="property" name="The “brightness†property" link="gst-plugins-good-plugins-aasink.html#GstAASink--brightness"/> @@ -502,6 +506,10 @@ <keyword type="property" name="The “presentation-time†property" link="gst-plugins-good-plugins-ismlmux.html#GstISMLMux--presentation-time"/> <keyword type="property" name="The “streamable†property" link="gst-plugins-good-plugins-ismlmux.html#GstISMLMux--streamable"/> <keyword type="property" name="The “trak-timescale†property" link="gst-plugins-good-plugins-ismlmux.html#GstISMLMux--trak-timescale"/> + <keyword type="property" name="The “reserved-bytes-per-sec†property" link="gst-plugins-good-plugins-ismlmux.html#GstISMLMux--reserved-bytes-per-sec"/> + <keyword type="property" name="The “reserved-duration-remaining†property" link="gst-plugins-good-plugins-ismlmux.html#GstISMLMux--reserved-duration-remaining"/> + <keyword type="property" name="The “reserved-max-duration†property" link="gst-plugins-good-plugins-ismlmux.html#GstISMLMux--reserved-max-duration"/> + <keyword type="property" name="The “reserved-moov-update-period†property" link="gst-plugins-good-plugins-ismlmux.html#GstISMLMux--reserved-moov-update-period"/> <keyword type="struct" name="struct GstJackAudioSrc" link="gst-plugins-good-plugins-jackaudiosrc.html#GstJackAudioSrc-struct"/> <keyword type="property" name="The “client†property" link="gst-plugins-good-plugins-jackaudiosrc.html#GstJackAudioSrc--client"/> <keyword type="property" name="The “connect†property" link="gst-plugins-good-plugins-jackaudiosrc.html#GstJackAudioSrc--connect"/> @@ -546,6 +554,10 @@ <keyword type="property" name="The “presentation-time†property" link="gst-plugins-good-plugins-mj2mux.html#GstMJ2Mux--presentation-time"/> <keyword type="property" name="The “streamable†property" link="gst-plugins-good-plugins-mj2mux.html#GstMJ2Mux--streamable"/> <keyword type="property" name="The “trak-timescale†property" link="gst-plugins-good-plugins-mj2mux.html#GstMJ2Mux--trak-timescale"/> + <keyword type="property" name="The “reserved-bytes-per-sec†property" link="gst-plugins-good-plugins-mj2mux.html#GstMJ2Mux--reserved-bytes-per-sec"/> + <keyword type="property" name="The “reserved-duration-remaining†property" link="gst-plugins-good-plugins-mj2mux.html#GstMJ2Mux--reserved-duration-remaining"/> + <keyword type="property" name="The “reserved-max-duration†property" link="gst-plugins-good-plugins-mj2mux.html#GstMJ2Mux--reserved-max-duration"/> + <keyword type="property" name="The “reserved-moov-update-period†property" link="gst-plugins-good-plugins-mj2mux.html#GstMJ2Mux--reserved-moov-update-period"/> <keyword type="struct" name="struct GstMonoscope" link="gst-plugins-good-plugins-monoscope.html#GstMonoscope"/> <keyword type="struct" name="struct GstMpegAudioParse" link="gst-plugins-good-plugins-mpegaudioparse.html#GstMpegAudioParse-struct"/> <keyword type="struct" name="GstMP4Mux" link="gst-plugins-good-plugins-mp4mux.html#GstMP4Mux-struct"/> @@ -558,6 +570,10 @@ <keyword type="property" name="The “presentation-time†property" link="gst-plugins-good-plugins-mp4mux.html#GstMP4Mux--presentation-time"/> <keyword type="property" name="The “streamable†property" link="gst-plugins-good-plugins-mp4mux.html#GstMP4Mux--streamable"/> <keyword type="property" name="The “trak-timescale†property" link="gst-plugins-good-plugins-mp4mux.html#GstMP4Mux--trak-timescale"/> + <keyword type="property" name="The “reserved-bytes-per-sec†property" link="gst-plugins-good-plugins-mp4mux.html#GstMP4Mux--reserved-bytes-per-sec"/> + <keyword type="property" name="The “reserved-duration-remaining†property" link="gst-plugins-good-plugins-mp4mux.html#GstMP4Mux--reserved-duration-remaining"/> + <keyword type="property" name="The “reserved-max-duration†property" link="gst-plugins-good-plugins-mp4mux.html#GstMP4Mux--reserved-max-duration"/> + <keyword type="property" name="The “reserved-moov-update-period†property" link="gst-plugins-good-plugins-mp4mux.html#GstMP4Mux--reserved-moov-update-period"/> <keyword type="struct" name="struct GstMuLawDec" link="gst-plugins-good-plugins-mulawdec.html#GstMuLawDec-struct"/> <keyword type="struct" name="struct GstMuLawEnc" link="gst-plugins-good-plugins-mulawenc.html#GstMuLawEnc-struct"/> <keyword type="struct" name="struct GstMultiFileSink" link="gst-plugins-good-plugins-multifilesink.html#GstMultiFileSink-struct"/> @@ -680,6 +696,10 @@ <keyword type="property" name="The “presentation-time†property" link="gst-plugins-good-plugins-qtmux.html#GstQTMux--presentation-time"/> <keyword type="property" name="The “streamable†property" link="gst-plugins-good-plugins-qtmux.html#GstQTMux--streamable"/> <keyword type="property" name="The “trak-timescale†property" link="gst-plugins-good-plugins-qtmux.html#GstQTMux--trak-timescale"/> + <keyword type="property" name="The “reserved-bytes-per-sec†property" link="gst-plugins-good-plugins-qtmux.html#GstQTMux--reserved-bytes-per-sec"/> + <keyword type="property" name="The “reserved-duration-remaining†property" link="gst-plugins-good-plugins-qtmux.html#GstQTMux--reserved-duration-remaining"/> + <keyword type="property" name="The “reserved-max-duration†property" link="gst-plugins-good-plugins-qtmux.html#GstQTMux--reserved-max-duration"/> + <keyword type="property" name="The “reserved-moov-update-period†property" link="gst-plugins-good-plugins-qtmux.html#GstQTMux--reserved-moov-update-period"/> <keyword type="function" name="gst_qt_moov_recover_get_type ()" link="gst-plugins-good-plugins-qtmoovrecover.html#gst-qt-moov-recover-get-type"/> <keyword type="function" name="gst_qt_moov_recover_register ()" link="gst-plugins-good-plugins-qtmoovrecover.html#gst-qt-moov-recover-register"/> <keyword type="struct" name="struct GstQTMoovRecover" link="gst-plugins-good-plugins-qtmoovrecover.html#GstQTMoovRecover-struct"/> @@ -771,6 +791,7 @@ <keyword type="property" name="The “tls-database†property" link="gst-plugins-good-plugins-rtspsrc.html#GstRTSPSrc--tls-database"/> <keyword type="property" name="The “tls-validation-flags†property" link="gst-plugins-good-plugins-rtspsrc.html#GstRTSPSrc--tls-validation-flags"/> <keyword type="property" name="The “do-retransmission†property" link="gst-plugins-good-plugins-rtspsrc.html#GstRTSPSrc--do-retransmission"/> + <keyword type="property" name="The “tls-interaction†property" link="gst-plugins-good-plugins-rtspsrc.html#GstRTSPSrc--tls-interaction"/> <keyword type="signal" name="The “handle-request†signal" link="gst-plugins-good-plugins-rtspsrc.html#GstRTSPSrc-handle-request"/> <keyword type="signal" name="The “on-sdp†signal" link="gst-plugins-good-plugins-rtspsrc.html#GstRTSPSrc-on-sdp"/> <keyword type="signal" name="The “select-stream†signal" link="gst-plugins-good-plugins-rtspsrc.html#GstRTSPSrc-select-stream"/> @@ -793,6 +814,7 @@ <keyword type="property" name="The “do-sync-event†property" link="gst-plugins-good-plugins-rtpbin.html#GstRtpBin--do-sync-event"/> <keyword type="property" name="The “do-retransmission†property" link="gst-plugins-good-plugins-rtpbin.html#GstRtpBin--do-retransmission"/> <keyword type="property" name="The “rtp-profile†property" link="gst-plugins-good-plugins-rtpbin.html#GstRtpBin--rtp-profile"/> + <keyword type="property" name="The “ntp-time-source†property" link="gst-plugins-good-plugins-rtpbin.html#GstRtpBin--ntp-time-source"/> <keyword type="signal" name="The “clear-pt-map†signal" link="gst-plugins-good-plugins-rtpbin.html#GstRtpBin-clear-pt-map"/> <keyword type="signal" name="The “get-internal-session†signal" link="gst-plugins-good-plugins-rtpbin.html#GstRtpBin-get-internal-session"/> <keyword type="signal" name="The “on-bye-ssrc†signal" link="gst-plugins-good-plugins-rtpbin.html#GstRtpBin-on-bye-ssrc"/> @@ -872,6 +894,7 @@ <keyword type="property" name="The “probation†property" link="gst-plugins-good-plugins-rtpsession.html#GstRtpSession--probation"/> <keyword type="property" name="The “stats†property" link="gst-plugins-good-plugins-rtpsession.html#GstRtpSession--stats"/> <keyword type="property" name="The “rtp-profile†property" link="gst-plugins-good-plugins-rtpsession.html#GstRtpSession--rtp-profile"/> + <keyword type="property" name="The “ntp-time-source†property" link="gst-plugins-good-plugins-rtpsession.html#GstRtpSession--ntp-time-source"/> <keyword type="signal" name="The “clear-pt-map†signal" link="gst-plugins-good-plugins-rtpsession.html#GstRtpSession-clear-pt-map"/> <keyword type="signal" name="The “on-bye-ssrc†signal" link="gst-plugins-good-plugins-rtpsession.html#GstRtpSession-on-bye-ssrc"/> <keyword type="signal" name="The “on-bye-timeout†signal" link="gst-plugins-good-plugins-rtpsession.html#GstRtpSession-on-bye-timeout"/> @@ -963,6 +986,7 @@ <keyword type="property" name="The “ssl-ca-file†property" link="gst-plugins-good-plugins-souphttpsrc.html#GstSoupHTTPSrc--ssl-ca-file"/> <keyword type="property" name="The “ssl-strict†property" link="gst-plugins-good-plugins-souphttpsrc.html#GstSoupHTTPSrc--ssl-strict"/> <keyword type="property" name="The “ssl-use-system-ca-file†property" link="gst-plugins-good-plugins-souphttpsrc.html#GstSoupHTTPSrc--ssl-use-system-ca-file"/> + <keyword type="property" name="The “tls-database†property" link="gst-plugins-good-plugins-souphttpsrc.html#GstSoupHTTPSrc--tls-database"/> <keyword type="struct" name="struct GstSpectrum" link="gst-plugins-good-plugins-spectrum.html#GstSpectrum-struct"/> <keyword type="property" name="The “bands†property" link="gst-plugins-good-plugins-spectrum.html#GstSpectrum--bands"/> <keyword type="property" name="The “interval†property" link="gst-plugins-good-plugins-spectrum.html#GstSpectrum--interval"/> diff --git a/docs/plugins/html/gst-plugins-good-plugins-3gppmux.html b/docs/plugins/html/gst-plugins-good-plugins-3gppmux.html index 3165cf33d..5ac5608ff 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-3gppmux.html +++ b/docs/plugins/html/gst-plugins-good-plugins-3gppmux.html @@ -90,6 +90,26 @@ <td class="property_name"><a class="link" href="gst-plugins-good-plugins-3gppmux.html#Gst3GPPMux--trak-timescale" title="The “trak-timescale†property">trak-timescale</a></td> <td class="property_flags">Read / Write / Construct</td> </tr> +<tr> +<td class="property_type"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a></td> +<td class="property_name"><a class="link" href="gst-plugins-good-plugins-3gppmux.html#Gst3GPPMux--reserved-bytes-per-sec" title="The “reserved-bytes-per-sec†property">reserved-bytes-per-sec</a></td> +<td class="property_flags">Read / Write / Construct</td> +</tr> +<tr> +<td class="property_type"><span class="type">guint64</span></td> +<td class="property_name"><a class="link" href="gst-plugins-good-plugins-3gppmux.html#Gst3GPPMux--reserved-duration-remaining" title="The “reserved-duration-remaining†property">reserved-duration-remaining</a></td> +<td class="property_flags">Read</td> +</tr> +<tr> +<td class="property_type"><span class="type">guint64</span></td> +<td class="property_name"><a class="link" href="gst-plugins-good-plugins-3gppmux.html#Gst3GPPMux--reserved-max-duration" title="The “reserved-max-duration†property">reserved-max-duration</a></td> +<td class="property_flags">Read / Write</td> +</tr> +<tr> +<td class="property_type"><span class="type">guint64</span></td> +<td class="property_name"><a class="link" href="gst-plugins-good-plugins-3gppmux.html#Gst3GPPMux--reserved-moov-update-period" title="The “reserved-moov-update-period†property">reserved-moov-update-period</a></td> +<td class="property_flags">Read / Write</td> +</tr> </tbody> </table></div> </div> @@ -170,7 +190,7 @@ and muxes it into an 3gp file. <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="id-1.2.2.8.8.1.1"></a><h3>Element Information</h3> +<a name="id-1.2.2.8.9.1"></a><h3>Element Information</h3> <div class="variablelist"><table border="0" class="variablelist"> <colgroup> <col align="left" valign="top"> @@ -196,7 +216,7 @@ and muxes it into an 3gp file. </div> <hr> <div class="refsect2"> -<a name="id-1.2.2.8.8.1.2"></a><h3>Element Pads</h3> +<a name="id-1.2.2.8.9.2"></a><h3>Element Pads</h3> <div class="variablelist"><table border="0" class="variablelist"> <colgroup> <col align="left" valign="top"> @@ -231,6 +251,10 @@ and muxes it into an 3gp file. <td><p><span class="term"></span></p></td> <td> audio/mpeg, mpegversion=(int)4, stream-format=(string)raw, channels=(int)[ 1, 8 ], rate=(int)[ 1, 2147483647 ]</td> </tr> +<tr> +<td><p><span class="term"></span></p></td> +<td> audio/x-ac3, channels=(int)[ 1, 6 ], rate=(int)[ 1, 2147483647 ]</td> +</tr> </tbody> </table></div> <div class="variablelist"><table border="0" class="variablelist"> @@ -319,8 +343,6 @@ and muxes it into an 3gp file. </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-3gppmux.functions_details"></a><h2>Functions</h2> @@ -331,8 +353,6 @@ and muxes it into an 3gp file. <div class="refsect2"> <a name="Gst3GPPMux-struct"></a><h3>Gst3GPPMux</h3> <pre class="programlisting">typedef struct _Gst3GPPMux Gst3GPPMux;</pre> -<p> -</p> </div> </div> <div class="refsect1"> @@ -409,6 +429,39 @@ and muxes it into an 3gp file. <p>Flags: Read / Write / Construct</p> <p>Default value: 0</p> </div> +<hr> +<div class="refsect2"> +<a name="Gst3GPPMux--reserved-bytes-per-sec"></a><h3>The <code class="literal">“reserved-bytes-per-secâ€</code> property</h3> +<pre class="programlisting"> “reserved-bytes-per-sec†<a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a></pre> +<p>Multiplier for converting reserved-max-duration into bytes of header to reserve, per second, per track.</p> +<p>Flags: Read / Write / Construct</p> +<p>Allowed values: <= 10000</p> +<p>Default value: 550</p> +</div> +<hr> +<div class="refsect2"> +<a name="Gst3GPPMux--reserved-duration-remaining"></a><h3>The <code class="literal">“reserved-duration-remainingâ€</code> property</h3> +<pre class="programlisting"> “reserved-duration-remaining†<span class="type">guint64</span></pre> +<p>Reports the approximate amount of remaining moov header space reserved using reserved-max-duration.</p> +<p>Flags: Read</p> +<p>Default value: 0</p> +</div> +<hr> +<div class="refsect2"> +<a name="Gst3GPPMux--reserved-max-duration"></a><h3>The <code class="literal">“reserved-max-durationâ€</code> property</h3> +<pre class="programlisting"> “reserved-max-duration†<span class="type">guint64</span></pre> +<p>When set to a value > 0, reserves space for index tables at the beginning of the file.</p> +<p>Flags: Read / Write</p> +<p>Default value: 18446744073709551615</p> +</div> +<hr> +<div class="refsect2"> +<a name="Gst3GPPMux--reserved-moov-update-period"></a><h3>The <code class="literal">“reserved-moov-update-periodâ€</code> property</h3> +<pre class="programlisting"> “reserved-moov-update-period†<span class="type">guint64</span></pre> +<p>When used with reserved-max-duration, periodically updates the index tables with information muxed so far.</p> +<p>Flags: Read / Write</p> +<p>Default value: 18446744073709551615</p> +</div> </div> </div> <div class="footer"> diff --git a/docs/plugins/html/gst-plugins-good-plugins-GstVideoMixerPad.html b/docs/plugins/html/gst-plugins-good-plugins-GstVideoMixerPad.html index 51812ec5f..d8b7cb6a5 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-GstVideoMixerPad.html +++ b/docs/plugins/html/gst-plugins-good-plugins-GstVideoMixerPad.html @@ -32,8 +32,6 @@ </tr></table></div> <div class="refsect1"> <a name="gst-plugins-good-plugins-GstVideoMixerPad.description"></a><h2>Description</h2> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-GstVideoMixerPad.functions_details"></a><h2>Functions</h2> diff --git a/docs/plugins/html/gst-plugins-good-plugins-aacparse.html b/docs/plugins/html/gst-plugins-good-plugins-aacparse.html index edb1fb9d9..b7081cd79 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-aacparse.html +++ b/docs/plugins/html/gst-plugins-good-plugins-aacparse.html @@ -155,8 +155,6 @@ can also estimate playback position and clip duration.</p> </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-aacparse.functions_details"></a><h2>Functions</h2> diff --git a/docs/plugins/html/gst-plugins-good-plugins-aasink.html b/docs/plugins/html/gst-plugins-good-plugins-aasink.html index 3a7fafc23..fddeda7e9 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-aasink.html +++ b/docs/plugins/html/gst-plugins-good-plugins-aasink.html @@ -30,7 +30,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-aasink.top_of_page"></a>aasink</span></h2> -<p>aasink — An ASCII art videosink</p> +<p>aasink</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -113,12 +113,12 @@ <tr> <td class="signal_type"><span class="returnvalue">void</span></td> <td class="signal_name"><a class="link" href="gst-plugins-good-plugins-aasink.html#GstAASink-frame-displayed" title="The “frame-displayed†signal">frame-displayed</a></td> -<td class="signal_flags">Run Last</td> +<td class="signal_flags"><a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></td> </tr> <tr> <td class="signal_type"><span class="returnvalue">void</span></td> <td class="signal_name"><a class="link" href="gst-plugins-good-plugins-aasink.html#GstAASink-have-size" title="The “have-size†signal">have-size</a></td> -<td class="signal_flags">Run Last</td> +<td class="signal_flags"><a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></td> </tr> </tbody> </table></div> @@ -205,8 +205,6 @@ </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-aasink.functions_details"></a><h2>Functions</h2> @@ -217,8 +215,6 @@ <div class="refsect2"> <a name="GstAASink-struct"></a><h3>struct GstAASink</h3> <pre class="programlisting">struct GstAASink;</pre> -<p> -</p> </div> </div> <div class="refsect1"> @@ -319,31 +315,7 @@ <pre class="programlisting"><span class="returnvalue">void</span> user_function (<a class="link" href="gst-plugins-good-plugins-aasink.html#GstAASink"><span class="type">GstAASink</span></a> *gstaasink, <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data)</pre> -<p> -</p> -<div class="refsect3"> -<a name="id-1.2.4.12.2.5"></a><h4>Parameters</h4> -<div class="informaltable"><table width="100%" border="0"> -<colgroup> -<col width="150px" class="parameters_name"> -<col class="parameters_description"> -<col width="200px" class="parameters_annotations"> -</colgroup> -<tbody> -<tr> -<td class="parameter_name"><p>gstaasink</p></td> -<td class="parameter_description"><p>the object which received the signal.</p></td> -<td class="parameter_annotations"> </td> -</tr> -<tr> -<td class="parameter_name"><p>user_data</p></td> -<td class="parameter_description"><p>user data set when the signal handler was connected.</p></td> -<td class="parameter_annotations"> </td> -</tr> -</tbody> -</table></div> -</div> -<p>Flags: Run Last</p> +<p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></p> </div> <hr> <div class="refsect2"> @@ -353,31 +325,7 @@ user_function (<a class="link" href="gst-plugins-good-plugins-aasink.html#GstAAS <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> arg1, <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> arg2, <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data)</pre> -<p> -</p> -<div class="refsect3"> -<a name="id-1.2.4.12.3.5"></a><h4>Parameters</h4> -<div class="informaltable"><table width="100%" border="0"> -<colgroup> -<col width="150px" class="parameters_name"> -<col class="parameters_description"> -<col width="200px" class="parameters_annotations"> -</colgroup> -<tbody> -<tr> -<td class="parameter_name"><p>gstaasink</p></td> -<td class="parameter_description"><p>the object which received the signal.</p></td> -<td class="parameter_annotations"> </td> -</tr> -<tr> -<td class="parameter_name"><p>user_data</p></td> -<td class="parameter_description"><p>user data set when the signal handler was connected.</p></td> -<td class="parameter_annotations"> </td> -</tr> -</tbody> -</table></div> -</div> -<p>Flags: Run Last</p> +<p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></p> </div> </div> </div> diff --git a/docs/plugins/html/gst-plugins-good-plugins-ac3parse.html b/docs/plugins/html/gst-plugins-good-plugins-ac3parse.html index 90cba4e19..8614d2e3c 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-ac3parse.html +++ b/docs/plugins/html/gst-plugins-good-plugins-ac3parse.html @@ -168,8 +168,6 @@ </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-ac3parse.functions_details"></a><h2>Functions</h2> diff --git a/docs/plugins/html/gst-plugins-good-plugins-agingtv.html b/docs/plugins/html/gst-plugins-good-plugins-agingtv.html index 10bf678dd..a475283b9 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-agingtv.html +++ b/docs/plugins/html/gst-plugins-good-plugins-agingtv.html @@ -29,7 +29,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-agingtv.top_of_page"></a>agingtv</span></h2> -<p>agingtv — AgingTV adds age to video input using scratches and dust</p> +<p>agingtv</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -187,8 +187,6 @@ scratches and dust.</p> </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-agingtv.functions_details"></a><h2>Functions</h2> @@ -199,8 +197,6 @@ scratches and dust.</p> <div class="refsect2"> <a name="GstAgingTV-struct"></a><h3>struct GstAgingTV</h3> <pre class="programlisting">struct GstAgingTV;</pre> -<p> -</p> </div> </div> <div class="refsect1"> diff --git a/docs/plugins/html/gst-plugins-good-plugins-alawdec.html b/docs/plugins/html/gst-plugins-good-plugins-alawdec.html index a1f276772..bdbe0e715 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-alawdec.html +++ b/docs/plugins/html/gst-plugins-good-plugins-alawdec.html @@ -28,7 +28,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-alawdec.top_of_page"></a>alawdec</span></h2> -<p>alawdec — Convert 8bit A law to 16bit PCM</p> +<p>alawdec</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -60,7 +60,7 @@ <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="id-1.2.9.6.2.1.1"></a><h3>Element Information</h3> +<a name="id-1.2.9.6.3.1"></a><h3>Element Information</h3> <div class="variablelist"><table border="0" class="variablelist"> <colgroup> <col align="left" valign="top"> @@ -86,7 +86,7 @@ </div> <hr> <div class="refsect2"> -<a name="id-1.2.9.6.2.1.2"></a><h3>Element Pads</h3> +<a name="id-1.2.9.6.3.2"></a><h3>Element Pads</h3> <div class="variablelist"><table border="0" class="variablelist"> <colgroup> <col align="left" valign="top"> @@ -137,8 +137,6 @@ </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-alawdec.functions_details"></a><h2>Functions</h2> @@ -149,8 +147,6 @@ <div class="refsect2"> <a name="GstALawDec-struct"></a><h3>struct GstALawDec</h3> <pre class="programlisting">struct GstALawDec;</pre> -<p> -</p> </div> </div> </div> diff --git a/docs/plugins/html/gst-plugins-good-plugins-alawenc.html b/docs/plugins/html/gst-plugins-good-plugins-alawenc.html index f6d94bfa6..b379b0a5c 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-alawenc.html +++ b/docs/plugins/html/gst-plugins-good-plugins-alawenc.html @@ -28,7 +28,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-alawenc.top_of_page"></a>alawenc</span></h2> -<p>alawenc — Convert 16bit PCM to 8bit A law</p> +<p>alawenc</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -60,7 +60,7 @@ <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="id-1.2.10.7.2.1.1"></a><h3>Element Information</h3> +<a name="id-1.2.10.7.3.1"></a><h3>Element Information</h3> <div class="variablelist"><table border="0" class="variablelist"> <colgroup> <col align="left" valign="top"> @@ -86,7 +86,7 @@ </div> <hr> <div class="refsect2"> -<a name="id-1.2.10.7.2.1.2"></a><h3>Element Pads</h3> +<a name="id-1.2.10.7.3.2"></a><h3>Element Pads</h3> <div class="variablelist"><table border="0" class="variablelist"> <colgroup> <col align="left" valign="top"> @@ -137,8 +137,6 @@ </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-alawenc.functions_details"></a><h2>Functions</h2> @@ -149,8 +147,6 @@ <div class="refsect2"> <a name="GstALawEnc-struct"></a><h3>struct GstALawEnc</h3> <pre class="programlisting">struct GstALawEnc;</pre> -<p> -</p> </div> </div> </div> diff --git a/docs/plugins/html/gst-plugins-good-plugins-alpha.html b/docs/plugins/html/gst-plugins-good-plugins-alpha.html index 5291a1acc..23ad8eeaf 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-alpha.html +++ b/docs/plugins/html/gst-plugins-good-plugins-alpha.html @@ -29,7 +29,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-alpha.top_of_page"></a>alpha</span></h2> -<p>alpha — Adds an alpha channel to video - uniform or via chroma-keying</p> +<p>alpha</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -153,7 +153,7 @@ a snow video stream.</p> <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="id-1.2.7.7.5.1.1"></a><h3>Element Information</h3> +<a name="id-1.2.7.7.6.1"></a><h3>Element Information</h3> <div class="variablelist"><table border="0" class="variablelist"> <colgroup> <col align="left" valign="top"> @@ -181,7 +181,7 @@ Jan Schmidt <thaytan@noraisin.net></td> </div> <hr> <div class="refsect2"> -<a name="id-1.2.7.7.5.1.2"></a><h3>Element Pads</h3> +<a name="id-1.2.7.7.6.2"></a><h3>Element Pads</h3> <div class="variablelist"><table border="0" class="variablelist"> <colgroup> <col align="left" valign="top"> @@ -232,8 +232,6 @@ Jan Schmidt <thaytan@noraisin.net></td> </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-alpha.functions_details"></a><h2>Functions</h2> @@ -244,8 +242,6 @@ Jan Schmidt <thaytan@noraisin.net></td> <div class="refsect2"> <a name="GstAlpha-struct"></a><h3>struct GstAlpha</h3> <pre class="programlisting">struct GstAlpha;</pre> -<p> -</p> </div> <hr> <div class="refsect2"> diff --git a/docs/plugins/html/gst-plugins-good-plugins-alphacolor.html b/docs/plugins/html/gst-plugins-good-plugins-alphacolor.html index 35917e233..4c6db646d 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-alphacolor.html +++ b/docs/plugins/html/gst-plugins-good-plugins-alphacolor.html @@ -28,7 +28,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-alphacolor.top_of_page"></a>alphacolor</span></h2> -<p>alphacolor — ARGB from/to AYUV colorspace conversion preserving the alpha channel</p> +<p>alphacolor</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -75,10 +75,11 @@ alpha channel.</p> </table> </div> +<p></p> <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="id-1.2.8.6.5.1.1"></a><h3>Element Information</h3> +<a name="id-1.2.8.6.6.1"></a><h3>Element Information</h3> <div class="variablelist"><table border="0" class="variablelist"> <colgroup> <col align="left" valign="top"> @@ -104,7 +105,7 @@ alpha channel.</p> </div> <hr> <div class="refsect2"> -<a name="id-1.2.8.6.5.1.2"></a><h3>Element Pads</h3> +<a name="id-1.2.8.6.6.2"></a><h3>Element Pads</h3> <div class="variablelist"><table border="0" class="variablelist"> <colgroup> <col align="left" valign="top"> @@ -155,8 +156,6 @@ alpha channel.</p> </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-alphacolor.functions_details"></a><h2>Functions</h2> @@ -167,8 +166,6 @@ alpha channel.</p> <div class="refsect2"> <a name="GstAlphaColor-struct"></a><h3>struct GstAlphaColor</h3> <pre class="programlisting">struct GstAlphaColor;</pre> -<p> -</p> </div> </div> </div> diff --git a/docs/plugins/html/gst-plugins-good-plugins-amrparse.html b/docs/plugins/html/gst-plugins-good-plugins-amrparse.html index 31ca2da4b..1fa19d417 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-amrparse.html +++ b/docs/plugins/html/gst-plugins-good-plugins-amrparse.html @@ -161,8 +161,6 @@ formats.</p> </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-amrparse.functions_details"></a><h2>Functions</h2> diff --git a/docs/plugins/html/gst-plugins-good-plugins-apedemux.html b/docs/plugins/html/gst-plugins-good-plugins-apedemux.html index 85cf11a09..db77d889d 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-apedemux.html +++ b/docs/plugins/html/gst-plugins-good-plugins-apedemux.html @@ -28,7 +28,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-apedemux.top_of_page"></a>apedemux</span></h2> -<p>apedemux — Read and output APE tags while demuxing the contents</p> +<p>apedemux</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -163,8 +163,6 @@ the appropriate mime type set on buffers produced from apedemux. </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-apedemux.functions_details"></a><h2>Functions</h2> @@ -175,8 +173,6 @@ the appropriate mime type set on buffers produced from apedemux. <div class="refsect2"> <a name="GstApeDemux-struct"></a><h3>struct GstApeDemux</h3> <pre class="programlisting">struct GstApeDemux;</pre> -<p> -</p> </div> </div> </div> diff --git a/docs/plugins/html/gst-plugins-good-plugins-apev2mux.html b/docs/plugins/html/gst-plugins-good-plugins-apev2mux.html index f14f7395a..bd5dc103c 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-apev2mux.html +++ b/docs/plugins/html/gst-plugins-good-plugins-apev2mux.html @@ -29,7 +29,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-apev2mux.top_of_page"></a>apev2mux</span></h2> -<p>apev2mux — Adds an APEv2 header to the beginning of files using taglib</p> +<p>apev2mux</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -144,8 +144,6 @@ GstApev2Mux implements </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-apev2mux.functions_details"></a><h2>Functions</h2> @@ -156,8 +154,6 @@ GstApev2Mux implements <div class="refsect2"> <a name="GstApev2Mux-struct"></a><h3>struct GstApev2Mux</h3> <pre class="programlisting">struct GstApev2Mux;</pre> -<p> -</p> </div> </div> </div> diff --git a/docs/plugins/html/gst-plugins-good-plugins-aspectratiocrop.html b/docs/plugins/html/gst-plugins-good-plugins-aspectratiocrop.html index 1446af5a0..b6c9d968b 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-aspectratiocrop.html +++ b/docs/plugins/html/gst-plugins-good-plugins-aspectratiocrop.html @@ -30,7 +30,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-aspectratiocrop.top_of_page"></a>aspectratiocrop</span></h2> -<p>aspectratiocrop — Crops video into a user-defined aspect-ratio</p> +<p>aspectratiocrop</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -177,8 +177,6 @@ in pass-through mode.</p> </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-aspectratiocrop.functions_details"></a><h2>Functions</h2> @@ -189,8 +187,6 @@ in pass-through mode.</p> <div class="refsect2"> <a name="GstAspectRatioCrop-struct"></a><h3>struct GstAspectRatioCrop</h3> <pre class="programlisting">struct GstAspectRatioCrop;</pre> -<p> -</p> </div> </div> <div class="refsect1"> diff --git a/docs/plugins/html/gst-plugins-good-plugins-audioamplify.html b/docs/plugins/html/gst-plugins-good-plugins-audioamplify.html index 4ce0d7e5f..d56b6c734 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-audioamplify.html +++ b/docs/plugins/html/gst-plugins-good-plugins-audioamplify.html @@ -29,7 +29,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-audioamplify.top_of_page"></a>audioamplify</span></h2> -<p>audioamplify — Amplifies an audio stream by a given factor</p> +<p>audioamplify</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -181,8 +181,6 @@ gst<span class="gtkdoc opt">-</span>launch<span class="gtkdoc opt">-</span><span </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-audioamplify.functions_details"></a><h2>Functions</h2> @@ -193,8 +191,6 @@ gst<span class="gtkdoc opt">-</span>launch<span class="gtkdoc opt">-</span><span <div class="refsect2"> <a name="GstAudioAmplify-struct"></a><h3>struct GstAudioAmplify</h3> <pre class="programlisting">struct GstAudioAmplify;</pre> -<p> -</p> </div> </div> <div class="refsect1"> diff --git a/docs/plugins/html/gst-plugins-good-plugins-audiochebband.html b/docs/plugins/html/gst-plugins-good-plugins-audiochebband.html index f577e0a2c..834cfda6d 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-audiochebband.html +++ b/docs/plugins/html/gst-plugins-good-plugins-audiochebband.html @@ -29,7 +29,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-audiochebband.top_of_page"></a>audiochebband</span></h2> -<p>audiochebband — Chebyshev band pass and band reject filter</p> +<p>audiochebband</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -215,8 +215,6 @@ gst<span class="gtkdoc opt">-</span>launch<span class="gtkdoc opt">-</span><span </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-audiochebband.functions_details"></a><h2>Functions</h2> @@ -227,8 +225,6 @@ gst<span class="gtkdoc opt">-</span>launch<span class="gtkdoc opt">-</span><span <div class="refsect2"> <a name="GstAudioChebBand-struct"></a><h3>struct GstAudioChebBand</h3> <pre class="programlisting">struct GstAudioChebBand;</pre> -<p> -</p> </div> </div> <div class="refsect1"> diff --git a/docs/plugins/html/gst-plugins-good-plugins-audiocheblimit.html b/docs/plugins/html/gst-plugins-good-plugins-audiocheblimit.html index eb9260467..86ffd5f6f 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-audiocheblimit.html +++ b/docs/plugins/html/gst-plugins-good-plugins-audiocheblimit.html @@ -29,7 +29,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-audiocheblimit.top_of_page"></a>audiocheblimit</span></h2> -<p>audiocheblimit — Chebyshev low pass and high pass filter</p> +<p>audiocheblimit</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -210,8 +210,6 @@ gst<span class="gtkdoc opt">-</span>launch<span class="gtkdoc opt">-</span><span </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-audiocheblimit.functions_details"></a><h2>Functions</h2> @@ -222,8 +220,6 @@ gst<span class="gtkdoc opt">-</span>launch<span class="gtkdoc opt">-</span><span <div class="refsect2"> <a name="GstAudioChebLimit-struct"></a><h3>struct GstAudioChebLimit</h3> <pre class="programlisting">struct GstAudioChebLimit;</pre> -<p> -</p> </div> </div> <div class="refsect1"> diff --git a/docs/plugins/html/gst-plugins-good-plugins-audiodynamic.html b/docs/plugins/html/gst-plugins-good-plugins-audiodynamic.html index ca66e803b..9adb1e599 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-audiodynamic.html +++ b/docs/plugins/html/gst-plugins-good-plugins-audiodynamic.html @@ -29,7 +29,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-audiodynamic.top_of_page"></a>audiodynamic</span></h2> -<p>audiodynamic — Compressor and Expander</p> +<p>audiodynamic</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -193,8 +193,6 @@ gst<span class="gtkdoc opt">-</span>launch<span class="gtkdoc opt">-</span><span </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-audiodynamic.functions_details"></a><h2>Functions</h2> @@ -205,8 +203,6 @@ gst<span class="gtkdoc opt">-</span>launch<span class="gtkdoc opt">-</span><span <div class="refsect2"> <a name="GstAudioDynamic-struct"></a><h3>struct GstAudioDynamic</h3> <pre class="programlisting">struct GstAudioDynamic;</pre> -<p> -</p> </div> </div> <div class="refsect1"> diff --git a/docs/plugins/html/gst-plugins-good-plugins-audioecho.html b/docs/plugins/html/gst-plugins-good-plugins-audioecho.html index e9d55c242..ecf5af412 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-audioecho.html +++ b/docs/plugins/html/gst-plugins-good-plugins-audioecho.html @@ -29,7 +29,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-audioecho.top_of_page"></a>audioecho</span></h2> -<p>audioecho — Adds an echo or reverb effect to an audio stream</p> +<p>audioecho</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -195,8 +195,6 @@ gst<span class="gtkdoc opt">-</span>launch<span class="gtkdoc opt">-</span><span </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-audioecho.functions_details"></a><h2>Functions</h2> @@ -207,8 +205,6 @@ gst<span class="gtkdoc opt">-</span>launch<span class="gtkdoc opt">-</span><span <div class="refsect2"> <a name="GstAudioEcho-struct"></a><h3>struct GstAudioEcho</h3> <pre class="programlisting">struct GstAudioEcho;</pre> -<p> -</p> </div> </div> <div class="refsect1"> diff --git a/docs/plugins/html/gst-plugins-good-plugins-audiofirfilter.html b/docs/plugins/html/gst-plugins-good-plugins-audiofirfilter.html index 231b2f7b0..e0c63280d 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-audiofirfilter.html +++ b/docs/plugins/html/gst-plugins-good-plugins-audiofirfilter.html @@ -30,7 +30,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-audiofirfilter.top_of_page"></a>audiofirfilter</span></h2> -<p>audiofirfilter — Generic audio FIR filter with custom filter kernel</p> +<p>audiofirfilter</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -68,7 +68,7 @@ <tbody><tr> <td class="signal_type"><span class="returnvalue">void</span></td> <td class="signal_name"><a class="link" href="gst-plugins-good-plugins-audiofirfilter.html#GstAudioFIRFilter-rate-changed" title="The “rate-changed†signal">rate-changed</a></td> -<td class="signal_flags">Run Last</td> +<td class="signal_flags"><a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></td> </tr></tbody> </table></div> </div> @@ -533,8 +533,6 @@ gint </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-audiofirfilter.functions_details"></a><h2>Functions</h2> @@ -603,7 +601,7 @@ stop until the event is handled.</p> </tbody> </table></div> </div> -<p>Flags: Run Last</p> +<p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></p> </div> </div> </div> diff --git a/docs/plugins/html/gst-plugins-good-plugins-audioiirfilter.html b/docs/plugins/html/gst-plugins-good-plugins-audioiirfilter.html index de478c0b8..23053dcb6 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-audioiirfilter.html +++ b/docs/plugins/html/gst-plugins-good-plugins-audioiirfilter.html @@ -30,7 +30,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-audioiirfilter.top_of_page"></a>audioiirfilter</span></h2> -<p>audioiirfilter — Generic audio IIR filter with custom filter kernel</p> +<p>audioiirfilter</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -69,7 +69,7 @@ <tbody><tr> <td class="signal_type"><span class="returnvalue">void</span></td> <td class="signal_name"><a class="link" href="gst-plugins-good-plugins-audioiirfilter.html#GstAudioIIRFilter-rate-changed" title="The “rate-changed†signal">rate-changed</a></td> -<td class="signal_flags">Run Last</td> +<td class="signal_flags"><a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></td> </tr></tbody> </table></div> </div> @@ -482,8 +482,6 @@ gint </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-audioiirfilter.functions_details"></a><h2>Functions</h2> @@ -551,7 +549,7 @@ stop until the event is handled.</p> </tbody> </table></div> </div> -<p>Flags: Run Last</p> +<p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></p> </div> </div> </div> diff --git a/docs/plugins/html/gst-plugins-good-plugins-audioinvert.html b/docs/plugins/html/gst-plugins-good-plugins-audioinvert.html index a0aef06d2..9b880a943 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-audioinvert.html +++ b/docs/plugins/html/gst-plugins-good-plugins-audioinvert.html @@ -29,7 +29,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-audioinvert.top_of_page"></a>audioinvert</span></h2> -<p>audioinvert — Swaps upper and lower half of audio samples</p> +<p>audioinvert</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -175,8 +175,6 @@ gst<span class="gtkdoc opt">-</span>launch<span class="gtkdoc opt">-</span><span </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-audioinvert.functions_details"></a><h2>Functions</h2> @@ -187,8 +185,6 @@ gst<span class="gtkdoc opt">-</span>launch<span class="gtkdoc opt">-</span><span <div class="refsect2"> <a name="GstAudioInvert-struct"></a><h3>struct GstAudioInvert</h3> <pre class="programlisting">struct GstAudioInvert;</pre> -<p> -</p> </div> </div> <div class="refsect1"> diff --git a/docs/plugins/html/gst-plugins-good-plugins-audiokaraoke.html b/docs/plugins/html/gst-plugins-good-plugins-audiokaraoke.html index c80ee11f8..70482bba4 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-audiokaraoke.html +++ b/docs/plugins/html/gst-plugins-good-plugins-audiokaraoke.html @@ -29,7 +29,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-audiokaraoke.top_of_page"></a>audiokaraoke</span></h2> -<p>audiokaraoke — Removes voice from sound</p> +<p>audiokaraoke</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -187,8 +187,6 @@ This plugin is useful for karaoke applications.</p> </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-audiokaraoke.functions_details"></a><h2>Functions</h2> @@ -199,8 +197,6 @@ This plugin is useful for karaoke applications.</p> <div class="refsect2"> <a name="GstAudioKaraoke-struct"></a><h3>struct GstAudioKaraoke</h3> <pre class="programlisting">struct GstAudioKaraoke;</pre> -<p> -</p> </div> </div> <div class="refsect1"> diff --git a/docs/plugins/html/gst-plugins-good-plugins-audiopanorama.html b/docs/plugins/html/gst-plugins-good-plugins-audiopanorama.html index 708f3b575..55c867dbf 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-audiopanorama.html +++ b/docs/plugins/html/gst-plugins-good-plugins-audiopanorama.html @@ -29,7 +29,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-audiopanorama.top_of_page"></a>audiopanorama</span></h2> -<p>audiopanorama — Positions audio streams in the stereo panorama</p> +<p>audiopanorama</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -182,8 +182,6 @@ gst<span class="gtkdoc opt">-</span>launch<span class="gtkdoc opt">-</span><span </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-audiopanorama.functions_details"></a><h2>Functions</h2> @@ -194,8 +192,6 @@ gst<span class="gtkdoc opt">-</span>launch<span class="gtkdoc opt">-</span><span <div class="refsect2"> <a name="GstAudioPanorama-struct"></a><h3>struct GstAudioPanorama</h3> <pre class="programlisting">struct GstAudioPanorama;</pre> -<p> -</p> </div> </div> <div class="refsect1"> diff --git a/docs/plugins/html/gst-plugins-good-plugins-audiowsincband.html b/docs/plugins/html/gst-plugins-good-plugins-audiowsincband.html index 3537592ee..1710c0c7a 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-audiowsincband.html +++ b/docs/plugins/html/gst-plugins-good-plugins-audiowsincband.html @@ -29,7 +29,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-audiowsincband.top_of_page"></a>audiowsincband</span></h2> -<p>audiowsincband — Band pass and band reject windowed sinc filter</p> +<p>audiowsincband</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -202,8 +202,6 @@ gst<span class="gtkdoc opt">-</span>launch<span class="gtkdoc opt">-</span><span </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-audiowsincband.functions_details"></a><h2>Functions</h2> diff --git a/docs/plugins/html/gst-plugins-good-plugins-audiowsinclimit.html b/docs/plugins/html/gst-plugins-good-plugins-audiowsinclimit.html index f5802239c..2abd6646f 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-audiowsinclimit.html +++ b/docs/plugins/html/gst-plugins-good-plugins-audiowsinclimit.html @@ -29,7 +29,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-audiowsinclimit.top_of_page"></a>audiowsinclimit</span></h2> -<p>audiowsinclimit — Low pass and high pass windowed sinc filter</p> +<p>audiowsinclimit</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -202,8 +202,6 @@ gst<span class="gtkdoc opt">-</span>launch<span class="gtkdoc opt">-</span><span </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-audiowsinclimit.functions_details"></a><h2>Functions</h2> diff --git a/docs/plugins/html/gst-plugins-good-plugins-auparse.html b/docs/plugins/html/gst-plugins-good-plugins-auparse.html index d84ec4795..e976a71aa 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-auparse.html +++ b/docs/plugins/html/gst-plugins-good-plugins-auparse.html @@ -28,7 +28,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-auparse.top_of_page"></a>auparse</span></h2> -<p>auparse — Parse an .au file into raw audio</p> +<p>auparse</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -60,7 +60,7 @@ <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="id-1.2.27.6.2.1.1"></a><h3>Element Information</h3> +<a name="id-1.2.27.6.3.1"></a><h3>Element Information</h3> <div class="variablelist"><table border="0" class="variablelist"> <colgroup> <col align="left" valign="top"> @@ -86,7 +86,7 @@ </div> <hr> <div class="refsect2"> -<a name="id-1.2.27.6.2.1.2"></a><h3>Element Pads</h3> +<a name="id-1.2.27.6.3.2"></a><h3>Element Pads</h3> <div class="variablelist"><table border="0" class="variablelist"> <colgroup> <col align="left" valign="top"> @@ -153,8 +153,6 @@ </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-auparse.functions_details"></a><h2>Functions</h2> @@ -165,8 +163,6 @@ <div class="refsect2"> <a name="GstAuParse-struct"></a><h3>struct GstAuParse</h3> <pre class="programlisting">struct GstAuParse;</pre> -<p> -</p> </div> </div> </div> diff --git a/docs/plugins/html/gst-plugins-good-plugins-autoaudiosink.html b/docs/plugins/html/gst-plugins-good-plugins-autoaudiosink.html index 190daa2b4..668cfe9b4 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-autoaudiosink.html +++ b/docs/plugins/html/gst-plugins-good-plugins-autoaudiosink.html @@ -30,7 +30,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-autoaudiosink.top_of_page"></a>autoaudiosink</span></h2> -<p>autoaudiosink — Wrapper audio sink for automatically detected audio sink</p> +<p>autoaudiosink</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -168,8 +168,6 @@ of their element information, and also have a non-zero autoplugging rank.</p> </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-autoaudiosink.functions_details"></a><h2>Functions</h2> @@ -180,8 +178,6 @@ of their element information, and also have a non-zero autoplugging rank.</p> <div class="refsect2"> <a name="GstAutoAudioSink-struct"></a><h3>GstAutoAudioSink</h3> <pre class="programlisting">typedef struct _GstAutoAudioSink GstAutoAudioSink;</pre> -<p> -</p> </div> </div> <div class="refsect1"> diff --git a/docs/plugins/html/gst-plugins-good-plugins-autoaudiosrc.html b/docs/plugins/html/gst-plugins-good-plugins-autoaudiosrc.html index d385d5568..17b517452 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-autoaudiosrc.html +++ b/docs/plugins/html/gst-plugins-good-plugins-autoaudiosrc.html @@ -30,7 +30,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-autoaudiosrc.top_of_page"></a>autoaudiosrc</span></h2> -<p>autoaudiosrc — Wrapper audio source for automatically detected audio source</p> +<p>autoaudiosrc</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -156,8 +156,6 @@ of their element information, and also have a non-zero autoplugging rank.</p> </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-autoaudiosrc.functions_details"></a><h2>Functions</h2> @@ -168,8 +166,6 @@ of their element information, and also have a non-zero autoplugging rank.</p> <div class="refsect2"> <a name="GstAutoAudioSrc-struct"></a><h3>GstAutoAudioSrc</h3> <pre class="programlisting">typedef struct _GstAutoAudioSrc GstAutoAudioSrc;</pre> -<p> -</p> </div> </div> <div class="refsect1"> diff --git a/docs/plugins/html/gst-plugins-good-plugins-autovideosink.html b/docs/plugins/html/gst-plugins-good-plugins-autovideosink.html index ee252b481..c63f11f08 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-autovideosink.html +++ b/docs/plugins/html/gst-plugins-good-plugins-autovideosink.html @@ -30,7 +30,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-autovideosink.top_of_page"></a>autovideosink</span></h2> -<p>autovideosink — Wrapper video sink for automatically detected video sink</p> +<p>autovideosink</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -168,8 +168,6 @@ of their element information, and also have a non-zero autoplugging rank.</p> </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-autovideosink.functions_details"></a><h2>Functions</h2> @@ -180,8 +178,6 @@ of their element information, and also have a non-zero autoplugging rank.</p> <div class="refsect2"> <a name="GstAutoVideoSink-struct"></a><h3>GstAutoVideoSink</h3> <pre class="programlisting">typedef struct _GstAutoVideoSink GstAutoVideoSink;</pre> -<p> -</p> </div> </div> <div class="refsect1"> diff --git a/docs/plugins/html/gst-plugins-good-plugins-autovideosrc.html b/docs/plugins/html/gst-plugins-good-plugins-autovideosrc.html index 8a78952c8..c6fd46f29 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-autovideosrc.html +++ b/docs/plugins/html/gst-plugins-good-plugins-autovideosrc.html @@ -30,7 +30,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-autovideosrc.top_of_page"></a>autovideosrc</span></h2> -<p>autovideosrc — Wrapper video source for automatically detected video source</p> +<p>autovideosrc</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -156,8 +156,6 @@ of their element information, and also have a non-zero autoplugging rank.</p> </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-autovideosrc.functions_details"></a><h2>Functions</h2> @@ -168,8 +166,6 @@ of their element information, and also have a non-zero autoplugging rank.</p> <div class="refsect2"> <a name="GstAutoVideoSrc-struct"></a><h3>GstAutoVideoSrc</h3> <pre class="programlisting">typedef struct _GstAutoVideoSrc GstAutoVideoSrc;</pre> -<p> -</p> </div> </div> <div class="refsect1"> diff --git a/docs/plugins/html/gst-plugins-good-plugins-avidemux.html b/docs/plugins/html/gst-plugins-good-plugins-avidemux.html index a509211de..46c94cab0 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-avidemux.html +++ b/docs/plugins/html/gst-plugins-good-plugins-avidemux.html @@ -28,7 +28,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-avidemux.top_of_page"></a>avidemux</span></h2> -<p>avidemux — Demultiplex an avi file into audio and video</p> +<p>avidemux</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -664,8 +664,6 @@ right decoder elements/plugins installed. </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-avidemux.functions_details"></a><h2>Functions</h2> @@ -676,8 +674,6 @@ right decoder elements/plugins installed. <div class="refsect2"> <a name="GstAviDemux-struct"></a><h3>GstAviDemux</h3> <pre class="programlisting">typedef struct _GstAviDemux GstAviDemux;</pre> -<p> -</p> </div> </div> </div> diff --git a/docs/plugins/html/gst-plugins-good-plugins-avimux.html b/docs/plugins/html/gst-plugins-good-plugins-avimux.html index 9bef8a0bb..9f32d78bc 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-avimux.html +++ b/docs/plugins/html/gst-plugins-good-plugins-avimux.html @@ -30,7 +30,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-avimux.top_of_page"></a>avimux</span></h2> -<p>avimux — Muxes audio and video into an avi stream</p> +<p>avimux</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -302,8 +302,6 @@ only work if you have the necessary encoder elements installed of course. </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-avimux.functions_details"></a><h2>Functions</h2> @@ -314,8 +312,6 @@ only work if you have the necessary encoder elements installed of course. <div class="refsect2"> <a name="GstAviMux-struct"></a><h3>struct GstAviMux</h3> <pre class="programlisting">struct GstAviMux;</pre> -<p> -</p> </div> </div> <div class="refsect1"> diff --git a/docs/plugins/html/gst-plugins-good-plugins-avisubtitle.html b/docs/plugins/html/gst-plugins-good-plugins-avisubtitle.html index 175ddaa00..44931f9a2 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-avisubtitle.html +++ b/docs/plugins/html/gst-plugins-good-plugins-avisubtitle.html @@ -28,7 +28,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-avisubtitle.top_of_page"></a>avisubtitle</span></h2> -<p>avisubtitle — Parse avi subtitle stream</p> +<p>avisubtitle</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -150,8 +150,6 @@ This plays an avi file with a video and subtitle stream. </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-avisubtitle.functions_details"></a><h2>Functions</h2> @@ -162,8 +160,6 @@ This plays an avi file with a video and subtitle stream. <div class="refsect2"> <a name="GstAviSubtitle-struct"></a><h3>struct GstAviSubtitle</h3> <pre class="programlisting">struct GstAviSubtitle;</pre> -<p> -</p> </div> </div> </div> diff --git a/docs/plugins/html/gst-plugins-good-plugins-cacasink.html b/docs/plugins/html/gst-plugins-good-plugins-cacasink.html index 7b6bcff63..d8c2ba0cc 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-cacasink.html +++ b/docs/plugins/html/gst-plugins-good-plugins-cacasink.html @@ -29,7 +29,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-cacasink.top_of_page"></a>cacasink</span></h2> -<p>cacasink — A colored ASCII art videosink</p> +<p>cacasink</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -146,8 +146,6 @@ </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-cacasink.functions_details"></a><h2>Functions</h2> @@ -158,8 +156,6 @@ <div class="refsect2"> <a name="GstCACASink-struct"></a><h3>struct GstCACASink</h3> <pre class="programlisting">struct GstCACASink;</pre> -<p> -</p> </div> </div> <div class="refsect1"> diff --git a/docs/plugins/html/gst-plugins-good-plugins-cairooverlay.html b/docs/plugins/html/gst-plugins-good-plugins-cairooverlay.html index ae0dd93b7..e62820120 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-cairooverlay.html +++ b/docs/plugins/html/gst-plugins-good-plugins-cairooverlay.html @@ -29,7 +29,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-cairooverlay.top_of_page"></a>cairooverlay</span></h2> -<p>cairooverlay — Render overlay on a video stream using Cairo</p> +<p>cairooverlay</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -161,8 +161,6 @@ </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-cairooverlay.functions_details"></a><h2>Functions</h2> @@ -173,8 +171,6 @@ <div class="refsect2"> <a name="GstCairoOverlay-struct"></a><h3>struct GstCairoOverlay</h3> <pre class="programlisting">struct GstCairoOverlay;</pre> -<p> -</p> </div> </div> <div class="refsect1"> @@ -185,30 +181,6 @@ user_function (<a class="link" href="gst-plugins-good-plugins-cairooverlay.html#GstCairoOverlay"><span class="type">GstCairoOverlay</span></a> *gstcairooverlay, <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstCaps.html"><span class="type">GstCaps</span></a> *arg1, <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data)</pre> -<p> -</p> -<div class="refsect3"> -<a name="id-1.2.36.10.2.5"></a><h4>Parameters</h4> -<div class="informaltable"><table width="100%" border="0"> -<colgroup> -<col width="150px" class="parameters_name"> -<col class="parameters_description"> -<col width="200px" class="parameters_annotations"> -</colgroup> -<tbody> -<tr> -<td class="parameter_name"><p>gstcairooverlay</p></td> -<td class="parameter_description"><p>the object which received the signal.</p></td> -<td class="parameter_annotations"> </td> -</tr> -<tr> -<td class="parameter_name"><p>user_data</p></td> -<td class="parameter_description"><p>user data set when the signal handler was connected.</p></td> -<td class="parameter_annotations"> </td> -</tr> -</tbody> -</table></div> -</div> </div> <hr> <div class="refsect2"> @@ -219,30 +191,6 @@ user_function (<a class="link" href="gst-plugins-good-plugins-cairooverlay.html# <span class="type">guint64</span> arg2, <span class="type">guint64</span> arg3, <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data)</pre> -<p> -</p> -<div class="refsect3"> -<a name="id-1.2.36.10.3.5"></a><h4>Parameters</h4> -<div class="informaltable"><table width="100%" border="0"> -<colgroup> -<col width="150px" class="parameters_name"> -<col class="parameters_description"> -<col width="200px" class="parameters_annotations"> -</colgroup> -<tbody> -<tr> -<td class="parameter_name"><p>gstcairooverlay</p></td> -<td class="parameter_description"><p>the object which received the signal.</p></td> -<td class="parameter_annotations"> </td> -</tr> -<tr> -<td class="parameter_name"><p>user_data</p></td> -<td class="parameter_description"><p>user data set when the signal handler was connected.</p></td> -<td class="parameter_annotations"> </td> -</tr> -</tbody> -</table></div> -</div> </div> </div> </div> diff --git a/docs/plugins/html/gst-plugins-good-plugins-capssetter.html b/docs/plugins/html/gst-plugins-good-plugins-capssetter.html index 45133a73b..a8d5a2c7e 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-capssetter.html +++ b/docs/plugins/html/gst-plugins-good-plugins-capssetter.html @@ -29,7 +29,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-capssetter.top_of_page"></a>capssetter</span></h2> -<p>capssetter — Set/merge caps on stream</p> +<p>capssetter</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -104,7 +104,7 @@ alike.</p> <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="id-1.2.37.7.5.1.1"></a><h3>Element Information</h3> +<a name="id-1.2.37.7.6.1"></a><h3>Element Information</h3> <div class="variablelist"><table border="0" class="variablelist"> <colgroup> <col align="left" valign="top"> @@ -130,7 +130,7 @@ alike.</p> </div> <hr> <div class="refsect2"> -<a name="id-1.2.37.7.5.1.2"></a><h3>Element Pads</h3> +<a name="id-1.2.37.7.6.2"></a><h3>Element Pads</h3> <div class="variablelist"><table border="0" class="variablelist"> <colgroup> <col align="left" valign="top"> @@ -181,8 +181,6 @@ alike.</p> </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-capssetter.functions_details"></a><h2>Functions</h2> @@ -193,8 +191,6 @@ alike.</p> <div class="refsect2"> <a name="GstCapsSetter-struct"></a><h3>struct GstCapsSetter</h3> <pre class="programlisting">struct GstCapsSetter;</pre> -<p> -</p> </div> </div> <div class="refsect1"> diff --git a/docs/plugins/html/gst-plugins-good-plugins-cutter.html b/docs/plugins/html/gst-plugins-good-plugins-cutter.html index 963578c3c..e45780cab 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-cutter.html +++ b/docs/plugins/html/gst-plugins-good-plugins-cutter.html @@ -29,7 +29,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-cutter.top_of_page"></a>cutter</span></h2> -<p>cutter — Audio Cutter to split audio into non-silent bits</p> +<p>cutter</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -204,8 +204,6 @@ silence is signalled by bus messages named</p> </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-cutter.functions_details"></a><h2>Functions</h2> @@ -216,8 +214,6 @@ silence is signalled by bus messages named</p> <div class="refsect2"> <a name="GstCutter-struct"></a><h3>struct GstCutter</h3> <pre class="programlisting">struct GstCutter;</pre> -<p> -</p> </div> </div> <div class="refsect1"> diff --git a/docs/plugins/html/gst-plugins-good-plugins-dcaparse.html b/docs/plugins/html/gst-plugins-good-plugins-dcaparse.html index e8b57485f..83117bf61 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-dcaparse.html +++ b/docs/plugins/html/gst-plugins-good-plugins-dcaparse.html @@ -156,8 +156,6 @@ </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-dcaparse.functions_details"></a><h2>Functions</h2> diff --git a/docs/plugins/html/gst-plugins-good-plugins-deinterlace.html b/docs/plugins/html/gst-plugins-good-plugins-deinterlace.html index ab666c916..e857d1a43 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-deinterlace.html +++ b/docs/plugins/html/gst-plugins-good-plugins-deinterlace.html @@ -30,7 +30,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-deinterlace.top_of_page"></a>deinterlace</span></h2> -<p>deinterlace — Deinterlace Methods ported from DScaler/TvTime</p> +<p>deinterlace</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -215,8 +215,6 @@ For this different algorithms can be selected which will be described later.</p> </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-deinterlace.functions_details"></a><h2>Functions</h2> @@ -227,8 +225,6 @@ For this different algorithms can be selected which will be described later.</p> <div class="refsect2"> <a name="GstDeinterlace-struct"></a><h3>struct GstDeinterlace</h3> <pre class="programlisting">struct GstDeinterlace;</pre> -<p> -</p> </div> </div> <div class="refsect1"> diff --git a/docs/plugins/html/gst-plugins-good-plugins-deinterleave.html b/docs/plugins/html/gst-plugins-good-plugins-deinterleave.html index 7f6106dd6..6169b2753 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-deinterleave.html +++ b/docs/plugins/html/gst-plugins-good-plugins-deinterleave.html @@ -29,7 +29,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-deinterleave.top_of_page"></a>deinterleave</span></h2> -<p>deinterleave — Splits one interleaved multichannel audio stream into many mono audio streams</p> +<p>deinterleave</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -187,8 +187,6 @@ channels exchanged. </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-deinterleave.functions_details"></a><h2>Functions</h2> @@ -199,8 +197,6 @@ channels exchanged. <div class="refsect2"> <a name="GstDeinterleave-struct"></a><h3>struct GstDeinterleave</h3> <pre class="programlisting">struct GstDeinterleave;</pre> -<p> -</p> </div> </div> <div class="refsect1"> diff --git a/docs/plugins/html/gst-plugins-good-plugins-dicetv.html b/docs/plugins/html/gst-plugins-good-plugins-dicetv.html index 63d70ce3e..cbaf6f322 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-dicetv.html +++ b/docs/plugins/html/gst-plugins-good-plugins-dicetv.html @@ -30,7 +30,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-dicetv.top_of_page"></a>dicetv</span></h2> -<p>dicetv — 'Dices' the screen up into many small squares</p> +<p>dicetv</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -60,7 +60,7 @@ <tbody><tr> <td class="signal_type"><span class="returnvalue">void</span></td> <td class="signal_name"><a class="link" href="gst-plugins-good-plugins-dicetv.html#GstDiceTV-reset" title="The “reset†signal">reset</a></td> -<td class="signal_flags">Action</td> +<td class="signal_flags"><a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-ACTION:CAPS">Action</a></td> </tr></tbody> </table></div> </div> @@ -190,8 +190,6 @@ consistent between each frame.</p> </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-dicetv.functions_details"></a><h2>Functions</h2> @@ -202,8 +200,6 @@ consistent between each frame.</p> <div class="refsect2"> <a name="GstDiceTV-struct"></a><h3>struct GstDiceTV</h3> <pre class="programlisting">struct GstDiceTV;</pre> -<p> -</p> </div> </div> <div class="refsect1"> @@ -224,31 +220,7 @@ consistent between each frame.</p> <pre class="programlisting"><span class="returnvalue">void</span> user_function (<a class="link" href="gst-plugins-good-plugins-dicetv.html#GstDiceTV"><span class="type">GstDiceTV</span></a> *gstdicetv, <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data)</pre> -<p> -</p> -<div class="refsect3"> -<a name="id-1.2.42.12.2.5"></a><h4>Parameters</h4> -<div class="informaltable"><table width="100%" border="0"> -<colgroup> -<col width="150px" class="parameters_name"> -<col class="parameters_description"> -<col width="200px" class="parameters_annotations"> -</colgroup> -<tbody> -<tr> -<td class="parameter_name"><p>gstdicetv</p></td> -<td class="parameter_description"><p>the object which received the signal.</p></td> -<td class="parameter_annotations"> </td> -</tr> -<tr> -<td class="parameter_name"><p>user_data</p></td> -<td class="parameter_description"><p>user data set when the signal handler was connected.</p></td> -<td class="parameter_annotations"> </td> -</tr> -</tbody> -</table></div> -</div> -<p>Flags: Action</p> +<p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-ACTION:CAPS">Action</a></p> </div> </div> </div> diff --git a/docs/plugins/html/gst-plugins-good-plugins-directsoundsink.html b/docs/plugins/html/gst-plugins-good-plugins-directsoundsink.html index 885c496f9..bba5f413f 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-directsoundsink.html +++ b/docs/plugins/html/gst-plugins-good-plugins-directsoundsink.html @@ -27,7 +27,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-directsoundsink.top_of_page"></a>directsoundsink</span></h2> -<p>directsoundsink — DirectSound audio sink</p> +<p>directsoundsink</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -78,8 +78,6 @@ <a name="id-1.2.43.4.2.2"></a><h3>Element Pads</h3> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-directsoundsink.functions_details"></a><h2>Functions</h2> @@ -120,8 +118,6 @@ GstAudioRingBufferFormatType type; }; </pre> -<p> -</p> </div> </div> </div> diff --git a/docs/plugins/html/gst-plugins-good-plugins-dtmfsrc.html b/docs/plugins/html/gst-plugins-good-plugins-dtmfsrc.html index a83c44f11..624d8bc1e 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-dtmfsrc.html +++ b/docs/plugins/html/gst-plugins-good-plugins-dtmfsrc.html @@ -29,7 +29,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-dtmfsrc.top_of_page"></a>dtmfsrc</span></h2> -<p>dtmfsrc — Generates DTMF tones</p> +<p>dtmfsrc</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -157,7 +157,7 @@ READY state, then a "dtmf-event-dropped" message is posted on the <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="id-1.2.44.7.6.4.1"></a><h3>Element Information</h3> +<a name="id-1.2.44.7.7.1"></a><h3>Element Information</h3> <div class="variablelist"><table border="0" class="variablelist"> <colgroup> <col align="left" valign="top"> @@ -183,7 +183,7 @@ READY state, then a "dtmf-event-dropped" message is posted on the </div> <hr> <div class="refsect2"> -<a name="id-1.2.44.7.6.4.2"></a><h3>Element Pads</h3> +<a name="id-1.2.44.7.7.2"></a><h3>Element Pads</h3> <div class="variablelist"><table border="0" class="variablelist"> <colgroup> <col align="left" valign="top"> @@ -210,8 +210,6 @@ READY state, then a "dtmf-event-dropped" message is posted on the </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-dtmfsrc.functions_details"></a><h2>Functions</h2> diff --git a/docs/plugins/html/gst-plugins-good-plugins-dv1394src.html b/docs/plugins/html/gst-plugins-good-plugins-dv1394src.html index 927da9311..3a048d347 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-dv1394src.html +++ b/docs/plugins/html/gst-plugins-good-plugins-dv1394src.html @@ -31,7 +31,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-dv1394src.top_of_page"></a>dv1394src</span></h2> -<p>dv1394src — Source for DV video data from firewire port</p> +<p>dv1394src</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -99,7 +99,7 @@ <tbody><tr> <td class="signal_type"><span class="returnvalue">void</span></td> <td class="signal_name"><a class="link" href="gst-plugins-good-plugins-dv1394src.html#GstDV1394Src-frame-dropped" title="The “frame-dropped†signal">frame-dropped</a></td> -<td class="signal_flags">Run Last</td> +<td class="signal_flags"><a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></td> </tr></tbody> </table></div> </div> @@ -191,8 +191,6 @@ GstDV1394Src implements </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-dv1394src.functions_details"></a><h2>Functions</h2> @@ -203,8 +201,6 @@ GstDV1394Src implements <div class="refsect2"> <a name="GstDV1394Src-struct"></a><h3>struct GstDV1394Src</h3> <pre class="programlisting">struct GstDV1394Src;</pre> -<p> -</p> </div> </div> <div class="refsect1"> @@ -284,31 +280,7 @@ GstDV1394Src implements <pre class="programlisting"><span class="returnvalue">void</span> user_function (<a class="link" href="gst-plugins-good-plugins-dv1394src.html#GstDV1394Src"><span class="type">GstDV1394Src</span></a> *gstdv1394src, <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data)</pre> -<p> -</p> -<div class="refsect3"> -<a name="id-1.2.45.13.2.5"></a><h4>Parameters</h4> -<div class="informaltable"><table width="100%" border="0"> -<colgroup> -<col width="150px" class="parameters_name"> -<col class="parameters_description"> -<col width="200px" class="parameters_annotations"> -</colgroup> -<tbody> -<tr> -<td class="parameter_name"><p>gstdv1394src</p></td> -<td class="parameter_description"><p>the object which received the signal.</p></td> -<td class="parameter_annotations"> </td> -</tr> -<tr> -<td class="parameter_name"><p>user_data</p></td> -<td class="parameter_description"><p>user data set when the signal handler was connected.</p></td> -<td class="parameter_annotations"> </td> -</tr> -</tbody> -</table></div> -</div> -<p>Flags: Run Last</p> +<p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></p> </div> </div> </div> diff --git a/docs/plugins/html/gst-plugins-good-plugins-dvdec.html b/docs/plugins/html/gst-plugins-good-plugins-dvdec.html index 8694459ba..f8a11f766 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-dvdec.html +++ b/docs/plugins/html/gst-plugins-good-plugins-dvdec.html @@ -29,7 +29,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-dvdec.top_of_page"></a>dvdec</span></h2> -<p>dvdec — Uses libdv to decode DV video (smpte314) (libdv.sourceforge.net)</p> +<p>dvdec</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -169,8 +169,6 @@ </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-dvdec.functions_details"></a><h2>Functions</h2> @@ -181,8 +179,6 @@ <div class="refsect2"> <a name="GstDVDec-struct"></a><h3>struct GstDVDec</h3> <pre class="programlisting">struct GstDVDec;</pre> -<p> -</p> </div> </div> <div class="refsect1"> diff --git a/docs/plugins/html/gst-plugins-good-plugins-dvdemux.html b/docs/plugins/html/gst-plugins-good-plugins-dvdemux.html index c5f96e298..254c8d3d5 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-dvdemux.html +++ b/docs/plugins/html/gst-plugins-good-plugins-dvdemux.html @@ -28,7 +28,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-dvdemux.top_of_page"></a>dvdemux</span></h2> -<p>dvdemux — Uses libdv to separate DV audio from DV video (libdv.sourceforge.net)</p> +<p>dvdemux</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -160,8 +160,6 @@ </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-dvdemux.functions_details"></a><h2>Functions</h2> @@ -172,8 +170,6 @@ <div class="refsect2"> <a name="GstDVDemux-struct"></a><h3>struct GstDVDemux</h3> <pre class="programlisting">struct GstDVDemux;</pre> -<p> -</p> </div> </div> </div> diff --git a/docs/plugins/html/gst-plugins-good-plugins-edgetv.html b/docs/plugins/html/gst-plugins-good-plugins-edgetv.html index b221a3c7d..697626f9b 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-edgetv.html +++ b/docs/plugins/html/gst-plugins-good-plugins-edgetv.html @@ -28,7 +28,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-edgetv.top_of_page"></a>edgetv</span></h2> -<p>edgetv — Apply edge detect on video</p> +<p>edgetv</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -154,8 +154,6 @@ computer way.</p> </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-edgetv.functions_details"></a><h2>Functions</h2> @@ -166,8 +164,6 @@ computer way.</p> <div class="refsect2"> <a name="GstEdgeTV-struct"></a><h3>struct GstEdgeTV</h3> <pre class="programlisting">struct GstEdgeTV;</pre> -<p> -</p> </div> </div> </div> diff --git a/docs/plugins/html/gst-plugins-good-plugins-equalizer-10bands.html b/docs/plugins/html/gst-plugins-good-plugins-equalizer-10bands.html index b40135381..7f79f3fce 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-equalizer-10bands.html +++ b/docs/plugins/html/gst-plugins-good-plugins-equalizer-10bands.html @@ -30,7 +30,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-equalizer-10bands.top_of_page"></a>equalizer-10bands</span></h2> -<p>equalizer-10bands — Direct Form 10 band IIR equalizer</p> +<p>equalizer-10bands</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -225,8 +225,6 @@ frequency bands between 30 Hz and 15 kHz.</p> </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-equalizer-10bands.functions_details"></a><h2>Functions</h2> @@ -237,8 +235,6 @@ frequency bands between 30 Hz and 15 kHz.</p> <div class="refsect2"> <a name="GstIirEqualizer10Bands-struct"></a><h3>struct GstIirEqualizer10Bands</h3> <pre class="programlisting">struct GstIirEqualizer10Bands;</pre> -<p> -</p> </div> </div> <div class="refsect1"> diff --git a/docs/plugins/html/gst-plugins-good-plugins-equalizer-3bands.html b/docs/plugins/html/gst-plugins-good-plugins-equalizer-3bands.html index 76bb1022c..8b5e6eb27 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-equalizer-3bands.html +++ b/docs/plugins/html/gst-plugins-good-plugins-equalizer-3bands.html @@ -30,7 +30,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-equalizer-3bands.top_of_page"></a>equalizer-3bands</span></h2> -<p>equalizer-3bands — Direct Form 3 band IIR equalizer</p> +<p>equalizer-3bands</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -190,8 +190,6 @@ medium frequency and high frequency band.</p> </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-equalizer-3bands.functions_details"></a><h2>Functions</h2> @@ -202,8 +200,6 @@ medium frequency and high frequency band.</p> <div class="refsect2"> <a name="GstIirEqualizer3Bands-struct"></a><h3>struct GstIirEqualizer3Bands</h3> <pre class="programlisting">struct GstIirEqualizer3Bands;</pre> -<p> -</p> </div> </div> <div class="refsect1"> diff --git a/docs/plugins/html/gst-plugins-good-plugins-equalizer-nbands.html b/docs/plugins/html/gst-plugins-good-plugins-equalizer-nbands.html index 7592a6b90..fb5ce41ed 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-equalizer-nbands.html +++ b/docs/plugins/html/gst-plugins-good-plugins-equalizer-nbands.html @@ -30,7 +30,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-equalizer-nbands.top_of_page"></a>equalizer-nbands</span></h2> -<p>equalizer-nbands — Direct Form IIR equalizer</p> +<p>equalizer-nbands</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -268,8 +268,6 @@ the center frequency, band width and gain.</p> </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-equalizer-nbands.functions_details"></a><h2>Functions</h2> @@ -280,8 +278,6 @@ the center frequency, band width and gain.</p> <div class="refsect2"> <a name="GstIirEqualizerNBands-struct"></a><h3>struct GstIirEqualizerNBands</h3> <pre class="programlisting">struct GstIirEqualizerNBands;</pre> -<p> -</p> </div> </div> <div class="refsect1"> diff --git a/docs/plugins/html/gst-plugins-good-plugins-flacdec.html b/docs/plugins/html/gst-plugins-good-plugins-flacdec.html index 86d490bfd..4eb8af165 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-flacdec.html +++ b/docs/plugins/html/gst-plugins-good-plugins-flacdec.html @@ -28,7 +28,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-flacdec.top_of_page"></a>flacdec</span></h2> -<p>flacdec — Decodes FLAC lossless audio streams</p> +<p>flacdec</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -137,8 +137,6 @@ </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-flacdec.functions_details"></a><h2>Functions</h2> @@ -149,8 +147,6 @@ <div class="refsect2"> <a name="GstFlacDec-struct"></a><h3>struct GstFlacDec</h3> <pre class="programlisting">struct GstFlacDec;</pre> -<p> -</p> </div> </div> </div> diff --git a/docs/plugins/html/gst-plugins-good-plugins-flacenc.html b/docs/plugins/html/gst-plugins-good-plugins-flacenc.html index 979ed591a..ad4c889f5 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-flacenc.html +++ b/docs/plugins/html/gst-plugins-good-plugins-flacenc.html @@ -30,7 +30,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-flacenc.top_of_page"></a>flacenc</span></h2> -<p>flacenc — Encodes audio with the FLAC lossless audio encoder</p> +<p>flacenc</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -232,8 +232,6 @@ GstFlacEnc implements </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-flacenc.functions_details"></a><h2>Functions</h2> @@ -244,8 +242,6 @@ GstFlacEnc implements <div class="refsect2"> <a name="GstFlacEnc-struct"></a><h3>struct GstFlacEnc</h3> <pre class="programlisting">struct GstFlacEnc;</pre> -<p> -</p> </div> </div> <div class="refsect1"> diff --git a/docs/plugins/html/gst-plugins-good-plugins-flacparse.html b/docs/plugins/html/gst-plugins-good-plugins-flacparse.html index 7bb748585..da59e286f 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-flacparse.html +++ b/docs/plugins/html/gst-plugins-good-plugins-flacparse.html @@ -29,7 +29,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-flacparse.top_of_page"></a>flacparse</span></h2> -<p>flacparse — Parses audio with the FLAC lossless audio codec</p> +<p>flacparse</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -181,8 +181,6 @@ buffer has the timestamp, duration, offset, and offset_end set. </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-flacparse.functions_details"></a><h2>Functions</h2> @@ -193,8 +191,6 @@ buffer has the timestamp, duration, offset, and offset_end set. <div class="refsect2"> <a name="GstFlacParse-struct"></a><h3>struct GstFlacParse</h3> <pre class="programlisting">struct GstFlacParse;</pre> -<p> -</p> </div> </div> <div class="refsect1"> diff --git a/docs/plugins/html/gst-plugins-good-plugins-flactag.html b/docs/plugins/html/gst-plugins-good-plugins-flactag.html index e1e041590..191f47a8c 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-flactag.html +++ b/docs/plugins/html/gst-plugins-good-plugins-flactag.html @@ -29,7 +29,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-flactag.top_of_page"></a>flactag</span></h2> -<p>flactag — Rewrite tags in a FLAC file</p> +<p>flactag</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -143,8 +143,6 @@ GstFlacTag implements </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-flactag.functions_details"></a><h2>Functions</h2> @@ -155,8 +153,6 @@ GstFlacTag implements <div class="refsect2"> <a name="GstFlacTag-struct"></a><h3>struct GstFlacTag</h3> <pre class="programlisting">struct GstFlacTag;</pre> -<p> -</p> </div> </div> </div> diff --git a/docs/plugins/html/gst-plugins-good-plugins-flvdemux.html b/docs/plugins/html/gst-plugins-good-plugins-flvdemux.html index 9e7c88a91..a9ed63e5c 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-flvdemux.html +++ b/docs/plugins/html/gst-plugins-good-plugins-flvdemux.html @@ -28,7 +28,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-flvdemux.top_of_page"></a>flvdemux</span></h2> -<p>flvdemux — Demux FLV feeds into digital streams</p> +<p>flvdemux</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -219,8 +219,6 @@ </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-flvdemux.functions_details"></a><h2>Functions</h2> @@ -231,8 +229,6 @@ <div class="refsect2"> <a name="GstFlvDemux-struct"></a><h3>struct GstFlvDemux</h3> <pre class="programlisting">struct GstFlvDemux;</pre> -<p> -</p> </div> </div> </div> diff --git a/docs/plugins/html/gst-plugins-good-plugins-flvmux.html b/docs/plugins/html/gst-plugins-good-plugins-flvmux.html index b2f990841..8125ac638 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-flvmux.html +++ b/docs/plugins/html/gst-plugins-good-plugins-flvmux.html @@ -30,7 +30,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-flvmux.top_of_page"></a>flvmux</span></h2> -<p>flvmux — Muxes video/audio streams into a FLV stream</p> +<p>flvmux</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -249,8 +249,6 @@ GstFlvMux implements </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-flvmux.functions_details"></a><h2>Functions</h2> @@ -261,8 +259,6 @@ GstFlvMux implements <div class="refsect2"> <a name="GstFlvMux-struct"></a><h3>GstFlvMux</h3> <pre class="programlisting">typedef struct _GstFlvMux GstFlvMux;</pre> -<p> -</p> </div> </div> <div class="refsect1"> diff --git a/docs/plugins/html/gst-plugins-good-plugins-flxdec.html b/docs/plugins/html/gst-plugins-good-plugins-flxdec.html index 6514f1d6e..cc00e79fa 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-flxdec.html +++ b/docs/plugins/html/gst-plugins-good-plugins-flxdec.html @@ -28,7 +28,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-flxdec.top_of_page"></a>flxdec</span></h2> -<p>flxdec — FLC/FLI/FLX video decoder</p> +<p>flxdec</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -60,7 +60,7 @@ <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="id-1.2.58.6.2.1.1"></a><h3>Element Information</h3> +<a name="id-1.2.58.6.3.1"></a><h3>Element Information</h3> <div class="variablelist"><table border="0" class="variablelist"> <colgroup> <col align="left" valign="top"> @@ -86,7 +86,7 @@ </div> <hr> <div class="refsect2"> -<a name="id-1.2.58.6.2.1.2"></a><h3>Element Pads</h3> +<a name="id-1.2.58.6.3.2"></a><h3>Element Pads</h3> <div class="variablelist"><table border="0" class="variablelist"> <colgroup> <col align="left" valign="top"> @@ -137,8 +137,6 @@ </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-flxdec.functions_details"></a><h2>Functions</h2> @@ -149,8 +147,6 @@ <div class="refsect2"> <a name="GstFlxDec-struct"></a><h3>struct GstFlxDec</h3> <pre class="programlisting">struct GstFlxDec;</pre> -<p> -</p> </div> </div> </div> diff --git a/docs/plugins/html/gst-plugins-good-plugins-gamma.html b/docs/plugins/html/gst-plugins-good-plugins-gamma.html index 3b0fa6045..5c08a9e3f 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-gamma.html +++ b/docs/plugins/html/gst-plugins-good-plugins-gamma.html @@ -29,7 +29,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-gamma.top_of_page"></a>gamma</span></h2> -<p>gamma — Adjusts gamma on a video stream</p> +<p>gamma</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -180,8 +180,6 @@ </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-gamma.functions_details"></a><h2>Functions</h2> diff --git a/docs/plugins/html/gst-plugins-good-plugins-gdkpixbufsink.html b/docs/plugins/html/gst-plugins-good-plugins-gdkpixbufsink.html index e0a5a399d..e507514cd 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-gdkpixbufsink.html +++ b/docs/plugins/html/gst-plugins-good-plugins-gdkpixbufsink.html @@ -29,7 +29,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-gdkpixbufsink.top_of_page"></a>gdkpixbufsink</span></h2> -<p>gdkpixbufsink — Output images as GdkPixbuf objects in bus messages</p> +<p>gdkpixbufsink</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -147,8 +147,6 @@ </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-gdkpixbufsink.functions_details"></a><h2>Functions</h2> @@ -159,8 +157,6 @@ <div class="refsect2"> <a name="GstGdkPixbufSink-struct"></a><h3>struct GstGdkPixbufSink</h3> <pre class="programlisting">struct GstGdkPixbufSink;</pre> -<p> -</p> </div> </div> <div class="refsect1"> diff --git a/docs/plugins/html/gst-plugins-good-plugins-goom.html b/docs/plugins/html/gst-plugins-good-plugins-goom.html index 57fcdd939..eba9d0027 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-goom.html +++ b/docs/plugins/html/gst-plugins-good-plugins-goom.html @@ -28,7 +28,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-goom.top_of_page"></a>goom</span></h2> -<p>goom — Takes frames of data and outputs video frames using the GOOM filter</p> +<p>goom</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -51,7 +51,7 @@ <span class="lineart">╰──</span> <a href="https://developer.gnome.org/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a> <span class="lineart">╰──</span> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a> <span class="lineart">╰──</span> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a> - <span class="lineart">╰──</span> GstAudioVisualizer-ExtGom + <span class="lineart">╰──</span> GstAudioVisualizer-ExtGoom <span class="lineart">╰──</span> GstGoom </pre> </div> @@ -157,8 +157,6 @@ based on the incoming audio signal.</p> </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-goom.functions_details"></a><h2>Functions</h2> @@ -169,8 +167,6 @@ based on the incoming audio signal.</p> <div class="refsect2"> <a name="GstGoom-struct"></a><h3>struct GstGoom</h3> <pre class="programlisting">struct GstGoom;</pre> -<p> -</p> </div> </div> <div class="refsect1"> diff --git a/docs/plugins/html/gst-plugins-good-plugins-goom2k1.html b/docs/plugins/html/gst-plugins-good-plugins-goom2k1.html index 02efc0f99..c0fd23598 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-goom2k1.html +++ b/docs/plugins/html/gst-plugins-good-plugins-goom2k1.html @@ -28,7 +28,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-goom2k1.top_of_page"></a>goom2k1</span></h2> -<p>goom2k1 — Takes frames of data and outputs video frames using the GOOM 2k1 filter</p> +<p>goom2k1</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -51,7 +51,7 @@ <span class="lineart">╰──</span> <a href="https://developer.gnome.org/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a> <span class="lineart">╰──</span> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a> <span class="lineart">╰──</span> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a> - <span class="lineart">╰──</span> GstAudioVisualizer-ExtGom + <span class="lineart">╰──</span> GstAudioVisualizer-ExtGoom <span class="lineart">╰──</span> GstGoom </pre> </div> @@ -158,8 +158,6 @@ visualisation. Also available is goom2k4, with a different look.</p> </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-goom2k1.functions_details"></a><h2>Functions</h2> @@ -170,8 +168,6 @@ visualisation. Also available is goom2k4, with a different look.</p> <div class="refsect2"> <a name="GstGoom-struct"></a><h3>struct GstGoom</h3> <pre class="programlisting">struct GstGoom;</pre> -<p> -</p> </div> </div> <div class="refsect1"> diff --git a/docs/plugins/html/gst-plugins-good-plugins-hdv1394src.html b/docs/plugins/html/gst-plugins-good-plugins-hdv1394src.html index b7e3c4a74..da7ece071 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-hdv1394src.html +++ b/docs/plugins/html/gst-plugins-good-plugins-hdv1394src.html @@ -30,7 +30,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-hdv1394src.top_of_page"></a>hdv1394src</span></h2> -<p>hdv1394src — Source for MPEG-TS video data from firewire port</p> +<p>hdv1394src</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -160,8 +160,6 @@ GstHDV1394Src implements </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-hdv1394src.functions_details"></a><h2>Functions</h2> @@ -172,8 +170,6 @@ GstHDV1394Src implements <div class="refsect2"> <a name="GstHDV1394Src-struct"></a><h3>struct GstHDV1394Src</h3> <pre class="programlisting">struct GstHDV1394Src;</pre> -<p> -</p> </div> </div> <div class="refsect1"> diff --git a/docs/plugins/html/gst-plugins-good-plugins-icydemux.html b/docs/plugins/html/gst-plugins-good-plugins-icydemux.html index 256d069f9..7b4b6c1d3 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-icydemux.html +++ b/docs/plugins/html/gst-plugins-good-plugins-icydemux.html @@ -28,7 +28,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-icydemux.top_of_page"></a>icydemux</span></h2> -<p>icydemux — Read and output ICY tags while demuxing the contents</p> +<p>icydemux</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -158,8 +158,6 @@ or giosrc instead of souphttpsrc should also work.) </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-icydemux.functions_details"></a><h2>Functions</h2> @@ -170,8 +168,6 @@ or giosrc instead of souphttpsrc should also work.) <div class="refsect2"> <a name="GstICYDemux-struct"></a><h3>struct GstICYDemux</h3> <pre class="programlisting">struct GstICYDemux;</pre> -<p> -</p> </div> </div> </div> diff --git a/docs/plugins/html/gst-plugins-good-plugins-id3demux.html b/docs/plugins/html/gst-plugins-good-plugins-id3demux.html index 3a72f4b9f..f7110c4a4 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-id3demux.html +++ b/docs/plugins/html/gst-plugins-good-plugins-id3demux.html @@ -29,7 +29,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-id3demux.top_of_page"></a>id3demux</span></h2> -<p>id3demux — Read and output ID3v1 and ID3v2 tags while demuxing the contents</p> +<p>id3demux</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -180,8 +180,6 @@ the appropriate mime type set on buffers produced from id3demux. </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-id3demux.functions_details"></a><h2>Functions</h2> @@ -192,8 +190,6 @@ the appropriate mime type set on buffers produced from id3demux. <div class="refsect2"> <a name="GstID3Demux-struct"></a><h3>struct GstID3Demux</h3> <pre class="programlisting">struct GstID3Demux;</pre> -<p> -</p> </div> </div> <div class="refsect1"> diff --git a/docs/plugins/html/gst-plugins-good-plugins-id3v2mux.html b/docs/plugins/html/gst-plugins-good-plugins-id3v2mux.html index 909c18011..e32f4897d 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-id3v2mux.html +++ b/docs/plugins/html/gst-plugins-good-plugins-id3v2mux.html @@ -29,7 +29,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-id3v2mux.top_of_page"></a>id3v2mux</span></h2> -<p>id3v2mux — Adds an ID3v2 header to the beginning of MP3 files using taglib</p> +<p>id3v2mux</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -144,8 +144,6 @@ GstId3v2Mux implements </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-id3v2mux.functions_details"></a><h2>Functions</h2> @@ -156,8 +154,6 @@ GstId3v2Mux implements <div class="refsect2"> <a name="GstId3v2Mux-struct"></a><h3>struct GstId3v2Mux</h3> <pre class="programlisting">struct GstId3v2Mux;</pre> -<p> -</p> </div> </div> </div> diff --git a/docs/plugins/html/gst-plugins-good-plugins-imagefreeze.html b/docs/plugins/html/gst-plugins-good-plugins-imagefreeze.html index a76a799fb..61df54857 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-imagefreeze.html +++ b/docs/plugins/html/gst-plugins-good-plugins-imagefreeze.html @@ -28,7 +28,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-imagefreeze.top_of_page"></a>imagefreeze</span></h2> -<p>imagefreeze — Generates a still frame stream from an image</p> +<p>imagefreeze</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -153,8 +153,6 @@ by downstream, allows seeking and answers queries.</p> </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-imagefreeze.functions_details"></a><h2>Functions</h2> @@ -165,8 +163,6 @@ by downstream, allows seeking and answers queries.</p> <div class="refsect2"> <a name="GstImageFreeze-struct"></a><h3>struct GstImageFreeze</h3> <pre class="programlisting">struct GstImageFreeze;</pre> -<p> -</p> </div> </div> </div> diff --git a/docs/plugins/html/gst-plugins-good-plugins-interleave.html b/docs/plugins/html/gst-plugins-good-plugins-interleave.html index 8b171da7e..56875f866 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-interleave.html +++ b/docs/plugins/html/gst-plugins-good-plugins-interleave.html @@ -29,7 +29,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-interleave.top_of_page"></a>interleave</span></h2> -<p>interleave — Folds many mono channels into one interleaved audio stream</p> +<p>interleave</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -195,8 +195,6 @@ channels exchanged. </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-interleave.functions_details"></a><h2>Functions</h2> @@ -207,8 +205,6 @@ channels exchanged. <div class="refsect2"> <a name="GstInterleave-struct"></a><h3>struct GstInterleave</h3> <pre class="programlisting">struct GstInterleave;</pre> -<p> -</p> </div> </div> <div class="refsect1"> diff --git a/docs/plugins/html/gst-plugins-good-plugins-ismlmux.html b/docs/plugins/html/gst-plugins-good-plugins-ismlmux.html index 945704725..c4cfc8161 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-ismlmux.html +++ b/docs/plugins/html/gst-plugins-good-plugins-ismlmux.html @@ -90,6 +90,26 @@ <td class="property_name"><a class="link" href="gst-plugins-good-plugins-ismlmux.html#GstISMLMux--trak-timescale" title="The “trak-timescale†property">trak-timescale</a></td> <td class="property_flags">Read / Write / Construct</td> </tr> +<tr> +<td class="property_type"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a></td> +<td class="property_name"><a class="link" href="gst-plugins-good-plugins-ismlmux.html#GstISMLMux--reserved-bytes-per-sec" title="The “reserved-bytes-per-sec†property">reserved-bytes-per-sec</a></td> +<td class="property_flags">Read / Write / Construct</td> +</tr> +<tr> +<td class="property_type"><span class="type">guint64</span></td> +<td class="property_name"><a class="link" href="gst-plugins-good-plugins-ismlmux.html#GstISMLMux--reserved-duration-remaining" title="The “reserved-duration-remaining†property">reserved-duration-remaining</a></td> +<td class="property_flags">Read</td> +</tr> +<tr> +<td class="property_type"><span class="type">guint64</span></td> +<td class="property_name"><a class="link" href="gst-plugins-good-plugins-ismlmux.html#GstISMLMux--reserved-max-duration" title="The “reserved-max-duration†property">reserved-max-duration</a></td> +<td class="property_flags">Read / Write</td> +</tr> +<tr> +<td class="property_type"><span class="type">guint64</span></td> +<td class="property_name"><a class="link" href="gst-plugins-good-plugins-ismlmux.html#GstISMLMux--reserved-moov-update-period" title="The “reserved-moov-update-period†property">reserved-moov-update-period</a></td> +<td class="property_flags">Read / Write</td> +</tr> </tbody> </table></div> </div> @@ -170,7 +190,7 @@ and muxes it into an mj2 file. <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="id-1.2.69.8.8.1.1"></a><h3>Element Information</h3> +<a name="id-1.2.69.8.9.1"></a><h3>Element Information</h3> <div class="variablelist"><table border="0" class="variablelist"> <colgroup> <col align="left" valign="top"> @@ -196,7 +216,7 @@ and muxes it into an mj2 file. </div> <hr> <div class="refsect2"> -<a name="id-1.2.69.8.8.1.2"></a><h3>Element Pads</h3> +<a name="id-1.2.69.8.9.2"></a><h3>Element Pads</h3> <div class="variablelist"><table border="0" class="variablelist"> <colgroup> <col align="left" valign="top"> @@ -283,8 +303,6 @@ and muxes it into an mj2 file. </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-ismlmux.functions_details"></a><h2>Functions</h2> @@ -295,8 +313,6 @@ and muxes it into an mj2 file. <div class="refsect2"> <a name="GstISMLMux-struct"></a><h3>GstISMLMux</h3> <pre class="programlisting">typedef struct _GstISMLMux GstISMLMux;</pre> -<p> -</p> </div> </div> <div class="refsect1"> @@ -373,6 +389,39 @@ and muxes it into an mj2 file. <p>Flags: Read / Write / Construct</p> <p>Default value: 0</p> </div> +<hr> +<div class="refsect2"> +<a name="GstISMLMux--reserved-bytes-per-sec"></a><h3>The <code class="literal">“reserved-bytes-per-secâ€</code> property</h3> +<pre class="programlisting"> “reserved-bytes-per-sec†<a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a></pre> +<p>Multiplier for converting reserved-max-duration into bytes of header to reserve, per second, per track.</p> +<p>Flags: Read / Write / Construct</p> +<p>Allowed values: <= 10000</p> +<p>Default value: 550</p> +</div> +<hr> +<div class="refsect2"> +<a name="GstISMLMux--reserved-duration-remaining"></a><h3>The <code class="literal">“reserved-duration-remainingâ€</code> property</h3> +<pre class="programlisting"> “reserved-duration-remaining†<span class="type">guint64</span></pre> +<p>Reports the approximate amount of remaining moov header space reserved using reserved-max-duration.</p> +<p>Flags: Read</p> +<p>Default value: 0</p> +</div> +<hr> +<div class="refsect2"> +<a name="GstISMLMux--reserved-max-duration"></a><h3>The <code class="literal">“reserved-max-durationâ€</code> property</h3> +<pre class="programlisting"> “reserved-max-duration†<span class="type">guint64</span></pre> +<p>When set to a value > 0, reserves space for index tables at the beginning of the file.</p> +<p>Flags: Read / Write</p> +<p>Default value: 18446744073709551615</p> +</div> +<hr> +<div class="refsect2"> +<a name="GstISMLMux--reserved-moov-update-period"></a><h3>The <code class="literal">“reserved-moov-update-periodâ€</code> property</h3> +<pre class="programlisting"> “reserved-moov-update-period†<span class="type">guint64</span></pre> +<p>When used with reserved-max-duration, periodically updates the index tables with information muxed so far.</p> +<p>Flags: Read / Write</p> +<p>Default value: 18446744073709551615</p> +</div> </div> </div> <div class="footer"> diff --git a/docs/plugins/html/gst-plugins-good-plugins-jackaudiosink.html b/docs/plugins/html/gst-plugins-good-plugins-jackaudiosink.html index 3de75053a..d5bbf5ed0 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-jackaudiosink.html +++ b/docs/plugins/html/gst-plugins-good-plugins-jackaudiosink.html @@ -29,7 +29,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-jackaudiosink.top_of_page"></a>jackaudiosink</span></h2> -<p>jackaudiosink — Output audio to a JACK server</p> +<p>jackaudiosink</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -161,8 +161,6 @@ </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-jackaudiosink.functions_details"></a><h2>Functions</h2> @@ -173,8 +171,6 @@ <div class="refsect2"> <a name="GstJackAudioSink-struct"></a><h3>struct GstJackAudioSink</h3> <pre class="programlisting">struct GstJackAudioSink;</pre> -<p> -</p> </div> </div> <div class="refsect1"> diff --git a/docs/plugins/html/gst-plugins-good-plugins-jackaudiosrc.html b/docs/plugins/html/gst-plugins-good-plugins-jackaudiosrc.html index fcb1a1fb8..3e89db103 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-jackaudiosrc.html +++ b/docs/plugins/html/gst-plugins-good-plugins-jackaudiosrc.html @@ -29,7 +29,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-jackaudiosrc.top_of_page"></a>jackaudiosrc</span></h2> -<p>jackaudiosrc — Captures audio from a JACK server</p> +<p>jackaudiosrc</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -162,8 +162,6 @@ </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-jackaudiosrc.functions_details"></a><h2>Functions</h2> @@ -174,8 +172,6 @@ <div class="refsect2"> <a name="GstJackAudioSrc-struct"></a><h3>struct GstJackAudioSrc</h3> <pre class="programlisting">struct GstJackAudioSrc;</pre> -<p> -</p> </div> </div> <div class="refsect1"> diff --git a/docs/plugins/html/gst-plugins-good-plugins-jpegdec.html b/docs/plugins/html/gst-plugins-good-plugins-jpegdec.html index 3e6647d8d..ba2807108 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-jpegdec.html +++ b/docs/plugins/html/gst-plugins-good-plugins-jpegdec.html @@ -29,7 +29,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-jpegdec.top_of_page"></a>jpegdec</span></h2> -<p>jpegdec — Decode images from JPEG format</p> +<p>jpegdec</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -160,8 +160,6 @@ </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-jpegdec.functions_details"></a><h2>Functions</h2> @@ -172,8 +170,6 @@ <div class="refsect2"> <a name="GstJpegDec-struct"></a><h3>struct GstJpegDec</h3> <pre class="programlisting">struct GstJpegDec;</pre> -<p> -</p> </div> </div> <div class="refsect1"> diff --git a/docs/plugins/html/gst-plugins-good-plugins-jpegenc.html b/docs/plugins/html/gst-plugins-good-plugins-jpegenc.html index 50b4e9ebf..df46e54af 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-jpegenc.html +++ b/docs/plugins/html/gst-plugins-good-plugins-jpegenc.html @@ -31,7 +31,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-jpegenc.top_of_page"></a>jpegenc</span></h2> -<p>jpegenc — Encode images in JPEG format</p> +<p>jpegenc</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -68,7 +68,7 @@ <tbody><tr> <td class="signal_type"><span class="returnvalue">void</span></td> <td class="signal_name"><a class="link" href="gst-plugins-good-plugins-jpegenc.html#GstJpegEnc-frame-encoded" title="The “frame-encoded†signal">frame-encoded</a></td> -<td class="signal_flags">Run Last</td> +<td class="signal_flags"><a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></td> </tr></tbody> </table></div> </div> @@ -183,8 +183,6 @@ GstJpegEnc implements </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-jpegenc.functions_details"></a><h2>Functions</h2> @@ -195,8 +193,6 @@ GstJpegEnc implements <div class="refsect2"> <a name="GstJpegEnc-struct"></a><h3>struct GstJpegEnc</h3> <pre class="programlisting">struct GstJpegEnc;</pre> -<p> -</p> </div> </div> <div class="refsect1"> @@ -225,31 +221,7 @@ GstJpegEnc implements <pre class="programlisting"><span class="returnvalue">void</span> user_function (<a class="link" href="gst-plugins-good-plugins-jpegenc.html#GstJpegEnc"><span class="type">GstJpegEnc</span></a> *gstjpegenc, <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data)</pre> -<p> -</p> -<div class="refsect3"> -<a name="id-1.2.73.13.2.5"></a><h4>Parameters</h4> -<div class="informaltable"><table width="100%" border="0"> -<colgroup> -<col width="150px" class="parameters_name"> -<col class="parameters_description"> -<col width="200px" class="parameters_annotations"> -</colgroup> -<tbody> -<tr> -<td class="parameter_name"><p>gstjpegenc</p></td> -<td class="parameter_description"><p>the object which received the signal.</p></td> -<td class="parameter_annotations"> </td> -</tr> -<tr> -<td class="parameter_name"><p>user_data</p></td> -<td class="parameter_description"><p>user data set when the signal handler was connected.</p></td> -<td class="parameter_annotations"> </td> -</tr> -</tbody> -</table></div> -</div> -<p>Flags: Run Last</p> +<p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></p> </div> </div> </div> diff --git a/docs/plugins/html/gst-plugins-good-plugins-level.html b/docs/plugins/html/gst-plugins-good-plugins-level.html index 0b63b5da2..7706870be 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-level.html +++ b/docs/plugins/html/gst-plugins-good-plugins-level.html @@ -29,7 +29,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-level.top_of_page"></a>level</span></h2> -<p>level — RMS/Peak/Decaying Peak Level messager for audio/raw</p> +<p>level</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -519,8 +519,6 @@ The message's structure contains these fields:</p> </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-level.functions_details"></a><h2>Functions</h2> diff --git a/docs/plugins/html/gst-plugins-good-plugins-matroskademux.html b/docs/plugins/html/gst-plugins-good-plugins-matroskademux.html index b73a048b0..a061f525e 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-matroskademux.html +++ b/docs/plugins/html/gst-plugins-good-plugins-matroskademux.html @@ -29,7 +29,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-matroskademux.top_of_page"></a>matroskademux</span></h2> -<p>matroskademux — Demuxes Matroska/WebM streams into video/audio/subtitles</p> +<p>matroskademux</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -259,8 +259,6 @@ </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-matroskademux.functions_details"></a><h2>Functions</h2> @@ -271,8 +269,6 @@ <div class="refsect2"> <a name="GstMatroskaDemux-struct"></a><h3>GstMatroskaDemux</h3> <pre class="programlisting">typedef struct _GstMatroskaDemux GstMatroskaDemux;</pre> -<p> -</p> </div> </div> <div class="refsect1"> diff --git a/docs/plugins/html/gst-plugins-good-plugins-matroskamux.html b/docs/plugins/html/gst-plugins-good-plugins-matroskamux.html index 25d811243..f7ffb01c6 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-matroskamux.html +++ b/docs/plugins/html/gst-plugins-good-plugins-matroskamux.html @@ -30,7 +30,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-matroskamux.top_of_page"></a>matroskamux</span></h2> -<p>matroskamux — Muxes video/audio/subtitle streams into a matroska stream</p> +<p>matroskamux</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -404,8 +404,6 @@ GstMatroskaMux implements </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-matroskamux.functions_details"></a><h2>Functions</h2> @@ -416,8 +414,6 @@ GstMatroskaMux implements <div class="refsect2"> <a name="GstMatroskaMux-struct"></a><h3>struct GstMatroskaMux</h3> <pre class="programlisting">struct GstMatroskaMux;</pre> -<p> -</p> </div> </div> <div class="refsect1"> diff --git a/docs/plugins/html/gst-plugins-good-plugins-mj2mux.html b/docs/plugins/html/gst-plugins-good-plugins-mj2mux.html index 6fef577dc..363338312 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-mj2mux.html +++ b/docs/plugins/html/gst-plugins-good-plugins-mj2mux.html @@ -90,6 +90,26 @@ <td class="property_name"><a class="link" href="gst-plugins-good-plugins-mj2mux.html#GstMJ2Mux--trak-timescale" title="The “trak-timescale†property">trak-timescale</a></td> <td class="property_flags">Read / Write / Construct</td> </tr> +<tr> +<td class="property_type"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a></td> +<td class="property_name"><a class="link" href="gst-plugins-good-plugins-mj2mux.html#GstMJ2Mux--reserved-bytes-per-sec" title="The “reserved-bytes-per-sec†property">reserved-bytes-per-sec</a></td> +<td class="property_flags">Read / Write / Construct</td> +</tr> +<tr> +<td class="property_type"><span class="type">guint64</span></td> +<td class="property_name"><a class="link" href="gst-plugins-good-plugins-mj2mux.html#GstMJ2Mux--reserved-duration-remaining" title="The “reserved-duration-remaining†property">reserved-duration-remaining</a></td> +<td class="property_flags">Read</td> +</tr> +<tr> +<td class="property_type"><span class="type">guint64</span></td> +<td class="property_name"><a class="link" href="gst-plugins-good-plugins-mj2mux.html#GstMJ2Mux--reserved-max-duration" title="The “reserved-max-duration†property">reserved-max-duration</a></td> +<td class="property_flags">Read / Write</td> +</tr> +<tr> +<td class="property_type"><span class="type">guint64</span></td> +<td class="property_name"><a class="link" href="gst-plugins-good-plugins-mj2mux.html#GstMJ2Mux--reserved-moov-update-period" title="The “reserved-moov-update-period†property">reserved-moov-update-period</a></td> +<td class="property_flags">Read / Write</td> +</tr> </tbody> </table></div> </div> @@ -170,7 +190,7 @@ and muxes it into an mj2 file. <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="id-1.2.77.8.8.1.1"></a><h3>Element Information</h3> +<a name="id-1.2.77.8.9.1"></a><h3>Element Information</h3> <div class="variablelist"><table border="0" class="variablelist"> <colgroup> <col align="left" valign="top"> @@ -196,7 +216,7 @@ and muxes it into an mj2 file. </div> <hr> <div class="refsect2"> -<a name="id-1.2.77.8.8.1.2"></a><h3>Element Pads</h3> +<a name="id-1.2.77.8.9.2"></a><h3>Element Pads</h3> <div class="variablelist"><table border="0" class="variablelist"> <colgroup> <col align="left" valign="top"> @@ -279,8 +299,6 @@ and muxes it into an mj2 file. </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-mj2mux.functions_details"></a><h2>Functions</h2> @@ -291,8 +309,6 @@ and muxes it into an mj2 file. <div class="refsect2"> <a name="GstMJ2Mux-struct"></a><h3>GstMJ2Mux</h3> <pre class="programlisting">typedef struct _GstMJ2Mux GstMJ2Mux;</pre> -<p> -</p> </div> </div> <div class="refsect1"> @@ -369,6 +385,39 @@ and muxes it into an mj2 file. <p>Flags: Read / Write / Construct</p> <p>Default value: 0</p> </div> +<hr> +<div class="refsect2"> +<a name="GstMJ2Mux--reserved-bytes-per-sec"></a><h3>The <code class="literal">“reserved-bytes-per-secâ€</code> property</h3> +<pre class="programlisting"> “reserved-bytes-per-sec†<a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a></pre> +<p>Multiplier for converting reserved-max-duration into bytes of header to reserve, per second, per track.</p> +<p>Flags: Read / Write / Construct</p> +<p>Allowed values: <= 10000</p> +<p>Default value: 550</p> +</div> +<hr> +<div class="refsect2"> +<a name="GstMJ2Mux--reserved-duration-remaining"></a><h3>The <code class="literal">“reserved-duration-remainingâ€</code> property</h3> +<pre class="programlisting"> “reserved-duration-remaining†<span class="type">guint64</span></pre> +<p>Reports the approximate amount of remaining moov header space reserved using reserved-max-duration.</p> +<p>Flags: Read</p> +<p>Default value: 0</p> +</div> +<hr> +<div class="refsect2"> +<a name="GstMJ2Mux--reserved-max-duration"></a><h3>The <code class="literal">“reserved-max-durationâ€</code> property</h3> +<pre class="programlisting"> “reserved-max-duration†<span class="type">guint64</span></pre> +<p>When set to a value > 0, reserves space for index tables at the beginning of the file.</p> +<p>Flags: Read / Write</p> +<p>Default value: 18446744073709551615</p> +</div> +<hr> +<div class="refsect2"> +<a name="GstMJ2Mux--reserved-moov-update-period"></a><h3>The <code class="literal">“reserved-moov-update-periodâ€</code> property</h3> +<pre class="programlisting"> “reserved-moov-update-period†<span class="type">guint64</span></pre> +<p>When used with reserved-max-duration, periodically updates the index tables with information muxed so far.</p> +<p>Flags: Read / Write</p> +<p>Default value: 18446744073709551615</p> +</div> </div> </div> <div class="footer"> diff --git a/docs/plugins/html/gst-plugins-good-plugins-monoscope.html b/docs/plugins/html/gst-plugins-good-plugins-monoscope.html index 248b80793..ff845a67f 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-monoscope.html +++ b/docs/plugins/html/gst-plugins-good-plugins-monoscope.html @@ -27,7 +27,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-monoscope.top_of_page"></a>monoscope</span></h2> -<p>monoscope — Displays a highly stabilised waveform of audio input</p> +<p>monoscope</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -142,8 +142,6 @@ curve of the audio signal like on an oscilloscope.</p> </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-monoscope.functions_details"></a><h2>Functions</h2> @@ -186,8 +184,6 @@ curve of the audio signal like on an oscilloscope.</p> struct monoscope_state *visstate; }; </pre> -<p> -</p> </div> </div> <div class="refsect1"> diff --git a/docs/plugins/html/gst-plugins-good-plugins-mp4mux.html b/docs/plugins/html/gst-plugins-good-plugins-mp4mux.html index 99f04f9f9..a3c79bd88 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-mp4mux.html +++ b/docs/plugins/html/gst-plugins-good-plugins-mp4mux.html @@ -90,6 +90,26 @@ <td class="property_name"><a class="link" href="gst-plugins-good-plugins-mp4mux.html#GstMP4Mux--trak-timescale" title="The “trak-timescale†property">trak-timescale</a></td> <td class="property_flags">Read / Write / Construct</td> </tr> +<tr> +<td class="property_type"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a></td> +<td class="property_name"><a class="link" href="gst-plugins-good-plugins-mp4mux.html#GstMP4Mux--reserved-bytes-per-sec" title="The “reserved-bytes-per-sec†property">reserved-bytes-per-sec</a></td> +<td class="property_flags">Read / Write / Construct</td> +</tr> +<tr> +<td class="property_type"><span class="type">guint64</span></td> +<td class="property_name"><a class="link" href="gst-plugins-good-plugins-mp4mux.html#GstMP4Mux--reserved-duration-remaining" title="The “reserved-duration-remaining†property">reserved-duration-remaining</a></td> +<td class="property_flags">Read</td> +</tr> +<tr> +<td class="property_type"><span class="type">guint64</span></td> +<td class="property_name"><a class="link" href="gst-plugins-good-plugins-mp4mux.html#GstMP4Mux--reserved-max-duration" title="The “reserved-max-duration†property">reserved-max-duration</a></td> +<td class="property_flags">Read / Write</td> +</tr> +<tr> +<td class="property_type"><span class="type">guint64</span></td> +<td class="property_name"><a class="link" href="gst-plugins-good-plugins-mp4mux.html#GstMP4Mux--reserved-moov-update-period" title="The “reserved-moov-update-period†property">reserved-moov-update-period</a></td> +<td class="property_flags">Read / Write</td> +</tr> </tbody> </table></div> </div> @@ -224,6 +244,10 @@ and muxes it into an mp4 file. </tr> <tr> <td><p><span class="term"></span></p></td> +<td> audio/x-ac3, channels=(int)[ 1, 6 ], rate=(int)[ 1, 2147483647 ]</td> +</tr> +<tr> +<td><p><span class="term"></span></p></td> <td> audio/x-alac, channels=(int)[ 1, 2 ], rate=(int)[ 1, 2147483647 ]</td> </tr> </tbody> @@ -314,8 +338,6 @@ and muxes it into an mp4 file. </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-mp4mux.functions_details"></a><h2>Functions</h2> @@ -326,8 +348,6 @@ and muxes it into an mp4 file. <div class="refsect2"> <a name="GstMP4Mux-struct"></a><h3>GstMP4Mux</h3> <pre class="programlisting">typedef struct _GstMP4Mux GstMP4Mux;</pre> -<p> -</p> </div> </div> <div class="refsect1"> @@ -404,6 +424,39 @@ and muxes it into an mp4 file. <p>Flags: Read / Write / Construct</p> <p>Default value: 0</p> </div> +<hr> +<div class="refsect2"> +<a name="GstMP4Mux--reserved-bytes-per-sec"></a><h3>The <code class="literal">“reserved-bytes-per-secâ€</code> property</h3> +<pre class="programlisting"> “reserved-bytes-per-sec†<a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a></pre> +<p>Multiplier for converting reserved-max-duration into bytes of header to reserve, per second, per track.</p> +<p>Flags: Read / Write / Construct</p> +<p>Allowed values: <= 10000</p> +<p>Default value: 550</p> +</div> +<hr> +<div class="refsect2"> +<a name="GstMP4Mux--reserved-duration-remaining"></a><h3>The <code class="literal">“reserved-duration-remainingâ€</code> property</h3> +<pre class="programlisting"> “reserved-duration-remaining†<span class="type">guint64</span></pre> +<p>Reports the approximate amount of remaining moov header space reserved using reserved-max-duration.</p> +<p>Flags: Read</p> +<p>Default value: 0</p> +</div> +<hr> +<div class="refsect2"> +<a name="GstMP4Mux--reserved-max-duration"></a><h3>The <code class="literal">“reserved-max-durationâ€</code> property</h3> +<pre class="programlisting"> “reserved-max-duration†<span class="type">guint64</span></pre> +<p>When set to a value > 0, reserves space for index tables at the beginning of the file.</p> +<p>Flags: Read / Write</p> +<p>Default value: 18446744073709551615</p> +</div> +<hr> +<div class="refsect2"> +<a name="GstMP4Mux--reserved-moov-update-period"></a><h3>The <code class="literal">“reserved-moov-update-periodâ€</code> property</h3> +<pre class="programlisting"> “reserved-moov-update-period†<span class="type">guint64</span></pre> +<p>When used with reserved-max-duration, periodically updates the index tables with information muxed so far.</p> +<p>Flags: Read / Write</p> +<p>Default value: 18446744073709551615</p> +</div> </div> </div> <div class="footer"> diff --git a/docs/plugins/html/gst-plugins-good-plugins-mpegaudioparse.html b/docs/plugins/html/gst-plugins-good-plugins-mpegaudioparse.html index 776fdb2ed..7e993c6a7 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-mpegaudioparse.html +++ b/docs/plugins/html/gst-plugins-good-plugins-mpegaudioparse.html @@ -152,8 +152,6 @@ </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-mpegaudioparse.functions_details"></a><h2>Functions</h2> diff --git a/docs/plugins/html/gst-plugins-good-plugins-mulawdec.html b/docs/plugins/html/gst-plugins-good-plugins-mulawdec.html index ad5bc599a..1e44c82ae 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-mulawdec.html +++ b/docs/plugins/html/gst-plugins-good-plugins-mulawdec.html @@ -28,7 +28,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-mulawdec.top_of_page"></a>mulawdec</span></h2> -<p>mulawdec — Convert 8bit mu law to 16bit PCM</p> +<p>mulawdec</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -61,7 +61,7 @@ <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="id-1.2.81.6.2.1.1"></a><h3>Element Information</h3> +<a name="id-1.2.81.6.3.1"></a><h3>Element Information</h3> <div class="variablelist"><table border="0" class="variablelist"> <colgroup> <col align="left" valign="top"> @@ -87,7 +87,7 @@ </div> <hr> <div class="refsect2"> -<a name="id-1.2.81.6.2.1.2"></a><h3>Element Pads</h3> +<a name="id-1.2.81.6.3.2"></a><h3>Element Pads</h3> <div class="variablelist"><table border="0" class="variablelist"> <colgroup> <col align="left" valign="top"> @@ -138,8 +138,6 @@ </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-mulawdec.functions_details"></a><h2>Functions</h2> @@ -150,8 +148,6 @@ <div class="refsect2"> <a name="GstMuLawDec-struct"></a><h3>struct GstMuLawDec</h3> <pre class="programlisting">struct GstMuLawDec;</pre> -<p> -</p> </div> </div> </div> diff --git a/docs/plugins/html/gst-plugins-good-plugins-mulawenc.html b/docs/plugins/html/gst-plugins-good-plugins-mulawenc.html index b6cf143bc..2a7a93f86 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-mulawenc.html +++ b/docs/plugins/html/gst-plugins-good-plugins-mulawenc.html @@ -28,7 +28,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-mulawenc.top_of_page"></a>mulawenc</span></h2> -<p>mulawenc — Convert 16bit PCM to 8bit mu law</p> +<p>mulawenc</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -61,7 +61,7 @@ <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="id-1.2.82.7.2.1.1"></a><h3>Element Information</h3> +<a name="id-1.2.82.7.3.1"></a><h3>Element Information</h3> <div class="variablelist"><table border="0" class="variablelist"> <colgroup> <col align="left" valign="top"> @@ -87,7 +87,7 @@ </div> <hr> <div class="refsect2"> -<a name="id-1.2.82.7.2.1.2"></a><h3>Element Pads</h3> +<a name="id-1.2.82.7.3.2"></a><h3>Element Pads</h3> <div class="variablelist"><table border="0" class="variablelist"> <colgroup> <col align="left" valign="top"> @@ -138,8 +138,6 @@ </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-mulawenc.functions_details"></a><h2>Functions</h2> @@ -150,8 +148,6 @@ <div class="refsect2"> <a name="GstMuLawEnc-struct"></a><h3>struct GstMuLawEnc</h3> <pre class="programlisting">struct GstMuLawEnc;</pre> -<p> -</p> </div> </div> </div> diff --git a/docs/plugins/html/gst-plugins-good-plugins-multifilesink.html b/docs/plugins/html/gst-plugins-good-plugins-multifilesink.html index 7dd489900..26575179c 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-multifilesink.html +++ b/docs/plugins/html/gst-plugins-good-plugins-multifilesink.html @@ -29,7 +29,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-multifilesink.top_of_page"></a>multifilesink</span></h2> -<p>multifilesink — Write buffers to a sequentially named set of files</p> +<p>multifilesink</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -245,8 +245,6 @@ gst<span class="gtkdoc opt">-</span>launch<span class="gtkdoc opt">-</span><span </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-multifilesink.functions_details"></a><h2>Functions</h2> @@ -257,8 +255,6 @@ gst<span class="gtkdoc opt">-</span>launch<span class="gtkdoc opt">-</span><span <div class="refsect2"> <a name="GstMultiFileSink-struct"></a><h3>struct GstMultiFileSink</h3> <pre class="programlisting">struct GstMultiFileSink;</pre> -<p> -</p> </div> <hr> <div class="refsect2"> diff --git a/docs/plugins/html/gst-plugins-good-plugins-multifilesrc.html b/docs/plugins/html/gst-plugins-good-plugins-multifilesrc.html index 5d49f3a43..1a31c6e48 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-multifilesrc.html +++ b/docs/plugins/html/gst-plugins-good-plugins-multifilesrc.html @@ -29,7 +29,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-multifilesrc.top_of_page"></a>multifilesrc</span></h2> -<p>multifilesrc — Read a sequentially named set of files into buffers</p> +<p>multifilesrc</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -184,8 +184,6 @@ files named img.0000.png, img.0001.png, etc. </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-multifilesrc.functions_details"></a><h2>Functions</h2> @@ -196,8 +194,6 @@ files named img.0000.png, img.0001.png, etc. <div class="refsect2"> <a name="GstMultiFileSrc-struct"></a><h3>struct GstMultiFileSrc</h3> <pre class="programlisting">struct GstMultiFileSrc;</pre> -<p> -</p> </div> </div> <div class="refsect1"> diff --git a/docs/plugins/html/gst-plugins-good-plugins-multipartdemux.html b/docs/plugins/html/gst-plugins-good-plugins-multipartdemux.html index c6fea3ba0..c4ef8211f 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-multipartdemux.html +++ b/docs/plugins/html/gst-plugins-good-plugins-multipartdemux.html @@ -29,7 +29,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-multipartdemux.top_of_page"></a>multipartdemux</span></h2> -<p>multipartdemux — demux multipart streams</p> +<p>multipartdemux</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -190,8 +190,6 @@ containing JPEG frames. </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-multipartdemux.functions_details"></a><h2>Functions</h2> diff --git a/docs/plugins/html/gst-plugins-good-plugins-multipartmux.html b/docs/plugins/html/gst-plugins-good-plugins-multipartmux.html index 4adb39661..a85bd774f 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-multipartmux.html +++ b/docs/plugins/html/gst-plugins-good-plugins-multipartmux.html @@ -29,7 +29,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-multipartmux.top_of_page"></a>multipartmux</span></h2> -<p>multipartmux — mux multipart streams</p> +<p>multipartmux</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -171,8 +171,6 @@ stored to a file. </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-multipartmux.functions_details"></a><h2>Functions</h2> diff --git a/docs/plugins/html/gst-plugins-good-plugins-multiudpsink.html b/docs/plugins/html/gst-plugins-good-plugins-multiudpsink.html index e604c76e5..9284f8db4 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-multiudpsink.html +++ b/docs/plugins/html/gst-plugins-good-plugins-multiudpsink.html @@ -30,7 +30,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-multiudpsink.top_of_page"></a>multiudpsink</span></h2> -<p>multiudpsink — Send data over the network via UDP to one or multiple recipients which can be added or removed at runtime using action signals</p> +<p>multiudpsink</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -175,33 +175,33 @@ <tr> <td class="signal_type"><span class="returnvalue">void</span></td> <td class="signal_name"><a class="link" href="gst-plugins-good-plugins-multiudpsink.html#GstMultiUDPSink-add" title="The “add†signal">add</a></td> -<td class="signal_flags">Action</td> +<td class="signal_flags"><a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-ACTION:CAPS">Action</a></td> </tr> <tr> <td class="signal_type"><span class="returnvalue">void</span></td> <td class="signal_name"><a class="link" href="gst-plugins-good-plugins-multiudpsink.html#GstMultiUDPSink-clear" title="The “clear†signal">clear</a></td> -<td class="signal_flags">Action</td> +<td class="signal_flags"><a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-ACTION:CAPS">Action</a></td> </tr> <tr> <td class="signal_type"><span class="returnvalue">void</span></td> <td class="signal_name"><a class="link" href="gst-plugins-good-plugins-multiudpsink.html#GstMultiUDPSink-client-added" title="The “client-added†signal">client-added</a></td> -<td class="signal_flags">Run Last</td> +<td class="signal_flags"><a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></td> </tr> <tr> <td class="signal_type"><span class="returnvalue">void</span></td> <td class="signal_name"><a class="link" href="gst-plugins-good-plugins-multiudpsink.html#GstMultiUDPSink-client-removed" title="The “client-removed†signal">client-removed</a></td> -<td class="signal_flags">Run Last</td> +<td class="signal_flags"><a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></td> </tr> <tr> <td class="signal_type"> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstStructure.html"><span class="returnvalue">GstStructure</span></a>*</td> <td class="signal_name"><a class="link" href="gst-plugins-good-plugins-multiudpsink.html#GstMultiUDPSink-get-stats" title="The “get-stats†signal">get-stats</a></td> -<td class="signal_flags">Action</td> +<td class="signal_flags"><a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-ACTION:CAPS">Action</a></td> </tr> <tr> <td class="signal_type"><span class="returnvalue">void</span></td> <td class="signal_name"><a class="link" href="gst-plugins-good-plugins-multiudpsink.html#GstMultiUDPSink-remove" title="The “remove†signal">remove</a></td> -<td class="signal_flags">Action</td> +<td class="signal_flags"><a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-ACTION:CAPS">Action</a></td> </tr> </tbody> </table></div> @@ -238,7 +238,7 @@ It can be combined with rtp payload encoders to implement RTP streaming.</p> <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="id-1.2.87.8.2.1.1"></a><h3>Element Information</h3> +<a name="id-1.2.87.8.3.1"></a><h3>Element Information</h3> <div class="variablelist"><table border="0" class="variablelist"> <colgroup> <col align="left" valign="top"> @@ -264,7 +264,7 @@ It can be combined with rtp payload encoders to implement RTP streaming.</p> </div> <hr> <div class="refsect2"> -<a name="id-1.2.87.8.2.1.2"></a><h3>Element Pads</h3> +<a name="id-1.2.87.8.3.2"></a><h3>Element Pads</h3> <div class="variablelist"><table border="0" class="variablelist"> <colgroup> <col align="left" valign="top"> @@ -291,8 +291,6 @@ It can be combined with rtp payload encoders to implement RTP streaming.</p> </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-multiudpsink.functions_details"></a><h2>Functions</h2> @@ -303,8 +301,6 @@ It can be combined with rtp payload encoders to implement RTP streaming.</p> <div class="refsect2"> <a name="GstMultiUDPSink-struct"></a><h3>struct GstMultiUDPSink</h3> <pre class="programlisting">struct GstMultiUDPSink;</pre> -<p> -</p> </div> </div> <div class="refsect1"> @@ -538,7 +534,7 @@ of destinations.</p> </tbody> </table></div> </div> -<p>Flags: Action</p> +<p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-ACTION:CAPS">Action</a></p> </div> <hr> <div class="refsect2"> @@ -569,7 +565,7 @@ user_function (<a class="link" href="gst-plugins-good-plugins-multiudpsink.html# </tbody> </table></div> </div> -<p>Flags: Action</p> +<p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-ACTION:CAPS">Action</a></p> </div> <hr> <div class="refsect2"> @@ -613,7 +609,7 @@ clients.</p> </tbody> </table></div> </div> -<p>Flags: Run Last</p> +<p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></p> </div> <hr> <div class="refsect2"> @@ -657,7 +653,7 @@ clients.</p> </tbody> </table></div> </div> -<p>Flags: Run Last</p> +<p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></p> </div> <hr> <div class="refsect2"> @@ -707,7 +703,7 @@ user_function (<a class="link" href="gst-plugins-good-plugins-multiudpsink.html# <p> a GstStructure: bytes_sent, packets_sent, connect_time (in epoch seconds), disconnect_time (in epoch seconds)</p> </div> -<p>Flags: Action</p> +<p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-ACTION:CAPS">Action</a></p> </div> <hr> <div class="refsect2"> @@ -753,7 +749,7 @@ clients.</p> </tbody> </table></div> </div> -<p>Flags: Action</p> +<p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-ACTION:CAPS">Action</a></p> </div> </div> <div class="refsect1"> diff --git a/docs/plugins/html/gst-plugins-good-plugins-optv.html b/docs/plugins/html/gst-plugins-good-plugins-optv.html index 0186b201c..dc3d86d04 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-optv.html +++ b/docs/plugins/html/gst-plugins-good-plugins-optv.html @@ -29,7 +29,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-optv.top_of_page"></a>optv</span></h2> -<p>optv — Optical art meets real-time video effect</p> +<p>optv</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -183,8 +183,6 @@ various optical pattern.</p> </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-optv.functions_details"></a><h2>Functions</h2> @@ -195,8 +193,6 @@ various optical pattern.</p> <div class="refsect2"> <a name="GstOpTV-struct"></a><h3>struct GstOpTV</h3> <pre class="programlisting">struct GstOpTV;</pre> -<p> -</p> </div> </div> <div class="refsect1"> diff --git a/docs/plugins/html/gst-plugins-good-plugins-oss4sink.html b/docs/plugins/html/gst-plugins-good-plugins-oss4sink.html index 9a5162e9e..4f253ffe7 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-oss4sink.html +++ b/docs/plugins/html/gst-plugins-good-plugins-oss4sink.html @@ -30,7 +30,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-oss4sink.top_of_page"></a>oss4sink</span></h2> -<p>oss4sink — Output to a sound card via OSS version 4</p> +<p>oss4sink</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -165,8 +165,6 @@ GstOss4Sink implements </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-oss4sink.functions_details"></a><h2>Functions</h2> @@ -177,8 +175,6 @@ GstOss4Sink implements <div class="refsect2"> <a name="GstOss4Sink-struct"></a><h3>struct GstOss4Sink</h3> <pre class="programlisting">struct GstOss4Sink;</pre> -<p> -</p> </div> </div> <div class="refsect1"> diff --git a/docs/plugins/html/gst-plugins-good-plugins-oss4src.html b/docs/plugins/html/gst-plugins-good-plugins-oss4src.html index daa1e9326..64074ed34 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-oss4src.html +++ b/docs/plugins/html/gst-plugins-good-plugins-oss4src.html @@ -30,7 +30,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-oss4src.top_of_page"></a>oss4src</span></h2> -<p>oss4src — Capture from a sound card via OSS version 4</p> +<p>oss4src</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -156,8 +156,6 @@ GstOss4Source implements </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-oss4src.functions_details"></a><h2>Functions</h2> @@ -168,8 +166,6 @@ GstOss4Source implements <div class="refsect2"> <a name="GstOss4Source-struct"></a><h3>struct GstOss4Source</h3> <pre class="programlisting">struct GstOss4Source;</pre> -<p> -</p> </div> </div> <div class="refsect1"> diff --git a/docs/plugins/html/gst-plugins-good-plugins-osssink.html b/docs/plugins/html/gst-plugins-good-plugins-osssink.html index 5904af6c5..bb4ae9f26 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-osssink.html +++ b/docs/plugins/html/gst-plugins-good-plugins-osssink.html @@ -29,7 +29,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-osssink.top_of_page"></a>osssink</span></h2> -<p>osssink — Output to a sound card via OSS</p> +<p>osssink</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -136,8 +136,6 @@ </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-osssink.functions_details"></a><h2>Functions</h2> @@ -148,8 +146,6 @@ <div class="refsect2"> <a name="GstOssSink-struct"></a><h3>struct GstOssSink</h3> <pre class="programlisting">struct GstOssSink;</pre> -<p> -</p> </div> </div> <div class="refsect1"> diff --git a/docs/plugins/html/gst-plugins-good-plugins-osssrc.html b/docs/plugins/html/gst-plugins-good-plugins-osssrc.html index 30954069d..658da05bd 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-osssrc.html +++ b/docs/plugins/html/gst-plugins-good-plugins-osssrc.html @@ -30,7 +30,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-osssrc.top_of_page"></a>osssrc</span></h2> -<p>osssrc — Capture from a sound card via OSS</p> +<p>osssrc</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -152,8 +152,6 @@ GstOssSrc implements </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-osssrc.functions_details"></a><h2>Functions</h2> @@ -164,8 +162,6 @@ GstOssSrc implements <div class="refsect2"> <a name="GstOssSrc-struct"></a><h3>struct GstOssSrc</h3> <pre class="programlisting">struct GstOssSrc;</pre> -<p> -</p> </div> </div> <div class="refsect1"> diff --git a/docs/plugins/html/gst-plugins-good-plugins-osxaudiosink.html b/docs/plugins/html/gst-plugins-good-plugins-osxaudiosink.html index cab8694ec..c88c85248 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-osxaudiosink.html +++ b/docs/plugins/html/gst-plugins-good-plugins-osxaudiosink.html @@ -28,7 +28,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-osxaudiosink.top_of_page"></a>osxaudiosink</span></h2> -<p>osxaudiosink — Output to a sound card in OS X</p> +<p>osxaudiosink</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -94,8 +94,6 @@ <a name="id-1.2.93.5.2.2"></a><h3>Element Pads</h3> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-osxaudiosink.functions_details"></a><h2>Functions</h2> @@ -118,8 +116,6 @@ GstAudioChannelPosition channel_positions[GST_OSX_AUDIO_MAX_CHANNEL]; }; </pre> -<p> -</p> </div> </div> <div class="refsect1"> diff --git a/docs/plugins/html/gst-plugins-good-plugins-osxaudiosrc.html b/docs/plugins/html/gst-plugins-good-plugins-osxaudiosrc.html index b02e62961..5cb774f13 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-osxaudiosrc.html +++ b/docs/plugins/html/gst-plugins-good-plugins-osxaudiosrc.html @@ -28,7 +28,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-osxaudiosrc.top_of_page"></a>osxaudiosrc</span></h2> -<p>osxaudiosrc — Input from a sound card in OS X</p> +<p>osxaudiosrc</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -94,8 +94,6 @@ <a name="id-1.2.94.5.2.2"></a><h3>Element Pads</h3> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-osxaudiosrc.functions_details"></a><h2>Functions</h2> @@ -113,8 +111,6 @@ GstCaps *cached_caps; }; </pre> -<p> -</p> </div> </div> <div class="refsect1"> diff --git a/docs/plugins/html/gst-plugins-good-plugins-osxvideosink.html b/docs/plugins/html/gst-plugins-good-plugins-osxvideosink.html index 29696d125..089fc9aed 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-osxvideosink.html +++ b/docs/plugins/html/gst-plugins-good-plugins-osxvideosink.html @@ -28,7 +28,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-osxvideosink.top_of_page"></a>osxvideosink</span></h2> -<p>osxvideosink — OSX native videosink</p> +<p>osxvideosink</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -101,8 +101,6 @@ <a name="id-1.2.95.5.2.2"></a><h3>Element Pads</h3> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-osxvideosink.functions_details"></a><h2>Functions</h2> @@ -122,8 +120,6 @@ GstVideoInfo info; }; </pre> -<p> -</p> </div> </div> <div class="refsect1"> diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-1394.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-1394.html index 4e044c466..71f2f2559 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-plugin-1394.html +++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-1394.html @@ -42,7 +42,7 @@ </tr> <tr> <td><p><span class="term">version</span></p></td> -<td>1.5.1</td> +<td>1.5.2</td> </tr> <tr> <td><p><span class="term">run-time license</span></p></td> diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-aasink.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-aasink.html index 72dbad46a..9e494b5f2 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-plugin-aasink.html +++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-aasink.html @@ -42,7 +42,7 @@ </tr> <tr> <td><p><span class="term">version</span></p></td> -<td>1.5.1</td> +<td>1.5.2</td> </tr> <tr> <td><p><span class="term">run-time license</span></p></td> diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-alaw.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-alaw.html index f5fb21667..925e9a4cc 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-plugin-alaw.html +++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-alaw.html @@ -42,7 +42,7 @@ </tr> <tr> <td><p><span class="term">version</span></p></td> -<td>1.5.1</td> +<td>1.5.2</td> </tr> <tr> <td><p><span class="term">run-time license</span></p></td> diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-alpha.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-alpha.html index 09854d429..0bddb4cef 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-plugin-alpha.html +++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-alpha.html @@ -42,7 +42,7 @@ </tr> <tr> <td><p><span class="term">version</span></p></td> -<td>1.5.1</td> +<td>1.5.2</td> </tr> <tr> <td><p><span class="term">run-time license</span></p></td> diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-alphacolor.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-alphacolor.html index 45b001ea7..2a71b2e85 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-plugin-alphacolor.html +++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-alphacolor.html @@ -42,7 +42,7 @@ </tr> <tr> <td><p><span class="term">version</span></p></td> -<td>1.5.1</td> +<td>1.5.2</td> </tr> <tr> <td><p><span class="term">run-time license</span></p></td> diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-apetag.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-apetag.html index 8a3ea494e..0d2576cb8 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-plugin-apetag.html +++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-apetag.html @@ -42,7 +42,7 @@ </tr> <tr> <td><p><span class="term">version</span></p></td> -<td>1.5.1</td> +<td>1.5.2</td> </tr> <tr> <td><p><span class="term">run-time license</span></p></td> diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-audiofx.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-audiofx.html index 44d92e46c..447fac2a7 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-plugin-audiofx.html +++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-audiofx.html @@ -42,7 +42,7 @@ </tr> <tr> <td><p><span class="term">version</span></p></td> -<td>1.5.1</td> +<td>1.5.2</td> </tr> <tr> <td><p><span class="term">run-time license</span></p></td> diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-auparse.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-auparse.html index 1a9b43716..aefd6ed87 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-plugin-auparse.html +++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-auparse.html @@ -42,7 +42,7 @@ </tr> <tr> <td><p><span class="term">version</span></p></td> -<td>1.5.1</td> +<td>1.5.2</td> </tr> <tr> <td><p><span class="term">run-time license</span></p></td> diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-autodetect.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-autodetect.html index 375c4e54e..6704b50dd 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-plugin-autodetect.html +++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-autodetect.html @@ -42,7 +42,7 @@ </tr> <tr> <td><p><span class="term">version</span></p></td> -<td>1.5.1</td> +<td>1.5.2</td> </tr> <tr> <td><p><span class="term">run-time license</span></p></td> diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-avi.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-avi.html index 1ec842946..03e7f7382 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-plugin-avi.html +++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-avi.html @@ -42,7 +42,7 @@ </tr> <tr> <td><p><span class="term">version</span></p></td> -<td>1.5.1</td> +<td>1.5.2</td> </tr> <tr> <td><p><span class="term">run-time license</span></p></td> diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-cacasink.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-cacasink.html index 279a8daa8..8c9b1a9f2 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-plugin-cacasink.html +++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-cacasink.html @@ -42,7 +42,7 @@ </tr> <tr> <td><p><span class="term">version</span></p></td> -<td>1.5.1</td> +<td>1.5.2</td> </tr> <tr> <td><p><span class="term">run-time license</span></p></td> diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-cairo.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-cairo.html index 99b46e530..b22f66cd8 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-plugin-cairo.html +++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-cairo.html @@ -42,7 +42,7 @@ </tr> <tr> <td><p><span class="term">version</span></p></td> -<td>1.5.1</td> +<td>1.5.2</td> </tr> <tr> <td><p><span class="term">run-time license</span></p></td> diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-cutter.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-cutter.html index bf0f600c4..847ecf2c2 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-plugin-cutter.html +++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-cutter.html @@ -42,7 +42,7 @@ </tr> <tr> <td><p><span class="term">version</span></p></td> -<td>1.5.1</td> +<td>1.5.2</td> </tr> <tr> <td><p><span class="term">run-time license</span></p></td> diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-debug.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-debug.html index 64fc84e85..4115381b6 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-plugin-debug.html +++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-debug.html @@ -42,7 +42,7 @@ </tr> <tr> <td><p><span class="term">version</span></p></td> -<td>1.5.1</td> +<td>1.5.2</td> </tr> <tr> <td><p><span class="term">run-time license</span></p></td> diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-deinterlace.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-deinterlace.html index 91e6c1ad4..170d9075b 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-plugin-deinterlace.html +++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-deinterlace.html @@ -42,7 +42,7 @@ </tr> <tr> <td><p><span class="term">version</span></p></td> -<td>1.5.1</td> +<td>1.5.2</td> </tr> <tr> <td><p><span class="term">run-time license</span></p></td> diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-dtmf.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-dtmf.html index 5780553a7..f5a77ee03 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-plugin-dtmf.html +++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-dtmf.html @@ -42,7 +42,7 @@ </tr> <tr> <td><p><span class="term">version</span></p></td> -<td>1.5.1</td> +<td>1.5.2</td> </tr> <tr> <td><p><span class="term">run-time license</span></p></td> diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-dv.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-dv.html index 92505a981..9d6b76120 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-plugin-dv.html +++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-dv.html @@ -42,7 +42,7 @@ </tr> <tr> <td><p><span class="term">version</span></p></td> -<td>1.5.1</td> +<td>1.5.2</td> </tr> <tr> <td><p><span class="term">run-time license</span></p></td> diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-effectv.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-effectv.html index bc44d9de3..7f8d4273a 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-plugin-effectv.html +++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-effectv.html @@ -42,7 +42,7 @@ </tr> <tr> <td><p><span class="term">version</span></p></td> -<td>1.5.1</td> +<td>1.5.2</td> </tr> <tr> <td><p><span class="term">run-time license</span></p></td> diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-equalizer.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-equalizer.html index 680aa8fdd..fe5583d5e 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-plugin-equalizer.html +++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-equalizer.html @@ -42,7 +42,7 @@ </tr> <tr> <td><p><span class="term">version</span></p></td> -<td>1.5.1</td> +<td>1.5.2</td> </tr> <tr> <td><p><span class="term">run-time license</span></p></td> diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-flac.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-flac.html index d39be73b0..b2329c26e 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-plugin-flac.html +++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-flac.html @@ -42,7 +42,7 @@ </tr> <tr> <td><p><span class="term">version</span></p></td> -<td>1.5.1</td> +<td>1.5.2</td> </tr> <tr> <td><p><span class="term">run-time license</span></p></td> diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-flv.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-flv.html index f6445033a..0a5f91db0 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-plugin-flv.html +++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-flv.html @@ -42,7 +42,7 @@ </tr> <tr> <td><p><span class="term">version</span></p></td> -<td>1.5.1</td> +<td>1.5.2</td> </tr> <tr> <td><p><span class="term">run-time license</span></p></td> diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-flxdec.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-flxdec.html index 10bdb0ed4..99bad7ceb 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-plugin-flxdec.html +++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-flxdec.html @@ -42,7 +42,7 @@ </tr> <tr> <td><p><span class="term">version</span></p></td> -<td>1.5.1</td> +<td>1.5.2</td> </tr> <tr> <td><p><span class="term">run-time license</span></p></td> diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-gdkpixbuf.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-gdkpixbuf.html index 68ad67a34..adc6f7683 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-plugin-gdkpixbuf.html +++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-gdkpixbuf.html @@ -42,7 +42,7 @@ </tr> <tr> <td><p><span class="term">version</span></p></td> -<td>1.5.1</td> +<td>1.5.2</td> </tr> <tr> <td><p><span class="term">run-time license</span></p></td> diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-goom.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-goom.html index 986ecdc09..1633e89d5 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-plugin-goom.html +++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-goom.html @@ -42,7 +42,7 @@ </tr> <tr> <td><p><span class="term">version</span></p></td> -<td>1.5.1</td> +<td>1.5.2</td> </tr> <tr> <td><p><span class="term">run-time license</span></p></td> diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-goom2k1.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-goom2k1.html index 8e043dd99..e108fad8d 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-plugin-goom2k1.html +++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-goom2k1.html @@ -42,7 +42,7 @@ </tr> <tr> <td><p><span class="term">version</span></p></td> -<td>1.5.1</td> +<td>1.5.2</td> </tr> <tr> <td><p><span class="term">run-time license</span></p></td> diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-icydemux.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-icydemux.html index 21c619a1e..5e8177b0c 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-plugin-icydemux.html +++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-icydemux.html @@ -42,7 +42,7 @@ </tr> <tr> <td><p><span class="term">version</span></p></td> -<td>1.5.1</td> +<td>1.5.2</td> </tr> <tr> <td><p><span class="term">run-time license</span></p></td> diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-id3demux.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-id3demux.html index f40a28780..ce91976cf 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-plugin-id3demux.html +++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-id3demux.html @@ -42,7 +42,7 @@ </tr> <tr> <td><p><span class="term">version</span></p></td> -<td>1.5.1</td> +<td>1.5.2</td> </tr> <tr> <td><p><span class="term">run-time license</span></p></td> diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-imagefreeze.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-imagefreeze.html index 2967a3c42..cb7717f3a 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-plugin-imagefreeze.html +++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-imagefreeze.html @@ -42,7 +42,7 @@ </tr> <tr> <td><p><span class="term">version</span></p></td> -<td>1.5.1</td> +<td>1.5.2</td> </tr> <tr> <td><p><span class="term">run-time license</span></p></td> diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-interleave.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-interleave.html index be6178863..a0446e8b7 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-plugin-interleave.html +++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-interleave.html @@ -42,7 +42,7 @@ </tr> <tr> <td><p><span class="term">version</span></p></td> -<td>1.5.1</td> +<td>1.5.2</td> </tr> <tr> <td><p><span class="term">run-time license</span></p></td> diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-isomp4.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-isomp4.html index 642c583e1..d3ea10a84 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-plugin-isomp4.html +++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-isomp4.html @@ -42,7 +42,7 @@ </tr> <tr> <td><p><span class="term">version</span></p></td> -<td>1.5.1</td> +<td>1.5.2</td> </tr> <tr> <td><p><span class="term">run-time license</span></p></td> diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-jack.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-jack.html index e24788691..9d8655d81 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-plugin-jack.html +++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-jack.html @@ -42,7 +42,7 @@ </tr> <tr> <td><p><span class="term">version</span></p></td> -<td>1.5.1</td> +<td>1.5.2</td> </tr> <tr> <td><p><span class="term">run-time license</span></p></td> diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-jpeg.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-jpeg.html index 9f07e0af4..e659cbd22 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-plugin-jpeg.html +++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-jpeg.html @@ -42,7 +42,7 @@ </tr> <tr> <td><p><span class="term">version</span></p></td> -<td>1.5.1</td> +<td>1.5.2</td> </tr> <tr> <td><p><span class="term">run-time license</span></p></td> diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-level.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-level.html index 1fe2d5e64..506594629 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-plugin-level.html +++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-level.html @@ -42,7 +42,7 @@ </tr> <tr> <td><p><span class="term">version</span></p></td> -<td>1.5.1</td> +<td>1.5.2</td> </tr> <tr> <td><p><span class="term">run-time license</span></p></td> diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-matroska.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-matroska.html index 882221e87..ddd3022ae 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-plugin-matroska.html +++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-matroska.html @@ -42,7 +42,7 @@ </tr> <tr> <td><p><span class="term">version</span></p></td> -<td>1.5.1</td> +<td>1.5.2</td> </tr> <tr> <td><p><span class="term">run-time license</span></p></td> diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-mulaw.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-mulaw.html index ee75eca74..e3825dd47 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-plugin-mulaw.html +++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-mulaw.html @@ -42,7 +42,7 @@ </tr> <tr> <td><p><span class="term">version</span></p></td> -<td>1.5.1</td> +<td>1.5.2</td> </tr> <tr> <td><p><span class="term">run-time license</span></p></td> diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-multifile.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-multifile.html index 4c5cecba7..4a46c475b 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-plugin-multifile.html +++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-multifile.html @@ -42,7 +42,7 @@ </tr> <tr> <td><p><span class="term">version</span></p></td> -<td>1.5.1</td> +<td>1.5.2</td> </tr> <tr> <td><p><span class="term">run-time license</span></p></td> diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-multipart.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-multipart.html index fcc75995a..f38fee6cb 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-plugin-multipart.html +++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-multipart.html @@ -42,7 +42,7 @@ </tr> <tr> <td><p><span class="term">version</span></p></td> -<td>1.5.1</td> +<td>1.5.2</td> </tr> <tr> <td><p><span class="term">run-time license</span></p></td> diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-navigationtest.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-navigationtest.html index 945144dee..93eb59db2 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-plugin-navigationtest.html +++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-navigationtest.html @@ -42,7 +42,7 @@ </tr> <tr> <td><p><span class="term">version</span></p></td> -<td>1.5.1</td> +<td>1.5.2</td> </tr> <tr> <td><p><span class="term">run-time license</span></p></td> diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-oss4.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-oss4.html index 982cbd8ea..15e51ea71 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-plugin-oss4.html +++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-oss4.html @@ -42,7 +42,7 @@ </tr> <tr> <td><p><span class="term">version</span></p></td> -<td>1.5.1</td> +<td>1.5.2</td> </tr> <tr> <td><p><span class="term">run-time license</span></p></td> diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-ossaudio.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-ossaudio.html index 4e1ab07e1..ca276228a 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-plugin-ossaudio.html +++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-ossaudio.html @@ -42,7 +42,7 @@ </tr> <tr> <td><p><span class="term">version</span></p></td> -<td>1.5.1</td> +<td>1.5.2</td> </tr> <tr> <td><p><span class="term">run-time license</span></p></td> diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-png.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-png.html index 39d6daf75..709c6de46 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-plugin-png.html +++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-png.html @@ -42,7 +42,7 @@ </tr> <tr> <td><p><span class="term">version</span></p></td> -<td>1.5.1</td> +<td>1.5.2</td> </tr> <tr> <td><p><span class="term">run-time license</span></p></td> diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-pulseaudio.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-pulseaudio.html index e469e63c8..2de63acb1 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-plugin-pulseaudio.html +++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-pulseaudio.html @@ -42,7 +42,7 @@ </tr> <tr> <td><p><span class="term">version</span></p></td> -<td>1.5.1</td> +<td>1.5.2</td> </tr> <tr> <td><p><span class="term">run-time license</span></p></td> diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-replaygain.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-replaygain.html index f03c36e4a..72c3046f5 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-plugin-replaygain.html +++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-replaygain.html @@ -42,7 +42,7 @@ </tr> <tr> <td><p><span class="term">version</span></p></td> -<td>1.5.1</td> +<td>1.5.2</td> </tr> <tr> <td><p><span class="term">run-time license</span></p></td> diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-rtp.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-rtp.html index aa2fcc0f0..ee613a80f 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-plugin-rtp.html +++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-rtp.html @@ -42,7 +42,7 @@ </tr> <tr> <td><p><span class="term">version</span></p></td> -<td>1.5.1</td> +<td>1.5.2</td> </tr> <tr> <td><p><span class="term">run-time license</span></p></td> diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-rtpmanager.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-rtpmanager.html index 4156eb283..c08643490 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-plugin-rtpmanager.html +++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-rtpmanager.html @@ -42,7 +42,7 @@ </tr> <tr> <td><p><span class="term">version</span></p></td> -<td>1.5.1</td> +<td>1.5.2</td> </tr> <tr> <td><p><span class="term">run-time license</span></p></td> diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-rtsp.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-rtsp.html index 9d8836884..35ea89a61 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-plugin-rtsp.html +++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-rtsp.html @@ -42,7 +42,7 @@ </tr> <tr> <td><p><span class="term">version</span></p></td> -<td>1.5.1</td> +<td>1.5.2</td> </tr> <tr> <td><p><span class="term">run-time license</span></p></td> diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-shapewipe.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-shapewipe.html index 0c718ba34..02ac16c14 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-plugin-shapewipe.html +++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-shapewipe.html @@ -42,7 +42,7 @@ </tr> <tr> <td><p><span class="term">version</span></p></td> -<td>1.5.1</td> +<td>1.5.2</td> </tr> <tr> <td><p><span class="term">run-time license</span></p></td> diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-shout2send.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-shout2send.html index 205680900..4262e1700 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-plugin-shout2send.html +++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-shout2send.html @@ -42,7 +42,7 @@ </tr> <tr> <td><p><span class="term">version</span></p></td> -<td>1.5.1</td> +<td>1.5.2</td> </tr> <tr> <td><p><span class="term">run-time license</span></p></td> diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-smpte.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-smpte.html index 7ebf1062c..6be6ed30a 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-plugin-smpte.html +++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-smpte.html @@ -42,7 +42,7 @@ </tr> <tr> <td><p><span class="term">version</span></p></td> -<td>1.5.1</td> +<td>1.5.2</td> </tr> <tr> <td><p><span class="term">run-time license</span></p></td> diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-soup.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-soup.html index b86fd55b3..2aa3dcc39 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-plugin-soup.html +++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-soup.html @@ -42,7 +42,7 @@ </tr> <tr> <td><p><span class="term">version</span></p></td> -<td>1.5.1</td> +<td>1.5.2</td> </tr> <tr> <td><p><span class="term">run-time license</span></p></td> diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-spectrum.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-spectrum.html index 28d45c0ba..5b5887b29 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-plugin-spectrum.html +++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-spectrum.html @@ -42,7 +42,7 @@ </tr> <tr> <td><p><span class="term">version</span></p></td> -<td>1.5.1</td> +<td>1.5.2</td> </tr> <tr> <td><p><span class="term">run-time license</span></p></td> diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-speex.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-speex.html index 348b6ebdc..f959bff34 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-plugin-speex.html +++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-speex.html @@ -42,7 +42,7 @@ </tr> <tr> <td><p><span class="term">version</span></p></td> -<td>1.5.1</td> +<td>1.5.2</td> </tr> <tr> <td><p><span class="term">run-time license</span></p></td> diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-taglib.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-taglib.html index 22776165d..922c638e5 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-plugin-taglib.html +++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-taglib.html @@ -42,7 +42,7 @@ </tr> <tr> <td><p><span class="term">version</span></p></td> -<td>1.5.1</td> +<td>1.5.2</td> </tr> <tr> <td><p><span class="term">run-time license</span></p></td> diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-udp.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-udp.html index 4bfb407b8..4f11cae50 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-plugin-udp.html +++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-udp.html @@ -42,7 +42,7 @@ </tr> <tr> <td><p><span class="term">version</span></p></td> -<td>1.5.1</td> +<td>1.5.2</td> </tr> <tr> <td><p><span class="term">run-time license</span></p></td> diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-video4linux2.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-video4linux2.html index bd1199a1a..d574b94e3 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-plugin-video4linux2.html +++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-video4linux2.html @@ -42,7 +42,7 @@ </tr> <tr> <td><p><span class="term">version</span></p></td> -<td>1.5.1</td> +<td>1.5.2</td> </tr> <tr> <td><p><span class="term">run-time license</span></p></td> diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-videobox.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-videobox.html index 5e73d5bde..f72336d29 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-plugin-videobox.html +++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-videobox.html @@ -42,7 +42,7 @@ </tr> <tr> <td><p><span class="term">version</span></p></td> -<td>1.5.1</td> +<td>1.5.2</td> </tr> <tr> <td><p><span class="term">run-time license</span></p></td> diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-videocrop.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-videocrop.html index a32c68ac0..a3852102c 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-plugin-videocrop.html +++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-videocrop.html @@ -42,7 +42,7 @@ </tr> <tr> <td><p><span class="term">version</span></p></td> -<td>1.5.1</td> +<td>1.5.2</td> </tr> <tr> <td><p><span class="term">run-time license</span></p></td> diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-videofilter.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-videofilter.html index f87f106eb..afe023b29 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-plugin-videofilter.html +++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-videofilter.html @@ -42,7 +42,7 @@ </tr> <tr> <td><p><span class="term">version</span></p></td> -<td>1.5.1</td> +<td>1.5.2</td> </tr> <tr> <td><p><span class="term">run-time license</span></p></td> diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-videomixer.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-videomixer.html index 5b64ac501..c57b2ab2e 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-plugin-videomixer.html +++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-videomixer.html @@ -42,7 +42,7 @@ </tr> <tr> <td><p><span class="term">version</span></p></td> -<td>1.5.1</td> +<td>1.5.2</td> </tr> <tr> <td><p><span class="term">run-time license</span></p></td> diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-vpx.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-vpx.html index 27587a33f..6d0079c08 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-plugin-vpx.html +++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-vpx.html @@ -42,7 +42,7 @@ </tr> <tr> <td><p><span class="term">version</span></p></td> -<td>1.5.1</td> +<td>1.5.2</td> </tr> <tr> <td><p><span class="term">run-time license</span></p></td> diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-wavenc.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-wavenc.html index 080d6ef71..407b321fa 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-plugin-wavenc.html +++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-wavenc.html @@ -42,7 +42,7 @@ </tr> <tr> <td><p><span class="term">version</span></p></td> -<td>1.5.1</td> +<td>1.5.2</td> </tr> <tr> <td><p><span class="term">run-time license</span></p></td> diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-wavpack.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-wavpack.html index 70e8e1058..de53f14f9 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-plugin-wavpack.html +++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-wavpack.html @@ -42,7 +42,7 @@ </tr> <tr> <td><p><span class="term">version</span></p></td> -<td>1.5.1</td> +<td>1.5.2</td> </tr> <tr> <td><p><span class="term">run-time license</span></p></td> diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-wavparse.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-wavparse.html index 782ab7dc5..5ab370352 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-plugin-wavparse.html +++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-wavparse.html @@ -42,7 +42,7 @@ </tr> <tr> <td><p><span class="term">version</span></p></td> -<td>1.5.1</td> +<td>1.5.2</td> </tr> <tr> <td><p><span class="term">run-time license</span></p></td> diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-ximagesrc.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-ximagesrc.html index 3c76dab5e..966945810 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-plugin-ximagesrc.html +++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-ximagesrc.html @@ -42,7 +42,7 @@ </tr> <tr> <td><p><span class="term">version</span></p></td> -<td>1.5.1</td> +<td>1.5.2</td> </tr> <tr> <td><p><span class="term">run-time license</span></p></td> diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-y4menc.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-y4menc.html index 090633464..88a49a1ef 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-plugin-y4menc.html +++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-y4menc.html @@ -42,7 +42,7 @@ </tr> <tr> <td><p><span class="term">version</span></p></td> -<td>1.5.1</td> +<td>1.5.2</td> </tr> <tr> <td><p><span class="term">run-time license</span></p></td> diff --git a/docs/plugins/html/gst-plugins-good-plugins-pngdec.html b/docs/plugins/html/gst-plugins-good-plugins-pngdec.html index 80493f5dd..6fd428f4c 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-pngdec.html +++ b/docs/plugins/html/gst-plugins-good-plugins-pngdec.html @@ -28,7 +28,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-pngdec.top_of_page"></a>pngdec</span></h2> -<p>pngdec — Decode a png video frame to a raw image</p> +<p>pngdec</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -137,8 +137,6 @@ </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-pngdec.functions_details"></a><h2>Functions</h2> @@ -149,8 +147,6 @@ <div class="refsect2"> <a name="GstPngDec-struct"></a><h3>struct GstPngDec</h3> <pre class="programlisting">struct GstPngDec;</pre> -<p> -</p> </div> </div> </div> diff --git a/docs/plugins/html/gst-plugins-good-plugins-pngenc.html b/docs/plugins/html/gst-plugins-good-plugins-pngenc.html index b1ee519f7..5b3f4c41d 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-pngenc.html +++ b/docs/plugins/html/gst-plugins-good-plugins-pngenc.html @@ -30,7 +30,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-pngenc.top_of_page"></a>pngenc</span></h2> -<p>pngenc — Encode a video frame to a .png image</p> +<p>pngenc</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -167,8 +167,6 @@ GstPngEnc implements </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-pngenc.functions_details"></a><h2>Functions</h2> @@ -179,8 +177,6 @@ GstPngEnc implements <div class="refsect2"> <a name="GstPngEnc-struct"></a><h3>struct GstPngEnc</h3> <pre class="programlisting">struct GstPngEnc;</pre> -<p> -</p> </div> </div> <div class="refsect1"> diff --git a/docs/plugins/html/gst-plugins-good-plugins-progressreport.html b/docs/plugins/html/gst-plugins-good-plugins-progressreport.html index d061a4e0a..3a79cc21f 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-progressreport.html +++ b/docs/plugins/html/gst-plugins-good-plugins-progressreport.html @@ -29,7 +29,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-progressreport.top_of_page"></a>progressreport</span></h2> -<p>progressreport — Periodically query and report on processing progress</p> +<p>progressreport</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -221,8 +221,6 @@ a whole).</p> </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-progressreport.functions_details"></a><h2>Functions</h2> @@ -233,8 +231,6 @@ a whole).</p> <div class="refsect2"> <a name="GstProgressReport-struct"></a><h3>struct GstProgressReport</h3> <pre class="programlisting">struct GstProgressReport;</pre> -<p> -</p> </div> </div> <div class="refsect1"> diff --git a/docs/plugins/html/gst-plugins-good-plugins-pulsesink.html b/docs/plugins/html/gst-plugins-good-plugins-pulsesink.html index 3433cfb47..ac67fca87 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-pulsesink.html +++ b/docs/plugins/html/gst-plugins-good-plugins-pulsesink.html @@ -30,7 +30,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-pulsesink.top_of_page"></a>pulsesink</span></h2> -<p>pulsesink — Plays audio to a PulseAudio server</p> +<p>pulsesink</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -214,8 +214,6 @@ GstPulseSink implements </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-pulsesink.functions_details"></a><h2>Functions</h2> @@ -226,8 +224,6 @@ GstPulseSink implements <div class="refsect2"> <a name="GstPulseSink-struct"></a><h3>struct GstPulseSink</h3> <pre class="programlisting">struct GstPulseSink;</pre> -<p> -</p> </div> </div> <div class="refsect1"> diff --git a/docs/plugins/html/gst-plugins-good-plugins-pulsesrc.html b/docs/plugins/html/gst-plugins-good-plugins-pulsesrc.html index 5b656472f..b09efe161 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-pulsesrc.html +++ b/docs/plugins/html/gst-plugins-good-plugins-pulsesrc.html @@ -30,7 +30,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-pulsesrc.top_of_page"></a>pulsesrc</span></h2> -<p>pulsesrc — Captures audio from a PulseAudio server</p> +<p>pulsesrc</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -201,8 +201,6 @@ GstPulseSrc implements </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-pulsesrc.functions_details"></a><h2>Functions</h2> @@ -213,8 +211,6 @@ GstPulseSrc implements <div class="refsect2"> <a name="GstPulseSrc-struct"></a><h3>struct GstPulseSrc</h3> <pre class="programlisting">struct GstPulseSrc;</pre> -<p> -</p> </div> </div> <div class="refsect1"> diff --git a/docs/plugins/html/gst-plugins-good-plugins-qtdemux.html b/docs/plugins/html/gst-plugins-good-plugins-qtdemux.html index dda904349..dead661a9 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-qtdemux.html +++ b/docs/plugins/html/gst-plugins-good-plugins-qtdemux.html @@ -29,7 +29,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-qtdemux.top_of_page"></a>qtdemux</span></h2> -<p>qtdemux — Demultiplex a QuickTime file into audio and video streams</p> +<p>qtdemux</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -232,8 +232,6 @@ right decoder elements/plugins installed. </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-qtdemux.functions_details"></a><h2>Functions</h2> @@ -244,8 +242,6 @@ right decoder elements/plugins installed. <div class="refsect2"> <a name="GstQTDemux-struct"></a><h3>struct GstQTDemux</h3> <pre class="programlisting">struct GstQTDemux;</pre> -<p> -</p> </div> </div> <div class="refsect1"> @@ -256,30 +252,6 @@ right decoder elements/plugins installed. user_function (<a class="link" href="gst-plugins-good-plugins-qtdemux.html#GstQTDemux"><span class="type">GstQTDemux</span></a> *gstqtdemux, <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *arg1, <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data)</pre> -<p> -</p> -<div class="refsect3"> -<a name="id-1.2.102.10.2.5"></a><h4>Parameters</h4> -<div class="informaltable"><table width="100%" border="0"> -<colgroup> -<col width="150px" class="parameters_name"> -<col class="parameters_description"> -<col width="200px" class="parameters_annotations"> -</colgroup> -<tbody> -<tr> -<td class="parameter_name"><p>gstqtdemux</p></td> -<td class="parameter_description"><p>the object which received the signal.</p></td> -<td class="parameter_annotations"> </td> -</tr> -<tr> -<td class="parameter_name"><p>user_data</p></td> -<td class="parameter_description"><p>user data set when the signal handler was connected.</p></td> -<td class="parameter_annotations"> </td> -</tr> -</tbody> -</table></div> -</div> </div> </div> </div> diff --git a/docs/plugins/html/gst-plugins-good-plugins-qtmoovrecover.html b/docs/plugins/html/gst-plugins-good-plugins-qtmoovrecover.html index d88934a43..056fd1300 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-qtmoovrecover.html +++ b/docs/plugins/html/gst-plugins-good-plugins-qtmoovrecover.html @@ -180,8 +180,6 @@ TODO <a name="id-1.2.104.9.3.2"></a><h3>Element Pads</h3> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-qtmoovrecover.functions_details"></a><h2>Functions</h2> @@ -189,16 +187,12 @@ TODO <a name="gst-qt-moov-recover-get-type"></a><h3>gst_qt_moov_recover_get_type ()</h3> <pre class="programlisting"><a href="https://developer.gnome.org/gobject/unstable/gobject-Type-Information.html#GType"><span class="returnvalue">GType</span></a> gst_qt_moov_recover_get_type (<em class="parameter"><code><span class="type">void</span></code></em>);</pre> -<p> -</p> </div> <hr> <div class="refsect2"> <a name="gst-qt-moov-recover-register"></a><h3>gst_qt_moov_recover_register ()</h3> <pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> gst_qt_moov_recover_register (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPlugin.html"><span class="type">GstPlugin</span></a> *plugin</code></em>);</pre> -<p> -</p> </div> </div> <div class="refsect1"> @@ -206,8 +200,6 @@ gst_qt_moov_recover_register (<em class="parameter"><code><a href="http://gstrea <div class="refsect2"> <a name="GstQTMoovRecover-struct"></a><h3>struct GstQTMoovRecover</h3> <pre class="programlisting">struct GstQTMoovRecover;</pre> -<p> -</p> </div> <hr> <div class="refsect2"> @@ -216,8 +208,6 @@ gst_qt_moov_recover_register (<em class="parameter"><code><a href="http://gstrea GstPipelineClass parent_class; }; </pre> -<p> -</p> </div> </div> <div class="refsect1"> diff --git a/docs/plugins/html/gst-plugins-good-plugins-qtmux.html b/docs/plugins/html/gst-plugins-good-plugins-qtmux.html index 07be5792b..dbbf84630 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-qtmux.html +++ b/docs/plugins/html/gst-plugins-good-plugins-qtmux.html @@ -90,6 +90,26 @@ <td class="property_name"><a class="link" href="gst-plugins-good-plugins-qtmux.html#GstQTMux--trak-timescale" title="The “trak-timescale†property">trak-timescale</a></td> <td class="property_flags">Read / Write / Construct</td> </tr> +<tr> +<td class="property_type"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a></td> +<td class="property_name"><a class="link" href="gst-plugins-good-plugins-qtmux.html#GstQTMux--reserved-bytes-per-sec" title="The “reserved-bytes-per-sec†property">reserved-bytes-per-sec</a></td> +<td class="property_flags">Read / Write / Construct</td> +</tr> +<tr> +<td class="property_type"><span class="type">guint64</span></td> +<td class="property_name"><a class="link" href="gst-plugins-good-plugins-qtmux.html#GstQTMux--reserved-duration-remaining" title="The “reserved-duration-remaining†property">reserved-duration-remaining</a></td> +<td class="property_flags">Read</td> +</tr> +<tr> +<td class="property_type"><span class="type">guint64</span></td> +<td class="property_name"><a class="link" href="gst-plugins-good-plugins-qtmux.html#GstQTMux--reserved-max-duration" title="The “reserved-max-duration†property">reserved-max-duration</a></td> +<td class="property_flags">Read / Write</td> +</tr> +<tr> +<td class="property_type"><span class="type">guint64</span></td> +<td class="property_name"><a class="link" href="gst-plugins-good-plugins-qtmux.html#GstQTMux--reserved-moov-update-period" title="The “reserved-moov-update-period†property">reserved-moov-update-period</a></td> +<td class="property_flags">Read / Write</td> +</tr> </tbody> </table></div> </div> @@ -150,8 +170,21 @@ data can be spread out into fragments of <a class="link" href="gst-plugins-good- If such fragmented layout is intended for streaming purposes, then <a class="link" href="gst-plugins-good-plugins-qtmux.html#GstQTMux--streamable" title="The “streamable†property"><span class="type">“streamableâ€</span></a> allows foregoing to add index metadata (at the end of file).</p> +<p>When the maximum duration to be recorded can be known in advance, <a class="link" href="gst-plugins-good-plugins-qtmux.html#GstQTMux"><span class="type">GstQTMux</span></a> +also supports a 'Robust Muxing' mode. In robust muxing mode, space for the +headers are reserved at the start of muxing, and rewritten at a configurable +interval, so that the output file is always playable, even if the recording +is interrupted uncleanly by a crash. Robust muxing mode requires a seekable +output, such as filesink, because it needs to rewrite the start of the file.</p> +<p>To enable robust muxing mode, set the <span class="type">“reserved-moov-update-periodâ€</span> +and <span class="type">“reserved-max-durationâ€</span> property. Also present is the +<span class="type">“reserved-bytes-per-secâ€</span> property, which can be increased if +for some reason the default is not large enough and the initial reserved +space for headers is too small. Applications can monitor the +<span class="type">“reserved-duration-remainingâ€</span> property to see how close to full +the reserved space is becoming.</p> <div class="refsect2"> -<a name="id-1.2.103.8.7"></a><h3>Example pipelines</h3> +<a name="id-1.2.103.8.9"></a><h3>Example pipelines</h3> <div class="informalexample"> <table class="listing_frame" border="0" cellpadding="0" cellspacing="0"> <tbody> @@ -168,7 +201,7 @@ Records a video stream captured from a v4l2 device and muxes it into a qt file. <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="id-1.2.103.8.8.1"></a><h3>Element Information</h3> +<a name="id-1.2.103.8.10.1"></a><h3>Element Information</h3> <div class="variablelist"><table border="0" class="variablelist"> <colgroup> <col align="left" valign="top"> @@ -194,7 +227,7 @@ Records a video stream captured from a v4l2 device and muxes it into a qt file. </div> <hr> <div class="refsect2"> -<a name="id-1.2.103.8.8.2"></a><h3>Element Pads</h3> +<a name="id-1.2.103.8.10.2"></a><h3>Element Pads</h3> <div class="variablelist"><table border="0" class="variablelist"> <colgroup> <col align="left" valign="top"> @@ -381,8 +414,6 @@ Records a video stream captured from a v4l2 device and muxes it into a qt file. </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-qtmux.functions_details"></a><h2>Functions</h2> @@ -393,8 +424,6 @@ Records a video stream captured from a v4l2 device and muxes it into a qt file. <div class="refsect2"> <a name="GstQTMux-struct"></a><h3>struct GstQTMux</h3> <pre class="programlisting">struct GstQTMux;</pre> -<p> -</p> </div> </div> <div class="refsect1"> @@ -471,6 +500,39 @@ Records a video stream captured from a v4l2 device and muxes it into a qt file. <p>Flags: Read / Write / Construct</p> <p>Default value: 0</p> </div> +<hr> +<div class="refsect2"> +<a name="GstQTMux--reserved-bytes-per-sec"></a><h3>The <code class="literal">“reserved-bytes-per-secâ€</code> property</h3> +<pre class="programlisting"> “reserved-bytes-per-sec†<a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a></pre> +<p>Multiplier for converting reserved-max-duration into bytes of header to reserve, per second, per track.</p> +<p>Flags: Read / Write / Construct</p> +<p>Allowed values: <= 10000</p> +<p>Default value: 550</p> +</div> +<hr> +<div class="refsect2"> +<a name="GstQTMux--reserved-duration-remaining"></a><h3>The <code class="literal">“reserved-duration-remainingâ€</code> property</h3> +<pre class="programlisting"> “reserved-duration-remaining†<span class="type">guint64</span></pre> +<p>Reports the approximate amount of remaining moov header space reserved using reserved-max-duration.</p> +<p>Flags: Read</p> +<p>Default value: 0</p> +</div> +<hr> +<div class="refsect2"> +<a name="GstQTMux--reserved-max-duration"></a><h3>The <code class="literal">“reserved-max-durationâ€</code> property</h3> +<pre class="programlisting"> “reserved-max-duration†<span class="type">guint64</span></pre> +<p>When set to a value > 0, reserves space for index tables at the beginning of the file.</p> +<p>Flags: Read / Write</p> +<p>Default value: 18446744073709551615</p> +</div> +<hr> +<div class="refsect2"> +<a name="GstQTMux--reserved-moov-update-period"></a><h3>The <code class="literal">“reserved-moov-update-periodâ€</code> property</h3> +<pre class="programlisting"> “reserved-moov-update-period†<span class="type">guint64</span></pre> +<p>When used with reserved-max-duration, periodically updates the index tables with information muxed so far.</p> +<p>Flags: Read / Write</p> +<p>Default value: 18446744073709551615</p> +</div> </div> </div> <div class="footer"> diff --git a/docs/plugins/html/gst-plugins-good-plugins-quarktv.html b/docs/plugins/html/gst-plugins-good-plugins-quarktv.html index 6023ea6c6..f6fdb8ae5 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-quarktv.html +++ b/docs/plugins/html/gst-plugins-good-plugins-quarktv.html @@ -29,7 +29,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-quarktv.top_of_page"></a>quarktv</span></h2> -<p>quarktv — Motion dissolver</p> +<p>quarktv</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -170,8 +170,6 @@ the last frames randomly.</p> </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-quarktv.functions_details"></a><h2>Functions</h2> @@ -182,8 +180,6 @@ the last frames randomly.</p> <div class="refsect2"> <a name="GstQuarkTV-struct"></a><h3>struct GstQuarkTV</h3> <pre class="programlisting">struct GstQuarkTV;</pre> -<p> -</p> </div> </div> <div class="refsect1"> diff --git a/docs/plugins/html/gst-plugins-good-plugins-radioactv.html b/docs/plugins/html/gst-plugins-good-plugins-radioactv.html index bb6a3155f..4f6a109a7 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-radioactv.html +++ b/docs/plugins/html/gst-plugins-good-plugins-radioactv.html @@ -29,7 +29,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-radioactv.top_of_page"></a>radioactv</span></h2> -<p>radioactv — motion-enlightment effect</p> +<p>radioactv</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -192,8 +192,6 @@ previous frame displayed. The effect of strobe2 is stronger than strobe1.</p> </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-radioactv.functions_details"></a><h2>Functions</h2> @@ -204,8 +202,6 @@ previous frame displayed. The effect of strobe2 is stronger than strobe1.</p> <div class="refsect2"> <a name="GstRadioacTV-struct"></a><h3>struct GstRadioacTV</h3> <pre class="programlisting">struct GstRadioacTV;</pre> -<p> -</p> </div> </div> <div class="refsect1"> diff --git a/docs/plugins/html/gst-plugins-good-plugins-revtv.html b/docs/plugins/html/gst-plugins-good-plugins-revtv.html index 6cd088f2c..38d933a56 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-revtv.html +++ b/docs/plugins/html/gst-plugins-good-plugins-revtv.html @@ -29,7 +29,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-revtv.top_of_page"></a>revtv</span></h2> -<p>revtv — A video waveform monitor for each line of video processed</p> +<p>revtv</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -183,8 +183,6 @@ of the video along each line.</p> </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-revtv.functions_details"></a><h2>Functions</h2> @@ -195,8 +193,6 @@ of the video along each line.</p> <div class="refsect2"> <a name="GstRevTV-struct"></a><h3>struct GstRevTV</h3> <pre class="programlisting">struct GstRevTV;</pre> -<p> -</p> </div> </div> <div class="refsect1"> diff --git a/docs/plugins/html/gst-plugins-good-plugins-rganalysis.html b/docs/plugins/html/gst-plugins-good-plugins-rganalysis.html index 31be2ec94..72bc4b614 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-rganalysis.html +++ b/docs/plugins/html/gst-plugins-good-plugins-rganalysis.html @@ -29,7 +29,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-rganalysis.top_of_page"></a>rganalysis</span></h2> -<p>rganalysis — Perform the ReplayGain analysis</p> +<p>rganalysis</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -249,8 +249,6 @@ and Frank Klemm. </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-rganalysis.functions_details"></a><h2>Functions</h2> diff --git a/docs/plugins/html/gst-plugins-good-plugins-rglimiter.html b/docs/plugins/html/gst-plugins-good-plugins-rglimiter.html index 4ab733bfe..62db74ff9 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-rglimiter.html +++ b/docs/plugins/html/gst-plugins-good-plugins-rglimiter.html @@ -29,7 +29,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-rglimiter.top_of_page"></a>rglimiter</span></h2> -<p>rglimiter — Apply signal compression to raw audio data</p> +<p>rglimiter</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -174,8 +174,6 @@ Playback of a file </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-rglimiter.functions_details"></a><h2>Functions</h2> diff --git a/docs/plugins/html/gst-plugins-good-plugins-rgvolume.html b/docs/plugins/html/gst-plugins-good-plugins-rgvolume.html index 5c1357a32..6e1de02d8 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-rgvolume.html +++ b/docs/plugins/html/gst-plugins-good-plugins-rgvolume.html @@ -30,7 +30,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-rgvolume.top_of_page"></a>rgvolume</span></h2> -<p>rgvolume — Apply ReplayGain volume adjustment</p> +<p>rgvolume</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -222,8 +222,6 @@ element applies -6 dB hard limiting as mentioned in the ReplayGain standard.</p> </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-rgvolume.functions_details"></a><h2>Functions</h2> diff --git a/docs/plugins/html/gst-plugins-good-plugins-rippletv.html b/docs/plugins/html/gst-plugins-good-plugins-rippletv.html index 97adc618e..1ea3db3c2 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-rippletv.html +++ b/docs/plugins/html/gst-plugins-good-plugins-rippletv.html @@ -29,7 +29,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-rippletv.top_of_page"></a>rippletv</span></h2> -<p>rippletv — RippleTV does ripple mark effect on the video input</p> +<p>rippletv</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -177,8 +177,6 @@ by motion or random rain drops.</p> </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-rippletv.functions_details"></a><h2>Functions</h2> @@ -189,8 +187,6 @@ by motion or random rain drops.</p> <div class="refsect2"> <a name="GstRippleTV-struct"></a><h3>struct GstRippleTV</h3> <pre class="programlisting">struct GstRippleTV;</pre> -<p> -</p> </div> </div> <div class="refsect1"> diff --git a/docs/plugins/html/gst-plugins-good-plugins-rtpL16depay.html b/docs/plugins/html/gst-plugins-good-plugins-rtpL16depay.html index fc0fb3bcc..3bd4baf1c 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-rtpL16depay.html +++ b/docs/plugins/html/gst-plugins-good-plugins-rtpL16depay.html @@ -28,7 +28,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-rtpL16depay.top_of_page"></a>rtpL16depay</span></h2> -<p>rtpL16depay — Extracts raw audio from RTP packets</p> +<p>rtpL16depay</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -158,8 +158,6 @@ the rtpL16pay example to create the RTP stream. </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-rtpL16depay.functions_details"></a><h2>Functions</h2> @@ -170,8 +168,6 @@ the rtpL16pay example to create the RTP stream. <div class="refsect2"> <a name="GstRtpL16Depay-struct"></a><h3>struct GstRtpL16Depay</h3> <pre class="programlisting">struct GstRtpL16Depay;</pre> -<p> -</p> </div> </div> <div class="refsect1"> diff --git a/docs/plugins/html/gst-plugins-good-plugins-rtpL16pay.html b/docs/plugins/html/gst-plugins-good-plugins-rtpL16pay.html index 56d566306..04f102480 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-rtpL16pay.html +++ b/docs/plugins/html/gst-plugins-good-plugins-rtpL16pay.html @@ -28,7 +28,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-rtpL16pay.top_of_page"></a>rtpL16pay</span></h2> -<p>rtpL16pay — Payload-encode Raw audio into RTP packets (RFC 3551)</p> +<p>rtpL16pay</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -163,8 +163,6 @@ the rtpL16depay example to depayload and play the RTP stream. </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-rtpL16pay.functions_details"></a><h2>Functions</h2> @@ -175,8 +173,6 @@ the rtpL16depay example to depayload and play the RTP stream. <div class="refsect2"> <a name="GstRtpL16Pay-struct"></a><h3>struct GstRtpL16Pay</h3> <pre class="programlisting">struct GstRtpL16Pay;</pre> -<p> -</p> </div> </div> <div class="refsect1"> diff --git a/docs/plugins/html/gst-plugins-good-plugins-rtpac3depay.html b/docs/plugins/html/gst-plugins-good-plugins-rtpac3depay.html index 4c13d985f..2d3d0d3cd 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-rtpac3depay.html +++ b/docs/plugins/html/gst-plugins-good-plugins-rtpac3depay.html @@ -28,7 +28,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-rtpac3depay.top_of_page"></a>rtpac3depay</span></h2> -<p>rtpac3depay — Extracts AC3 audio from RTP packets (RFC 4184)</p> +<p>rtpac3depay</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -154,8 +154,6 @@ the rtpac3pay example to create the RTP stream. </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-rtpac3depay.functions_details"></a><h2>Functions</h2> @@ -166,8 +164,6 @@ the rtpac3pay example to create the RTP stream. <div class="refsect2"> <a name="GstRtpAC3Depay-struct"></a><h3>struct GstRtpAC3Depay</h3> <pre class="programlisting">struct GstRtpAC3Depay;</pre> -<p> -</p> </div> </div> <div class="refsect1"> diff --git a/docs/plugins/html/gst-plugins-good-plugins-rtpac3pay.html b/docs/plugins/html/gst-plugins-good-plugins-rtpac3pay.html index 6b7d1837c..4db6bb28b 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-rtpac3pay.html +++ b/docs/plugins/html/gst-plugins-good-plugins-rtpac3pay.html @@ -28,7 +28,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-rtpac3pay.top_of_page"></a>rtpac3pay</span></h2> -<p>rtpac3pay — Payload AC3 audio as RTP packets (RFC 4184)</p> +<p>rtpac3pay</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -158,8 +158,6 @@ the rtpac3depay example to depayload and decode the RTP stream. </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-rtpac3pay.functions_details"></a><h2>Functions</h2> @@ -170,8 +168,6 @@ the rtpac3depay example to depayload and decode the RTP stream. <div class="refsect2"> <a name="GstRtpAC3Pay-struct"></a><h3>struct GstRtpAC3Pay</h3> <pre class="programlisting">struct GstRtpAC3Pay;</pre> -<p> -</p> </div> </div> <div class="refsect1"> diff --git a/docs/plugins/html/gst-plugins-good-plugins-rtpamrdepay.html b/docs/plugins/html/gst-plugins-good-plugins-rtpamrdepay.html index c83a97222..529e72927 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-rtpamrdepay.html +++ b/docs/plugins/html/gst-plugins-good-plugins-rtpamrdepay.html @@ -28,7 +28,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-rtpamrdepay.top_of_page"></a>rtpamrdepay</span></h2> -<p>rtpamrdepay — Extracts AMR or AMR-WB audio from RTP packets (RFC 3267)</p> +<p>rtpamrdepay</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -162,8 +162,6 @@ the rtpamrpay example to create the RTP stream. </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-rtpamrdepay.functions_details"></a><h2>Functions</h2> @@ -174,8 +172,6 @@ the rtpamrpay example to create the RTP stream. <div class="refsect2"> <a name="GstRtpAMRDepay-struct"></a><h3>struct GstRtpAMRDepay</h3> <pre class="programlisting">struct GstRtpAMRDepay;</pre> -<p> -</p> </div> </div> <div class="refsect1"> diff --git a/docs/plugins/html/gst-plugins-good-plugins-rtpamrpay.html b/docs/plugins/html/gst-plugins-good-plugins-rtpamrpay.html index bc2888005..d673e6859 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-rtpamrpay.html +++ b/docs/plugins/html/gst-plugins-good-plugins-rtpamrpay.html @@ -28,7 +28,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-rtpamrpay.top_of_page"></a>rtpamrpay</span></h2> -<p>rtpamrpay — Payload-encode AMR or AMR-WB audio into RTP packets (RFC 3267)</p> +<p>rtpamrpay</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -162,8 +162,6 @@ the rtpamrdepay example to depayload and decode the RTP stream. </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-rtpamrpay.functions_details"></a><h2>Functions</h2> @@ -174,8 +172,6 @@ the rtpamrdepay example to depayload and decode the RTP stream. <div class="refsect2"> <a name="GstRtpAMRPay-struct"></a><h3>struct GstRtpAMRPay</h3> <pre class="programlisting">struct GstRtpAMRPay;</pre> -<p> -</p> </div> </div> <div class="refsect1"> diff --git a/docs/plugins/html/gst-plugins-good-plugins-rtpbin.html b/docs/plugins/html/gst-plugins-good-plugins-rtpbin.html index fa52ea230..55a005fbd 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-rtpbin.html +++ b/docs/plugins/html/gst-plugins-good-plugins-rtpbin.html @@ -31,7 +31,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-rtpbin.top_of_page"></a>rtpbin</span></h2> -<p>rtpbin — Real-Time Transport Protocol bin</p> +<p>rtpbin</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -115,6 +115,11 @@ <td class="property_name"><a class="link" href="gst-plugins-good-plugins-rtpbin.html#GstRtpBin--rtp-profile" title="The “rtp-profile†property">rtp-profile</a></td> <td class="property_flags">Read / Write</td> </tr> +<tr> +<td class="property_type"><span class="type">GstRtpNtpTimeSource</span></td> +<td class="property_name"><a class="link" href="gst-plugins-good-plugins-rtpbin.html#GstRtpBin--ntp-time-source" title="The “ntp-time-source†property">ntp-time-source</a></td> +<td class="property_flags">Read / Write</td> +</tr> </tbody> </table></div> </div> @@ -130,120 +135,120 @@ <tr> <td class="signal_type"><span class="returnvalue">void</span></td> <td class="signal_name"><a class="link" href="gst-plugins-good-plugins-rtpbin.html#GstRtpBin-clear-pt-map" title="The “clear-pt-map†signal">clear-pt-map</a></td> -<td class="signal_flags">Action</td> +<td class="signal_flags"><a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-ACTION:CAPS">Action</a></td> </tr> <tr> <td class="signal_type"> <span class="returnvalue">RTPSession</span>*</td> <td class="signal_name"><a class="link" href="gst-plugins-good-plugins-rtpbin.html#GstRtpBin-get-internal-session" title="The “get-internal-session†signal">get-internal-session</a></td> -<td class="signal_flags">Action</td> +<td class="signal_flags"><a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-ACTION:CAPS">Action</a></td> </tr> <tr> <td class="signal_type"><span class="returnvalue">void</span></td> <td class="signal_name"><a class="link" href="gst-plugins-good-plugins-rtpbin.html#GstRtpBin-on-bye-ssrc" title="The “on-bye-ssrc†signal">on-bye-ssrc</a></td> -<td class="signal_flags">Run Last</td> +<td class="signal_flags"><a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></td> </tr> <tr> <td class="signal_type"><span class="returnvalue">void</span></td> <td class="signal_name"><a class="link" href="gst-plugins-good-plugins-rtpbin.html#GstRtpBin-on-bye-timeout" title="The “on-bye-timeout†signal">on-bye-timeout</a></td> -<td class="signal_flags">Run Last</td> +<td class="signal_flags"><a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></td> </tr> <tr> <td class="signal_type"><span class="returnvalue">void</span></td> <td class="signal_name"><a class="link" href="gst-plugins-good-plugins-rtpbin.html#GstRtpBin-on-new-ssrc" title="The “on-new-ssrc†signal">on-new-ssrc</a></td> -<td class="signal_flags">Run Last</td> +<td class="signal_flags"><a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></td> </tr> <tr> <td class="signal_type"><span class="returnvalue">void</span></td> <td class="signal_name"><a class="link" href="gst-plugins-good-plugins-rtpbin.html#GstRtpBin-on-npt-stop" title="The “on-npt-stop†signal">on-npt-stop</a></td> -<td class="signal_flags">Run Last</td> +<td class="signal_flags"><a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></td> </tr> <tr> <td class="signal_type"><span class="returnvalue">void</span></td> <td class="signal_name"><a class="link" href="gst-plugins-good-plugins-rtpbin.html#GstRtpBin-on-sender-timeout" title="The “on-sender-timeout†signal">on-sender-timeout</a></td> -<td class="signal_flags">Run Last</td> +<td class="signal_flags"><a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></td> </tr> <tr> <td class="signal_type"><span class="returnvalue">void</span></td> <td class="signal_name"><a class="link" href="gst-plugins-good-plugins-rtpbin.html#GstRtpBin-on-ssrc-active" title="The “on-ssrc-active†signal">on-ssrc-active</a></td> -<td class="signal_flags">Run Last</td> +<td class="signal_flags"><a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></td> </tr> <tr> <td class="signal_type"><span class="returnvalue">void</span></td> <td class="signal_name"><a class="link" href="gst-plugins-good-plugins-rtpbin.html#GstRtpBin-on-ssrc-collision" title="The “on-ssrc-collision†signal">on-ssrc-collision</a></td> -<td class="signal_flags">Run Last</td> +<td class="signal_flags"><a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></td> </tr> <tr> <td class="signal_type"><span class="returnvalue">void</span></td> <td class="signal_name"><a class="link" href="gst-plugins-good-plugins-rtpbin.html#GstRtpBin-on-ssrc-sdes" title="The “on-ssrc-sdes†signal">on-ssrc-sdes</a></td> -<td class="signal_flags">Run Last</td> +<td class="signal_flags"><a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></td> </tr> <tr> <td class="signal_type"><span class="returnvalue">void</span></td> <td class="signal_name"><a class="link" href="gst-plugins-good-plugins-rtpbin.html#GstRtpBin-on-ssrc-validated" title="The “on-ssrc-validated†signal">on-ssrc-validated</a></td> -<td class="signal_flags">Run Last</td> +<td class="signal_flags"><a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></td> </tr> <tr> <td class="signal_type"><span class="returnvalue">void</span></td> <td class="signal_name"><a class="link" href="gst-plugins-good-plugins-rtpbin.html#GstRtpBin-on-timeout" title="The “on-timeout†signal">on-timeout</a></td> -<td class="signal_flags">Run Last</td> +<td class="signal_flags"><a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></td> </tr> <tr> <td class="signal_type"> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstCaps.html"><span class="returnvalue">GstCaps</span></a>*</td> <td class="signal_name"><a class="link" href="gst-plugins-good-plugins-rtpbin.html#GstRtpBin-request-pt-map" title="The “request-pt-map†signal">request-pt-map</a></td> -<td class="signal_flags">Run Last</td> +<td class="signal_flags"><a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></td> </tr> <tr> <td class="signal_type"><span class="returnvalue">void</span></td> <td class="signal_name"><a class="link" href="gst-plugins-good-plugins-rtpbin.html#GstRtpBin-reset-sync" title="The “reset-sync†signal">reset-sync</a></td> -<td class="signal_flags">Action</td> +<td class="signal_flags"><a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-ACTION:CAPS">Action</a></td> </tr> <tr> <td class="signal_type"><span class="returnvalue">void</span></td> <td class="signal_name"><a class="link" href="gst-plugins-good-plugins-rtpbin.html#GstRtpBin-payload-type-change" title="The “payload-type-change†signal">payload-type-change</a></td> -<td class="signal_flags">Run Last</td> +<td class="signal_flags"><a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></td> </tr> <tr> <td class="signal_type"><span class="returnvalue">void</span></td> <td class="signal_name"><a class="link" href="gst-plugins-good-plugins-rtpbin.html#GstRtpBin-new-jitterbuffer" title="The “new-jitterbuffer†signal">new-jitterbuffer</a></td> -<td class="signal_flags">Run Last</td> +<td class="signal_flags"><a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></td> </tr> <tr> <td class="signal_type"> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="returnvalue">GstElement</span></a>*</td> <td class="signal_name"><a class="link" href="gst-plugins-good-plugins-rtpbin.html#GstRtpBin-request-aux-receiver" title="The “request-aux-receiver†signal">request-aux-receiver</a></td> -<td class="signal_flags">Run Last</td> +<td class="signal_flags"><a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></td> </tr> <tr> <td class="signal_type"> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="returnvalue">GstElement</span></a>*</td> <td class="signal_name"><a class="link" href="gst-plugins-good-plugins-rtpbin.html#GstRtpBin-request-aux-sender" title="The “request-aux-sender†signal">request-aux-sender</a></td> -<td class="signal_flags">Run Last</td> +<td class="signal_flags"><a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></td> </tr> <tr> <td class="signal_type"> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="returnvalue">GstElement</span></a>*</td> <td class="signal_name"><a class="link" href="gst-plugins-good-plugins-rtpbin.html#GstRtpBin-request-rtcp-decoder" title="The “request-rtcp-decoder†signal">request-rtcp-decoder</a></td> -<td class="signal_flags">Run Last</td> +<td class="signal_flags"><a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></td> </tr> <tr> <td class="signal_type"> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="returnvalue">GstElement</span></a>*</td> <td class="signal_name"><a class="link" href="gst-plugins-good-plugins-rtpbin.html#GstRtpBin-request-rtcp-encoder" title="The “request-rtcp-encoder†signal">request-rtcp-encoder</a></td> -<td class="signal_flags">Run Last</td> +<td class="signal_flags"><a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></td> </tr> <tr> <td class="signal_type"> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="returnvalue">GstElement</span></a>*</td> <td class="signal_name"><a class="link" href="gst-plugins-good-plugins-rtpbin.html#GstRtpBin-request-rtp-decoder" title="The “request-rtp-decoder†signal">request-rtp-decoder</a></td> -<td class="signal_flags">Run Last</td> +<td class="signal_flags"><a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></td> </tr> <tr> <td class="signal_type"> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="returnvalue">GstElement</span></a>*</td> <td class="signal_name"><a class="link" href="gst-plugins-good-plugins-rtpbin.html#GstRtpBin-request-rtp-encoder" title="The “request-rtp-encoder†signal">request-rtp-encoder</a></td> -<td class="signal_flags">Run Last</td> +<td class="signal_flags"><a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></td> </tr> </tbody> </table></div> @@ -625,8 +630,6 @@ on port 5007. </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-rtpbin.functions_details"></a><h2>Functions</h2> @@ -637,8 +640,6 @@ on port 5007. <div class="refsect2"> <a name="GstRtpBin-struct"></a><h3>struct GstRtpBin</h3> <pre class="programlisting">struct GstRtpBin;</pre> -<p> -</p> </div> <hr> <div class="refsect2"> @@ -668,28 +669,28 @@ RTP_JITTER_BUFFER_MODE_LAST: last buffer mode.</p> <tbody> <tr> <td class="enum_member_name"><p><a name="RTP-JITTER-BUFFER-MODE-NONE:CAPS"></a>RTP_JITTER_BUFFER_MODE_NONE</p></td> -<td class="enum_member_description"> </td> -<td class="enum_member_annotations"> </td> +<td> </td> +<td> </td> </tr> <tr> <td class="enum_member_name"><p><a name="RTP-JITTER-BUFFER-MODE-SLAVE:CAPS"></a>RTP_JITTER_BUFFER_MODE_SLAVE</p></td> -<td class="enum_member_description"> </td> -<td class="enum_member_annotations"> </td> +<td> </td> +<td> </td> </tr> <tr> <td class="enum_member_name"><p><a name="RTP-JITTER-BUFFER-MODE-BUFFER:CAPS"></a>RTP_JITTER_BUFFER_MODE_BUFFER</p></td> -<td class="enum_member_description"> </td> -<td class="enum_member_annotations"> </td> +<td> </td> +<td> </td> </tr> <tr> <td class="enum_member_name"><p><a name="RTP-JITTER-BUFFER-MODE-SYNCED:CAPS"></a>RTP_JITTER_BUFFER_MODE_SYNCED</p></td> -<td class="enum_member_description"> </td> -<td class="enum_member_annotations"> </td> +<td> </td> +<td> </td> </tr> <tr> <td class="enum_member_name"><p><a name="RTP-JITTER-BUFFER-MODE-LAST:CAPS"></a>RTP_JITTER_BUFFER_MODE_LAST</p></td> -<td class="enum_member_description"> </td> -<td class="enum_member_annotations"> </td> +<td> </td> +<td> </td> </tr> </tbody> </table></div> @@ -698,10 +699,8 @@ RTP_JITTER_BUFFER_MODE_LAST: last buffer mode.</p> <hr> <div class="refsect2"> <a name="GstRTCPSync"></a><h3>enum GstRTCPSync</h3> -<p> -</p> <div class="refsect3"> -<a name="id-1.2.124.11.4.4"></a><h4>Members</h4> +<a name="id-1.2.124.11.4.3"></a><h4>Members</h4> <div class="informaltable"><table width="100%" border="0"> <colgroup> <col width="300px" class="enum_members_name"> @@ -711,18 +710,18 @@ RTP_JITTER_BUFFER_MODE_LAST: last buffer mode.</p> <tbody> <tr> <td class="enum_member_name"><p><a name="GST-RTP-BIN-RTCP-SYNC-ALWAYS:CAPS"></a>GST_RTP_BIN_RTCP_SYNC_ALWAYS</p></td> -<td class="enum_member_description"> </td> -<td class="enum_member_annotations"> </td> +<td> </td> +<td> </td> </tr> <tr> <td class="enum_member_name"><p><a name="GST-RTP-BIN-RTCP-SYNC-INITIAL:CAPS"></a>GST_RTP_BIN_RTCP_SYNC_INITIAL</p></td> -<td class="enum_member_description"> </td> -<td class="enum_member_annotations"> </td> +<td> </td> +<td> </td> </tr> <tr> <td class="enum_member_name"><p><a name="GST-RTP-BIN-RTCP-SYNC-RTP:CAPS"></a>GST_RTP_BIN_RTCP_SYNC_RTP</p></td> -<td class="enum_member_description"> </td> -<td class="enum_member_annotations"> </td> +<td> </td> +<td> </td> </tr> </tbody> </table></div> @@ -793,7 +792,7 @@ used to synchronize receivers on multiple machines.</p> <div class="refsect2"> <a name="GstRtpBin--use-pipeline-clock"></a><h3>The <code class="literal">“use-pipeline-clockâ€</code> property</h3> <pre class="programlisting"> “use-pipeline-clock†<a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></pre> -<p>Use the pipeline running-time to set the NTP time in the RTCP SR messages.</p> +<p>Use the pipeline running-time to set the NTP time in the RTCP SR messages (DEPRECATED: Use ntp-source property).</p> <p>Flags: Read / Write</p> <p>Default value: FALSE</p> </div> @@ -848,7 +847,15 @@ set the <span class="type">“do-retransmissionâ€</span> property on the <p>Sets the default RTP profile of newly created RTP sessions. The profile can be changed afterwards on a per-session basis.</p> <p>Flags: Read / Write</p> -<p>Default value: GST_RTP_PROFILE_AVPF</p> +<p>Default value: GST_RTP_PROFILE_AVP</p> +</div> +<hr> +<div class="refsect2"> +<a name="GstRtpBin--ntp-time-source"></a><h3>The <code class="literal">“ntp-time-sourceâ€</code> property</h3> +<pre class="programlisting"> “ntp-time-source†<span class="type">GstRtpNtpTimeSource</span></pre> +<p>NTP time source for RTCP packets.</p> +<p>Flags: Read / Write</p> +<p>Default value: NTP time based on realtime clock</p> </div> </div> <div class="refsect1"> @@ -882,7 +889,7 @@ user_function (<a class="link" href="gst-plugins-good-plugins-rtpbin.html#GstRtp </tbody> </table></div> </div> -<p>Flags: Action</p> +<p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-ACTION:CAPS">Action</a></p> </div> <hr> <div class="refsect2"> @@ -920,7 +927,7 @@ user_function (<a class="link" href="gst-plugins-good-plugins-rtpbin.html#GstRtp </tbody> </table></div> </div> -<p>Flags: Action</p> +<p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-ACTION:CAPS">Action</a></p> </div> <hr> <div class="refsect2"> @@ -963,7 +970,7 @@ user_function (<a class="link" href="gst-plugins-good-plugins-rtpbin.html#GstRtp </tbody> </table></div> </div> -<p>Flags: Run Last</p> +<p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></p> </div> <hr> <div class="refsect2"> @@ -1006,7 +1013,7 @@ user_function (<a class="link" href="gst-plugins-good-plugins-rtpbin.html#GstRtp </tbody> </table></div> </div> -<p>Flags: Run Last</p> +<p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></p> </div> <hr> <div class="refsect2"> @@ -1050,7 +1057,7 @@ user_function (<a class="link" href="gst-plugins-good-plugins-rtpbin.html#GstRtp </tbody> </table></div> </div> -<p>Flags: Run Last</p> +<p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></p> </div> <hr> <div class="refsect2"> @@ -1093,7 +1100,7 @@ user_function (<a class="link" href="gst-plugins-good-plugins-rtpbin.html#GstRtp </tbody> </table></div> </div> -<p>Flags: Run Last</p> +<p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></p> </div> <hr> <div class="refsect2"> @@ -1136,7 +1143,7 @@ user_function (<a class="link" href="gst-plugins-good-plugins-rtpbin.html#GstRtp </tbody> </table></div> </div> -<p>Flags: Run Last</p> +<p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></p> </div> <hr> <div class="refsect2"> @@ -1179,7 +1186,7 @@ user_function (<a class="link" href="gst-plugins-good-plugins-rtpbin.html#GstRtp </tbody> </table></div> </div> -<p>Flags: Run Last</p> +<p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></p> </div> <hr> <div class="refsect2"> @@ -1222,7 +1229,7 @@ user_function (<a class="link" href="gst-plugins-good-plugins-rtpbin.html#GstRtp </tbody> </table></div> </div> -<p>Flags: Run Last</p> +<p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></p> </div> <hr> <div class="refsect2"> @@ -1265,7 +1272,7 @@ user_function (<a class="link" href="gst-plugins-good-plugins-rtpbin.html#GstRtp </tbody> </table></div> </div> -<p>Flags: Run Last</p> +<p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></p> </div> <hr> <div class="refsect2"> @@ -1308,7 +1315,7 @@ user_function (<a class="link" href="gst-plugins-good-plugins-rtpbin.html#GstRtp </tbody> </table></div> </div> -<p>Flags: Run Last</p> +<p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></p> </div> <hr> <div class="refsect2"> @@ -1351,7 +1358,7 @@ user_function (<a class="link" href="gst-plugins-good-plugins-rtpbin.html#GstRtp </tbody> </table></div> </div> -<p>Flags: Run Last</p> +<p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></p> </div> <hr> <div class="refsect2"> @@ -1396,7 +1403,7 @@ user_function (<a class="link" href="gst-plugins-good-plugins-rtpbin.html#GstRtp </tbody> </table></div> </div> -<p>Flags: Run Last</p> +<p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></p> </div> <hr> <div class="refsect2"> @@ -1428,7 +1435,7 @@ packets for all streams before lip-sync is attempted again.</p> </tbody> </table></div> </div> -<p>Flags: Action</p> +<p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-ACTION:CAPS">Action</a></p> </div> <hr> <div class="refsect2"> @@ -1473,7 +1480,7 @@ user_function (<a class="link" href="gst-plugins-good-plugins-rtpbin.html#GstRtp </tbody> </table></div> </div> -<p>Flags: Run Last</p> +<p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></p> </div> <hr> <div class="refsect2"> @@ -1527,7 +1534,7 @@ This signal can, for example, be used to configure <em class="parameter"><code>j </tbody> </table></div> </div> -<p>Flags: Run Last</p> +<p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></p> <p class="since">Since: 1.4</p> </div> <hr> @@ -1568,7 +1575,7 @@ element will be added to the bin.</p> </tbody> </table></div> </div> -<p>Flags: Run Last</p> +<p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></p> <p class="since">Since: 1.4</p> </div> <hr> @@ -1609,7 +1616,7 @@ element will be added to the bin.</p> </tbody> </table></div> </div> -<p>Flags: Run Last</p> +<p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></p> <p class="since">Since: 1.4</p> </div> <hr> @@ -1650,7 +1657,7 @@ element will be added to the bin if not previously added.</p> </tbody> </table></div> </div> -<p>Flags: Run Last</p> +<p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></p> <p class="since">Since: 1.4</p> </div> <hr> @@ -1691,7 +1698,7 @@ element will be added to the bin if not previously added.</p> </tbody> </table></div> </div> -<p>Flags: Run Last</p> +<p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></p> <p class="since">Since: 1.4</p> </div> <hr> @@ -1732,7 +1739,7 @@ element will be added to the bin if not previously added.</p> </tbody> </table></div> </div> -<p>Flags: Run Last</p> +<p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></p> <p class="since">Since: 1.4</p> </div> <hr> @@ -1773,7 +1780,7 @@ element will be added to the bin if not previously added.</p> </tbody> </table></div> </div> -<p>Flags: Run Last</p> +<p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></p> <p class="since">Since: 1.4</p> </div> </div> diff --git a/docs/plugins/html/gst-plugins-good-plugins-rtpbvdepay.html b/docs/plugins/html/gst-plugins-good-plugins-rtpbvdepay.html index 4528e0dc7..387390da9 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-rtpbvdepay.html +++ b/docs/plugins/html/gst-plugins-good-plugins-rtpbvdepay.html @@ -27,7 +27,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-rtpbvdepay.top_of_page"></a>rtpbvdepay</span></h2> -<p>rtpbvdepay — Extracts BroadcomVoice audio from RTP packets (RFC 4298)</p> +<p>rtpbvdepay</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -38,7 +38,7 @@ For detailed information see: http://www.rfc-editor.org/rfc/rfc4298.txt</p> <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="id-1.2.116.3.2.1.1"></a><h3>Element Information</h3> +<a name="id-1.2.116.3.3.1"></a><h3>Element Information</h3> <div class="variablelist"><table border="0" class="variablelist"> <colgroup> <col align="left" valign="top"> @@ -64,7 +64,7 @@ For detailed information see: http://www.rfc-editor.org/rfc/rfc4298.txt</p> </div> <hr> <div class="refsect2"> -<a name="id-1.2.116.3.2.1.2"></a><h3>Element Pads</h3> +<a name="id-1.2.116.3.3.2"></a><h3>Element Pads</h3> <div class="variablelist"><table border="0" class="variablelist"> <colgroup> <col align="left" valign="top"> @@ -119,8 +119,6 @@ For detailed information see: http://www.rfc-editor.org/rfc/rfc4298.txt</p> </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-rtpbvdepay.functions_details"></a><h2>Functions</h2> diff --git a/docs/plugins/html/gst-plugins-good-plugins-rtpbvpay.html b/docs/plugins/html/gst-plugins-good-plugins-rtpbvpay.html index 736e15627..160811e4f 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-rtpbvpay.html +++ b/docs/plugins/html/gst-plugins-good-plugins-rtpbvpay.html @@ -27,7 +27,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-rtpbvpay.top_of_page"></a>rtpbvpay</span></h2> -<p>rtpbvpay — Packetize BroadcomVoice audio streams into RTP packets (RFC 4298)</p> +<p>rtpbvpay</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -38,7 +38,7 @@ For detailed information see: http://www.rfc-editor.org/rfc/rfc4298.txt</p> <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="id-1.2.117.3.2.1.1"></a><h3>Element Information</h3> +<a name="id-1.2.117.3.3.1"></a><h3>Element Information</h3> <div class="variablelist"><table border="0" class="variablelist"> <colgroup> <col align="left" valign="top"> @@ -64,7 +64,7 @@ For detailed information see: http://www.rfc-editor.org/rfc/rfc4298.txt</p> </div> <hr> <div class="refsect2"> -<a name="id-1.2.117.3.2.1.2"></a><h3>Element Pads</h3> +<a name="id-1.2.117.3.3.2"></a><h3>Element Pads</h3> <div class="variablelist"><table border="0" class="variablelist"> <colgroup> <col align="left" valign="top"> @@ -119,8 +119,6 @@ For detailed information see: http://www.rfc-editor.org/rfc/rfc4298.txt</p> </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-rtpbvpay.functions_details"></a><h2>Functions</h2> diff --git a/docs/plugins/html/gst-plugins-good-plugins-rtpdec.html b/docs/plugins/html/gst-plugins-good-plugins-rtpdec.html index ecd863dc4..e4ff8f428 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-rtpdec.html +++ b/docs/plugins/html/gst-plugins-good-plugins-rtpdec.html @@ -30,7 +30,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-rtpdec.top_of_page"></a>rtpdec</span></h2> -<p>rtpdec — Accepts raw RTP and RTCP packets and sends them forward</p> +<p>rtpdec</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -68,43 +68,43 @@ <tr> <td class="signal_type"><span class="returnvalue">void</span></td> <td class="signal_name"><a class="link" href="gst-plugins-good-plugins-rtpdec.html#GstRTPDec-clear-pt-map" title="The “clear-pt-map†signal">clear-pt-map</a></td> -<td class="signal_flags">Run Last</td> +<td class="signal_flags"><a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></td> </tr> <tr> <td class="signal_type"> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstCaps.html"><span class="returnvalue">GstCaps</span></a>*</td> <td class="signal_name"><a class="link" href="gst-plugins-good-plugins-rtpdec.html#GstRTPDec-request-pt-map" title="The “request-pt-map†signal">request-pt-map</a></td> -<td class="signal_flags">Run Last</td> +<td class="signal_flags"><a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></td> </tr> <tr> <td class="signal_type"><span class="returnvalue">void</span></td> <td class="signal_name"><a class="link" href="gst-plugins-good-plugins-rtpdec.html#GstRTPDec-on-bye-ssrc" title="The “on-bye-ssrc†signal">on-bye-ssrc</a></td> -<td class="signal_flags">Run Last</td> +<td class="signal_flags"><a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></td> </tr> <tr> <td class="signal_type"><span class="returnvalue">void</span></td> <td class="signal_name"><a class="link" href="gst-plugins-good-plugins-rtpdec.html#GstRTPDec-on-bye-timeout" title="The “on-bye-timeout†signal">on-bye-timeout</a></td> -<td class="signal_flags">Run Last</td> +<td class="signal_flags"><a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></td> </tr> <tr> <td class="signal_type"><span class="returnvalue">void</span></td> <td class="signal_name"><a class="link" href="gst-plugins-good-plugins-rtpdec.html#GstRTPDec-on-new-ssrc" title="The “on-new-ssrc†signal">on-new-ssrc</a></td> -<td class="signal_flags">Run Last</td> +<td class="signal_flags"><a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></td> </tr> <tr> <td class="signal_type"><span class="returnvalue">void</span></td> <td class="signal_name"><a class="link" href="gst-plugins-good-plugins-rtpdec.html#GstRTPDec-on-ssrc-collision" title="The “on-ssrc-collision†signal">on-ssrc-collision</a></td> -<td class="signal_flags">Run Last</td> +<td class="signal_flags"><a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></td> </tr> <tr> <td class="signal_type"><span class="returnvalue">void</span></td> <td class="signal_name"><a class="link" href="gst-plugins-good-plugins-rtpdec.html#GstRTPDec-on-ssrc-validated" title="The “on-ssrc-validated†signal">on-ssrc-validated</a></td> -<td class="signal_flags">Run Last</td> +<td class="signal_flags"><a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></td> </tr> <tr> <td class="signal_type"><span class="returnvalue">void</span></td> <td class="signal_name"><a class="link" href="gst-plugins-good-plugins-rtpdec.html#GstRTPDec-on-timeout" title="The “on-timeout†signal">on-timeout</a></td> -<td class="signal_flags">Run Last</td> +<td class="signal_flags"><a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></td> </tr> </tbody> </table></div> @@ -137,7 +137,7 @@ <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="id-1.2.111.8.2.1.1"></a><h3>Element Information</h3> +<a name="id-1.2.111.8.3.1"></a><h3>Element Information</h3> <div class="variablelist"><table border="0" class="variablelist"> <colgroup> <col align="left" valign="top"> @@ -163,7 +163,7 @@ </div> <hr> <div class="refsect2"> -<a name="id-1.2.111.8.2.1.2"></a><h3>Element Pads</h3> +<a name="id-1.2.111.8.3.2"></a><h3>Element Pads</h3> <div class="variablelist"><table border="0" class="variablelist"> <colgroup> <col align="left" valign="top"> @@ -262,8 +262,6 @@ </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-rtpdec.functions_details"></a><h2>Functions</h2> @@ -274,8 +272,6 @@ <div class="refsect2"> <a name="GstRTPDec-struct"></a><h3>struct GstRTPDec</h3> <pre class="programlisting">struct GstRTPDec;</pre> -<p> -</p> </div> </div> <div class="refsect1"> @@ -303,31 +299,7 @@ <pre class="programlisting"><span class="returnvalue">void</span> user_function (<a class="link" href="gst-plugins-good-plugins-rtpdec.html#GstRTPDec"><span class="type">GstRTPDec</span></a> *gstrtpdec, <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data)</pre> -<p> -</p> -<div class="refsect3"> -<a name="id-1.2.111.12.2.5"></a><h4>Parameters</h4> -<div class="informaltable"><table width="100%" border="0"> -<colgroup> -<col width="150px" class="parameters_name"> -<col class="parameters_description"> -<col width="200px" class="parameters_annotations"> -</colgroup> -<tbody> -<tr> -<td class="parameter_name"><p>gstrtpdec</p></td> -<td class="parameter_description"><p>the object which received the signal.</p></td> -<td class="parameter_annotations"> </td> -</tr> -<tr> -<td class="parameter_name"><p>user_data</p></td> -<td class="parameter_description"><p>user data set when the signal handler was connected.</p></td> -<td class="parameter_annotations"> </td> -</tr> -</tbody> -</table></div> -</div> -<p>Flags: Run Last</p> +<p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></p> </div> <hr> <div class="refsect2"> @@ -372,7 +344,7 @@ user_function (<a class="link" href="gst-plugins-good-plugins-rtpdec.html#GstRTP </tbody> </table></div> </div> -<p>Flags: Run Last</p> +<p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></p> </div> <hr> <div class="refsect2"> @@ -415,7 +387,7 @@ user_function (<a class="link" href="gst-plugins-good-plugins-rtpdec.html#GstRTP </tbody> </table></div> </div> -<p>Flags: Run Last</p> +<p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></p> </div> <hr> <div class="refsect2"> @@ -458,7 +430,7 @@ user_function (<a class="link" href="gst-plugins-good-plugins-rtpdec.html#GstRTP </tbody> </table></div> </div> -<p>Flags: Run Last</p> +<p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></p> </div> <hr> <div class="refsect2"> @@ -502,7 +474,7 @@ user_function (<a class="link" href="gst-plugins-good-plugins-rtpdec.html#GstRTP </tbody> </table></div> </div> -<p>Flags: Run Last</p> +<p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></p> </div> <hr> <div class="refsect2"> @@ -512,31 +484,7 @@ user_function (<a class="link" href="gst-plugins-good-plugins-rtpdec.html#GstRTP <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> arg1, <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> arg2, <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data)</pre> -<p> -</p> -<div class="refsect3"> -<a name="id-1.2.111.12.7.5"></a><h4>Parameters</h4> -<div class="informaltable"><table width="100%" border="0"> -<colgroup> -<col width="150px" class="parameters_name"> -<col class="parameters_description"> -<col width="200px" class="parameters_annotations"> -</colgroup> -<tbody> -<tr> -<td class="parameter_name"><p>gstrtpdec</p></td> -<td class="parameter_description"><p>the object which received the signal.</p></td> -<td class="parameter_annotations"> </td> -</tr> -<tr> -<td class="parameter_name"><p>user_data</p></td> -<td class="parameter_description"><p>user data set when the signal handler was connected.</p></td> -<td class="parameter_annotations"> </td> -</tr> -</tbody> -</table></div> -</div> -<p>Flags: Run Last</p> +<p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></p> </div> <hr> <div class="refsect2"> @@ -546,31 +494,7 @@ user_function (<a class="link" href="gst-plugins-good-plugins-rtpdec.html#GstRTP <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> arg1, <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> arg2, <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data)</pre> -<p> -</p> -<div class="refsect3"> -<a name="id-1.2.111.12.8.5"></a><h4>Parameters</h4> -<div class="informaltable"><table width="100%" border="0"> -<colgroup> -<col width="150px" class="parameters_name"> -<col class="parameters_description"> -<col width="200px" class="parameters_annotations"> -</colgroup> -<tbody> -<tr> -<td class="parameter_name"><p>gstrtpdec</p></td> -<td class="parameter_description"><p>the object which received the signal.</p></td> -<td class="parameter_annotations"> </td> -</tr> -<tr> -<td class="parameter_name"><p>user_data</p></td> -<td class="parameter_description"><p>user data set when the signal handler was connected.</p></td> -<td class="parameter_annotations"> </td> -</tr> -</tbody> -</table></div> -</div> -<p>Flags: Run Last</p> +<p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></p> </div> <hr> <div class="refsect2"> @@ -613,7 +537,7 @@ user_function (<a class="link" href="gst-plugins-good-plugins-rtpdec.html#GstRTP </tbody> </table></div> </div> -<p>Flags: Run Last</p> +<p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></p> </div> </div> </div> diff --git a/docs/plugins/html/gst-plugins-good-plugins-rtpdtmfmux.html b/docs/plugins/html/gst-plugins-good-plugins-rtpdtmfmux.html index 197739563..06a86509f 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-rtpdtmfmux.html +++ b/docs/plugins/html/gst-plugins-good-plugins-rtpdtmfmux.html @@ -28,7 +28,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-rtpdtmfmux.top_of_page"></a>rtpdtmfmux</span></h2> -<p>rtpdtmfmux — mixes RTP DTMF streams into other RTP streams</p> +<p>rtpdtmfmux</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -67,7 +67,7 @@ DTMF signal can replace the recorded audio while the tone is being sent.</p> <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="id-1.2.125.6.3.1.1"></a><h3>Element Information</h3> +<a name="id-1.2.125.6.4.1"></a><h3>Element Information</h3> <div class="variablelist"><table border="0" class="variablelist"> <colgroup> <col align="left" valign="top"> @@ -93,7 +93,7 @@ DTMF signal can replace the recorded audio while the tone is being sent.</p> </div> <hr> <div class="refsect2"> -<a name="id-1.2.125.6.3.1.2"></a><h3>Element Pads</h3> +<a name="id-1.2.125.6.4.2"></a><h3>Element Pads</h3> <div class="variablelist"><table border="0" class="variablelist"> <colgroup> <col align="left" valign="top"> @@ -168,8 +168,6 @@ DTMF signal can replace the recorded audio while the tone is being sent.</p> </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-rtpdtmfmux.functions_details"></a><h2>Functions</h2> diff --git a/docs/plugins/html/gst-plugins-good-plugins-rtpdtmfsrc.html b/docs/plugins/html/gst-plugins-good-plugins-rtpdtmfsrc.html index a418f923e..af7b43410 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-rtpdtmfsrc.html +++ b/docs/plugins/html/gst-plugins-good-plugins-rtpdtmfsrc.html @@ -29,7 +29,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-rtpdtmfsrc.top_of_page"></a>rtpdtmfsrc</span></h2> -<p>rtpdtmfsrc — Generates RTP DTMF packets</p> +<p>rtpdtmfsrc</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -194,7 +194,7 @@ READY state, then a "dtmf-event-dropped" message is posted on the <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="id-1.2.126.7.6.4.1"></a><h3>Element Information</h3> +<a name="id-1.2.126.7.7.1"></a><h3>Element Information</h3> <div class="variablelist"><table border="0" class="variablelist"> <colgroup> <col align="left" valign="top"> @@ -220,7 +220,7 @@ READY state, then a "dtmf-event-dropped" message is posted on the </div> <hr> <div class="refsect2"> -<a name="id-1.2.126.7.6.4.2"></a><h3>Element Pads</h3> +<a name="id-1.2.126.7.7.2"></a><h3>Element Pads</h3> <div class="variablelist"><table border="0" class="variablelist"> <colgroup> <col align="left" valign="top"> @@ -247,8 +247,6 @@ READY state, then a "dtmf-event-dropped" message is posted on the </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-rtpdtmfsrc.functions_details"></a><h2>Functions</h2> diff --git a/docs/plugins/html/gst-plugins-good-plugins-rtpj2kpay.html b/docs/plugins/html/gst-plugins-good-plugins-rtpj2kpay.html index b78b6f3fd..5a8c8381f 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-rtpj2kpay.html +++ b/docs/plugins/html/gst-plugins-good-plugins-rtpj2kpay.html @@ -29,7 +29,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-rtpj2kpay.top_of_page"></a>rtpj2kpay</span></h2> -<p>rtpj2kpay — Payload-encodes JPEG 2000 pictures into RTP packets (RFC 5371)</p> +<p>rtpj2kpay</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -81,7 +81,7 @@ codestream.</p> <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="id-1.2.120.7.3.1.1"></a><h3>Element Information</h3> +<a name="id-1.2.120.7.4.1"></a><h3>Element Information</h3> <div class="variablelist"><table border="0" class="variablelist"> <colgroup> <col align="left" valign="top"> @@ -107,7 +107,7 @@ codestream.</p> </div> <hr> <div class="refsect2"> -<a name="id-1.2.120.7.3.1.2"></a><h3>Element Pads</h3> +<a name="id-1.2.120.7.4.2"></a><h3>Element Pads</h3> <div class="variablelist"><table border="0" class="variablelist"> <colgroup> <col align="left" valign="top"> @@ -158,8 +158,6 @@ codestream.</p> </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-rtpj2kpay.functions_details"></a><h2>Functions</h2> @@ -170,8 +168,6 @@ codestream.</p> <div class="refsect2"> <a name="GstRtpJ2KPay-struct"></a><h3>struct GstRtpJ2KPay</h3> <pre class="programlisting">struct GstRtpJ2KPay;</pre> -<p> -</p> </div> </div> <div class="refsect1"> diff --git a/docs/plugins/html/gst-plugins-good-plugins-rtpjitterbuffer.html b/docs/plugins/html/gst-plugins-good-plugins-rtpjitterbuffer.html index ee5766638..ad15eeaea 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-rtpjitterbuffer.html +++ b/docs/plugins/html/gst-plugins-good-plugins-rtpjitterbuffer.html @@ -30,7 +30,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-rtpjitterbuffer.top_of_page"></a>rtpjitterbuffer</span></h2> -<p>rtpjitterbuffer — A buffer that deals with network jitter and other transmission faults</p> +<p>rtpjitterbuffer</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -139,28 +139,28 @@ <tr> <td class="signal_type"><span class="returnvalue">void</span></td> <td class="signal_name"><a class="link" href="gst-plugins-good-plugins-rtpjitterbuffer.html#GstRtpJitterBuffer-clear-pt-map" title="The “clear-pt-map†signal">clear-pt-map</a></td> -<td class="signal_flags">Action</td> +<td class="signal_flags"><a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-ACTION:CAPS">Action</a></td> </tr> <tr> <td class="signal_type"><span class="returnvalue">void</span></td> <td class="signal_name"><a class="link" href="gst-plugins-good-plugins-rtpjitterbuffer.html#GstRtpJitterBuffer-handle-sync" title="The “handle-sync†signal">handle-sync</a></td> -<td class="signal_flags">Run Last</td> +<td class="signal_flags"><a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></td> </tr> <tr> <td class="signal_type"><span class="returnvalue">void</span></td> <td class="signal_name"><a class="link" href="gst-plugins-good-plugins-rtpjitterbuffer.html#GstRtpJitterBuffer-on-npt-stop" title="The “on-npt-stop†signal">on-npt-stop</a></td> -<td class="signal_flags">Run Last</td> +<td class="signal_flags"><a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></td> </tr> <tr> <td class="signal_type"> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstCaps.html"><span class="returnvalue">GstCaps</span></a>*</td> <td class="signal_name"><a class="link" href="gst-plugins-good-plugins-rtpjitterbuffer.html#GstRtpJitterBuffer-request-pt-map" title="The “request-pt-map†signal">request-pt-map</a></td> -<td class="signal_flags">Run Last</td> +<td class="signal_flags"><a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></td> </tr> <tr> <td class="signal_type"><span class="returnvalue">guint64</span></td> <td class="signal_name"><a class="link" href="gst-plugins-good-plugins-rtpjitterbuffer.html#GstRtpJitterBuffer-set-active" title="The “set-active†signal">set-active</a></td> -<td class="signal_flags">Action</td> +<td class="signal_flags"><a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-ACTION:CAPS">Action</a></td> </tr> </tbody> </table></div> @@ -357,8 +357,6 @@ out-of-order RTP packets. </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-rtpjitterbuffer.functions_details"></a><h2>Functions</h2> @@ -588,7 +586,7 @@ user_function (<a class="link" href="gst-plugins-good-plugins-rtpjitterbuffer.ht </tbody> </table></div> </div> -<p>Flags: Action</p> +<p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-ACTION:CAPS">Action</a></p> </div> <hr> <div class="refsect2"> @@ -625,7 +623,7 @@ user_function (<a class="link" href="gst-plugins-good-plugins-rtpjitterbuffer.ht </tbody> </table></div> </div> -<p>Flags: Run Last</p> +<p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></p> </div> <hr> <div class="refsect2"> @@ -657,7 +655,7 @@ the npt-stop position.</p> </tbody> </table></div> </div> -<p>Flags: Run Last</p> +<p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></p> </div> <hr> <div class="refsect2"> @@ -695,7 +693,7 @@ user_function (<a class="link" href="gst-plugins-good-plugins-rtpjitterbuffer.ht </tbody> </table></div> </div> -<p>Flags: Run Last</p> +<p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></p> </div> <hr> <div class="refsect2"> @@ -733,7 +731,7 @@ useful in buffering mode.</p> <a name="id-1.2.127.12.6.6"></a><h4>Returns</h4> <p> the time of the last pushed packet.</p> </div> -<p>Flags: Action</p> +<p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-ACTION:CAPS">Action</a></p> </div> </div> </div> diff --git a/docs/plugins/html/gst-plugins-good-plugins-rtpjpegpay.html b/docs/plugins/html/gst-plugins-good-plugins-rtpjpegpay.html index ebb5c60b7..99fd0b1b9 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-rtpjpegpay.html +++ b/docs/plugins/html/gst-plugins-good-plugins-rtpjpegpay.html @@ -29,7 +29,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-rtpjpegpay.top_of_page"></a>rtpjpegpay</span></h2> -<p>rtpjpegpay — Payload-encodes JPEG pictures into RTP packets (RFC 2435)</p> +<p>rtpjpegpay</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -94,7 +94,7 @@ the actual JPEG entropy scan.</p> <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="id-1.2.121.7.4.1.1"></a><h3>Element Information</h3> +<a name="id-1.2.121.7.5.1"></a><h3>Element Information</h3> <div class="variablelist"><table border="0" class="variablelist"> <colgroup> <col align="left" valign="top"> @@ -120,7 +120,7 @@ the actual JPEG entropy scan.</p> </div> <hr> <div class="refsect2"> -<a name="id-1.2.121.7.4.1.2"></a><h3>Element Pads</h3> +<a name="id-1.2.121.7.5.2"></a><h3>Element Pads</h3> <div class="variablelist"><table border="0" class="variablelist"> <colgroup> <col align="left" valign="top"> @@ -175,8 +175,6 @@ the actual JPEG entropy scan.</p> </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-rtpjpegpay.functions_details"></a><h2>Functions</h2> @@ -187,8 +185,6 @@ the actual JPEG entropy scan.</p> <div class="refsect2"> <a name="GstRtpJPEGPay-struct"></a><h3>struct GstRtpJPEGPay</h3> <pre class="programlisting">struct GstRtpJPEGPay;</pre> -<p> -</p> </div> </div> <div class="refsect1"> diff --git a/docs/plugins/html/gst-plugins-good-plugins-rtpmux.html b/docs/plugins/html/gst-plugins-good-plugins-rtpmux.html index 85b2ef4f2..164b4ead6 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-rtpmux.html +++ b/docs/plugins/html/gst-plugins-good-plugins-rtpmux.html @@ -29,7 +29,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-rtpmux.top_of_page"></a>rtpmux</span></h2> -<p>rtpmux — multiplex N rtp streams into one</p> +<p>rtpmux</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -199,8 +199,6 @@ so they can be sent on the same port. </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-rtpmux.functions_details"></a><h2>Functions</h2> diff --git a/docs/plugins/html/gst-plugins-good-plugins-rtpptdemux.html b/docs/plugins/html/gst-plugins-good-plugins-rtpptdemux.html index 286eb558c..7d9e33c6a 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-rtpptdemux.html +++ b/docs/plugins/html/gst-plugins-good-plugins-rtpptdemux.html @@ -29,7 +29,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-rtpptdemux.top_of_page"></a>rtpptdemux</span></h2> -<p>rtpptdemux — Parses codec streams transmitted in the same RTP session</p> +<p>rtpptdemux</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -45,23 +45,23 @@ <tr> <td class="signal_type"><span class="returnvalue">void</span></td> <td class="signal_name"><a class="link" href="gst-plugins-good-plugins-rtpptdemux.html#GstRtpPtDemux-clear-pt-map" title="The “clear-pt-map†signal">clear-pt-map</a></td> -<td class="signal_flags">Action</td> +<td class="signal_flags"><a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-ACTION:CAPS">Action</a></td> </tr> <tr> <td class="signal_type"><span class="returnvalue">void</span></td> <td class="signal_name"><a class="link" href="gst-plugins-good-plugins-rtpptdemux.html#GstRtpPtDemux-new-payload-type" title="The “new-payload-type†signal">new-payload-type</a></td> -<td class="signal_flags">Run Last</td> +<td class="signal_flags"><a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></td> </tr> <tr> <td class="signal_type"><span class="returnvalue">void</span></td> <td class="signal_name"><a class="link" href="gst-plugins-good-plugins-rtpptdemux.html#GstRtpPtDemux-payload-type-change" title="The “payload-type-change†signal">payload-type-change</a></td> -<td class="signal_flags">Run Last</td> +<td class="signal_flags"><a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></td> </tr> <tr> <td class="signal_type"> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstCaps.html"><span class="returnvalue">GstCaps</span></a>*</td> <td class="signal_name"><a class="link" href="gst-plugins-good-plugins-rtpptdemux.html#GstRtpPtDemux-request-pt-map" title="The “request-pt-map†signal">request-pt-map</a></td> -<td class="signal_flags">Run Last</td> +<td class="signal_flags"><a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></td> </tr> </tbody> </table></div> @@ -195,8 +195,6 @@ payload type to fakesink, discarding the other payload types. </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-rtpptdemux.functions_details"></a><h2>Functions</h2> @@ -207,8 +205,6 @@ payload type to fakesink, discarding the other payload types. <div class="refsect2"> <a name="GstRtpPtDemux-struct"></a><h3>struct GstRtpPtDemux</h3> <pre class="programlisting">struct GstRtpPtDemux;</pre> -<p> -</p> </div> </div> <div class="refsect1"> @@ -242,7 +238,7 @@ currently cached payload type map.</p> </tbody> </table></div> </div> -<p>Flags: Action</p> +<p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-ACTION:CAPS">Action</a></p> </div> <hr> <div class="refsect2"> @@ -286,7 +282,7 @@ user_function (<a class="link" href="gst-plugins-good-plugins-rtpptdemux.html#Gs </tbody> </table></div> </div> -<p>Flags: Run Last</p> +<p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></p> </div> <hr> <div class="refsect2"> @@ -323,7 +319,7 @@ user_function (<a class="link" href="gst-plugins-good-plugins-rtpptdemux.html#Gs </tbody> </table></div> </div> -<p>Flags: Run Last</p> +<p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></p> </div> <hr> <div class="refsect2"> @@ -361,7 +357,7 @@ user_function (<a class="link" href="gst-plugins-good-plugins-rtpptdemux.html#Gs </tbody> </table></div> </div> -<p>Flags: Run Last</p> +<p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></p> </div> </div> </div> diff --git a/docs/plugins/html/gst-plugins-good-plugins-rtprtxreceive.html b/docs/plugins/html/gst-plugins-good-plugins-rtprtxreceive.html index 74aea642f..2be4bb752 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-rtprtxreceive.html +++ b/docs/plugins/html/gst-plugins-good-plugins-rtprtxreceive.html @@ -29,7 +29,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-rtprtxreceive.top_of_page"></a>rtprtxreceive</span></h2> -<p>rtprtxreceive — Receive retransmitted RTP packets according to RFC4588</p> +<p>rtprtxreceive</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -319,8 +319,6 @@ You should hear a clear sound. (after a few seconds the two streams wave feel sy </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-rtprtxreceive.functions_details"></a><h2>Functions</h2> @@ -331,8 +329,6 @@ You should hear a clear sound. (after a few seconds the two streams wave feel sy <div class="refsect2"> <a name="GstRtpRtxReceive-struct"></a><h3>struct GstRtpRtxReceive</h3> <pre class="programlisting">struct GstRtpRtxReceive;</pre> -<p> -</p> </div> </div> <div class="refsect1"> diff --git a/docs/plugins/html/gst-plugins-good-plugins-rtprtxsend.html b/docs/plugins/html/gst-plugins-good-plugins-rtprtxsend.html index 9d136f336..4c388bd83 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-rtprtxsend.html +++ b/docs/plugins/html/gst-plugins-good-plugins-rtprtxsend.html @@ -29,7 +29,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-rtprtxsend.top_of_page"></a>rtprtxsend</span></h2> -<p>rtprtxsend — Retransmit RTP packets when needed, according to RFC4588</p> +<p>rtprtxsend</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -117,7 +117,7 @@ this as an auxiliary stream. RTX is SSRC-multiplexed</p> <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="id-1.2.132.7.3.2.1"></a><h3>Element Information</h3> +<a name="id-1.2.132.7.4.1"></a><h3>Element Information</h3> <div class="variablelist"><table border="0" class="variablelist"> <colgroup> <col align="left" valign="top"> @@ -143,7 +143,7 @@ this as an auxiliary stream. RTX is SSRC-multiplexed</p> </div> <hr> <div class="refsect2"> -<a name="id-1.2.132.7.3.2.2"></a><h3>Element Pads</h3> +<a name="id-1.2.132.7.4.2"></a><h3>Element Pads</h3> <div class="variablelist"><table border="0" class="variablelist"> <colgroup> <col align="left" valign="top"> @@ -194,8 +194,6 @@ this as an auxiliary stream. RTX is SSRC-multiplexed</p> </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-rtprtxsend.functions_details"></a><h2>Functions</h2> @@ -206,8 +204,6 @@ this as an auxiliary stream. RTX is SSRC-multiplexed</p> <div class="refsect2"> <a name="GstRtpRtxSend-struct"></a><h3>struct GstRtpRtxSend</h3> <pre class="programlisting">struct GstRtpRtxSend;</pre> -<p> -</p> </div> </div> <div class="refsect1"> diff --git a/docs/plugins/html/gst-plugins-good-plugins-rtpsbcpay.html b/docs/plugins/html/gst-plugins-good-plugins-rtpsbcpay.html index c8ec23a32..910c980fe 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-rtpsbcpay.html +++ b/docs/plugins/html/gst-plugins-good-plugins-rtpsbcpay.html @@ -29,7 +29,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-rtpsbcpay.top_of_page"></a>rtpsbcpay</span></h2> -<p>rtpsbcpay — Payload SBC audio as RTP packets</p> +<p>rtpsbcpay</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -153,8 +153,6 @@ </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-rtpsbcpay.functions_details"></a><h2>Functions</h2> @@ -165,8 +163,6 @@ <div class="refsect2"> <a name="GstRtpSBCPay-struct"></a><h3>struct GstRtpSBCPay</h3> <pre class="programlisting">struct GstRtpSBCPay;</pre> -<p> -</p> </div> </div> <div class="refsect1"> diff --git a/docs/plugins/html/gst-plugins-good-plugins-rtpsession.html b/docs/plugins/html/gst-plugins-good-plugins-rtpsession.html index 7fb468512..0ca137083 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-rtpsession.html +++ b/docs/plugins/html/gst-plugins-good-plugins-rtpsession.html @@ -30,7 +30,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-rtpsession.top_of_page"></a>rtpsession</span></h2> -<p>rtpsession — Implement an RTP session</p> +<p>rtpsession</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -116,6 +116,11 @@ <td class="property_name"><a class="link" href="gst-plugins-good-plugins-rtpsession.html#GstRtpSession--rtp-profile" title="The “rtp-profile†property">rtp-profile</a></td> <td class="property_flags">Read / Write</td> </tr> +<tr> +<td class="property_type"><span class="type">GstRtpNtpTimeSource</span></td> +<td class="property_name"><a class="link" href="gst-plugins-good-plugins-rtpsession.html#GstRtpSession--ntp-time-source" title="The “ntp-time-source†property">ntp-time-source</a></td> +<td class="property_flags">Read / Write</td> +</tr> </tbody> </table></div> </div> @@ -131,58 +136,58 @@ <tr> <td class="signal_type"><span class="returnvalue">void</span></td> <td class="signal_name"><a class="link" href="gst-plugins-good-plugins-rtpsession.html#GstRtpSession-clear-pt-map" title="The “clear-pt-map†signal">clear-pt-map</a></td> -<td class="signal_flags">Action</td> +<td class="signal_flags"><a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-ACTION:CAPS">Action</a></td> </tr> <tr> <td class="signal_type"><span class="returnvalue">void</span></td> <td class="signal_name"><a class="link" href="gst-plugins-good-plugins-rtpsession.html#GstRtpSession-on-bye-ssrc" title="The “on-bye-ssrc†signal">on-bye-ssrc</a></td> -<td class="signal_flags">Run Last</td> +<td class="signal_flags"><a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></td> </tr> <tr> <td class="signal_type"><span class="returnvalue">void</span></td> <td class="signal_name"><a class="link" href="gst-plugins-good-plugins-rtpsession.html#GstRtpSession-on-bye-timeout" title="The “on-bye-timeout†signal">on-bye-timeout</a></td> -<td class="signal_flags">Run Last</td> +<td class="signal_flags"><a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></td> </tr> <tr> <td class="signal_type"><span class="returnvalue">void</span></td> <td class="signal_name"><a class="link" href="gst-plugins-good-plugins-rtpsession.html#GstRtpSession-on-new-ssrc" title="The “on-new-ssrc†signal">on-new-ssrc</a></td> -<td class="signal_flags">Run Last</td> +<td class="signal_flags"><a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></td> </tr> <tr> <td class="signal_type"><span class="returnvalue">void</span></td> <td class="signal_name"><a class="link" href="gst-plugins-good-plugins-rtpsession.html#GstRtpSession-on-sender-timeout" title="The “on-sender-timeout†signal">on-sender-timeout</a></td> -<td class="signal_flags">Run Last</td> +<td class="signal_flags"><a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></td> </tr> <tr> <td class="signal_type"><span class="returnvalue">void</span></td> <td class="signal_name"><a class="link" href="gst-plugins-good-plugins-rtpsession.html#GstRtpSession-on-ssrc-active" title="The “on-ssrc-active†signal">on-ssrc-active</a></td> -<td class="signal_flags">Run Last</td> +<td class="signal_flags"><a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></td> </tr> <tr> <td class="signal_type"><span class="returnvalue">void</span></td> <td class="signal_name"><a class="link" href="gst-plugins-good-plugins-rtpsession.html#GstRtpSession-on-ssrc-collision" title="The “on-ssrc-collision†signal">on-ssrc-collision</a></td> -<td class="signal_flags">Run Last</td> +<td class="signal_flags"><a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></td> </tr> <tr> <td class="signal_type"><span class="returnvalue">void</span></td> <td class="signal_name"><a class="link" href="gst-plugins-good-plugins-rtpsession.html#GstRtpSession-on-ssrc-sdes" title="The “on-ssrc-sdes†signal">on-ssrc-sdes</a></td> -<td class="signal_flags">Run Last</td> +<td class="signal_flags"><a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></td> </tr> <tr> <td class="signal_type"><span class="returnvalue">void</span></td> <td class="signal_name"><a class="link" href="gst-plugins-good-plugins-rtpsession.html#GstRtpSession-on-ssrc-validated" title="The “on-ssrc-validated†signal">on-ssrc-validated</a></td> -<td class="signal_flags">Run Last</td> +<td class="signal_flags"><a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></td> </tr> <tr> <td class="signal_type"><span class="returnvalue">void</span></td> <td class="signal_name"><a class="link" href="gst-plugins-good-plugins-rtpsession.html#GstRtpSession-on-timeout" title="The “on-timeout†signal">on-timeout</a></td> -<td class="signal_flags">Run Last</td> +<td class="signal_flags"><a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></td> </tr> <tr> <td class="signal_type"> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstCaps.html"><span class="returnvalue">GstCaps</span></a>*</td> <td class="signal_name"><a class="link" href="gst-plugins-good-plugins-rtpsession.html#GstRtpSession-request-pt-map" title="The “request-pt-map†signal">request-pt-map</a></td> -<td class="signal_flags">Run Last</td> +<td class="signal_flags"><a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></td> </tr> </tbody> </table></div> @@ -513,8 +518,6 @@ keep (see <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstr </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-rtpsession.functions_details"></a><h2>Functions</h2> @@ -525,8 +528,6 @@ keep (see <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstr <div class="refsect2"> <a name="GstRtpSession-struct"></a><h3>struct GstRtpSession</h3> <pre class="programlisting">struct GstRtpSession;</pre> -<p> -</p> </div> </div> <div class="refsect1"> @@ -608,7 +609,7 @@ keep (see <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstr <div class="refsect2"> <a name="GstRtpSession--use-pipeline-clock"></a><h3>The <code class="literal">“use-pipeline-clockâ€</code> property</h3> <pre class="programlisting"> “use-pipeline-clock†<a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></pre> -<p>Use the pipeline running-time to set the NTP time in the RTCP SR messages.</p> +<p>Use the pipeline running-time to set the NTP time in the RTCP SR messages (DEPRECATED: Use ntp-source property).</p> <p>Flags: Read / Write</p> <p>Default value: FALSE</p> </div> @@ -643,6 +644,14 @@ keep (see <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstr <p>Flags: Read / Write</p> <p>Default value: GST_RTP_PROFILE_AVP</p> </div> +<hr> +<div class="refsect2"> +<a name="GstRtpSession--ntp-time-source"></a><h3>The <code class="literal">“ntp-time-sourceâ€</code> property</h3> +<pre class="programlisting"> “ntp-time-source†<span class="type">GstRtpNtpTimeSource</span></pre> +<p>NTP time source for RTCP packets.</p> +<p>Flags: Read / Write</p> +<p>Default value: NTP time based on realtime clock</p> +</div> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-rtpsession.signal-details"></a><h2>Signal Details</h2> @@ -674,7 +683,7 @@ user_function (<a class="link" href="gst-plugins-good-plugins-rtpsession.html#Gs </tbody> </table></div> </div> -<p>Flags: Action</p> +<p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-ACTION:CAPS">Action</a></p> </div> <hr> <div class="refsect2"> @@ -711,7 +720,7 @@ user_function (<a class="link" href="gst-plugins-good-plugins-rtpsession.html#Gs </tbody> </table></div> </div> -<p>Flags: Run Last</p> +<p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></p> </div> <hr> <div class="refsect2"> @@ -748,7 +757,7 @@ user_function (<a class="link" href="gst-plugins-good-plugins-rtpsession.html#Gs </tbody> </table></div> </div> -<p>Flags: Run Last</p> +<p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></p> </div> <hr> <div class="refsect2"> @@ -786,7 +795,7 @@ user_function (<a class="link" href="gst-plugins-good-plugins-rtpsession.html#Gs </tbody> </table></div> </div> -<p>Flags: Run Last</p> +<p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></p> </div> <hr> <div class="refsect2"> @@ -823,7 +832,7 @@ user_function (<a class="link" href="gst-plugins-good-plugins-rtpsession.html#Gs </tbody> </table></div> </div> -<p>Flags: Run Last</p> +<p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></p> </div> <hr> <div class="refsect2"> @@ -832,31 +841,7 @@ user_function (<a class="link" href="gst-plugins-good-plugins-rtpsession.html#Gs user_function (<a class="link" href="gst-plugins-good-plugins-rtpsession.html#GstRtpSession"><span class="type">GstRtpSession</span></a> *gstrtpsession, <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> arg1, <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data)</pre> -<p> -</p> -<div class="refsect3"> -<a name="id-1.2.130.12.7.5"></a><h4>Parameters</h4> -<div class="informaltable"><table width="100%" border="0"> -<colgroup> -<col width="150px" class="parameters_name"> -<col class="parameters_description"> -<col width="200px" class="parameters_annotations"> -</colgroup> -<tbody> -<tr> -<td class="parameter_name"><p>gstrtpsession</p></td> -<td class="parameter_description"><p>the object which received the signal.</p></td> -<td class="parameter_annotations"> </td> -</tr> -<tr> -<td class="parameter_name"><p>user_data</p></td> -<td class="parameter_description"><p>user data set when the signal handler was connected.</p></td> -<td class="parameter_annotations"> </td> -</tr> -</tbody> -</table></div> -</div> -<p>Flags: Run Last</p> +<p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></p> </div> <hr> <div class="refsect2"> @@ -865,31 +850,7 @@ user_function (<a class="link" href="gst-plugins-good-plugins-rtpsession.html#Gs user_function (<a class="link" href="gst-plugins-good-plugins-rtpsession.html#GstRtpSession"><span class="type">GstRtpSession</span></a> *gstrtpsession, <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> arg1, <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data)</pre> -<p> -</p> -<div class="refsect3"> -<a name="id-1.2.130.12.8.5"></a><h4>Parameters</h4> -<div class="informaltable"><table width="100%" border="0"> -<colgroup> -<col width="150px" class="parameters_name"> -<col class="parameters_description"> -<col width="200px" class="parameters_annotations"> -</colgroup> -<tbody> -<tr> -<td class="parameter_name"><p>gstrtpsession</p></td> -<td class="parameter_description"><p>the object which received the signal.</p></td> -<td class="parameter_annotations"> </td> -</tr> -<tr> -<td class="parameter_name"><p>user_data</p></td> -<td class="parameter_description"><p>user data set when the signal handler was connected.</p></td> -<td class="parameter_annotations"> </td> -</tr> -</tbody> -</table></div> -</div> -<p>Flags: Run Last</p> +<p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></p> </div> <hr> <div class="refsect2"> @@ -926,7 +887,7 @@ user_function (<a class="link" href="gst-plugins-good-plugins-rtpsession.html#Gs </tbody> </table></div> </div> -<p>Flags: Run Last</p> +<p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></p> </div> <hr> <div class="refsect2"> @@ -935,31 +896,7 @@ user_function (<a class="link" href="gst-plugins-good-plugins-rtpsession.html#Gs user_function (<a class="link" href="gst-plugins-good-plugins-rtpsession.html#GstRtpSession"><span class="type">GstRtpSession</span></a> *gstrtpsession, <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> arg1, <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data)</pre> -<p> -</p> -<div class="refsect3"> -<a name="id-1.2.130.12.10.5"></a><h4>Parameters</h4> -<div class="informaltable"><table width="100%" border="0"> -<colgroup> -<col width="150px" class="parameters_name"> -<col class="parameters_description"> -<col width="200px" class="parameters_annotations"> -</colgroup> -<tbody> -<tr> -<td class="parameter_name"><p>gstrtpsession</p></td> -<td class="parameter_description"><p>the object which received the signal.</p></td> -<td class="parameter_annotations"> </td> -</tr> -<tr> -<td class="parameter_name"><p>user_data</p></td> -<td class="parameter_description"><p>user data set when the signal handler was connected.</p></td> -<td class="parameter_annotations"> </td> -</tr> -</tbody> -</table></div> -</div> -<p>Flags: Run Last</p> +<p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></p> </div> <hr> <div class="refsect2"> @@ -996,7 +933,7 @@ user_function (<a class="link" href="gst-plugins-good-plugins-rtpsession.html#Gs </tbody> </table></div> </div> -<p>Flags: Run Last</p> +<p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></p> </div> <hr> <div class="refsect2"> @@ -1034,7 +971,7 @@ user_function (<a class="link" href="gst-plugins-good-plugins-rtpsession.html#Gs </tbody> </table></div> </div> -<p>Flags: Run Last</p> +<p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></p> </div> </div> <div class="refsect1"> diff --git a/docs/plugins/html/gst-plugins-good-plugins-rtpssrcdemux.html b/docs/plugins/html/gst-plugins-good-plugins-rtpssrcdemux.html index 5a40e51c1..e480f1e8b 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-rtpssrcdemux.html +++ b/docs/plugins/html/gst-plugins-good-plugins-rtpssrcdemux.html @@ -29,7 +29,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-rtpssrcdemux.top_of_page"></a>rtpssrcdemux</span></h2> -<p>rtpssrcdemux — Splits RTP streams based on the SSRC</p> +<p>rtpssrcdemux</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -45,17 +45,17 @@ <tr> <td class="signal_type"><span class="returnvalue">void</span></td> <td class="signal_name"><a class="link" href="gst-plugins-good-plugins-rtpssrcdemux.html#GstRtpSsrcDemux-clear-ssrc" title="The “clear-ssrc†signal">clear-ssrc</a></td> -<td class="signal_flags">Action</td> +<td class="signal_flags"><a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-ACTION:CAPS">Action</a></td> </tr> <tr> <td class="signal_type"><span class="returnvalue">void</span></td> <td class="signal_name"><a class="link" href="gst-plugins-good-plugins-rtpssrcdemux.html#GstRtpSsrcDemux-new-ssrc-pad" title="The “new-ssrc-pad†signal">new-ssrc-pad</a></td> -<td class="signal_flags">Run Last</td> +<td class="signal_flags"><a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></td> </tr> <tr> <td class="signal_type"><span class="returnvalue">void</span></td> <td class="signal_name"><a class="link" href="gst-plugins-good-plugins-rtpssrcdemux.html#GstRtpSsrcDemux-removed-ssrc-pad" title="The “removed-ssrc-pad†signal">removed-ssrc-pad</a></td> -<td class="signal_flags">Run Last</td> +<td class="signal_flags"><a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></td> </tr> </tbody> </table></div> @@ -232,8 +232,6 @@ to fakesink, discarding the other SSRCs. </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-rtpssrcdemux.functions_details"></a><h2>Functions</h2> @@ -244,8 +242,6 @@ to fakesink, discarding the other SSRCs. <div class="refsect2"> <a name="GstRtpSsrcDemux-struct"></a><h3>struct GstRtpSsrcDemux</h3> <pre class="programlisting">struct GstRtpSsrcDemux;</pre> -<p> -</p> </div> </div> <div class="refsect1"> @@ -284,7 +280,7 @@ user_function (<a class="link" href="gst-plugins-good-plugins-rtpssrcdemux.html# </tbody> </table></div> </div> -<p>Flags: Action</p> +<p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-ACTION:CAPS">Action</a></p> </div> <hr> <div class="refsect2"> @@ -327,7 +323,7 @@ user_function (<a class="link" href="gst-plugins-good-plugins-rtpssrcdemux.html# </tbody> </table></div> </div> -<p>Flags: Run Last</p> +<p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></p> </div> <hr> <div class="refsect2"> @@ -370,7 +366,7 @@ user_function (<a class="link" href="gst-plugins-good-plugins-rtpssrcdemux.html# </tbody> </table></div> </div> -<p>Flags: Run Last</p> +<p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></p> </div> </div> </div> diff --git a/docs/plugins/html/gst-plugins-good-plugins-rtspsrc.html b/docs/plugins/html/gst-plugins-good-plugins-rtspsrc.html index ed25e8b1a..fd540eea4 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-rtspsrc.html +++ b/docs/plugins/html/gst-plugins-good-plugins-rtspsrc.html @@ -31,7 +31,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-rtspsrc.top_of_page"></a>rtspsrc</span></h2> -<p>rtspsrc — Receive data over the network via RTSP (RFC 2326)</p> +<p>rtspsrc</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -209,6 +209,12 @@ <td class="property_name"><a class="link" href="gst-plugins-good-plugins-rtspsrc.html#GstRTSPSrc--do-retransmission" title="The “do-retransmission†property">do-retransmission</a></td> <td class="property_flags">Read / Write</td> </tr> +<tr> +<td class="property_type"> +<a href="https://developer.gnome.org/gio/unstable/GTlsInteraction.html"><span class="type">GTlsInteraction</span></a> *</td> +<td class="property_name"><a class="link" href="gst-plugins-good-plugins-rtspsrc.html#GstRTSPSrc--tls-interaction" title="The “tls-interaction†property">tls-interaction</a></td> +<td class="property_flags">Read / Write</td> +</tr> </tbody> </table></div> </div> @@ -234,18 +240,18 @@ <tr> <td class="signal_type"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a></td> <td class="signal_name"><a class="link" href="gst-plugins-good-plugins-rtspsrc.html#GstRTSPSrc-select-stream" title="The “select-stream†signal">select-stream</a></td> -<td class="signal_flags">Run First</td> +<td class="signal_flags"><a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-FIRST:CAPS">Run First</a></td> </tr> <tr> <td class="signal_type"><span class="returnvalue">void</span></td> <td class="signal_name"><a class="link" href="gst-plugins-good-plugins-rtspsrc.html#GstRTSPSrc-new-manager" title="The “new-manager†signal">new-manager</a></td> -<td class="signal_flags">Run First</td> +<td class="signal_flags"><a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-FIRST:CAPS">Run First</a></td> </tr> <tr> <td class="signal_type"> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstCaps.html"><span class="returnvalue">GstCaps</span></a>*</td> <td class="signal_name"><a class="link" href="gst-plugins-good-plugins-rtspsrc.html#GstRTSPSrc-request-rtcp-key" title="The “request-rtcp-key†signal">request-rtcp-key</a></td> -<td class="signal_flags">Run Last</td> +<td class="signal_flags"><a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></td> </tr> </tbody> </table></div> @@ -374,8 +380,6 @@ fakesink. </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-rtspsrc.functions_details"></a><h2>Functions</h2> @@ -386,8 +390,6 @@ fakesink. <div class="refsect2"> <a name="GstRTSPSrc-struct"></a><h3>struct GstRTSPSrc</h3> <pre class="programlisting">struct GstRTSPSrc;</pre> -<p> -</p> </div> </div> <div class="refsect1"> @@ -649,6 +651,13 @@ keep alive and then this property needs to be set to FALSE.</p> <p>Flags: Read / Write</p> <p>Default value: TRUE</p> </div> +<hr> +<div class="refsect2"> +<a name="GstRTSPSrc--tls-interaction"></a><h3>The <code class="literal">“tls-interactionâ€</code> property</h3> +<pre class="programlisting"> “tls-interaction†<a href="https://developer.gnome.org/gio/unstable/GTlsInteraction.html"><span class="type">GTlsInteraction</span></a> *</pre> +<p>A GTlsInteraction object to promt the user for password or certificate.</p> +<p>Flags: Read / Write</p> +</div> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-rtspsrc.signal-details"></a><h2>Signal Details</h2> @@ -796,7 +805,7 @@ user_function (<a class="link" href="gst-plugins-good-plugins-rtspsrc.html#GstRT <p> <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> when the stream should be selected, <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> when the stream is to be ignored.</p> </div> -<p>Flags: Run First</p> +<p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-FIRST:CAPS">Run First</a></p> <p class="since">Since: 1.2</p> </div> <hr> @@ -835,7 +844,7 @@ properties were configured.</p> </tbody> </table></div> </div> -<p>Flags: Run First</p> +<p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-FIRST:CAPS">Run First</a></p> <p class="since">Since: 1.4</p> </div> <hr> @@ -875,7 +884,7 @@ and authentication, and return them wrapped in a GstCaps.</p> </tbody> </table></div> </div> -<p>Flags: Run Last</p> +<p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></p> <p class="since">Since: 1.4</p> </div> </div> diff --git a/docs/plugins/html/gst-plugins-good-plugins-sbcparse.html b/docs/plugins/html/gst-plugins-good-plugins-sbcparse.html index 408d668be..900354f27 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-sbcparse.html +++ b/docs/plugins/html/gst-plugins-good-plugins-sbcparse.html @@ -28,7 +28,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-sbcparse.top_of_page"></a>sbcparse</span></h2> -<p>sbcparse — Parses an SBC bluetooth audio stream</p> +<p>sbcparse</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -62,7 +62,7 @@ frames and timestamp them properly.</p> <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="id-1.2.134.6.2.1.1"></a><h3>Element Information</h3> +<a name="id-1.2.134.6.3.1"></a><h3>Element Information</h3> <div class="variablelist"><table border="0" class="variablelist"> <colgroup> <col align="left" valign="top"> @@ -88,7 +88,7 @@ frames and timestamp them properly.</p> </div> <hr> <div class="refsect2"> -<a name="id-1.2.134.6.2.1.2"></a><h3>Element Pads</h3> +<a name="id-1.2.134.6.3.2"></a><h3>Element Pads</h3> <div class="variablelist"><table border="0" class="variablelist"> <colgroup> <col align="left" valign="top"> @@ -139,8 +139,6 @@ frames and timestamp them properly.</p> </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-sbcparse.functions_details"></a><h2>Functions</h2> @@ -151,8 +149,6 @@ frames and timestamp them properly.</p> <div class="refsect2"> <a name="GstSbcParse-struct"></a><h3>struct GstSbcParse</h3> <pre class="programlisting">struct GstSbcParse;</pre> -<p> -</p> </div> </div> <div class="refsect1"> diff --git a/docs/plugins/html/gst-plugins-good-plugins-scaletempo.html b/docs/plugins/html/gst-plugins-good-plugins-scaletempo.html index 93f78cacd..bf6ef27f5 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-scaletempo.html +++ b/docs/plugins/html/gst-plugins-good-plugins-scaletempo.html @@ -29,7 +29,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-scaletempo.top_of_page"></a>scaletempo</span></h2> -<p>scaletempo — Sync audio tempo with playback rate</p> +<p>scaletempo</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -233,8 +233,6 @@ the algoritm looks. </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-scaletempo.functions_details"></a><h2>Functions</h2> @@ -245,8 +243,6 @@ the algoritm looks. <div class="refsect2"> <a name="GstScaletempo-struct"></a><h3>struct GstScaletempo</h3> <pre class="programlisting">struct GstScaletempo;</pre> -<p> -</p> </div> </div> <div class="refsect1"> diff --git a/docs/plugins/html/gst-plugins-good-plugins-shagadelictv.html b/docs/plugins/html/gst-plugins-good-plugins-shagadelictv.html index 545b0ab2a..f32807c9c 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-shagadelictv.html +++ b/docs/plugins/html/gst-plugins-good-plugins-shagadelictv.html @@ -28,7 +28,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-shagadelictv.top_of_page"></a>shagadelictv</span></h2> -<p>shagadelictv — Oh behave, ShagedelicTV makes images shagadelic!</p> +<p>shagadelictv</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -153,8 +153,6 @@ </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-shagadelictv.functions_details"></a><h2>Functions</h2> @@ -165,8 +163,6 @@ <div class="refsect2"> <a name="GstShagadelicTV-struct"></a><h3>struct GstShagadelicTV</h3> <pre class="programlisting">struct GstShagadelicTV;</pre> -<p> -</p> </div> </div> </div> diff --git a/docs/plugins/html/gst-plugins-good-plugins-shapewipe.html b/docs/plugins/html/gst-plugins-good-plugins-shapewipe.html index 34a8835d0..c8c1d9ef5 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-shapewipe.html +++ b/docs/plugins/html/gst-plugins-good-plugins-shapewipe.html @@ -29,7 +29,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-shapewipe.top_of_page"></a>shapewipe</span></h2> -<p>shapewipe — Adds a shape wipe transition to a video stream</p> +<p>shapewipe</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -207,8 +207,6 @@ can be added by the border property.</p> </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-shapewipe.functions_details"></a><h2>Functions</h2> @@ -219,8 +217,6 @@ can be added by the border property.</p> <div class="refsect2"> <a name="GstShapeWipe-struct"></a><h3>struct GstShapeWipe</h3> <pre class="programlisting">struct GstShapeWipe;</pre> -<p> -</p> </div> </div> <div class="refsect1"> diff --git a/docs/plugins/html/gst-plugins-good-plugins-shout2send.html b/docs/plugins/html/gst-plugins-good-plugins-shout2send.html index 459bf886f..b66230ebe 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-shout2send.html +++ b/docs/plugins/html/gst-plugins-good-plugins-shout2send.html @@ -31,7 +31,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-shout2send.top_of_page"></a>shout2send</span></h2> -<p>shout2send — Sends data to an icecast server</p> +<p>shout2send</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -237,8 +237,6 @@ GstShout2send implements </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-shout2send.functions_details"></a><h2>Functions</h2> @@ -249,8 +247,6 @@ GstShout2send implements <div class="refsect2"> <a name="GstShout2send-struct"></a><h3>struct GstShout2send</h3> <pre class="programlisting">struct GstShout2send;</pre> -<p> -</p> </div> </div> <div class="refsect1"> @@ -360,30 +356,6 @@ GstShout2send implements user_function (<a class="link" href="gst-plugins-good-plugins-shout2send.html#GstShout2send"><span class="type">GstShout2send</span></a> *gstshout2send, <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> arg1, <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data)</pre> -<p> -</p> -<div class="refsect3"> -<a name="id-1.2.138.13.2.5"></a><h4>Parameters</h4> -<div class="informaltable"><table width="100%" border="0"> -<colgroup> -<col width="150px" class="parameters_name"> -<col class="parameters_description"> -<col width="200px" class="parameters_annotations"> -</colgroup> -<tbody> -<tr> -<td class="parameter_name"><p>gstshout2send</p></td> -<td class="parameter_description"><p>the object which received the signal.</p></td> -<td class="parameter_annotations"> </td> -</tr> -<tr> -<td class="parameter_name"><p>user_data</p></td> -<td class="parameter_description"><p>user data set when the signal handler was connected.</p></td> -<td class="parameter_annotations"> </td> -</tr> -</tbody> -</table></div> -</div> <p>Flags: Cleanup</p> </div> </div> diff --git a/docs/plugins/html/gst-plugins-good-plugins-smpte.html b/docs/plugins/html/gst-plugins-good-plugins-smpte.html index 5c09e4849..4f2cf24b3 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-smpte.html +++ b/docs/plugins/html/gst-plugins-good-plugins-smpte.html @@ -29,7 +29,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-smpte.top_of_page"></a>smpte</span></h2> -<p>smpte — Apply the standard SMPTE transitions on video images</p> +<p>smpte</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -226,8 +226,6 @@ edges of the transition are smoothed with a 20000 big border. </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-smpte.functions_details"></a><h2>Functions</h2> @@ -238,8 +236,6 @@ edges of the transition are smoothed with a 20000 big border. <div class="refsect2"> <a name="GstSMPTE-struct"></a><h3>struct GstSMPTE</h3> <pre class="programlisting">struct GstSMPTE;</pre> -<p> -</p> </div> </div> <div class="refsect1"> diff --git a/docs/plugins/html/gst-plugins-good-plugins-smptealpha.html b/docs/plugins/html/gst-plugins-good-plugins-smptealpha.html index 977b972a1..44201ad44 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-smptealpha.html +++ b/docs/plugins/html/gst-plugins-good-plugins-smptealpha.html @@ -29,7 +29,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-smptealpha.top_of_page"></a>smptealpha</span></h2> -<p>smptealpha — Apply the standard SMPTE transitions as alpha on video images</p> +<p>smptealpha</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -241,8 +241,6 @@ transparent image. The edges of the transition are smoothed with a </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-smptealpha.functions_details"></a><h2>Functions</h2> @@ -253,8 +251,6 @@ transparent image. The edges of the transition are smoothed with a <div class="refsect2"> <a name="GstSMPTEAlpha-struct"></a><h3>struct GstSMPTEAlpha</h3> <pre class="programlisting">struct GstSMPTEAlpha;</pre> -<p> -</p> </div> </div> <div class="refsect1"> diff --git a/docs/plugins/html/gst-plugins-good-plugins-souphttpsrc.html b/docs/plugins/html/gst-plugins-good-plugins-souphttpsrc.html index b2875c00f..77fa0ce9b 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-souphttpsrc.html +++ b/docs/plugins/html/gst-plugins-good-plugins-souphttpsrc.html @@ -30,7 +30,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-souphttpsrc.top_of_page"></a>souphttpsrc</span></h2> -<p>souphttpsrc — Receive data as a client over the network via HTTP using SOUP</p> +<p>souphttpsrc</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -176,6 +176,12 @@ <td class="property_name"><a class="link" href="gst-plugins-good-plugins-souphttpsrc.html#GstSoupHTTPSrc--ssl-use-system-ca-file" title="The “ssl-use-system-ca-file†property">ssl-use-system-ca-file</a></td> <td class="property_flags">Read / Write</td> </tr> +<tr> +<td class="property_type"> +<a href="https://developer.gnome.org/gio/unstable/GTlsDatabase.html"><span class="type">GTlsDatabase</span></a> *</td> +<td class="property_name"><a class="link" href="gst-plugins-good-plugins-souphttpsrc.html#GstSoupHTTPSrc--tls-database" title="The “tls-database†property">tls-database</a></td> +<td class="property_flags">Read / Write</td> +</tr> </tbody> </table></div> </div> @@ -267,8 +273,6 @@ GstSoupHTTPSrc implements </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-souphttpsrc.functions_details"></a><h2>Functions</h2> @@ -279,8 +283,6 @@ GstSoupHTTPSrc implements <div class="refsect2"> <a name="GstSoupHTTPSrc-struct"></a><h3>struct GstSoupHTTPSrc</h3> <pre class="programlisting">struct GstSoupHTTPSrc;</pre> -<p> -</p> </div> </div> <div class="refsect1"> @@ -476,6 +478,13 @@ GstSoupHTTPSrc implements <p>Flags: Read / Write</p> <p>Default value: TRUE</p> </div> +<hr> +<div class="refsect2"> +<a name="GstSoupHTTPSrc--tls-database"></a><h3>The <code class="literal">“tls-databaseâ€</code> property</h3> +<pre class="programlisting"> “tls-database†<a href="https://developer.gnome.org/gio/unstable/GTlsDatabase.html"><span class="type">GTlsDatabase</span></a> *</pre> +<p>TLS database with anchor certificate authorities used to validate the server certificate.</p> +<p>Flags: Read / Write</p> +</div> </div> </div> <div class="footer"> diff --git a/docs/plugins/html/gst-plugins-good-plugins-spectrum.html b/docs/plugins/html/gst-plugins-good-plugins-spectrum.html index 8cd0712fb..d2860be65 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-spectrum.html +++ b/docs/plugins/html/gst-plugins-good-plugins-spectrum.html @@ -29,7 +29,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-spectrum.top_of_page"></a>spectrum</span></h2> -<p>spectrum — Run an FFT on the audio signal, output spectrum data</p> +<p>spectrum</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -501,8 +501,6 @@ channels and the second dimension are the values.</p> </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-spectrum.functions_details"></a><h2>Functions</h2> @@ -513,8 +511,6 @@ channels and the second dimension are the values.</p> <div class="refsect2"> <a name="GstSpectrum-struct"></a><h3>struct GstSpectrum</h3> <pre class="programlisting">struct GstSpectrum;</pre> -<p> -</p> </div> </div> <div class="refsect1"> diff --git a/docs/plugins/html/gst-plugins-good-plugins-speexdec.html b/docs/plugins/html/gst-plugins-good-plugins-speexdec.html index 14b0c7ccb..fb031e6e6 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-speexdec.html +++ b/docs/plugins/html/gst-plugins-good-plugins-speexdec.html @@ -29,7 +29,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-speexdec.top_of_page"></a>speexdec</span></h2> -<p>speexdec — decode speex streams to audio</p> +<p>speexdec</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -153,8 +153,6 @@ </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-speexdec.functions_details"></a><h2>Functions</h2> @@ -165,8 +163,6 @@ <div class="refsect2"> <a name="GstSpeexDec-struct"></a><h3>struct GstSpeexDec</h3> <pre class="programlisting">struct GstSpeexDec;</pre> -<p> -</p> </div> </div> <div class="refsect1"> diff --git a/docs/plugins/html/gst-plugins-good-plugins-speexenc.html b/docs/plugins/html/gst-plugins-good-plugins-speexenc.html index c53ebf475..d2ef8b3a6 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-speexenc.html +++ b/docs/plugins/html/gst-plugins-good-plugins-speexenc.html @@ -30,7 +30,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-speexenc.top_of_page"></a>speexenc</span></h2> -<p>speexenc — Encodes audio in Speex format</p> +<p>speexenc</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -212,8 +212,6 @@ GstSpeexEnc implements </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-speexenc.functions_details"></a><h2>Functions</h2> @@ -224,8 +222,6 @@ GstSpeexEnc implements <div class="refsect2"> <a name="GstSpeexEnc-struct"></a><h3>struct GstSpeexEnc</h3> <pre class="programlisting">struct GstSpeexEnc;</pre> -<p> -</p> </div> </div> <div class="refsect1"> diff --git a/docs/plugins/html/gst-plugins-good-plugins-splitfilesrc.html b/docs/plugins/html/gst-plugins-good-plugins-splitfilesrc.html index 531633164..e0ed2d5b8 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-splitfilesrc.html +++ b/docs/plugins/html/gst-plugins-good-plugins-splitfilesrc.html @@ -30,7 +30,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-splitfilesrc.top_of_page"></a>splitfilesrc</span></h2> -<p>splitfilesrc — Read a sequentially named set of files as if it was one large file</p> +<p>splitfilesrc</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -169,8 +169,6 @@ directories). The results will be sorted.</p> </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-splitfilesrc.functions_details"></a><h2>Functions</h2> @@ -181,8 +179,6 @@ directories). The results will be sorted.</p> <div class="refsect2"> <a name="GstSplitFileSrc-struct"></a><h3>struct GstSplitFileSrc</h3> <pre class="programlisting">struct GstSplitFileSrc;</pre> -<p> -</p> </div> </div> <div class="refsect1"> diff --git a/docs/plugins/html/gst-plugins-good-plugins-splitmuxsink.html b/docs/plugins/html/gst-plugins-good-plugins-splitmuxsink.html index acf5fd2c1..0bdd6b734 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-splitmuxsink.html +++ b/docs/plugins/html/gst-plugins-good-plugins-splitmuxsink.html @@ -243,8 +243,6 @@ and 1MB maximum size. </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-splitmuxsink.functions_details"></a><h2>Functions</h2> @@ -255,8 +253,6 @@ and 1MB maximum size. <div class="refsect2"> <a name="GstSplitMuxSink-struct"></a><h3>struct GstSplitMuxSink</h3> <pre class="programlisting">struct GstSplitMuxSink;</pre> -<p> -</p> </div> </div> <div class="refsect1"> diff --git a/docs/plugins/html/gst-plugins-good-plugins-splitmuxsrc.html b/docs/plugins/html/gst-plugins-good-plugins-splitmuxsrc.html index f49f28d34..f1a78ba96 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-splitmuxsrc.html +++ b/docs/plugins/html/gst-plugins-good-plugins-splitmuxsrc.html @@ -216,8 +216,6 @@ as a single larger bytestream.</p> </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-splitmuxsrc.functions_details"></a><h2>Functions</h2> @@ -228,8 +226,6 @@ as a single larger bytestream.</p> <div class="refsect2"> <a name="GstSplitMuxSrc-struct"></a><h3>struct GstSplitMuxSrc</h3> <pre class="programlisting">struct GstSplitMuxSrc;</pre> -<p> -</p> </div> </div> <div class="refsect1"> diff --git a/docs/plugins/html/gst-plugins-good-plugins-streaktv.html b/docs/plugins/html/gst-plugins-good-plugins-streaktv.html index 178dc12cf..083fb3eda 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-streaktv.html +++ b/docs/plugins/html/gst-plugins-good-plugins-streaktv.html @@ -29,7 +29,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-streaktv.top_of_page"></a>streaktv</span></h2> -<p>streaktv — StreakTV makes after images of moving objects</p> +<p>streaktv</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -169,8 +169,6 @@ </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-streaktv.functions_details"></a><h2>Functions</h2> @@ -181,8 +179,6 @@ <div class="refsect2"> <a name="GstStreakTV-struct"></a><h3>struct GstStreakTV</h3> <pre class="programlisting">struct GstStreakTV;</pre> -<p> -</p> </div> </div> <div class="refsect1"> diff --git a/docs/plugins/html/gst-plugins-good-plugins-taginject.html b/docs/plugins/html/gst-plugins-good-plugins-taginject.html index 99150ad98..4c0b78df7 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-taginject.html +++ b/docs/plugins/html/gst-plugins-good-plugins-taginject.html @@ -29,7 +29,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-taginject.top_of_page"></a>taginject</span></h2> -<p>taginject — inject metadata tags</p> +<p>taginject</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -181,8 +181,6 @@ unmodified.</p> </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-taginject.functions_details"></a><h2>Functions</h2> diff --git a/docs/plugins/html/gst-plugins-good-plugins-udpsink.html b/docs/plugins/html/gst-plugins-good-plugins-udpsink.html index 43d12778b..4c8158e1a 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-udpsink.html +++ b/docs/plugins/html/gst-plugins-good-plugins-udpsink.html @@ -30,7 +30,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-udpsink.top_of_page"></a>udpsink</span></h2> -<p>udpsink — Send data over the network via UDP</p> +<p>udpsink</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -161,8 +161,6 @@ It can be combined with RTP payloaders to implement RTP streaming.</p> </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-udpsink.functions_details"></a><h2>Functions</h2> @@ -173,8 +171,6 @@ It can be combined with RTP payloaders to implement RTP streaming.</p> <div class="refsect2"> <a name="GstUDPSink-struct"></a><h3>struct GstUDPSink</h3> <pre class="programlisting">struct GstUDPSink;</pre> -<p> -</p> </div> </div> <div class="refsect1"> diff --git a/docs/plugins/html/gst-plugins-good-plugins-udpsrc.html b/docs/plugins/html/gst-plugins-good-plugins-udpsrc.html index de2bd3c8d..c5d1cd74a 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-udpsrc.html +++ b/docs/plugins/html/gst-plugins-good-plugins-udpsrc.html @@ -30,7 +30,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-udpsrc.top_of_page"></a>udpsrc</span></h2> -<p>udpsrc — Receive data over the network via UDP</p> +<p>udpsrc</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -316,8 +316,6 @@ above mentioned pipeline should dump data packets to the console. </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-udpsrc.functions_details"></a><h2>Functions</h2> @@ -328,8 +326,6 @@ above mentioned pipeline should dump data packets to the console. <div class="refsect2"> <a name="GstUDPSrc-struct"></a><h3>struct GstUDPSrc</h3> <pre class="programlisting">struct GstUDPSrc;</pre> -<p> -</p> </div> </div> <div class="refsect1"> diff --git a/docs/plugins/html/gst-plugins-good-plugins-v4l2radio.html b/docs/plugins/html/gst-plugins-good-plugins-v4l2radio.html index b6aa0dbcf..677ca2564 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-v4l2radio.html +++ b/docs/plugins/html/gst-plugins-good-plugins-v4l2radio.html @@ -30,7 +30,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-v4l2radio.top_of_page"></a>v4l2radio</span></h2> -<p>v4l2radio — Controls a Video4Linux2 radio device</p> +<p>v4l2radio</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -119,8 +119,6 @@ GstV4l2Radio implements <a name="id-1.2.154.8.2.2"></a><h3>Element Pads</h3> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-v4l2radio.functions_details"></a><h2>Functions</h2> @@ -131,8 +129,6 @@ GstV4l2Radio implements <div class="refsect2"> <a name="GstV4l2Radio-struct"></a><h3>struct GstV4l2Radio</h3> <pre class="programlisting">struct GstV4l2Radio;</pre> -<p> -</p> </div> </div> <div class="refsect1"> diff --git a/docs/plugins/html/gst-plugins-good-plugins-v4l2sink.html b/docs/plugins/html/gst-plugins-good-plugins-v4l2sink.html index 6bc012791..cae298b5a 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-v4l2sink.html +++ b/docs/plugins/html/gst-plugins-good-plugins-v4l2sink.html @@ -30,7 +30,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-v4l2sink.top_of_page"></a>v4l2sink</span></h2> -<p>v4l2sink — Displays frames on a video4linux2 device</p> +<p>v4l2sink</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -301,8 +301,6 @@ GstV4l2Sink implements </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-v4l2sink.functions_details"></a><h2>Functions</h2> @@ -313,8 +311,6 @@ GstV4l2Sink implements <div class="refsect2"> <a name="GstV4l2Sink-struct"></a><h3>struct GstV4l2Sink</h3> <pre class="programlisting">struct GstV4l2Sink;</pre> -<p> -</p> </div> </div> <div class="refsect1"> diff --git a/docs/plugins/html/gst-plugins-good-plugins-v4l2src.html b/docs/plugins/html/gst-plugins-good-plugins-v4l2src.html index cabfd081b..ade38f2ee 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-v4l2src.html +++ b/docs/plugins/html/gst-plugins-good-plugins-v4l2src.html @@ -31,7 +31,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-v4l2src.top_of_page"></a>v4l2src</span></h2> -<p>v4l2src — Reads frames from a Video4Linux2 device</p> +<p>v4l2src</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -142,7 +142,7 @@ <tbody><tr> <td class="signal_type"><span class="returnvalue">void</span></td> <td class="signal_name"><a class="link" href="gst-plugins-good-plugins-v4l2src.html#GstV4l2Src-prepare-format" title="The “prepare-format†signal">prepare-format</a></td> -<td class="signal_flags">Run Last</td> +<td class="signal_flags"><a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></td> </tr></tbody> </table></div> </div> @@ -282,8 +282,6 @@ GstV4l2Src implements </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-v4l2src.functions_details"></a><h2>Functions</h2> @@ -294,8 +292,6 @@ GstV4l2Src implements <div class="refsect2"> <a name="GstV4l2Src-struct"></a><h3>struct GstV4l2Src</h3> <pre class="programlisting">struct GstV4l2Src;</pre> -<p> -</p> </div> </div> <div class="refsect1"> @@ -438,31 +434,7 @@ user_function (<a class="link" href="gst-plugins-good-plugins-v4l2src.html#GstV4 <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> arg1, <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstCaps.html"><span class="type">GstCaps</span></a> *arg2, <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data)</pre> -<p> -</p> -<div class="refsect3"> -<a name="id-1.2.152.13.2.5"></a><h4>Parameters</h4> -<div class="informaltable"><table width="100%" border="0"> -<colgroup> -<col width="150px" class="parameters_name"> -<col class="parameters_description"> -<col width="200px" class="parameters_annotations"> -</colgroup> -<tbody> -<tr> -<td class="parameter_name"><p>gstv4l2src</p></td> -<td class="parameter_description"><p>the object which received the signal.</p></td> -<td class="parameter_annotations"> </td> -</tr> -<tr> -<td class="parameter_name"><p>user_data</p></td> -<td class="parameter_description"><p>user data set when the signal handler was connected.</p></td> -<td class="parameter_annotations"> </td> -</tr> -</tbody> -</table></div> -</div> -<p>Flags: Run Last</p> +<p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></p> </div> </div> </div> diff --git a/docs/plugins/html/gst-plugins-good-plugins-vertigotv.html b/docs/plugins/html/gst-plugins-good-plugins-vertigotv.html index d811a1cc8..b65c4b88e 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-vertigotv.html +++ b/docs/plugins/html/gst-plugins-good-plugins-vertigotv.html @@ -30,7 +30,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-vertigotv.top_of_page"></a>vertigotv</span></h2> -<p>vertigotv — A loopback alpha blending effector with rotating and scaling</p> +<p>vertigotv</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -67,7 +67,7 @@ <tbody><tr> <td class="signal_type"><span class="returnvalue">void</span></td> <td class="signal_name"><a class="link" href="gst-plugins-good-plugins-vertigotv.html#GstVertigoTV-reset-parms" title="The “reset-parms†signal">reset-parms</a></td> -<td class="signal_flags">Action</td> +<td class="signal_flags"><a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-ACTION:CAPS">Action</a></td> </tr></tbody> </table></div> </div> @@ -192,8 +192,6 @@ </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-vertigotv.functions_details"></a><h2>Functions</h2> @@ -204,8 +202,6 @@ <div class="refsect2"> <a name="GstVertigoTV-struct"></a><h3>struct GstVertigoTV</h3> <pre class="programlisting">struct GstVertigoTV;</pre> -<p> -</p> </div> </div> <div class="refsect1"> @@ -235,31 +231,7 @@ <pre class="programlisting"><span class="returnvalue">void</span> user_function (<a class="link" href="gst-plugins-good-plugins-vertigotv.html#GstVertigoTV"><span class="type">GstVertigoTV</span></a> *gstvertigotv, <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data)</pre> -<p> -</p> -<div class="refsect3"> -<a name="id-1.2.155.12.2.5"></a><h4>Parameters</h4> -<div class="informaltable"><table width="100%" border="0"> -<colgroup> -<col width="150px" class="parameters_name"> -<col class="parameters_description"> -<col width="200px" class="parameters_annotations"> -</colgroup> -<tbody> -<tr> -<td class="parameter_name"><p>gstvertigotv</p></td> -<td class="parameter_description"><p>the object which received the signal.</p></td> -<td class="parameter_annotations"> </td> -</tr> -<tr> -<td class="parameter_name"><p>user_data</p></td> -<td class="parameter_description"><p>user data set when the signal handler was connected.</p></td> -<td class="parameter_annotations"> </td> -</tr> -</tbody> -</table></div> -</div> -<p>Flags: Action</p> +<p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-ACTION:CAPS">Action</a></p> </div> </div> </div> diff --git a/docs/plugins/html/gst-plugins-good-plugins-videobalance.html b/docs/plugins/html/gst-plugins-good-plugins-videobalance.html index 487dfc016..aff0641fd 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-videobalance.html +++ b/docs/plugins/html/gst-plugins-good-plugins-videobalance.html @@ -30,7 +30,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-videobalance.top_of_page"></a>videobalance</span></h2> -<p>videobalance — Adjusts brightness, contrast, hue, saturation on a video stream</p> +<p>videobalance</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -202,8 +202,6 @@ saturation to 0.0. </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-videobalance.functions_details"></a><h2>Functions</h2> diff --git a/docs/plugins/html/gst-plugins-good-plugins-videobox.html b/docs/plugins/html/gst-plugins-good-plugins-videobox.html index 9ea84e712..bee72561e 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-videobox.html +++ b/docs/plugins/html/gst-plugins-good-plugins-videobox.html @@ -29,7 +29,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-videobox.top_of_page"></a>videobox</span></h2> -<p>videobox — Resizes a video by adding borders or cropping</p> +<p>videobox</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -145,10 +145,11 @@ but nothing stops you from doing so.</p> </table> </div> +<p></p> <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="id-1.2.157.7.9.1.1"></a><h3>Element Information</h3> +<a name="id-1.2.157.7.10.1"></a><h3>Element Information</h3> <div class="variablelist"><table border="0" class="variablelist"> <colgroup> <col align="left" valign="top"> @@ -174,7 +175,7 @@ but nothing stops you from doing so.</p> </div> <hr> <div class="refsect2"> -<a name="id-1.2.157.7.9.1.2"></a><h3>Element Pads</h3> +<a name="id-1.2.157.7.10.2"></a><h3>Element Pads</h3> <div class="variablelist"><table border="0" class="variablelist"> <colgroup> <col align="left" valign="top"> @@ -225,8 +226,6 @@ but nothing stops you from doing so.</p> </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-videobox.functions_details"></a><h2>Functions</h2> @@ -237,8 +236,6 @@ but nothing stops you from doing so.</p> <div class="refsect2"> <a name="GstVideoBox-struct"></a><h3>struct GstVideoBox</h3> <pre class="programlisting">struct GstVideoBox;</pre> -<p> -</p> </div> </div> <div class="refsect1"> diff --git a/docs/plugins/html/gst-plugins-good-plugins-videocrop.html b/docs/plugins/html/gst-plugins-good-plugins-videocrop.html index a0eb16627..8778ddf82 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-videocrop.html +++ b/docs/plugins/html/gst-plugins-good-plugins-videocrop.html @@ -29,7 +29,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-videocrop.top_of_page"></a>videocrop</span></h2> -<p>videocrop — Crops video into a user-defined region</p> +<p>videocrop</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -199,8 +199,6 @@ most use cases, but it might matter for yours.</p> </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-videocrop.functions_details"></a><h2>Functions</h2> @@ -211,8 +209,6 @@ most use cases, but it might matter for yours.</p> <div class="refsect2"> <a name="GstVideoCrop-struct"></a><h3>struct GstVideoCrop</h3> <pre class="programlisting">struct GstVideoCrop;</pre> -<p> -</p> </div> </div> <div class="refsect1"> diff --git a/docs/plugins/html/gst-plugins-good-plugins-videoflip.html b/docs/plugins/html/gst-plugins-good-plugins-videoflip.html index 5fac67833..691111909 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-videoflip.html +++ b/docs/plugins/html/gst-plugins-good-plugins-videoflip.html @@ -29,7 +29,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-videoflip.top_of_page"></a>videoflip</span></h2> -<p>videoflip — Flips and rotates video</p> +<p>videoflip</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -175,8 +175,6 @@ </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-videoflip.functions_details"></a><h2>Functions</h2> diff --git a/docs/plugins/html/gst-plugins-good-plugins-videomixer.html b/docs/plugins/html/gst-plugins-good-plugins-videomixer.html index 06e6adb82..929a5e4ef 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-videomixer.html +++ b/docs/plugins/html/gst-plugins-good-plugins-videomixer.html @@ -27,7 +27,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-videomixer.top_of_page"></a>videomixer</span></h2> -<p>videomixer — Mix multiple video streams</p> +<p>videomixer</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -217,8 +217,6 @@ framerate of the output video is 10 frames per second. </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-videomixer.functions_details"></a><h2>Functions</h2> diff --git a/docs/plugins/html/gst-plugins-good-plugins-vp8dec.html b/docs/plugins/html/gst-plugins-good-plugins-vp8dec.html index a0b230cc6..0e1468404 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-vp8dec.html +++ b/docs/plugins/html/gst-plugins-good-plugins-vp8dec.html @@ -29,7 +29,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-vp8dec.top_of_page"></a>vp8dec</span></h2> -<p>vp8dec — Decode VP8 video streams</p> +<p>vp8dec</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -175,8 +175,6 @@ </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-vp8dec.functions_details"></a><h2>Functions</h2> @@ -187,8 +185,6 @@ <div class="refsect2"> <a name="GstVP8Dec-struct"></a><h3>struct GstVP8Dec</h3> <pre class="programlisting">struct GstVP8Dec;</pre> -<p> -</p> </div> </div> <div class="refsect1"> diff --git a/docs/plugins/html/gst-plugins-good-plugins-vp8enc.html b/docs/plugins/html/gst-plugins-good-plugins-vp8enc.html index 3c47e8013..815a1c78e 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-vp8enc.html +++ b/docs/plugins/html/gst-plugins-good-plugins-vp8enc.html @@ -30,7 +30,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-vp8enc.top_of_page"></a>vp8enc</span></h2> -<p>vp8enc — Encode VP8 video streams</p> +<p>vp8enc</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -459,8 +459,6 @@ GstVP8Enc implements </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-vp8enc.functions_details"></a><h2>Functions</h2> @@ -471,8 +469,6 @@ GstVP8Enc implements <div class="refsect2"> <a name="GstVP8Enc-struct"></a><h3>struct GstVP8Enc</h3> <pre class="programlisting">struct GstVP8Enc;</pre> -<p> -</p> </div> </div> <div class="refsect1"> diff --git a/docs/plugins/html/gst-plugins-good-plugins-warptv.html b/docs/plugins/html/gst-plugins-good-plugins-warptv.html index 9b58af564..01cbec314 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-warptv.html +++ b/docs/plugins/html/gst-plugins-good-plugins-warptv.html @@ -28,7 +28,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-warptv.top_of_page"></a>warptv</span></h2> -<p>warptv — WarpTV does realtime goo'ing of the video input</p> +<p>warptv</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -153,8 +153,6 @@ </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-warptv.functions_details"></a><h2>Functions</h2> @@ -165,8 +163,6 @@ <div class="refsect2"> <a name="GstWarpTV-struct"></a><h3>struct GstWarpTV</h3> <pre class="programlisting">struct GstWarpTV;</pre> -<p> -</p> </div> </div> </div> diff --git a/docs/plugins/html/gst-plugins-good-plugins-waveformsink.html b/docs/plugins/html/gst-plugins-good-plugins-waveformsink.html index 478b51adc..d8db68dc8 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-waveformsink.html +++ b/docs/plugins/html/gst-plugins-good-plugins-waveformsink.html @@ -27,7 +27,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-waveformsink.top_of_page"></a>waveformsink</span></h2> -<p>waveformsink — WaveForm audio sink</p> +<p>waveformsink</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -78,8 +78,6 @@ <a name="id-1.2.165.4.2.2"></a><h3>Element Pads</h3> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-waveformsink.functions_details"></a><h2>Functions</h2> @@ -127,8 +125,6 @@ gchar error_string[ERROR_LENGTH]; }; </pre> -<p> -</p> </div> </div> </div> diff --git a/docs/plugins/html/gst-plugins-good-plugins-wavenc.html b/docs/plugins/html/gst-plugins-good-plugins-wavenc.html index 4bc4c7e5c..778491c0f 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-wavenc.html +++ b/docs/plugins/html/gst-plugins-good-plugins-wavenc.html @@ -29,7 +29,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-wavenc.top_of_page"></a>wavenc</span></h2> -<p>wavenc — Encode raw audio into WAV</p> +<p>wavenc</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -181,8 +181,6 @@ GstWavEnc implements </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-wavenc.functions_details"></a><h2>Functions</h2> @@ -193,8 +191,6 @@ GstWavEnc implements <div class="refsect2"> <a name="GstWavEnc-struct"></a><h3>struct GstWavEnc</h3> <pre class="programlisting">struct GstWavEnc;</pre> -<p> -</p> </div> </div> </div> diff --git a/docs/plugins/html/gst-plugins-good-plugins-wavpackdec.html b/docs/plugins/html/gst-plugins-good-plugins-wavpackdec.html index bb1586dd0..01bb59667 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-wavpackdec.html +++ b/docs/plugins/html/gst-plugins-good-plugins-wavpackdec.html @@ -28,7 +28,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-wavpackdec.top_of_page"></a>wavpackdec</span></h2> -<p>wavpackdec — Decodes Wavpack audio data</p> +<p>wavpackdec</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -145,8 +145,6 @@ </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-wavpackdec.functions_details"></a><h2>Functions</h2> @@ -157,8 +155,6 @@ <div class="refsect2"> <a name="GstWavpackDec-struct"></a><h3>struct GstWavpackDec</h3> <pre class="programlisting">struct GstWavpackDec;</pre> -<p> -</p> </div> </div> </div> diff --git a/docs/plugins/html/gst-plugins-good-plugins-wavpackenc.html b/docs/plugins/html/gst-plugins-good-plugins-wavpackenc.html index 980f5701c..1c5e06057 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-wavpackenc.html +++ b/docs/plugins/html/gst-plugins-good-plugins-wavpackenc.html @@ -30,7 +30,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-wavpackenc.top_of_page"></a>wavpackenc</span></h2> -<p>wavpackenc — Encodes audio with the Wavpack lossless/lossy audio codec</p> +<p>wavpackenc</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -216,8 +216,6 @@ GstWavpackEnc implements </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-wavpackenc.functions_details"></a><h2>Functions</h2> @@ -228,8 +226,6 @@ GstWavpackEnc implements <div class="refsect2"> <a name="GstWavpackEnc-struct"></a><h3>struct GstWavpackEnc</h3> <pre class="programlisting">struct GstWavpackEnc;</pre> -<p> -</p> </div> </div> <div class="refsect1"> diff --git a/docs/plugins/html/gst-plugins-good-plugins-wavpackparse.html b/docs/plugins/html/gst-plugins-good-plugins-wavpackparse.html index 3afa07dca..0f6e9e6f1 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-wavpackparse.html +++ b/docs/plugins/html/gst-plugins-good-plugins-wavpackparse.html @@ -156,8 +156,6 @@ </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-wavpackparse.functions_details"></a><h2>Functions</h2> diff --git a/docs/plugins/html/gst-plugins-good-plugins-wavparse.html b/docs/plugins/html/gst-plugins-good-plugins-wavparse.html index 9f11eb576..b5766e012 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-wavparse.html +++ b/docs/plugins/html/gst-plugins-good-plugins-wavparse.html @@ -29,7 +29,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-wavparse.top_of_page"></a>wavparse</span></h2> -<p>wavparse — Parse a .wav file into raw audio</p> +<p>wavparse</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -285,8 +285,6 @@ wav file is assumed to contain raw uncompressed samples. </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-wavparse.functions_details"></a><h2>Functions</h2> diff --git a/docs/plugins/html/gst-plugins-good-plugins-webmmux.html b/docs/plugins/html/gst-plugins-good-plugins-webmmux.html index edc65c579..8a26d29a4 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-webmmux.html +++ b/docs/plugins/html/gst-plugins-good-plugins-webmmux.html @@ -29,7 +29,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-webmmux.top_of_page"></a>webmmux</span></h2> -<p>webmmux — Muxes video and audio streams into a WebM stream</p> +<p>webmmux</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -260,8 +260,6 @@ GstWebMMux implements </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-webmmux.functions_details"></a><h2>Functions</h2> @@ -272,8 +270,6 @@ GstWebMMux implements <div class="refsect2"> <a name="GstWebMMux-struct"></a><h3>struct GstWebMMux</h3> <pre class="programlisting">struct GstWebMMux;</pre> -<p> -</p> </div> </div> </div> diff --git a/docs/plugins/html/gst-plugins-good-plugins-ximagesrc.html b/docs/plugins/html/gst-plugins-good-plugins-ximagesrc.html index 7540b7c34..6a68d8077 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-ximagesrc.html +++ b/docs/plugins/html/gst-plugins-good-plugins-ximagesrc.html @@ -29,7 +29,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-ximagesrc.top_of_page"></a>ximagesrc</span></h2> -<p>ximagesrc — Creates a screenshot video stream</p> +<p>ximagesrc</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -184,8 +184,6 @@ </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-ximagesrc.functions_details"></a><h2>Functions</h2> @@ -196,8 +194,6 @@ <div class="refsect2"> <a name="GstXImageSrc-struct"></a><h3>struct GstXImageSrc</h3> <pre class="programlisting">struct GstXImageSrc;</pre> -<p> -</p> </div> </div> <div class="refsect1"> diff --git a/docs/plugins/html/gst-plugins-good-plugins-y4menc.html b/docs/plugins/html/gst-plugins-good-plugins-y4menc.html index a03455cfd..9922c653c 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-y4menc.html +++ b/docs/plugins/html/gst-plugins-good-plugins-y4menc.html @@ -29,7 +29,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-y4menc.top_of_page"></a>y4menc</span></h2> -<p>y4menc — Encodes a YUV frame into the yuv4mpeg format (mjpegtools)</p> +<p>y4menc</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> @@ -160,8 +160,6 @@ gst-launch-0.10 videotestsrc num-buffers=250 \ </table></div> </div> </div> -<p> -</p> </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-y4menc.functions_details"></a><h2>Functions</h2> @@ -172,8 +170,6 @@ gst-launch-0.10 videotestsrc num-buffers=250 \ <div class="refsect2"> <a name="GstY4mEncode-struct"></a><h3>struct GstY4mEncode</h3> <pre class="programlisting">struct GstY4mEncode;</pre> -<p> -</p> </div> </div> </div> diff --git a/docs/plugins/html/index.html b/docs/plugins/html/index.html index 0fc7a6e42..e018cdb3f 100644 --- a/docs/plugins/html/index.html +++ b/docs/plugins/html/index.html @@ -15,7 +15,7 @@ <div> <div><table class="navigation" id="top" width="100%" cellpadding="2" cellspacing="0"><tr><th valign="middle"><p class="title">GStreamer Good Plugins 1.0 Plugins Reference Manual</p></th></tr></table></div> <div><p class="releaseinfo"> - for GStreamer Good Plugins 1.0 (1.5.1) + for GStreamer Good Plugins 1.0 (1.5.2) The latest version of this documentation can be found on-line at <a class="ulink" href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-good/html/" target="_top">http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-good/html/</a>. </p></div> @@ -32,229 +32,229 @@ <span class="refentrytitle"><a href="gst-plugins-good-plugins-aacparse.html">aacparse</a></span><span class="refpurpose"> — AAC parser</span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-aasink.html">aasink</a></span><span class="refpurpose"> — An ASCII art videosink</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-aasink.html">aasink</a></span><span class="refpurpose"></span> </dt> <dt> <span class="refentrytitle"><a href="gst-plugins-good-plugins-ac3parse.html">ac3parse</a></span><span class="refpurpose"> — AC3 parser</span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-agingtv.html">agingtv</a></span><span class="refpurpose"> — AgingTV adds age to video input using scratches and dust</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-agingtv.html">agingtv</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-alpha.html">alpha</a></span><span class="refpurpose"> — Adds an alpha channel to video - uniform or via chroma-keying</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-alpha.html">alpha</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-alphacolor.html">alphacolor</a></span><span class="refpurpose"> — ARGB from/to AYUV colorspace conversion preserving the alpha channel</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-alphacolor.html">alphacolor</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-alawdec.html">alawdec</a></span><span class="refpurpose"> — Convert 8bit A law to 16bit PCM</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-alawdec.html">alawdec</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-alawenc.html">alawenc</a></span><span class="refpurpose"> — Convert 16bit PCM to 8bit A law</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-alawenc.html">alawenc</a></span><span class="refpurpose"></span> </dt> <dt> <span class="refentrytitle"><a href="gst-plugins-good-plugins-amrparse.html">amrparse</a></span><span class="refpurpose"> — AMR parser</span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-apedemux.html">apedemux</a></span><span class="refpurpose"> — Read and output APE tags while demuxing the contents</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-apedemux.html">apedemux</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-apev2mux.html">apev2mux</a></span><span class="refpurpose"> — Adds an APEv2 header to the beginning of files using taglib</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-apev2mux.html">apev2mux</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-aspectratiocrop.html">aspectratiocrop</a></span><span class="refpurpose"> — Crops video into a user-defined aspect-ratio</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-aspectratiocrop.html">aspectratiocrop</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-audioamplify.html">audioamplify</a></span><span class="refpurpose"> — Amplifies an audio stream by a given factor</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-audioamplify.html">audioamplify</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-audiochebband.html">audiochebband</a></span><span class="refpurpose"> — Chebyshev band pass and band reject filter</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-audiochebband.html">audiochebband</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-audiocheblimit.html">audiocheblimit</a></span><span class="refpurpose"> — Chebyshev low pass and high pass filter</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-audiocheblimit.html">audiocheblimit</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-audiofirfilter.html">audiofirfilter</a></span><span class="refpurpose"> — Generic audio FIR filter with custom filter kernel</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-audiofirfilter.html">audiofirfilter</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-audioiirfilter.html">audioiirfilter</a></span><span class="refpurpose"> — Generic audio IIR filter with custom filter kernel</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-audioiirfilter.html">audioiirfilter</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-audiowsincband.html">audiowsincband</a></span><span class="refpurpose"> — Band pass and band reject windowed sinc filter</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-audiowsincband.html">audiowsincband</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-audiowsinclimit.html">audiowsinclimit</a></span><span class="refpurpose"> — Low pass and high pass windowed sinc filter</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-audiowsinclimit.html">audiowsinclimit</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-audioecho.html">audioecho</a></span><span class="refpurpose"> — Adds an echo or reverb effect to an audio stream</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-audioecho.html">audioecho</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-audiodynamic.html">audiodynamic</a></span><span class="refpurpose"> — Compressor and Expander</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-audiodynamic.html">audiodynamic</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-audioinvert.html">audioinvert</a></span><span class="refpurpose"> — Swaps upper and lower half of audio samples</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-audioinvert.html">audioinvert</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-audiopanorama.html">audiopanorama</a></span><span class="refpurpose"> — Positions audio streams in the stereo panorama</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-audiopanorama.html">audiopanorama</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-audiokaraoke.html">audiokaraoke</a></span><span class="refpurpose"> — Removes voice from sound</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-audiokaraoke.html">audiokaraoke</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-auparse.html">auparse</a></span><span class="refpurpose"> — Parse an .au file into raw audio</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-auparse.html">auparse</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-autoaudiosink.html">autoaudiosink</a></span><span class="refpurpose"> — Wrapper audio sink for automatically detected audio sink</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-autoaudiosink.html">autoaudiosink</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-autoaudiosrc.html">autoaudiosrc</a></span><span class="refpurpose"> — Wrapper audio source for automatically detected audio source</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-autoaudiosrc.html">autoaudiosrc</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-autovideosink.html">autovideosink</a></span><span class="refpurpose"> — Wrapper video sink for automatically detected video sink</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-autovideosink.html">autovideosink</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-autovideosrc.html">autovideosrc</a></span><span class="refpurpose"> — Wrapper video source for automatically detected video source</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-autovideosrc.html">autovideosrc</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-avidemux.html">avidemux</a></span><span class="refpurpose"> — Demultiplex an avi file into audio and video</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-avidemux.html">avidemux</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-avimux.html">avimux</a></span><span class="refpurpose"> — Muxes audio and video into an avi stream</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-avimux.html">avimux</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-avisubtitle.html">avisubtitle</a></span><span class="refpurpose"> — Parse avi subtitle stream</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-avisubtitle.html">avisubtitle</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-cacasink.html">cacasink</a></span><span class="refpurpose"> — A colored ASCII art videosink</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-cacasink.html">cacasink</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-cairooverlay.html">cairooverlay</a></span><span class="refpurpose"> — Render overlay on a video stream using Cairo</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-cairooverlay.html">cairooverlay</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-capssetter.html">capssetter</a></span><span class="refpurpose"> — Set/merge caps on stream</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-capssetter.html">capssetter</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-cutter.html">cutter</a></span><span class="refpurpose"> — Audio Cutter to split audio into non-silent bits</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-cutter.html">cutter</a></span><span class="refpurpose"></span> </dt> <dt> <span class="refentrytitle"><a href="gst-plugins-good-plugins-dcaparse.html">dcaparse</a></span><span class="refpurpose"> — DCA (DTS Coherent Acoustics) parser</span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-deinterlace.html">deinterlace</a></span><span class="refpurpose"> — Deinterlace Methods ported from DScaler/TvTime</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-deinterlace.html">deinterlace</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-deinterleave.html">deinterleave</a></span><span class="refpurpose"> — Splits one interleaved multichannel audio stream into many mono audio streams</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-deinterleave.html">deinterleave</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-dicetv.html">dicetv</a></span><span class="refpurpose"> — 'Dices' the screen up into many small squares</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-dicetv.html">dicetv</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-directsoundsink.html">directsoundsink</a></span><span class="refpurpose"> — DirectSound audio sink</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-directsoundsink.html">directsoundsink</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-dtmfsrc.html">dtmfsrc</a></span><span class="refpurpose"> — Generates DTMF tones</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-dtmfsrc.html">dtmfsrc</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-dv1394src.html">dv1394src</a></span><span class="refpurpose"> — Source for DV video data from firewire port</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-dv1394src.html">dv1394src</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-dvdec.html">dvdec</a></span><span class="refpurpose"> — Uses libdv to decode DV video (smpte314) (libdv.sourceforge.net)</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-dvdec.html">dvdec</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-dvdemux.html">dvdemux</a></span><span class="refpurpose"> — Uses libdv to separate DV audio from DV video (libdv.sourceforge.net)</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-dvdemux.html">dvdemux</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-edgetv.html">edgetv</a></span><span class="refpurpose"> — Apply edge detect on video</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-edgetv.html">edgetv</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-equalizer-10bands.html">equalizer-10bands</a></span><span class="refpurpose"> — Direct Form 10 band IIR equalizer</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-equalizer-10bands.html">equalizer-10bands</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-equalizer-3bands.html">equalizer-3bands</a></span><span class="refpurpose"> — Direct Form 3 band IIR equalizer</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-equalizer-3bands.html">equalizer-3bands</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-equalizer-nbands.html">equalizer-nbands</a></span><span class="refpurpose"> — Direct Form IIR equalizer</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-equalizer-nbands.html">equalizer-nbands</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-flacdec.html">flacdec</a></span><span class="refpurpose"> — Decodes FLAC lossless audio streams</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-flacdec.html">flacdec</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-flacenc.html">flacenc</a></span><span class="refpurpose"> — Encodes audio with the FLAC lossless audio encoder</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-flacenc.html">flacenc</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-flacparse.html">flacparse</a></span><span class="refpurpose"> — Parses audio with the FLAC lossless audio codec</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-flacparse.html">flacparse</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-flactag.html">flactag</a></span><span class="refpurpose"> — Rewrite tags in a FLAC file</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-flactag.html">flactag</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-flvdemux.html">flvdemux</a></span><span class="refpurpose"> — Demux FLV feeds into digital streams</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-flvdemux.html">flvdemux</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-flvmux.html">flvmux</a></span><span class="refpurpose"> — Muxes video/audio streams into a FLV stream</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-flvmux.html">flvmux</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-flxdec.html">flxdec</a></span><span class="refpurpose"> — FLC/FLI/FLX video decoder</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-flxdec.html">flxdec</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-gamma.html">gamma</a></span><span class="refpurpose"> — Adjusts gamma on a video stream</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-gamma.html">gamma</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-gdkpixbufsink.html">gdkpixbufsink</a></span><span class="refpurpose"> — Output images as GdkPixbuf objects in bus messages</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-gdkpixbufsink.html">gdkpixbufsink</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-goom.html">goom</a></span><span class="refpurpose"> — Takes frames of data and outputs video frames using the GOOM filter</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-goom.html">goom</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-goom2k1.html">goom2k1</a></span><span class="refpurpose"> — Takes frames of data and outputs video frames using the GOOM 2k1 filter</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-goom2k1.html">goom2k1</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-hdv1394src.html">hdv1394src</a></span><span class="refpurpose"> — Source for MPEG-TS video data from firewire port</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-hdv1394src.html">hdv1394src</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-icydemux.html">icydemux</a></span><span class="refpurpose"> — Read and output ICY tags while demuxing the contents</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-icydemux.html">icydemux</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-id3demux.html">id3demux</a></span><span class="refpurpose"> — Read and output ID3v1 and ID3v2 tags while demuxing the contents</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-id3demux.html">id3demux</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-id3v2mux.html">id3v2mux</a></span><span class="refpurpose"> — Adds an ID3v2 header to the beginning of MP3 files using taglib</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-id3v2mux.html">id3v2mux</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-imagefreeze.html">imagefreeze</a></span><span class="refpurpose"> — Generates a still frame stream from an image</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-imagefreeze.html">imagefreeze</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-interleave.html">interleave</a></span><span class="refpurpose"> — Folds many mono channels into one interleaved audio stream</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-interleave.html">interleave</a></span><span class="refpurpose"></span> </dt> <dt> <span class="refentrytitle"><a href="gst-plugins-good-plugins-ismlmux.html">ismlmux</a></span><span class="refpurpose"> — Muxer for ISML smooth streaming (.isml) files</span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-jackaudiosrc.html">jackaudiosrc</a></span><span class="refpurpose"> — Captures audio from a JACK server</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-jackaudiosrc.html">jackaudiosrc</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-jackaudiosink.html">jackaudiosink</a></span><span class="refpurpose"> — Output audio to a JACK server</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-jackaudiosink.html">jackaudiosink</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-jpegdec.html">jpegdec</a></span><span class="refpurpose"> — Decode images from JPEG format</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-jpegdec.html">jpegdec</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-jpegenc.html">jpegenc</a></span><span class="refpurpose"> — Encode images in JPEG format</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-jpegenc.html">jpegenc</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-level.html">level</a></span><span class="refpurpose"> — RMS/Peak/Decaying Peak Level messager for audio/raw</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-level.html">level</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-matroskamux.html">matroskamux</a></span><span class="refpurpose"> — Muxes video/audio/subtitle streams into a matroska stream</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-matroskamux.html">matroskamux</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-matroskademux.html">matroskademux</a></span><span class="refpurpose"> — Demuxes Matroska/WebM streams into video/audio/subtitles</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-matroskademux.html">matroskademux</a></span><span class="refpurpose"></span> </dt> <dt> <span class="refentrytitle"><a href="gst-plugins-good-plugins-mj2mux.html">mj2mux</a></span><span class="refpurpose"> — Muxer for Motion JPEG-2000 (.mj2) files</span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-monoscope.html">monoscope</a></span><span class="refpurpose"> — Displays a highly stabilised waveform of audio input</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-monoscope.html">monoscope</a></span><span class="refpurpose"></span> </dt> <dt> <span class="refentrytitle"><a href="gst-plugins-good-plugins-mpegaudioparse.html">mpegaudioparse</a></span><span class="refpurpose"> — MPEG audio parser</span> @@ -263,70 +263,70 @@ <span class="refentrytitle"><a href="gst-plugins-good-plugins-mp4mux.html">mp4mux</a></span><span class="refpurpose"> — Muxer for ISO MPEG-4 (.mp4) files</span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-mulawdec.html">mulawdec</a></span><span class="refpurpose"> — Convert 8bit mu law to 16bit PCM</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-mulawdec.html">mulawdec</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-mulawenc.html">mulawenc</a></span><span class="refpurpose"> — Convert 16bit PCM to 8bit mu law</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-mulawenc.html">mulawenc</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-multifilesink.html">multifilesink</a></span><span class="refpurpose"> — Write buffers to a sequentially named set of files</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-multifilesink.html">multifilesink</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-multifilesrc.html">multifilesrc</a></span><span class="refpurpose"> — Read a sequentially named set of files into buffers</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-multifilesrc.html">multifilesrc</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-multipartdemux.html">multipartdemux</a></span><span class="refpurpose"> — demux multipart streams</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-multipartdemux.html">multipartdemux</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-multipartmux.html">multipartmux</a></span><span class="refpurpose"> — mux multipart streams</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-multipartmux.html">multipartmux</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-multiudpsink.html">multiudpsink</a></span><span class="refpurpose"> — Send data over the network via UDP to one or multiple recipients which can be added or removed at runtime using action signals</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-multiudpsink.html">multiudpsink</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-optv.html">optv</a></span><span class="refpurpose"> — Optical art meets real-time video effect</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-optv.html">optv</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-oss4sink.html">oss4sink</a></span><span class="refpurpose"> — Output to a sound card via OSS version 4</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-oss4sink.html">oss4sink</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-oss4src.html">oss4src</a></span><span class="refpurpose"> — Capture from a sound card via OSS version 4</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-oss4src.html">oss4src</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-osssink.html">osssink</a></span><span class="refpurpose"> — Output to a sound card via OSS</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-osssink.html">osssink</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-osssrc.html">osssrc</a></span><span class="refpurpose"> — Capture from a sound card via OSS</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-osssrc.html">osssrc</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-osxaudiosink.html">osxaudiosink</a></span><span class="refpurpose"> — Output to a sound card in OS X</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-osxaudiosink.html">osxaudiosink</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-osxaudiosrc.html">osxaudiosrc</a></span><span class="refpurpose"> — Input from a sound card in OS X</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-osxaudiosrc.html">osxaudiosrc</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-osxvideosink.html">osxvideosink</a></span><span class="refpurpose"> — OSX native videosink</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-osxvideosink.html">osxvideosink</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-pngdec.html">pngdec</a></span><span class="refpurpose"> — Decode a png video frame to a raw image</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-pngdec.html">pngdec</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-pngenc.html">pngenc</a></span><span class="refpurpose"> — Encode a video frame to a .png image</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-pngenc.html">pngenc</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-progressreport.html">progressreport</a></span><span class="refpurpose"> — Periodically query and report on processing progress</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-progressreport.html">progressreport</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-pulsesink.html">pulsesink</a></span><span class="refpurpose"> — Plays audio to a PulseAudio server</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-pulsesink.html">pulsesink</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-pulsesrc.html">pulsesrc</a></span><span class="refpurpose"> — Captures audio from a PulseAudio server</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-pulsesrc.html">pulsesrc</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-quarktv.html">quarktv</a></span><span class="refpurpose"> — Motion dissolver</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-quarktv.html">quarktv</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-qtdemux.html">qtdemux</a></span><span class="refpurpose"> — Demultiplex a QuickTime file into audio and video streams</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-qtdemux.html">qtdemux</a></span><span class="refpurpose"></span> </dt> <dt> <span class="refentrytitle"><a href="gst-plugins-good-plugins-qtmux.html">qtmux</a></span><span class="refpurpose"> — Muxer for quicktime(.mov) files</span> @@ -335,127 +335,127 @@ <span class="refentrytitle"><a href="gst-plugins-good-plugins-qtmoovrecover.html">qtmoovrecover</a></span><span class="refpurpose"> — Utility element for recovering unfinished quicktime files</span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-radioactv.html">radioactv</a></span><span class="refpurpose"> — motion-enlightment effect</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-radioactv.html">radioactv</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-revtv.html">revtv</a></span><span class="refpurpose"> — A video waveform monitor for each line of video processed</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-revtv.html">revtv</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-rganalysis.html">rganalysis</a></span><span class="refpurpose"> — Perform the ReplayGain analysis</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-rganalysis.html">rganalysis</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-rglimiter.html">rglimiter</a></span><span class="refpurpose"> — Apply signal compression to raw audio data</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-rglimiter.html">rglimiter</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-rgvolume.html">rgvolume</a></span><span class="refpurpose"> — Apply ReplayGain volume adjustment</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-rgvolume.html">rgvolume</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-rippletv.html">rippletv</a></span><span class="refpurpose"> — RippleTV does ripple mark effect on the video input</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-rippletv.html">rippletv</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-rtpdec.html">rtpdec</a></span><span class="refpurpose"> — Accepts raw RTP and RTCP packets and sends them forward</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-rtpdec.html">rtpdec</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-rtpac3depay.html">rtpac3depay</a></span><span class="refpurpose"> — Extracts AC3 audio from RTP packets (RFC 4184)</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-rtpac3depay.html">rtpac3depay</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-rtpac3pay.html">rtpac3pay</a></span><span class="refpurpose"> — Payload AC3 audio as RTP packets (RFC 4184)</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-rtpac3pay.html">rtpac3pay</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-rtpamrdepay.html">rtpamrdepay</a></span><span class="refpurpose"> — Extracts AMR or AMR-WB audio from RTP packets (RFC 3267)</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-rtpamrdepay.html">rtpamrdepay</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-rtpamrpay.html">rtpamrpay</a></span><span class="refpurpose"> — Payload-encode AMR or AMR-WB audio into RTP packets (RFC 3267)</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-rtpamrpay.html">rtpamrpay</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-rtpbvdepay.html">rtpbvdepay</a></span><span class="refpurpose"> — Extracts BroadcomVoice audio from RTP packets (RFC 4298)</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-rtpbvdepay.html">rtpbvdepay</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-rtpbvpay.html">rtpbvpay</a></span><span class="refpurpose"> — Packetize BroadcomVoice audio streams into RTP packets (RFC 4298)</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-rtpbvpay.html">rtpbvpay</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-rtpL16depay.html">rtpL16depay</a></span><span class="refpurpose"> — Extracts raw audio from RTP packets</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-rtpL16depay.html">rtpL16depay</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-rtpL16pay.html">rtpL16pay</a></span><span class="refpurpose"> — Payload-encode Raw audio into RTP packets (RFC 3551)</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-rtpL16pay.html">rtpL16pay</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-rtpj2kpay.html">rtpj2kpay</a></span><span class="refpurpose"> — Payload-encodes JPEG 2000 pictures into RTP packets (RFC 5371)</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-rtpj2kpay.html">rtpj2kpay</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-rtpjpegpay.html">rtpjpegpay</a></span><span class="refpurpose"> — Payload-encodes JPEG pictures into RTP packets (RFC 2435)</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-rtpjpegpay.html">rtpjpegpay</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-rtpsbcpay.html">rtpsbcpay</a></span><span class="refpurpose"> — Payload SBC audio as RTP packets</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-rtpsbcpay.html">rtpsbcpay</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-rtspsrc.html">rtspsrc</a></span><span class="refpurpose"> — Receive data over the network via RTSP (RFC 2326)</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-rtspsrc.html">rtspsrc</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-rtpbin.html">rtpbin</a></span><span class="refpurpose"> — Real-Time Transport Protocol bin</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-rtpbin.html">rtpbin</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-rtpdtmfmux.html">rtpdtmfmux</a></span><span class="refpurpose"> — mixes RTP DTMF streams into other RTP streams</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-rtpdtmfmux.html">rtpdtmfmux</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-rtpdtmfsrc.html">rtpdtmfsrc</a></span><span class="refpurpose"> — Generates RTP DTMF packets</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-rtpdtmfsrc.html">rtpdtmfsrc</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-rtpjitterbuffer.html">rtpjitterbuffer</a></span><span class="refpurpose"> — A buffer that deals with network jitter and other transmission faults</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-rtpjitterbuffer.html">rtpjitterbuffer</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-rtpmux.html">rtpmux</a></span><span class="refpurpose"> — multiplex N rtp streams into one</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-rtpmux.html">rtpmux</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-rtpptdemux.html">rtpptdemux</a></span><span class="refpurpose"> — Parses codec streams transmitted in the same RTP session</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-rtpptdemux.html">rtpptdemux</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-rtpsession.html">rtpsession</a></span><span class="refpurpose"> — Implement an RTP session</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-rtpsession.html">rtpsession</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-rtpssrcdemux.html">rtpssrcdemux</a></span><span class="refpurpose"> — Splits RTP streams based on the SSRC</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-rtpssrcdemux.html">rtpssrcdemux</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-rtprtxsend.html">rtprtxsend</a></span><span class="refpurpose"> — Retransmit RTP packets when needed, according to RFC4588</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-rtprtxsend.html">rtprtxsend</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-rtprtxreceive.html">rtprtxreceive</a></span><span class="refpurpose"> — Receive retransmitted RTP packets according to RFC4588</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-rtprtxreceive.html">rtprtxreceive</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-sbcparse.html">sbcparse</a></span><span class="refpurpose"> — Parses an SBC bluetooth audio stream</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-sbcparse.html">sbcparse</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-scaletempo.html">scaletempo</a></span><span class="refpurpose"> — Sync audio tempo with playback rate</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-scaletempo.html">scaletempo</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-shagadelictv.html">shagadelictv</a></span><span class="refpurpose"> — Oh behave, ShagedelicTV makes images shagadelic!</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-shagadelictv.html">shagadelictv</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-shapewipe.html">shapewipe</a></span><span class="refpurpose"> — Adds a shape wipe transition to a video stream</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-shapewipe.html">shapewipe</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-shout2send.html">shout2send</a></span><span class="refpurpose"> — Sends data to an icecast server</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-shout2send.html">shout2send</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-smpte.html">smpte</a></span><span class="refpurpose"> — Apply the standard SMPTE transitions on video images</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-smpte.html">smpte</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-smptealpha.html">smptealpha</a></span><span class="refpurpose"> — Apply the standard SMPTE transitions as alpha on video images</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-smptealpha.html">smptealpha</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-souphttpsrc.html">souphttpsrc</a></span><span class="refpurpose"> — Receive data as a client over the network via HTTP using SOUP</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-souphttpsrc.html">souphttpsrc</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-spectrum.html">spectrum</a></span><span class="refpurpose"> — Run an FFT on the audio signal, output spectrum data</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-spectrum.html">spectrum</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-speexenc.html">speexenc</a></span><span class="refpurpose"> — Encodes audio in Speex format</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-speexenc.html">speexenc</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-speexdec.html">speexdec</a></span><span class="refpurpose"> — decode speex streams to audio</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-speexdec.html">speexdec</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-splitfilesrc.html">splitfilesrc</a></span><span class="refpurpose"> — Read a sequentially named set of files as if it was one large file</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-splitfilesrc.html">splitfilesrc</a></span><span class="refpurpose"></span> </dt> <dt> <span class="refentrytitle"><a href="gst-plugins-good-plugins-splitmuxsrc.html">splitmuxsrc</a></span><span class="refpurpose"> — Split Demuxer bin that recombines files created by @@ -465,79 +465,79 @@ the splitmuxsink element.</span> <span class="refentrytitle"><a href="gst-plugins-good-plugins-splitmuxsink.html">splitmuxsink</a></span><span class="refpurpose"> — Muxer wrapper for splitting output stream by size or time</span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-streaktv.html">streaktv</a></span><span class="refpurpose"> — StreakTV makes after images of moving objects</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-streaktv.html">streaktv</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-taginject.html">taginject</a></span><span class="refpurpose"> — inject metadata tags</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-taginject.html">taginject</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-udpsrc.html">udpsrc</a></span><span class="refpurpose"> — Receive data over the network via UDP</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-udpsrc.html">udpsrc</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-udpsink.html">udpsink</a></span><span class="refpurpose"> — Send data over the network via UDP</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-udpsink.html">udpsink</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-v4l2src.html">v4l2src</a></span><span class="refpurpose"> — Reads frames from a Video4Linux2 device</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-v4l2src.html">v4l2src</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-v4l2sink.html">v4l2sink</a></span><span class="refpurpose"> — Displays frames on a video4linux2 device</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-v4l2sink.html">v4l2sink</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-v4l2radio.html">v4l2radio</a></span><span class="refpurpose"> — Controls a Video4Linux2 radio device</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-v4l2radio.html">v4l2radio</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-vertigotv.html">vertigotv</a></span><span class="refpurpose"> — A loopback alpha blending effector with rotating and scaling</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-vertigotv.html">vertigotv</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-videobalance.html">videobalance</a></span><span class="refpurpose"> — Adjusts brightness, contrast, hue, saturation on a video stream</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-videobalance.html">videobalance</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-videobox.html">videobox</a></span><span class="refpurpose"> — Resizes a video by adding borders or cropping</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-videobox.html">videobox</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-videocrop.html">videocrop</a></span><span class="refpurpose"> — Crops video into a user-defined region</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-videocrop.html">videocrop</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-videoflip.html">videoflip</a></span><span class="refpurpose"> — Flips and rotates video</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-videoflip.html">videoflip</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-videomixer.html">videomixer</a></span><span class="refpurpose"> — Mix multiple video streams</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-videomixer.html">videomixer</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-vp8dec.html">vp8dec</a></span><span class="refpurpose"> — Decode VP8 video streams</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-vp8dec.html">vp8dec</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-vp8enc.html">vp8enc</a></span><span class="refpurpose"> — Encode VP8 video streams</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-vp8enc.html">vp8enc</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-warptv.html">warptv</a></span><span class="refpurpose"> — WarpTV does realtime goo'ing of the video input</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-warptv.html">warptv</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-wavenc.html">wavenc</a></span><span class="refpurpose"> — Encode raw audio into WAV</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-wavenc.html">wavenc</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-waveformsink.html">waveformsink</a></span><span class="refpurpose"> — WaveForm audio sink</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-waveformsink.html">waveformsink</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-wavpackdec.html">wavpackdec</a></span><span class="refpurpose"> — Decodes Wavpack audio data</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-wavpackdec.html">wavpackdec</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-wavpackenc.html">wavpackenc</a></span><span class="refpurpose"> — Encodes audio with the Wavpack lossless/lossy audio codec</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-wavpackenc.html">wavpackenc</a></span><span class="refpurpose"></span> </dt> <dt> <span class="refentrytitle"><a href="gst-plugins-good-plugins-wavpackparse.html">wavpackparse</a></span><span class="refpurpose"> — Wavpack parser</span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-wavparse.html">wavparse</a></span><span class="refpurpose"> — Parse a .wav file into raw audio</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-wavparse.html">wavparse</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-webmmux.html">webmmux</a></span><span class="refpurpose"> — Muxes video and audio streams into a WebM stream</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-webmmux.html">webmmux</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-ximagesrc.html">ximagesrc</a></span><span class="refpurpose"> — Creates a screenshot video stream</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-ximagesrc.html">ximagesrc</a></span><span class="refpurpose"></span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-good-plugins-y4menc.html">y4menc</a></span><span class="refpurpose"> — Encodes a YUV frame into the yuv4mpeg format (mjpegtools)</span> +<span class="refentrytitle"><a href="gst-plugins-good-plugins-y4menc.html">y4menc</a></span><span class="refpurpose"></span> </dt> </dl></dd> <dt><span class="chapter"><a href="ch02.html">gst-plugins-good Plugins</a></span></dt> diff --git a/docs/plugins/html/index.sgml b/docs/plugins/html/index.sgml index 6250c7fc2..efc7b5e29 100644 --- a/docs/plugins/html/index.sgml +++ b/docs/plugins/html/index.sgml @@ -19,6 +19,10 @@ <ANCHOR id="Gst3GPPMux--presentation-time" href="gst-plugins-good-plugins-1.0/gst-plugins-good-plugins-3gppmux.html#Gst3GPPMux--presentation-time"> <ANCHOR id="Gst3GPPMux--streamable" href="gst-plugins-good-plugins-1.0/gst-plugins-good-plugins-3gppmux.html#Gst3GPPMux--streamable"> <ANCHOR id="Gst3GPPMux--trak-timescale" href="gst-plugins-good-plugins-1.0/gst-plugins-good-plugins-3gppmux.html#Gst3GPPMux--trak-timescale"> +<ANCHOR id="Gst3GPPMux--reserved-bytes-per-sec" href="gst-plugins-good-plugins-1.0/gst-plugins-good-plugins-3gppmux.html#Gst3GPPMux--reserved-bytes-per-sec"> +<ANCHOR id="Gst3GPPMux--reserved-duration-remaining" href="gst-plugins-good-plugins-1.0/gst-plugins-good-plugins-3gppmux.html#Gst3GPPMux--reserved-duration-remaining"> +<ANCHOR id="Gst3GPPMux--reserved-max-duration" href="gst-plugins-good-plugins-1.0/gst-plugins-good-plugins-3gppmux.html#Gst3GPPMux--reserved-max-duration"> +<ANCHOR id="Gst3GPPMux--reserved-moov-update-period" href="gst-plugins-good-plugins-1.0/gst-plugins-good-plugins-3gppmux.html#Gst3GPPMux--reserved-moov-update-period"> <ANCHOR id="gst-plugins-good-plugins-aacparse" href="gst-plugins-good-plugins-1.0/gst-plugins-good-plugins-aacparse.html"> <ANCHOR id="GstAacParse" href="gst-plugins-good-plugins-1.0/gst-plugins-good-plugins-aacparse.html#GstAacParse"> <ANCHOR id="gst-plugins-good-plugins-aacparse.other" href="gst-plugins-good-plugins-1.0/gst-plugins-good-plugins-aacparse.html#gst-plugins-good-plugins-aacparse.other"> @@ -860,6 +864,10 @@ <ANCHOR id="GstISMLMux--presentation-time" href="gst-plugins-good-plugins-1.0/gst-plugins-good-plugins-ismlmux.html#GstISMLMux--presentation-time"> <ANCHOR id="GstISMLMux--streamable" href="gst-plugins-good-plugins-1.0/gst-plugins-good-plugins-ismlmux.html#GstISMLMux--streamable"> <ANCHOR id="GstISMLMux--trak-timescale" href="gst-plugins-good-plugins-1.0/gst-plugins-good-plugins-ismlmux.html#GstISMLMux--trak-timescale"> +<ANCHOR id="GstISMLMux--reserved-bytes-per-sec" href="gst-plugins-good-plugins-1.0/gst-plugins-good-plugins-ismlmux.html#GstISMLMux--reserved-bytes-per-sec"> +<ANCHOR id="GstISMLMux--reserved-duration-remaining" href="gst-plugins-good-plugins-1.0/gst-plugins-good-plugins-ismlmux.html#GstISMLMux--reserved-duration-remaining"> +<ANCHOR id="GstISMLMux--reserved-max-duration" href="gst-plugins-good-plugins-1.0/gst-plugins-good-plugins-ismlmux.html#GstISMLMux--reserved-max-duration"> +<ANCHOR id="GstISMLMux--reserved-moov-update-period" href="gst-plugins-good-plugins-1.0/gst-plugins-good-plugins-ismlmux.html#GstISMLMux--reserved-moov-update-period"> <ANCHOR id="gst-plugins-good-plugins-jackaudiosrc" href="gst-plugins-good-plugins-1.0/gst-plugins-good-plugins-jackaudiosrc.html"> <ANCHOR id="gst-plugins-good-plugins-jackaudiosrc.properties" href="gst-plugins-good-plugins-1.0/gst-plugins-good-plugins-jackaudiosrc.html#gst-plugins-good-plugins-jackaudiosrc.properties"> <ANCHOR id="GstJackAudioSrc" href="gst-plugins-good-plugins-1.0/gst-plugins-good-plugins-jackaudiosrc.html#GstJackAudioSrc"> @@ -981,6 +989,10 @@ <ANCHOR id="GstMJ2Mux--presentation-time" href="gst-plugins-good-plugins-1.0/gst-plugins-good-plugins-mj2mux.html#GstMJ2Mux--presentation-time"> <ANCHOR id="GstMJ2Mux--streamable" href="gst-plugins-good-plugins-1.0/gst-plugins-good-plugins-mj2mux.html#GstMJ2Mux--streamable"> <ANCHOR id="GstMJ2Mux--trak-timescale" href="gst-plugins-good-plugins-1.0/gst-plugins-good-plugins-mj2mux.html#GstMJ2Mux--trak-timescale"> +<ANCHOR id="GstMJ2Mux--reserved-bytes-per-sec" href="gst-plugins-good-plugins-1.0/gst-plugins-good-plugins-mj2mux.html#GstMJ2Mux--reserved-bytes-per-sec"> +<ANCHOR id="GstMJ2Mux--reserved-duration-remaining" href="gst-plugins-good-plugins-1.0/gst-plugins-good-plugins-mj2mux.html#GstMJ2Mux--reserved-duration-remaining"> +<ANCHOR id="GstMJ2Mux--reserved-max-duration" href="gst-plugins-good-plugins-1.0/gst-plugins-good-plugins-mj2mux.html#GstMJ2Mux--reserved-max-duration"> +<ANCHOR id="GstMJ2Mux--reserved-moov-update-period" href="gst-plugins-good-plugins-1.0/gst-plugins-good-plugins-mj2mux.html#GstMJ2Mux--reserved-moov-update-period"> <ANCHOR id="gst-plugins-good-plugins-monoscope" href="gst-plugins-good-plugins-1.0/gst-plugins-good-plugins-monoscope.html"> <ANCHOR id="gst-plugins-good-plugins-monoscope.other" href="gst-plugins-good-plugins-1.0/gst-plugins-good-plugins-monoscope.html#gst-plugins-good-plugins-monoscope.other"> <ANCHOR id="gst-plugins-good-plugins-monoscope.description" href="gst-plugins-good-plugins-1.0/gst-plugins-good-plugins-monoscope.html#gst-plugins-good-plugins-monoscope.description"> @@ -1017,6 +1029,10 @@ <ANCHOR id="GstMP4Mux--presentation-time" href="gst-plugins-good-plugins-1.0/gst-plugins-good-plugins-mp4mux.html#GstMP4Mux--presentation-time"> <ANCHOR id="GstMP4Mux--streamable" href="gst-plugins-good-plugins-1.0/gst-plugins-good-plugins-mp4mux.html#GstMP4Mux--streamable"> <ANCHOR id="GstMP4Mux--trak-timescale" href="gst-plugins-good-plugins-1.0/gst-plugins-good-plugins-mp4mux.html#GstMP4Mux--trak-timescale"> +<ANCHOR id="GstMP4Mux--reserved-bytes-per-sec" href="gst-plugins-good-plugins-1.0/gst-plugins-good-plugins-mp4mux.html#GstMP4Mux--reserved-bytes-per-sec"> +<ANCHOR id="GstMP4Mux--reserved-duration-remaining" href="gst-plugins-good-plugins-1.0/gst-plugins-good-plugins-mp4mux.html#GstMP4Mux--reserved-duration-remaining"> +<ANCHOR id="GstMP4Mux--reserved-max-duration" href="gst-plugins-good-plugins-1.0/gst-plugins-good-plugins-mp4mux.html#GstMP4Mux--reserved-max-duration"> +<ANCHOR id="GstMP4Mux--reserved-moov-update-period" href="gst-plugins-good-plugins-1.0/gst-plugins-good-plugins-mp4mux.html#GstMP4Mux--reserved-moov-update-period"> <ANCHOR id="gst-plugins-good-plugins-mulawdec" href="gst-plugins-good-plugins-1.0/gst-plugins-good-plugins-mulawdec.html"> <ANCHOR id="GstMuLawDec" href="gst-plugins-good-plugins-1.0/gst-plugins-good-plugins-mulawdec.html#GstMuLawDec"> <ANCHOR id="gst-plugins-good-plugins-mulawdec.other" href="gst-plugins-good-plugins-1.0/gst-plugins-good-plugins-mulawdec.html#gst-plugins-good-plugins-mulawdec.other"> @@ -1354,6 +1370,10 @@ <ANCHOR id="GstQTMux--presentation-time" href="gst-plugins-good-plugins-1.0/gst-plugins-good-plugins-qtmux.html#GstQTMux--presentation-time"> <ANCHOR id="GstQTMux--streamable" href="gst-plugins-good-plugins-1.0/gst-plugins-good-plugins-qtmux.html#GstQTMux--streamable"> <ANCHOR id="GstQTMux--trak-timescale" href="gst-plugins-good-plugins-1.0/gst-plugins-good-plugins-qtmux.html#GstQTMux--trak-timescale"> +<ANCHOR id="GstQTMux--reserved-bytes-per-sec" href="gst-plugins-good-plugins-1.0/gst-plugins-good-plugins-qtmux.html#GstQTMux--reserved-bytes-per-sec"> +<ANCHOR id="GstQTMux--reserved-duration-remaining" href="gst-plugins-good-plugins-1.0/gst-plugins-good-plugins-qtmux.html#GstQTMux--reserved-duration-remaining"> +<ANCHOR id="GstQTMux--reserved-max-duration" href="gst-plugins-good-plugins-1.0/gst-plugins-good-plugins-qtmux.html#GstQTMux--reserved-max-duration"> +<ANCHOR id="GstQTMux--reserved-moov-update-period" href="gst-plugins-good-plugins-1.0/gst-plugins-good-plugins-qtmux.html#GstQTMux--reserved-moov-update-period"> <ANCHOR id="gst-plugins-good-plugins-qtmoovrecover" href="gst-plugins-good-plugins-1.0/gst-plugins-good-plugins-qtmoovrecover.html"> <ANCHOR id="gst-plugins-good-plugins-qtmoovrecover.functions" href="gst-plugins-good-plugins-1.0/gst-plugins-good-plugins-qtmoovrecover.html#gst-plugins-good-plugins-qtmoovrecover.functions"> <ANCHOR id="gst-plugins-good-plugins-qtmoovrecover.properties" href="gst-plugins-good-plugins-1.0/gst-plugins-good-plugins-qtmoovrecover.html#gst-plugins-good-plugins-qtmoovrecover.properties"> @@ -1621,6 +1641,7 @@ <ANCHOR id="GstRTSPSrc--tls-database" href="gst-plugins-good-plugins-1.0/gst-plugins-good-plugins-rtspsrc.html#GstRTSPSrc--tls-database"> <ANCHOR id="GstRTSPSrc--tls-validation-flags" href="gst-plugins-good-plugins-1.0/gst-plugins-good-plugins-rtspsrc.html#GstRTSPSrc--tls-validation-flags"> <ANCHOR id="GstRTSPSrc--do-retransmission" href="gst-plugins-good-plugins-1.0/gst-plugins-good-plugins-rtspsrc.html#GstRTSPSrc--do-retransmission"> +<ANCHOR id="GstRTSPSrc--tls-interaction" href="gst-plugins-good-plugins-1.0/gst-plugins-good-plugins-rtspsrc.html#GstRTSPSrc--tls-interaction"> <ANCHOR id="gst-plugins-good-plugins-rtspsrc.signal-details" href="gst-plugins-good-plugins-1.0/gst-plugins-good-plugins-rtspsrc.html#gst-plugins-good-plugins-rtspsrc.signal-details"> <ANCHOR id="GstRTSPSrc-handle-request" href="gst-plugins-good-plugins-1.0/gst-plugins-good-plugins-rtspsrc.html#GstRTSPSrc-handle-request"> <ANCHOR id="GstRTSPSrc-on-sdp" href="gst-plugins-good-plugins-1.0/gst-plugins-good-plugins-rtspsrc.html#GstRTSPSrc-on-sdp"> @@ -1663,6 +1684,7 @@ <ANCHOR id="GstRtpBin--do-sync-event" href="gst-plugins-good-plugins-1.0/gst-plugins-good-plugins-rtpbin.html#GstRtpBin--do-sync-event"> <ANCHOR id="GstRtpBin--do-retransmission" href="gst-plugins-good-plugins-1.0/gst-plugins-good-plugins-rtpbin.html#GstRtpBin--do-retransmission"> <ANCHOR id="GstRtpBin--rtp-profile" href="gst-plugins-good-plugins-1.0/gst-plugins-good-plugins-rtpbin.html#GstRtpBin--rtp-profile"> +<ANCHOR id="GstRtpBin--ntp-time-source" href="gst-plugins-good-plugins-1.0/gst-plugins-good-plugins-rtpbin.html#GstRtpBin--ntp-time-source"> <ANCHOR id="gst-plugins-good-plugins-rtpbin.signal-details" href="gst-plugins-good-plugins-1.0/gst-plugins-good-plugins-rtpbin.html#gst-plugins-good-plugins-rtpbin.signal-details"> <ANCHOR id="GstRtpBin-clear-pt-map" href="gst-plugins-good-plugins-1.0/gst-plugins-good-plugins-rtpbin.html#GstRtpBin-clear-pt-map"> <ANCHOR id="GstRtpBin-get-internal-session" href="gst-plugins-good-plugins-1.0/gst-plugins-good-plugins-rtpbin.html#GstRtpBin-get-internal-session"> @@ -1802,6 +1824,7 @@ <ANCHOR id="GstRtpSession--probation" href="gst-plugins-good-plugins-1.0/gst-plugins-good-plugins-rtpsession.html#GstRtpSession--probation"> <ANCHOR id="GstRtpSession--stats" href="gst-plugins-good-plugins-1.0/gst-plugins-good-plugins-rtpsession.html#GstRtpSession--stats"> <ANCHOR id="GstRtpSession--rtp-profile" href="gst-plugins-good-plugins-1.0/gst-plugins-good-plugins-rtpsession.html#GstRtpSession--rtp-profile"> +<ANCHOR id="GstRtpSession--ntp-time-source" href="gst-plugins-good-plugins-1.0/gst-plugins-good-plugins-rtpsession.html#GstRtpSession--ntp-time-source"> <ANCHOR id="gst-plugins-good-plugins-rtpsession.signal-details" href="gst-plugins-good-plugins-1.0/gst-plugins-good-plugins-rtpsession.html#gst-plugins-good-plugins-rtpsession.signal-details"> <ANCHOR id="GstRtpSession-clear-pt-map" href="gst-plugins-good-plugins-1.0/gst-plugins-good-plugins-rtpsession.html#GstRtpSession-clear-pt-map"> <ANCHOR id="GstRtpSession-on-bye-ssrc" href="gst-plugins-good-plugins-1.0/gst-plugins-good-plugins-rtpsession.html#GstRtpSession-on-bye-ssrc"> @@ -1996,6 +2019,7 @@ <ANCHOR id="GstSoupHTTPSrc--ssl-ca-file" href="gst-plugins-good-plugins-1.0/gst-plugins-good-plugins-souphttpsrc.html#GstSoupHTTPSrc--ssl-ca-file"> <ANCHOR id="GstSoupHTTPSrc--ssl-strict" href="gst-plugins-good-plugins-1.0/gst-plugins-good-plugins-souphttpsrc.html#GstSoupHTTPSrc--ssl-strict"> <ANCHOR id="GstSoupHTTPSrc--ssl-use-system-ca-file" href="gst-plugins-good-plugins-1.0/gst-plugins-good-plugins-souphttpsrc.html#GstSoupHTTPSrc--ssl-use-system-ca-file"> +<ANCHOR id="GstSoupHTTPSrc--tls-database" href="gst-plugins-good-plugins-1.0/gst-plugins-good-plugins-souphttpsrc.html#GstSoupHTTPSrc--tls-database"> <ANCHOR id="gst-plugins-good-plugins-spectrum" href="gst-plugins-good-plugins-1.0/gst-plugins-good-plugins-spectrum.html"> <ANCHOR id="gst-plugins-good-plugins-spectrum.properties" href="gst-plugins-good-plugins-1.0/gst-plugins-good-plugins-spectrum.html#gst-plugins-good-plugins-spectrum.properties"> <ANCHOR id="GstSpectrum" href="gst-plugins-good-plugins-1.0/gst-plugins-good-plugins-spectrum.html#GstSpectrum"> diff --git a/docs/plugins/inspect/plugin-1394.xml b/docs/plugins/inspect/plugin-1394.xml index cafa3b193..6d710c042 100644 --- a/docs/plugins/inspect/plugin-1394.xml +++ b/docs/plugins/inspect/plugin-1394.xml @@ -3,7 +3,7 @@ <description>Source for video data via IEEE1394 interface</description> <filename>../../ext/raw1394/.libs/libgst1394.so</filename> <basename>libgst1394.so</basename> - <version>1.5.1</version> + <version>1.5.2</version> <license>LGPL</license> <source>gst-plugins-good</source> <package>GStreamer Good Plug-ins source release</package> diff --git a/docs/plugins/inspect/plugin-aasink.xml b/docs/plugins/inspect/plugin-aasink.xml index 99ceb50a5..d4e876857 100644 --- a/docs/plugins/inspect/plugin-aasink.xml +++ b/docs/plugins/inspect/plugin-aasink.xml @@ -3,7 +3,7 @@ <description>ASCII Art video sink</description> <filename>../../ext/aalib/.libs/libgstaasink.so</filename> <basename>libgstaasink.so</basename> - <version>1.5.1</version> + <version>1.5.2</version> <license>LGPL</license> <source>gst-plugins-good</source> <package>GStreamer Good Plug-ins source release</package> diff --git a/docs/plugins/inspect/plugin-alaw.xml b/docs/plugins/inspect/plugin-alaw.xml index 960f68389..15fefdbc6 100644 --- a/docs/plugins/inspect/plugin-alaw.xml +++ b/docs/plugins/inspect/plugin-alaw.xml @@ -3,7 +3,7 @@ <description>ALaw audio conversion routines</description> <filename>../../gst/law/.libs/libgstalaw.so</filename> <basename>libgstalaw.so</basename> - <version>1.5.1</version> + <version>1.5.2</version> <license>LGPL</license> <source>gst-plugins-good</source> <package>GStreamer Good Plug-ins source release</package> diff --git a/docs/plugins/inspect/plugin-alpha.xml b/docs/plugins/inspect/plugin-alpha.xml index c52a262cd..c8d58a9ff 100644 --- a/docs/plugins/inspect/plugin-alpha.xml +++ b/docs/plugins/inspect/plugin-alpha.xml @@ -3,7 +3,7 @@ <description>adds an alpha channel to video - constant or via chroma-keying</description> <filename>../../gst/alpha/.libs/libgstalpha.so</filename> <basename>libgstalpha.so</basename> - <version>1.5.1</version> + <version>1.5.2</version> <license>LGPL</license> <source>gst-plugins-good</source> <package>GStreamer Good Plug-ins source release</package> diff --git a/docs/plugins/inspect/plugin-alphacolor.xml b/docs/plugins/inspect/plugin-alphacolor.xml index 58e36949e..518d732f1 100644 --- a/docs/plugins/inspect/plugin-alphacolor.xml +++ b/docs/plugins/inspect/plugin-alphacolor.xml @@ -3,7 +3,7 @@ <description>RGBA from/to AYUV colorspace conversion preserving the alpha channel</description> <filename>../../gst/alpha/.libs/libgstalphacolor.so</filename> <basename>libgstalphacolor.so</basename> - <version>1.5.1</version> + <version>1.5.2</version> <license>LGPL</license> <source>gst-plugins-good</source> <package>GStreamer Good Plug-ins source release</package> diff --git a/docs/plugins/inspect/plugin-apetag.xml b/docs/plugins/inspect/plugin-apetag.xml index 5c87b4efb..b82e64221 100644 --- a/docs/plugins/inspect/plugin-apetag.xml +++ b/docs/plugins/inspect/plugin-apetag.xml @@ -3,7 +3,7 @@ <description>APEv1/2 tag reader</description> <filename>../../gst/apetag/.libs/libgstapetag.so</filename> <basename>libgstapetag.so</basename> - <version>1.5.1</version> + <version>1.5.2</version> <license>LGPL</license> <source>gst-plugins-good</source> <package>GStreamer Good Plug-ins source release</package> diff --git a/docs/plugins/inspect/plugin-audiofx.xml b/docs/plugins/inspect/plugin-audiofx.xml index 4da2f7e3f..d7a2139b1 100644 --- a/docs/plugins/inspect/plugin-audiofx.xml +++ b/docs/plugins/inspect/plugin-audiofx.xml @@ -3,7 +3,7 @@ <description>Audio effects plugin</description> <filename>../../gst/audiofx/.libs/libgstaudiofx.so</filename> <basename>libgstaudiofx.so</basename> - <version>1.5.1</version> + <version>1.5.2</version> <license>LGPL</license> <source>gst-plugins-good</source> <package>GStreamer Good Plug-ins source release</package> diff --git a/docs/plugins/inspect/plugin-audioparsers.xml b/docs/plugins/inspect/plugin-audioparsers.xml index ae4de689e..55c7ac6d9 100644 --- a/docs/plugins/inspect/plugin-audioparsers.xml +++ b/docs/plugins/inspect/plugin-audioparsers.xml @@ -3,7 +3,7 @@ <description>Parsers for various audio formats</description> <filename>../../gst/audioparsers/.libs/libgstaudioparsers.so</filename> <basename>libgstaudioparsers.so</basename> - <version>1.5.1</version> + <version>1.5.2</version> <license>LGPL</license> <source>gst-plugins-good</source> <package>GStreamer Good Plug-ins source release</package> diff --git a/docs/plugins/inspect/plugin-auparse.xml b/docs/plugins/inspect/plugin-auparse.xml index 7ac3b7341..0b1231048 100644 --- a/docs/plugins/inspect/plugin-auparse.xml +++ b/docs/plugins/inspect/plugin-auparse.xml @@ -3,7 +3,7 @@ <description>parses au streams</description> <filename>../../gst/auparse/.libs/libgstauparse.so</filename> <basename>libgstauparse.so</basename> - <version>1.5.1</version> + <version>1.5.2</version> <license>LGPL</license> <source>gst-plugins-good</source> <package>GStreamer Good Plug-ins source release</package> diff --git a/docs/plugins/inspect/plugin-autodetect.xml b/docs/plugins/inspect/plugin-autodetect.xml index 321225bad..5fbfbaa8d 100644 --- a/docs/plugins/inspect/plugin-autodetect.xml +++ b/docs/plugins/inspect/plugin-autodetect.xml @@ -3,7 +3,7 @@ <description>Plugin contains auto-detection plugins for video/audio in- and outputs</description> <filename>../../gst/autodetect/.libs/libgstautodetect.so</filename> <basename>libgstautodetect.so</basename> - <version>1.5.1</version> + <version>1.5.2</version> <license>LGPL</license> <source>gst-plugins-good</source> <package>GStreamer Good Plug-ins source release</package> diff --git a/docs/plugins/inspect/plugin-avi.xml b/docs/plugins/inspect/plugin-avi.xml index cd9d95e21..38da335c4 100644 --- a/docs/plugins/inspect/plugin-avi.xml +++ b/docs/plugins/inspect/plugin-avi.xml @@ -3,7 +3,7 @@ <description>AVI stream handling</description> <filename>../../gst/avi/.libs/libgstavi.so</filename> <basename>libgstavi.so</basename> - <version>1.5.1</version> + <version>1.5.2</version> <license>LGPL</license> <source>gst-plugins-good</source> <package>GStreamer Good Plug-ins source release</package> diff --git a/docs/plugins/inspect/plugin-cacasink.xml b/docs/plugins/inspect/plugin-cacasink.xml index c98e937de..d7df4f760 100644 --- a/docs/plugins/inspect/plugin-cacasink.xml +++ b/docs/plugins/inspect/plugin-cacasink.xml @@ -3,7 +3,7 @@ <description>Colored ASCII Art video sink</description> <filename>../../ext/libcaca/.libs/libgstcacasink.so</filename> <basename>libgstcacasink.so</basename> - <version>1.5.1</version> + <version>1.5.2</version> <license>LGPL</license> <source>gst-plugins-good</source> <package>GStreamer Good Plug-ins source release</package> diff --git a/docs/plugins/inspect/plugin-cairo.xml b/docs/plugins/inspect/plugin-cairo.xml index 46bb314f0..d7665efff 100644 --- a/docs/plugins/inspect/plugin-cairo.xml +++ b/docs/plugins/inspect/plugin-cairo.xml @@ -3,7 +3,7 @@ <description>Cairo-based elements</description> <filename>../../ext/cairo/.libs/libgstcairo.so</filename> <basename>libgstcairo.so</basename> - <version>1.5.1</version> + <version>1.5.2</version> <license>LGPL</license> <source>gst-plugins-good</source> <package>GStreamer Good Plug-ins source release</package> diff --git a/docs/plugins/inspect/plugin-cutter.xml b/docs/plugins/inspect/plugin-cutter.xml index 461bd15c6..bd8c287e5 100644 --- a/docs/plugins/inspect/plugin-cutter.xml +++ b/docs/plugins/inspect/plugin-cutter.xml @@ -3,7 +3,7 @@ <description>Audio Cutter to split audio into non-silent bits</description> <filename>../../gst/cutter/.libs/libgstcutter.so</filename> <basename>libgstcutter.so</basename> - <version>1.5.1</version> + <version>1.5.2</version> <license>LGPL</license> <source>gst-plugins-good</source> <package>GStreamer Good Plug-ins source release</package> diff --git a/docs/plugins/inspect/plugin-debug.xml b/docs/plugins/inspect/plugin-debug.xml index 9b2b2fdbd..9136d0b57 100644 --- a/docs/plugins/inspect/plugin-debug.xml +++ b/docs/plugins/inspect/plugin-debug.xml @@ -3,7 +3,7 @@ <description>elements for testing and debugging</description> <filename>../../gst/debugutils/.libs/libgstdebug.so</filename> <basename>libgstdebug.so</basename> - <version>1.5.1</version> + <version>1.5.2</version> <license>LGPL</license> <source>gst-plugins-good</source> <package>GStreamer Good Plug-ins source release</package> diff --git a/docs/plugins/inspect/plugin-deinterlace.xml b/docs/plugins/inspect/plugin-deinterlace.xml index a8a9655e5..248d596d5 100644 --- a/docs/plugins/inspect/plugin-deinterlace.xml +++ b/docs/plugins/inspect/plugin-deinterlace.xml @@ -3,7 +3,7 @@ <description>Deinterlacer</description> <filename>../../gst/deinterlace/.libs/libgstdeinterlace.so</filename> <basename>libgstdeinterlace.so</basename> - <version>1.5.1</version> + <version>1.5.2</version> <license>LGPL</license> <source>gst-plugins-good</source> <package>GStreamer Good Plug-ins source release</package> diff --git a/docs/plugins/inspect/plugin-dtmf.xml b/docs/plugins/inspect/plugin-dtmf.xml index aa60f481a..7196a10f5 100644 --- a/docs/plugins/inspect/plugin-dtmf.xml +++ b/docs/plugins/inspect/plugin-dtmf.xml @@ -3,7 +3,7 @@ <description>DTMF plugins</description> <filename>../../gst/dtmf/.libs/libgstdtmf.so</filename> <basename>libgstdtmf.so</basename> - <version>1.5.1</version> + <version>1.5.2</version> <license>LGPL</license> <source>gst-plugins-good</source> <package>GStreamer Good Plug-ins source release</package> diff --git a/docs/plugins/inspect/plugin-dv.xml b/docs/plugins/inspect/plugin-dv.xml index cf8fb7f53..471864343 100644 --- a/docs/plugins/inspect/plugin-dv.xml +++ b/docs/plugins/inspect/plugin-dv.xml @@ -3,7 +3,7 @@ <description>DV demuxer and decoder based on libdv (libdv.sf.net)</description> <filename>../../ext/dv/.libs/libgstdv.so</filename> <basename>libgstdv.so</basename> - <version>1.5.1</version> + <version>1.5.2</version> <license>LGPL</license> <source>gst-plugins-good</source> <package>GStreamer Good Plug-ins source release</package> diff --git a/docs/plugins/inspect/plugin-effectv.xml b/docs/plugins/inspect/plugin-effectv.xml index b9a0155e9..6f32d0832 100644 --- a/docs/plugins/inspect/plugin-effectv.xml +++ b/docs/plugins/inspect/plugin-effectv.xml @@ -3,7 +3,7 @@ <description>effect plugins from the effectv project</description> <filename>../../gst/effectv/.libs/libgsteffectv.so</filename> <basename>libgsteffectv.so</basename> - <version>1.5.1</version> + <version>1.5.2</version> <license>LGPL</license> <source>gst-plugins-good</source> <package>GStreamer Good Plug-ins source release</package> diff --git a/docs/plugins/inspect/plugin-equalizer.xml b/docs/plugins/inspect/plugin-equalizer.xml index 7edf165e4..a0bb67e59 100644 --- a/docs/plugins/inspect/plugin-equalizer.xml +++ b/docs/plugins/inspect/plugin-equalizer.xml @@ -3,7 +3,7 @@ <description>GStreamer audio equalizers</description> <filename>../../gst/equalizer/.libs/libgstequalizer.so</filename> <basename>libgstequalizer.so</basename> - <version>1.5.1</version> + <version>1.5.2</version> <license>LGPL</license> <source>gst-plugins-good</source> <package>GStreamer Good Plug-ins source release</package> diff --git a/docs/plugins/inspect/plugin-flac.xml b/docs/plugins/inspect/plugin-flac.xml index 8173f733c..bafc078a5 100644 --- a/docs/plugins/inspect/plugin-flac.xml +++ b/docs/plugins/inspect/plugin-flac.xml @@ -3,7 +3,7 @@ <description>The FLAC Lossless compressor Codec</description> <filename>../../ext/flac/.libs/libgstflac.so</filename> <basename>libgstflac.so</basename> - <version>1.5.1</version> + <version>1.5.2</version> <license>LGPL</license> <source>gst-plugins-good</source> <package>GStreamer Good Plug-ins source release</package> diff --git a/docs/plugins/inspect/plugin-flv.xml b/docs/plugins/inspect/plugin-flv.xml index 3c337b018..5c53b3922 100644 --- a/docs/plugins/inspect/plugin-flv.xml +++ b/docs/plugins/inspect/plugin-flv.xml @@ -3,7 +3,7 @@ <description>FLV muxing and demuxing plugin</description> <filename>../../gst/flv/.libs/libgstflv.so</filename> <basename>libgstflv.so</basename> - <version>1.5.1</version> + <version>1.5.2</version> <license>LGPL</license> <source>gst-plugins-good</source> <package>GStreamer Good Plug-ins source release</package> diff --git a/docs/plugins/inspect/plugin-flxdec.xml b/docs/plugins/inspect/plugin-flxdec.xml index 9cfa9ff94..32df8a283 100644 --- a/docs/plugins/inspect/plugin-flxdec.xml +++ b/docs/plugins/inspect/plugin-flxdec.xml @@ -3,7 +3,7 @@ <description>FLC/FLI/FLX video decoder</description> <filename>../../gst/flx/.libs/libgstflxdec.so</filename> <basename>libgstflxdec.so</basename> - <version>1.5.1</version> + <version>1.5.2</version> <license>LGPL</license> <source>gst-plugins-good</source> <package>GStreamer Good Plug-ins source release</package> diff --git a/docs/plugins/inspect/plugin-gdkpixbuf.xml b/docs/plugins/inspect/plugin-gdkpixbuf.xml index 655531c56..c4e26a871 100644 --- a/docs/plugins/inspect/plugin-gdkpixbuf.xml +++ b/docs/plugins/inspect/plugin-gdkpixbuf.xml @@ -3,7 +3,7 @@ <description>GdkPixbuf-based image decoder, overlay and sink</description> <filename>../../ext/gdk_pixbuf/.libs/libgstgdkpixbuf.so</filename> <basename>libgstgdkpixbuf.so</basename> - <version>1.5.1</version> + <version>1.5.2</version> <license>LGPL</license> <source>gst-plugins-good</source> <package>GStreamer Good Plug-ins source release</package> diff --git a/docs/plugins/inspect/plugin-goom.xml b/docs/plugins/inspect/plugin-goom.xml index da2c84f43..63baa82e0 100644 --- a/docs/plugins/inspect/plugin-goom.xml +++ b/docs/plugins/inspect/plugin-goom.xml @@ -3,7 +3,7 @@ <description>GOOM visualization filter</description> <filename>../../gst/goom/.libs/libgstgoom.so</filename> <basename>libgstgoom.so</basename> - <version>1.5.1</version> + <version>1.5.2</version> <license>LGPL</license> <source>gst-plugins-good</source> <package>GStreamer Good Plug-ins source release</package> diff --git a/docs/plugins/inspect/plugin-goom2k1.xml b/docs/plugins/inspect/plugin-goom2k1.xml index 97b080271..c909d5122 100644 --- a/docs/plugins/inspect/plugin-goom2k1.xml +++ b/docs/plugins/inspect/plugin-goom2k1.xml @@ -3,7 +3,7 @@ <description>GOOM 2k1 visualization filter</description> <filename>../../gst/goom2k1/.libs/libgstgoom2k1.so</filename> <basename>libgstgoom2k1.so</basename> - <version>1.5.1</version> + <version>1.5.2</version> <license>LGPL</license> <source>gst-plugins-good</source> <package>GStreamer Good Plug-ins source release</package> diff --git a/docs/plugins/inspect/plugin-icydemux.xml b/docs/plugins/inspect/plugin-icydemux.xml index f49b6a1c3..71a9810b1 100644 --- a/docs/plugins/inspect/plugin-icydemux.xml +++ b/docs/plugins/inspect/plugin-icydemux.xml @@ -3,7 +3,7 @@ <description>Demux ICY tags from a stream</description> <filename>../../gst/icydemux/.libs/libgsticydemux.so</filename> <basename>libgsticydemux.so</basename> - <version>1.5.1</version> + <version>1.5.2</version> <license>LGPL</license> <source>gst-plugins-good</source> <package>GStreamer Good Plug-ins source release</package> diff --git a/docs/plugins/inspect/plugin-id3demux.xml b/docs/plugins/inspect/plugin-id3demux.xml index e6c9cac67..27ee4d57f 100644 --- a/docs/plugins/inspect/plugin-id3demux.xml +++ b/docs/plugins/inspect/plugin-id3demux.xml @@ -3,7 +3,7 @@ <description>Demux ID3v1 and ID3v2 tags from a file</description> <filename>../../gst/id3demux/.libs/libgstid3demux.so</filename> <basename>libgstid3demux.so</basename> - <version>1.5.1</version> + <version>1.5.2</version> <license>LGPL</license> <source>gst-plugins-good</source> <package>GStreamer Good Plug-ins source release</package> diff --git a/docs/plugins/inspect/plugin-imagefreeze.xml b/docs/plugins/inspect/plugin-imagefreeze.xml index 7c70a5a5b..c0055ace6 100644 --- a/docs/plugins/inspect/plugin-imagefreeze.xml +++ b/docs/plugins/inspect/plugin-imagefreeze.xml @@ -3,7 +3,7 @@ <description>Still frame stream generator</description> <filename>../../gst/imagefreeze/.libs/libgstimagefreeze.so</filename> <basename>libgstimagefreeze.so</basename> - <version>1.5.1</version> + <version>1.5.2</version> <license>LGPL</license> <source>gst-plugins-good</source> <package>GStreamer Good Plug-ins source release</package> diff --git a/docs/plugins/inspect/plugin-interleave.xml b/docs/plugins/inspect/plugin-interleave.xml index e81df35e9..9dcc351cb 100644 --- a/docs/plugins/inspect/plugin-interleave.xml +++ b/docs/plugins/inspect/plugin-interleave.xml @@ -3,7 +3,7 @@ <description>Audio interleaver/deinterleaver</description> <filename>../../gst/interleave/.libs/libgstinterleave.so</filename> <basename>libgstinterleave.so</basename> - <version>1.5.1</version> + <version>1.5.2</version> <license>LGPL</license> <source>gst-plugins-good</source> <package>GStreamer Good Plug-ins source release</package> diff --git a/docs/plugins/inspect/plugin-isomp4.xml b/docs/plugins/inspect/plugin-isomp4.xml index 3731983d2..b49b4ac66 100644 --- a/docs/plugins/inspect/plugin-isomp4.xml +++ b/docs/plugins/inspect/plugin-isomp4.xml @@ -3,7 +3,7 @@ <description>ISO base media file format support (mp4, 3gpp, qt, mj2)</description> <filename>../../gst/isomp4/.libs/libgstisomp4.so</filename> <basename>libgstisomp4.so</basename> - <version>1.5.1</version> + <version>1.5.2</version> <license>LGPL</license> <source>gst-plugins-good</source> <package>GStreamer Good Plug-ins source release</package> @@ -20,7 +20,7 @@ <name>audio_%u</name> <direction>sink</direction> <presence>request</presence> - <details>audio/AMR, rate=(int)8000, channels=(int)[ 1, 2 ]; audio/AMR-WB, rate=(int)16000, channels=(int)[ 1, 2 ]; audio/mpeg, mpegversion=(int)1, layer=(int)3, channels=(int)[ 1, 2 ], rate=(int)[ 1, 2147483647 ]; audio/mpeg, mpegversion=(int)4, stream-format=(string)raw, channels=(int)[ 1, 8 ], rate=(int)[ 1, 2147483647 ]</details> + <details>audio/AMR, rate=(int)8000, channels=(int)[ 1, 2 ]; audio/AMR-WB, rate=(int)16000, channels=(int)[ 1, 2 ]; audio/mpeg, mpegversion=(int)1, layer=(int)3, channels=(int)[ 1, 2 ], rate=(int)[ 1, 2147483647 ]; audio/mpeg, mpegversion=(int)4, stream-format=(string)raw, channels=(int)[ 1, 8 ], rate=(int)[ 1, 2147483647 ]; audio/x-ac3, channels=(int)[ 1, 6 ], rate=(int)[ 1, 2147483647 ]</details> </caps> <caps> <name>subtitle_%u</name> @@ -107,7 +107,7 @@ <name>audio_%u</name> <direction>sink</direction> <presence>request</presence> - <details>audio/mpeg, mpegversion=(int)1, layer=(int)3, channels=(int)[ 1, 2 ], rate=(int)[ 1, 2147483647 ]; audio/mpeg, mpegversion=(int)4, stream-format=(string)raw, channels=(int)[ 1, 8 ], rate=(int)[ 1, 2147483647 ]; audio/x-alac, channels=(int)[ 1, 2 ], rate=(int)[ 1, 2147483647 ]</details> + <details>audio/mpeg, mpegversion=(int)1, layer=(int)3, channels=(int)[ 1, 2 ], rate=(int)[ 1, 2147483647 ]; audio/mpeg, mpegversion=(int)4, stream-format=(string)raw, channels=(int)[ 1, 8 ], rate=(int)[ 1, 2147483647 ]; audio/x-ac3, channels=(int)[ 1, 6 ], rate=(int)[ 1, 2147483647 ]; audio/x-alac, channels=(int)[ 1, 2 ], rate=(int)[ 1, 2147483647 ]</details> </caps> <caps> <name>subtitle_%u</name> diff --git a/docs/plugins/inspect/plugin-jack.xml b/docs/plugins/inspect/plugin-jack.xml index 0c94582ea..30c0ee0de 100644 --- a/docs/plugins/inspect/plugin-jack.xml +++ b/docs/plugins/inspect/plugin-jack.xml @@ -3,7 +3,7 @@ <description>JACK audio elements</description> <filename>../../ext/jack/.libs/libgstjack.so</filename> <basename>libgstjack.so</basename> - <version>1.5.1</version> + <version>1.5.2</version> <license>LGPL</license> <source>gst-plugins-good</source> <package>GStreamer Good Plug-ins source release</package> diff --git a/docs/plugins/inspect/plugin-jpeg.xml b/docs/plugins/inspect/plugin-jpeg.xml index cf512a764..8498df1f6 100644 --- a/docs/plugins/inspect/plugin-jpeg.xml +++ b/docs/plugins/inspect/plugin-jpeg.xml @@ -3,7 +3,7 @@ <description>JPeg plugin library</description> <filename>../../ext/jpeg/.libs/libgstjpeg.so</filename> <basename>libgstjpeg.so</basename> - <version>1.5.1</version> + <version>1.5.2</version> <license>LGPL</license> <source>gst-plugins-good</source> <package>GStreamer Good Plug-ins source release</package> diff --git a/docs/plugins/inspect/plugin-level.xml b/docs/plugins/inspect/plugin-level.xml index 449cf40e6..f84d39717 100644 --- a/docs/plugins/inspect/plugin-level.xml +++ b/docs/plugins/inspect/plugin-level.xml @@ -3,7 +3,7 @@ <description>Audio level plugin</description> <filename>../../gst/level/.libs/libgstlevel.so</filename> <basename>libgstlevel.so</basename> - <version>1.5.1</version> + <version>1.5.2</version> <license>LGPL</license> <source>gst-plugins-good</source> <package>GStreamer Good Plug-ins source release</package> diff --git a/docs/plugins/inspect/plugin-matroska.xml b/docs/plugins/inspect/plugin-matroska.xml index 7f0591183..518d747c6 100644 --- a/docs/plugins/inspect/plugin-matroska.xml +++ b/docs/plugins/inspect/plugin-matroska.xml @@ -3,7 +3,7 @@ <description>Matroska and WebM stream handling</description> <filename>../../gst/matroska/.libs/libgstmatroska.so</filename> <basename>libgstmatroska.so</basename> - <version>1.5.1</version> + <version>1.5.2</version> <license>LGPL</license> <source>gst-plugins-good</source> <package>GStreamer Good Plug-ins source release</package> diff --git a/docs/plugins/inspect/plugin-mulaw.xml b/docs/plugins/inspect/plugin-mulaw.xml index 60aec9bee..a3fe10554 100644 --- a/docs/plugins/inspect/plugin-mulaw.xml +++ b/docs/plugins/inspect/plugin-mulaw.xml @@ -3,7 +3,7 @@ <description>MuLaw audio conversion routines</description> <filename>../../gst/law/.libs/libgstmulaw.so</filename> <basename>libgstmulaw.so</basename> - <version>1.5.1</version> + <version>1.5.2</version> <license>LGPL</license> <source>gst-plugins-good</source> <package>GStreamer Good Plug-ins source release</package> diff --git a/docs/plugins/inspect/plugin-multifile.xml b/docs/plugins/inspect/plugin-multifile.xml index acc028f98..19487953d 100644 --- a/docs/plugins/inspect/plugin-multifile.xml +++ b/docs/plugins/inspect/plugin-multifile.xml @@ -3,7 +3,7 @@ <description>Reads/Writes buffers from/to sequentially named files</description> <filename>../../gst/multifile/.libs/libgstmultifile.so</filename> <basename>libgstmultifile.so</basename> - <version>1.5.1</version> + <version>1.5.2</version> <license>LGPL</license> <source>gst-plugins-good</source> <package>GStreamer Good Plug-ins source release</package> diff --git a/docs/plugins/inspect/plugin-multipart.xml b/docs/plugins/inspect/plugin-multipart.xml index 8d6145dbe..c8dd4a2a1 100644 --- a/docs/plugins/inspect/plugin-multipart.xml +++ b/docs/plugins/inspect/plugin-multipart.xml @@ -3,7 +3,7 @@ <description>multipart stream manipulation</description> <filename>../../gst/multipart/.libs/libgstmultipart.so</filename> <basename>libgstmultipart.so</basename> - <version>1.5.1</version> + <version>1.5.2</version> <license>LGPL</license> <source>gst-plugins-good</source> <package>GStreamer Good Plug-ins source release</package> diff --git a/docs/plugins/inspect/plugin-navigationtest.xml b/docs/plugins/inspect/plugin-navigationtest.xml index 133fc3e75..46750e027 100644 --- a/docs/plugins/inspect/plugin-navigationtest.xml +++ b/docs/plugins/inspect/plugin-navigationtest.xml @@ -3,7 +3,7 @@ <description>Template for a video filter</description> <filename>../../gst/debugutils/.libs/libgstnavigationtest.so</filename> <basename>libgstnavigationtest.so</basename> - <version>1.5.1</version> + <version>1.5.2</version> <license>LGPL</license> <source>gst-plugins-good</source> <package>GStreamer Good Plug-ins source release</package> diff --git a/docs/plugins/inspect/plugin-oss4.xml b/docs/plugins/inspect/plugin-oss4.xml index 13a27817d..4767a3f8f 100644 --- a/docs/plugins/inspect/plugin-oss4.xml +++ b/docs/plugins/inspect/plugin-oss4.xml @@ -3,7 +3,7 @@ <description>Open Sound System (OSS) version 4 support for GStreamer</description> <filename>../../sys/oss4/.libs/libgstoss4audio.so</filename> <basename>libgstoss4audio.so</basename> - <version>1.5.1</version> + <version>1.5.2</version> <license>LGPL</license> <source>gst-plugins-good</source> <package>GStreamer Good Plug-ins source release</package> diff --git a/docs/plugins/inspect/plugin-ossaudio.xml b/docs/plugins/inspect/plugin-ossaudio.xml index 0ab71dcf7..fa263e009 100644 --- a/docs/plugins/inspect/plugin-ossaudio.xml +++ b/docs/plugins/inspect/plugin-ossaudio.xml @@ -3,7 +3,7 @@ <description>OSS (Open Sound System) support for GStreamer</description> <filename>../../sys/oss/.libs/libgstossaudio.so</filename> <basename>libgstossaudio.so</basename> - <version>1.5.1</version> + <version>1.5.2</version> <license>LGPL</license> <source>gst-plugins-good</source> <package>GStreamer Good Plug-ins source release</package> diff --git a/docs/plugins/inspect/plugin-png.xml b/docs/plugins/inspect/plugin-png.xml index 8084bb757..ea7864672 100644 --- a/docs/plugins/inspect/plugin-png.xml +++ b/docs/plugins/inspect/plugin-png.xml @@ -3,7 +3,7 @@ <description>PNG plugin library</description> <filename>../../ext/libpng/.libs/libgstpng.so</filename> <basename>libgstpng.so</basename> - <version>1.5.1</version> + <version>1.5.2</version> <license>LGPL</license> <source>gst-plugins-good</source> <package>GStreamer Good Plug-ins source release</package> diff --git a/docs/plugins/inspect/plugin-pulseaudio.xml b/docs/plugins/inspect/plugin-pulseaudio.xml index 784720a69..41f4595e5 100644 --- a/docs/plugins/inspect/plugin-pulseaudio.xml +++ b/docs/plugins/inspect/plugin-pulseaudio.xml @@ -3,7 +3,7 @@ <description>PulseAudio plugin library</description> <filename>../../ext/pulse/.libs/libgstpulse.so</filename> <basename>libgstpulse.so</basename> - <version>1.5.1</version> + <version>1.5.2</version> <license>LGPL</license> <source>gst-plugins-good</source> <package>GStreamer Good Plug-ins source release</package> diff --git a/docs/plugins/inspect/plugin-replaygain.xml b/docs/plugins/inspect/plugin-replaygain.xml index b0a9b35f0..f1fca6305 100644 --- a/docs/plugins/inspect/plugin-replaygain.xml +++ b/docs/plugins/inspect/plugin-replaygain.xml @@ -3,7 +3,7 @@ <description>ReplayGain volume normalization</description> <filename>../../gst/replaygain/.libs/libgstreplaygain.so</filename> <basename>libgstreplaygain.so</basename> - <version>1.5.1</version> + <version>1.5.2</version> <license>LGPL</license> <source>gst-plugins-good</source> <package>GStreamer Good Plug-ins source release</package> diff --git a/docs/plugins/inspect/plugin-rtp.xml b/docs/plugins/inspect/plugin-rtp.xml index 1ebd5442f..5ab964dd1 100644 --- a/docs/plugins/inspect/plugin-rtp.xml +++ b/docs/plugins/inspect/plugin-rtp.xml @@ -3,7 +3,7 @@ <description>Real-time protocol plugins</description> <filename>../../gst/rtp/.libs/libgstrtp.so</filename> <basename>libgstrtp.so</basename> - <version>1.5.1</version> + <version>1.5.2</version> <license>LGPL</license> <source>gst-plugins-good</source> <package>GStreamer Good Plug-ins source release</package> diff --git a/docs/plugins/inspect/plugin-rtpmanager.xml b/docs/plugins/inspect/plugin-rtpmanager.xml index 0d7aa02ec..f7a8c48a3 100644 --- a/docs/plugins/inspect/plugin-rtpmanager.xml +++ b/docs/plugins/inspect/plugin-rtpmanager.xml @@ -3,7 +3,7 @@ <description>RTP session management plugin library</description> <filename>../../gst/rtpmanager/.libs/libgstrtpmanager.so</filename> <basename>libgstrtpmanager.so</basename> - <version>1.5.1</version> + <version>1.5.2</version> <license>LGPL</license> <source>gst-plugins-good</source> <package>GStreamer Good Plug-ins source release</package> diff --git a/docs/plugins/inspect/plugin-rtsp.xml b/docs/plugins/inspect/plugin-rtsp.xml index a8ec61c48..94615e938 100644 --- a/docs/plugins/inspect/plugin-rtsp.xml +++ b/docs/plugins/inspect/plugin-rtsp.xml @@ -3,7 +3,7 @@ <description>transfer data via RTSP</description> <filename>../../gst/rtsp/.libs/libgstrtsp.so</filename> <basename>libgstrtsp.so</basename> - <version>1.5.1</version> + <version>1.5.2</version> <license>LGPL</license> <source>gst-plugins-good</source> <package>GStreamer Good Plug-ins source release</package> diff --git a/docs/plugins/inspect/plugin-shapewipe.xml b/docs/plugins/inspect/plugin-shapewipe.xml index c7b3a8fc7..d15c5ad8d 100644 --- a/docs/plugins/inspect/plugin-shapewipe.xml +++ b/docs/plugins/inspect/plugin-shapewipe.xml @@ -3,7 +3,7 @@ <description>Shape Wipe transition filter</description> <filename>../../gst/shapewipe/.libs/libgstshapewipe.so</filename> <basename>libgstshapewipe.so</basename> - <version>1.5.1</version> + <version>1.5.2</version> <license>LGPL</license> <source>gst-plugins-good</source> <package>GStreamer Good Plug-ins source release</package> diff --git a/docs/plugins/inspect/plugin-shout2send.xml b/docs/plugins/inspect/plugin-shout2send.xml index 7abf0cb56..d40320f2b 100644 --- a/docs/plugins/inspect/plugin-shout2send.xml +++ b/docs/plugins/inspect/plugin-shout2send.xml @@ -3,7 +3,7 @@ <description>Sends data to an icecast server using libshout2</description> <filename>../../ext/shout2/.libs/libgstshout2.so</filename> <basename>libgstshout2.so</basename> - <version>1.5.1</version> + <version>1.5.2</version> <license>LGPL</license> <source>gst-plugins-good</source> <package>libshout2</package> diff --git a/docs/plugins/inspect/plugin-smpte.xml b/docs/plugins/inspect/plugin-smpte.xml index 76577dff6..17f6fd79f 100644 --- a/docs/plugins/inspect/plugin-smpte.xml +++ b/docs/plugins/inspect/plugin-smpte.xml @@ -3,7 +3,7 @@ <description>Apply the standard SMPTE transitions on video images</description> <filename>../../gst/smpte/.libs/libgstsmpte.so</filename> <basename>libgstsmpte.so</basename> - <version>1.5.1</version> + <version>1.5.2</version> <license>LGPL</license> <source>gst-plugins-good</source> <package>GStreamer Good Plug-ins source release</package> diff --git a/docs/plugins/inspect/plugin-soup.xml b/docs/plugins/inspect/plugin-soup.xml index 835344088..403027882 100644 --- a/docs/plugins/inspect/plugin-soup.xml +++ b/docs/plugins/inspect/plugin-soup.xml @@ -3,7 +3,7 @@ <description>libsoup HTTP client src/sink</description> <filename>../../ext/soup/.libs/libgstsouphttpsrc.so</filename> <basename>libgstsouphttpsrc.so</basename> - <version>1.5.1</version> + <version>1.5.2</version> <license>LGPL</license> <source>gst-plugins-good</source> <package>GStreamer Good Plug-ins source release</package> diff --git a/docs/plugins/inspect/plugin-spectrum.xml b/docs/plugins/inspect/plugin-spectrum.xml index 1a8c97aa6..44e5a3b86 100644 --- a/docs/plugins/inspect/plugin-spectrum.xml +++ b/docs/plugins/inspect/plugin-spectrum.xml @@ -3,7 +3,7 @@ <description>Run an FFT on the audio signal, output spectrum data</description> <filename>../../gst/spectrum/.libs/libgstspectrum.so</filename> <basename>libgstspectrum.so</basename> - <version>1.5.1</version> + <version>1.5.2</version> <license>LGPL</license> <source>gst-plugins-good</source> <package>GStreamer Good Plug-ins source release</package> diff --git a/docs/plugins/inspect/plugin-speex.xml b/docs/plugins/inspect/plugin-speex.xml index 6fae5bc85..1fd09c8ac 100644 --- a/docs/plugins/inspect/plugin-speex.xml +++ b/docs/plugins/inspect/plugin-speex.xml @@ -3,7 +3,7 @@ <description>Speex plugin library</description> <filename>../../ext/speex/.libs/libgstspeex.so</filename> <basename>libgstspeex.so</basename> - <version>1.5.1</version> + <version>1.5.2</version> <license>LGPL</license> <source>gst-plugins-good</source> <package>GStreamer Good Plug-ins source release</package> diff --git a/docs/plugins/inspect/plugin-taglib.xml b/docs/plugins/inspect/plugin-taglib.xml index 263749931..d8648ba31 100644 --- a/docs/plugins/inspect/plugin-taglib.xml +++ b/docs/plugins/inspect/plugin-taglib.xml @@ -3,7 +3,7 @@ <description>Tag writing plug-in based on taglib</description> <filename>../../ext/taglib/.libs/libgsttaglib.so</filename> <basename>libgsttaglib.so</basename> - <version>1.5.1</version> + <version>1.5.2</version> <license>LGPL</license> <source>gst-plugins-good</source> <package>GStreamer Good Plug-ins source release</package> diff --git a/docs/plugins/inspect/plugin-udp.xml b/docs/plugins/inspect/plugin-udp.xml index 76515e9bc..9425901b4 100644 --- a/docs/plugins/inspect/plugin-udp.xml +++ b/docs/plugins/inspect/plugin-udp.xml @@ -3,7 +3,7 @@ <description>transfer data via UDP</description> <filename>../../gst/udp/.libs/libgstudp.so</filename> <basename>libgstudp.so</basename> - <version>1.5.1</version> + <version>1.5.2</version> <license>LGPL</license> <source>gst-plugins-good</source> <package>GStreamer Good Plug-ins source release</package> diff --git a/docs/plugins/inspect/plugin-video4linux2.xml b/docs/plugins/inspect/plugin-video4linux2.xml index 768e4d579..2a8e9989b 100644 --- a/docs/plugins/inspect/plugin-video4linux2.xml +++ b/docs/plugins/inspect/plugin-video4linux2.xml @@ -3,7 +3,7 @@ <description>elements for Video 4 Linux</description> <filename>../../sys/v4l2/.libs/libgstvideo4linux2.so</filename> <basename>libgstvideo4linux2.so</basename> - <version>1.5.1</version> + <version>1.5.2</version> <license>LGPL</license> <source>gst-plugins-good</source> <package>GStreamer Good Plug-ins source release</package> diff --git a/docs/plugins/inspect/plugin-videobox.xml b/docs/plugins/inspect/plugin-videobox.xml index ff2523ea9..cb0b98dd5 100644 --- a/docs/plugins/inspect/plugin-videobox.xml +++ b/docs/plugins/inspect/plugin-videobox.xml @@ -3,7 +3,7 @@ <description>resizes a video by adding borders or cropping</description> <filename>../../gst/videobox/.libs/libgstvideobox.so</filename> <basename>libgstvideobox.so</basename> - <version>1.5.1</version> + <version>1.5.2</version> <license>LGPL</license> <source>gst-plugins-good</source> <package>GStreamer Good Plug-ins source release</package> diff --git a/docs/plugins/inspect/plugin-videocrop.xml b/docs/plugins/inspect/plugin-videocrop.xml index 880646091..0336819f5 100644 --- a/docs/plugins/inspect/plugin-videocrop.xml +++ b/docs/plugins/inspect/plugin-videocrop.xml @@ -3,7 +3,7 @@ <description>Crops video into a user-defined region</description> <filename>../../gst/videocrop/.libs/libgstvideocrop.so</filename> <basename>libgstvideocrop.so</basename> - <version>1.5.1</version> + <version>1.5.2</version> <license>LGPL</license> <source>gst-plugins-good</source> <package>GStreamer Good Plug-ins source release</package> diff --git a/docs/plugins/inspect/plugin-videofilter.xml b/docs/plugins/inspect/plugin-videofilter.xml index ef18287dd..4a31828c2 100644 --- a/docs/plugins/inspect/plugin-videofilter.xml +++ b/docs/plugins/inspect/plugin-videofilter.xml @@ -3,7 +3,7 @@ <description>Video filters plugin</description> <filename>../../gst/videofilter/.libs/libgstvideofilter.so</filename> <basename>libgstvideofilter.so</basename> - <version>1.5.1</version> + <version>1.5.2</version> <license>LGPL</license> <source>gst-plugins-good</source> <package>GStreamer Good Plug-ins source release</package> diff --git a/docs/plugins/inspect/plugin-videomixer.xml b/docs/plugins/inspect/plugin-videomixer.xml index e42d6af28..6ae0b6a80 100644 --- a/docs/plugins/inspect/plugin-videomixer.xml +++ b/docs/plugins/inspect/plugin-videomixer.xml @@ -3,7 +3,7 @@ <description>Video mixer</description> <filename>../../gst/videomixer/.libs/libgstvideomixer.so</filename> <basename>libgstvideomixer.so</basename> - <version>1.5.1</version> + <version>1.5.2</version> <license>LGPL</license> <source>gst-plugins-good</source> <package>GStreamer Good Plug-ins source release</package> diff --git a/docs/plugins/inspect/plugin-vpx.xml b/docs/plugins/inspect/plugin-vpx.xml index 53169c196..ee372967d 100644 --- a/docs/plugins/inspect/plugin-vpx.xml +++ b/docs/plugins/inspect/plugin-vpx.xml @@ -3,7 +3,7 @@ <description>VP8 plugin</description> <filename>../../ext/vpx/.libs/libgstvpx.so</filename> <basename>libgstvpx.so</basename> - <version>1.5.1</version> + <version>1.5.2</version> <license>LGPL</license> <source>gst-plugins-good</source> <package>GStreamer Good Plug-ins source release</package> diff --git a/docs/plugins/inspect/plugin-wavenc.xml b/docs/plugins/inspect/plugin-wavenc.xml index ff0c25a02..715053f15 100644 --- a/docs/plugins/inspect/plugin-wavenc.xml +++ b/docs/plugins/inspect/plugin-wavenc.xml @@ -3,7 +3,7 @@ <description>Encode raw audio into WAV</description> <filename>../../gst/wavenc/.libs/libgstwavenc.so</filename> <basename>libgstwavenc.so</basename> - <version>1.5.1</version> + <version>1.5.2</version> <license>LGPL</license> <source>gst-plugins-good</source> <package>GStreamer Good Plug-ins source release</package> diff --git a/docs/plugins/inspect/plugin-wavpack.xml b/docs/plugins/inspect/plugin-wavpack.xml index 8bc233929..7ec8a8dfe 100644 --- a/docs/plugins/inspect/plugin-wavpack.xml +++ b/docs/plugins/inspect/plugin-wavpack.xml @@ -3,7 +3,7 @@ <description>Wavpack lossless/lossy audio format handling</description> <filename>../../ext/wavpack/.libs/libgstwavpack.so</filename> <basename>libgstwavpack.so</basename> - <version>1.5.1</version> + <version>1.5.2</version> <license>LGPL</license> <source>gst-plugins-good</source> <package>GStreamer Good Plug-ins source release</package> diff --git a/docs/plugins/inspect/plugin-wavparse.xml b/docs/plugins/inspect/plugin-wavparse.xml index b8da52903..3a126f93b 100644 --- a/docs/plugins/inspect/plugin-wavparse.xml +++ b/docs/plugins/inspect/plugin-wavparse.xml @@ -3,7 +3,7 @@ <description>Parse a .wav file into raw audio</description> <filename>../../gst/wavparse/.libs/libgstwavparse.so</filename> <basename>libgstwavparse.so</basename> - <version>1.5.1</version> + <version>1.5.2</version> <license>LGPL</license> <source>gst-plugins-good</source> <package>GStreamer Good Plug-ins source release</package> diff --git a/docs/plugins/inspect/plugin-ximagesrc.xml b/docs/plugins/inspect/plugin-ximagesrc.xml index 4822b5530..a3c8d3eb7 100644 --- a/docs/plugins/inspect/plugin-ximagesrc.xml +++ b/docs/plugins/inspect/plugin-ximagesrc.xml @@ -3,7 +3,7 @@ <description>X11 video input plugin using standard Xlib calls</description> <filename>../../sys/ximage/.libs/libgstximagesrc.so</filename> <basename>libgstximagesrc.so</basename> - <version>1.5.1</version> + <version>1.5.2</version> <license>LGPL</license> <source>gst-plugins-good</source> <package>GStreamer Good Plug-ins source release</package> diff --git a/docs/plugins/inspect/plugin-y4menc.xml b/docs/plugins/inspect/plugin-y4menc.xml index ee15eb789..58e25ff21 100644 --- a/docs/plugins/inspect/plugin-y4menc.xml +++ b/docs/plugins/inspect/plugin-y4menc.xml @@ -3,7 +3,7 @@ <description>Encodes a YUV frame into the yuv4mpeg format (mjpegtools)</description> <filename>../../gst/y4m/.libs/libgsty4menc.so</filename> <basename>libgsty4menc.so</basename> - <version>1.5.1</version> + <version>1.5.2</version> <license>LGPL</license> <source>gst-plugins-good</source> <package>GStreamer Good Plug-ins source release</package> diff --git a/ext/pulse/pulsesrc.c b/ext/pulse/pulsesrc.c index 682b92957..6658654ac 100644 --- a/ext/pulse/pulsesrc.c +++ b/ext/pulse/pulsesrc.c @@ -1501,7 +1501,20 @@ gst_pulsesrc_prepare (GstAudioSrc * asrc, GstAudioRingBufferSpec * spec) pa_operation_unref (o); - wanted.maxlength = -1; + /* There's a bit of a disconnect here between the audio ringbuffer and what + * PulseAudio provides. The audio ringbuffer provide a total of buffer_time + * worth of buffering, divided into segments of latency_time size. We're + * asking PulseAudio to provide a total latency of latency_time, which, with + * PA_STREAM_ADJUST_LATENCY, effectively sets itself up as a ringbuffer with + * one segment being the hardware buffer, and the other the software buffer. + * This segment size is returned as the fragsize. + * + * Since the two concepts don't map very well, what we do is keep segsize as + * it is (unless fragsize is even larger, in which case we use that). We'll + * get data from PulseAudio in smaller chunks than we want to pass on as an + * element, and we coalesce those chunks in the ringbuffer memory and pass it + * on in the expected chunk size. */ + wanted.maxlength = spec->segsize * spec->segtotal; wanted.tlength = -1; wanted.prebuf = 0; wanted.minreq = -1; @@ -1574,11 +1587,14 @@ gst_pulsesrc_prepare (GstAudioSrc * asrc, GstAudioRingBufferSpec * spec) GST_INFO_OBJECT (pulsesrc, "fragsize: %d (wanted %d)", actual->fragsize, wanted.fragsize); - if (actual->fragsize >= wanted.fragsize) { + if (actual->fragsize >= spec->segsize) { spec->segsize = actual->fragsize; } else { - spec->segsize = actual->fragsize * (wanted.fragsize / actual->fragsize); + /* fragsize is smaller than what we wanted, so let the read function + * coalesce the smaller chunks as they come in */ } + + /* Fix up the total ringbuffer size based on what we actually got */ spec->segtotal = actual->maxlength / spec->segsize; if (!pulsesrc->paused) { diff --git a/ext/soup/gstsouphttpsrc.c b/ext/soup/gstsouphttpsrc.c index 6b0731000..962ecb1c0 100644 --- a/ext/soup/gstsouphttpsrc.c +++ b/ext/soup/gstsouphttpsrc.c @@ -122,6 +122,7 @@ enum PROP_SSL_STRICT, PROP_SSL_CA_FILE, PROP_SSL_USE_SYSTEM_CA_FILE, + PROP_TLS_DATABASE, PROP_RETRIES }; @@ -133,6 +134,7 @@ enum #define DEFAULT_SSL_STRICT TRUE #define DEFAULT_SSL_CA_FILE NULL #define DEFAULT_SSL_USE_SYSTEM_CA_FILE TRUE +#define DEFAULT_TLS_DATABASE NULL #define DEFAULT_TIMEOUT 15 #define DEFAULT_RETRIES 3 @@ -335,6 +337,10 @@ gst_soup_http_src_class_init (GstSoupHTTPSrcClass * klass) * A SSL anchor CA file that should be used for checking certificates * instead of the system CA file. * + * If this property is non-%NULL, #GstSoupHTTPSrc::ssl-use-system-ca-file + * value will be ignored. + * + * Deprecated: Use #GstSoupHTTPSrc::tls-database property instead. * Since: 1.4 */ g_object_class_install_property (gobject_class, PROP_SSL_CA_FILE, @@ -346,7 +352,8 @@ gst_soup_http_src_class_init (GstSoupHTTPSrcClass * klass) * GstSoupHTTPSrc::ssl-use-system-ca-file: * * If set to %TRUE, souphttpsrc will use the system's CA file for - * checking certificates. + * checking certificates, unless #GstSoupHTTPSrc::ssl-ca-file or + * #GstSoupHTTPSrc::tls-database are non-%NULL. * * Since: 1.4 */ @@ -355,6 +362,22 @@ gst_soup_http_src_class_init (GstSoupHTTPSrcClass * klass) "Use system CA file", DEFAULT_SSL_USE_SYSTEM_CA_FILE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); + /** + * GstSoupHTTPSrc::tls-database: + * + * TLS database with anchor certificate authorities used to validate + * the server certificate. + * + * If this property is non-%NULL, #GstSoupHTTPSrc::ssl-use-system-ca-file + * and #GstSoupHTTPSrc::ssl-ca-file values will be ignored. + * + * Since: 1.6 + */ + g_object_class_install_property (gobject_class, PROP_TLS_DATABASE, + g_param_spec_object ("tls-database", "TLS database", + "TLS database with anchor certificate authorities used to validate the server certificate", + G_TYPE_TLS_DATABASE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); + /** * GstSoupHTTPSrc::retries: * @@ -446,6 +469,7 @@ gst_soup_http_src_init (GstSoupHTTPSrc * src) src->log_level = DEFAULT_SOUP_LOG_LEVEL; src->ssl_strict = DEFAULT_SSL_STRICT; src->ssl_use_system_ca_file = DEFAULT_SSL_USE_SYSTEM_CA_FILE; + src->tls_database = DEFAULT_TLS_DATABASE; src->max_retries = DEFAULT_RETRIES; proxy = g_getenv ("http_proxy"); if (proxy && !gst_soup_http_src_set_proxy (src, proxy)) { @@ -501,6 +525,9 @@ gst_soup_http_src_finalize (GObject * gobject) g_free (src->ssl_ca_file); + if (src->tls_database) + g_object_unref (src->tls_database); + G_OBJECT_CLASS (parent_class)->finalize (gobject); } @@ -613,6 +640,10 @@ gst_soup_http_src_set_property (GObject * object, guint prop_id, case PROP_SSL_USE_SYSTEM_CA_FILE: src->ssl_use_system_ca_file = g_value_get_boolean (value); break; + case PROP_TLS_DATABASE: + g_clear_object (&src->tls_database); + src->tls_database = g_value_dup_object (value); + break; case PROP_RETRIES: src->max_retries = g_value_get_int (value); break; @@ -693,7 +724,10 @@ gst_soup_http_src_get_property (GObject * object, guint prop_id, g_value_set_string (value, src->ssl_ca_file); break; case PROP_SSL_USE_SYSTEM_CA_FILE: - g_value_set_boolean (value, src->ssl_strict); + g_value_set_boolean (value, src->ssl_use_system_ca_file); + break; + case PROP_TLS_DATABASE: + g_value_set_object (value, src->tls_database); break; case PROP_RETRIES: g_value_set_int (value, src->max_retries); @@ -903,7 +937,9 @@ gst_soup_http_src_session_open (GstSoupHTTPSrc * src) /* Set up logging */ gst_soup_util_log_setup (src->session, src->log_level, GST_ELEMENT (src)); - if (src->ssl_ca_file) + if (src->tls_database) + g_object_set (src->session, "tls-database", src->tls_database, NULL); + else if (src->ssl_ca_file) g_object_set (src->session, "ssl-ca-file", src->ssl_ca_file, NULL); else g_object_set (src->session, "ssl-use-system-ca-file", diff --git a/ext/soup/gstsouphttpsrc.h b/ext/soup/gstsouphttpsrc.h index e31dfcf7d..163de3d4a 100644 --- a/ext/soup/gstsouphttpsrc.h +++ b/ext/soup/gstsouphttpsrc.h @@ -90,6 +90,7 @@ struct _GstSoupHTTPSrc { gboolean ssl_strict; gchar *ssl_ca_file; gboolean ssl_use_system_ca_file; + GTlsDatabase *tls_database; /* Shoutcast/icecast metadata extraction handling. */ gboolean iradio_mode; diff --git a/gst-plugins-good.doap b/gst-plugins-good.doap index 17c398eeb..a1b6e3c43 100644 --- a/gst-plugins-good.doap +++ b/gst-plugins-good.doap @@ -32,6 +32,16 @@ the plug-in code, LGPL or LGPL-compatible for the supporting library). </GitRepository> </repository> + <release> + <Version> + <revision>1.5.2</revision> + <branch>1.5</branch> + <name></name> + <created>2015-06-24</created> + <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-good/gst-plugins-good-1.5.2.tar.xz" /> + </Version> + </release> + <release> <Version> <revision>1.5.1</revision> diff --git a/gst-plugins-good.spec b/gst-plugins-good.spec index 7ce6fc0f5..546c999de 100644 --- a/gst-plugins-good.spec +++ b/gst-plugins-good.spec @@ -4,7 +4,7 @@ %define gst_minver 0.11.0 Name: %{gstreamer}-plugins-good -Version: 1.5.1 +Version: 1.5.2 Release: 1.gst Summary: GStreamer plug-ins with good code and licensing diff --git a/gst/audiofx/audiopanoramaorc-dist.c b/gst/audiofx/audiopanoramaorc-dist.c index 12d6aa0e8..3d5999a61 100644 --- a/gst/audiofx/audiopanoramaorc-dist.c +++ b/gst/audiofx/audiopanoramaorc-dist.c @@ -264,7 +264,7 @@ audiopanoramam_orc_process_s16_ch1_none (gint16 * ORC_RESTRICT d1, static const orc_uint8 bc[] = { 1, 9, 39, 97, 117, 100, 105, 111, 112, 97, 110, 111, 114, 97, 109, 97, 109, 95, 111, 114, 99, 95, 112, 114, 111, 99, 101, 115, 115, 95, 115, - 49, + 49, 54, 95, 99, 104, 49, 95, 110, 111, 110, 101, 11, 4, 4, 12, 2, 2, 195, 0, 4, 4, 2, 0, }; @@ -390,7 +390,7 @@ audiopanoramam_orc_process_f32_ch1_none (gfloat * ORC_RESTRICT d1, static const orc_uint8 bc[] = { 1, 9, 39, 97, 117, 100, 105, 111, 112, 97, 110, 111, 114, 97, 109, 97, 109, 95, 111, 114, 99, 95, 112, 114, 111, 99, 101, 115, 115, 95, 102, - 51, + 51, 50, 95, 99, 104, 49, 95, 110, 111, 110, 101, 11, 8, 8, 12, 4, 4, 194, 0, 4, 4, 2, 0, }; @@ -502,7 +502,7 @@ audiopanoramam_orc_process_s16_ch2_none (gint16 * ORC_RESTRICT d1, static const orc_uint8 bc[] = { 1, 9, 39, 97, 117, 100, 105, 111, 112, 97, 110, 111, 114, 97, 109, 97, 109, 95, 111, 114, 99, 95, 112, 114, 111, 99, 101, 115, 115, 95, 115, - 49, + 49, 54, 95, 99, 104, 50, 95, 110, 111, 110, 101, 11, 4, 4, 12, 4, 4, 21, 1, 79, 0, 4, 2, 0, }; @@ -614,7 +614,7 @@ audiopanoramam_orc_process_f32_ch2_none (gfloat * ORC_RESTRICT d1, static const orc_uint8 bc[] = { 1, 9, 39, 97, 117, 100, 105, 111, 112, 97, 110, 111, 114, 97, 109, 97, 109, 95, 111, 114, 99, 95, 112, 114, 111, 99, 101, 115, 115, 95, 102, - 51, + 51, 50, 95, 99, 104, 50, 95, 110, 111, 110, 101, 11, 8, 8, 12, 8, 8, 21, 1, 112, 0, 4, 2, 0, }; @@ -842,7 +842,7 @@ audiopanoramam_orc_process_s16_ch1_psy (gint16 * ORC_RESTRICT d1, static const orc_uint8 bc[] = { 1, 9, 38, 97, 117, 100, 105, 111, 112, 97, 110, 111, 114, 97, 109, 97, 109, 95, 111, 114, 99, 95, 112, 114, 111, 99, 101, 115, 115, 95, 115, - 49, + 49, 54, 95, 99, 104, 49, 95, 112, 115, 121, 11, 4, 4, 12, 2, 2, 17, 4, 17, 4, 20, 8, 20, 4, 20, 4, 153, 33, 4, 211, 33, 33, 202, 34, 33, 25, 202, 33, 33, 24, 194, 32, 33, 34, 21, 1, 210, 32, 32, @@ -1053,7 +1053,7 @@ audiopanoramam_orc_process_f32_ch1_psy (gfloat * ORC_RESTRICT d1, static const orc_uint8 bc[] = { 1, 9, 38, 97, 117, 100, 105, 111, 112, 97, 110, 111, 114, 97, 109, 97, 109, 95, 111, 114, 99, 95, 112, 114, 111, 99, 101, 115, 115, 95, 102, - 51, + 51, 50, 95, 99, 104, 49, 95, 112, 115, 121, 11, 8, 8, 12, 4, 4, 17, 4, 17, 4, 20, 4, 20, 4, 202, 33, 4, 25, 202, 32, 4, 24, 194, 0, 32, 33, 2, 0, @@ -1355,7 +1355,7 @@ audiopanoramam_orc_process_s16_ch2_psy_right (gint16 * ORC_RESTRICT d1, static const orc_uint8 bc[] = { 1, 9, 44, 97, 117, 100, 105, 111, 112, 97, 110, 111, 114, 97, 109, 97, 109, 95, 111, 114, 99, 95, 112, 114, 111, 99, 101, 115, 115, 95, 115, - 49, + 49, 54, 95, 99, 104, 50, 95, 112, 115, 121, 95, 114, 105, 103, 104, 116, 11, 4, 4, 12, 4, 4, 17, 4, 17, 4, 20, 8, 20, 4, 20, 4, 20, 4, 21, 1, 153, 32, 4, 21, 1, 211, 32, 32, 192, 33, 32, 193, 34, @@ -1675,7 +1675,7 @@ audiopanoramam_orc_process_s16_ch2_psy_left (gint16 * ORC_RESTRICT d1, static const orc_uint8 bc[] = { 1, 9, 43, 97, 117, 100, 105, 111, 112, 97, 110, 111, 114, 97, 109, 97, 109, 95, 111, 114, 99, 95, 112, 114, 111, 99, 101, 115, 115, 95, 115, - 49, + 49, 54, 95, 99, 104, 50, 95, 112, 115, 121, 95, 108, 101, 102, 116, 11, 4, 4, 12, 4, 4, 17, 4, 17, 4, 20, 8, 20, 4, 20, 4, 20, 4, 21, 1, 153, 32, 4, 21, 1, 211, 32, 32, 192, 33, 32, 193, 35, 32, @@ -1945,7 +1945,7 @@ audiopanoramam_orc_process_f32_ch2_psy_right (gfloat * ORC_RESTRICT d1, static const orc_uint8 bc[] = { 1, 9, 44, 97, 117, 100, 105, 111, 112, 97, 110, 111, 114, 97, 109, 97, 109, 95, 111, 114, 99, 95, 112, 114, 111, 99, 101, 115, 115, 95, 102, - 51, + 51, 50, 95, 99, 104, 50, 95, 112, 115, 121, 95, 114, 105, 103, 104, 116, 11, 8, 8, 12, 8, 8, 17, 4, 17, 4, 20, 4, 20, 4, 20, 4, 192, 32, 4, 193, 33, 4, 202, 34, 32, 25, 202, 32, 32, 24, 200, 33, 34, @@ -2205,7 +2205,7 @@ audiopanoramam_orc_process_f32_ch2_psy_left (gfloat * ORC_RESTRICT d1, static const orc_uint8 bc[] = { 1, 9, 43, 97, 117, 100, 105, 111, 112, 97, 110, 111, 114, 97, 109, 97, 109, 95, 111, 114, 99, 95, 112, 114, 111, 99, 101, 115, 115, 95, 102, - 51, + 51, 50, 95, 99, 104, 50, 95, 112, 115, 121, 95, 108, 101, 102, 116, 11, 8, 8, 12, 8, 8, 17, 4, 17, 4, 20, 4, 20, 4, 20, 4, 192, 32, 4, 193, 34, 4, 202, 33, 34, 24, 202, 34, 34, 25, 200, 32, 33, 32, @@ -2433,7 +2433,7 @@ audiopanoramam_orc_process_s16_ch1_sim_right (gint16 * ORC_RESTRICT d1, static const orc_uint8 bc[] = { 1, 9, 44, 97, 117, 100, 105, 111, 112, 97, 110, 111, 114, 97, 109, 97, 109, 95, 111, 114, 99, 95, 112, 114, 111, 99, 101, 115, 115, 95, 115, - 49, + 49, 54, 95, 99, 104, 49, 95, 115, 105, 109, 95, 114, 105, 103, 104, 116, 11, 4, 4, 12, 2, 2, 17, 4, 20, 8, 20, 4, 20, 4, 153, 33, 4, 211, 33, 33, 202, 34, 33, 24, 194, 32, 33, 34, 21, 1, 210, 32, 32, @@ -2655,7 +2655,7 @@ audiopanoramam_orc_process_s16_ch1_sim_left (gint16 * ORC_RESTRICT d1, static const orc_uint8 bc[] = { 1, 9, 43, 97, 117, 100, 105, 111, 112, 97, 110, 111, 114, 97, 109, 97, 109, 95, 111, 114, 99, 95, 112, 114, 111, 99, 101, 115, 115, 95, 115, - 49, + 49, 54, 95, 99, 104, 49, 95, 115, 105, 109, 95, 108, 101, 102, 116, 11, 4, 4, 12, 2, 2, 17, 4, 20, 8, 20, 4, 20, 4, 153, 34, 4, 211, 34, 34, 202, 33, 34, 24, 194, 32, 33, 34, 21, 1, 210, 32, 32, 21, @@ -2909,7 +2909,7 @@ audiopanoramam_orc_process_s16_ch2_sim_right (gint16 * ORC_RESTRICT d1, static const orc_uint8 bc[] = { 1, 9, 44, 97, 117, 100, 105, 111, 112, 97, 110, 111, 114, 97, 109, 97, 109, 95, 111, 114, 99, 95, 112, 114, 111, 99, 101, 115, 115, 95, 115, - 49, + 49, 54, 95, 99, 104, 50, 95, 115, 105, 109, 95, 114, 105, 103, 104, 116, 11, 4, 4, 12, 4, 4, 17, 4, 20, 8, 20, 4, 20, 4, 21, 1, 153, 32, 4, 21, 1, 211, 32, 32, 192, 33, 32, 193, 34, 32, 202, 34, 34, @@ -3168,7 +3168,7 @@ audiopanoramam_orc_process_s16_ch2_sim_left (gint16 * ORC_RESTRICT d1, static const orc_uint8 bc[] = { 1, 9, 43, 97, 117, 100, 105, 111, 112, 97, 110, 111, 114, 97, 109, 97, 109, 95, 111, 114, 99, 95, 112, 114, 111, 99, 101, 115, 115, 95, 115, - 49, + 49, 54, 95, 99, 104, 50, 95, 115, 105, 109, 95, 108, 101, 102, 116, 11, 4, 4, 12, 4, 4, 17, 4, 20, 8, 20, 4, 20, 4, 21, 1, 153, 32, 4, 21, 1, 211, 32, 32, 192, 33, 32, 193, 34, 32, 202, 33, 33, 24, @@ -3355,7 +3355,7 @@ audiopanoramam_orc_process_f32_ch1_sim_right (gfloat * ORC_RESTRICT d1, static const orc_uint8 bc[] = { 1, 9, 44, 97, 117, 100, 105, 111, 112, 97, 110, 111, 114, 97, 109, 97, 109, 95, 111, 114, 99, 95, 112, 114, 111, 99, 101, 115, 115, 95, 102, - 51, + 51, 50, 95, 99, 104, 49, 95, 115, 105, 109, 95, 114, 105, 103, 104, 116, 11, 8, 8, 12, 4, 4, 17, 4, 20, 4, 20, 4, 112, 32, 4, 202, 33, 4, 24, 194, 0, 32, 33, 2, 0, @@ -3529,7 +3529,7 @@ audiopanoramam_orc_process_f32_ch1_sim_left (gfloat * ORC_RESTRICT d1, static const orc_uint8 bc[] = { 1, 9, 43, 97, 117, 100, 105, 111, 112, 97, 110, 111, 114, 97, 109, 97, 109, 95, 111, 114, 99, 95, 112, 114, 111, 99, 101, 115, 115, 95, 102, - 51, + 51, 50, 95, 99, 104, 49, 95, 115, 105, 109, 95, 108, 101, 102, 116, 11, 8, 8, 12, 4, 4, 17, 4, 20, 4, 20, 4, 202, 32, 4, 24, 112, 33, 4, 194, 0, 32, 33, 2, 0, @@ -3725,7 +3725,7 @@ audiopanoramam_orc_process_f32_ch2_sim_right (gfloat * ORC_RESTRICT d1, static const orc_uint8 bc[] = { 1, 9, 44, 97, 117, 100, 105, 111, 112, 97, 110, 111, 114, 97, 109, 97, 109, 95, 111, 114, 99, 95, 112, 114, 111, 99, 101, 115, 115, 95, 102, - 51, + 51, 50, 95, 99, 104, 50, 95, 115, 105, 109, 95, 114, 105, 103, 104, 116, 11, 8, 8, 12, 8, 8, 17, 4, 20, 4, 20, 4, 192, 32, 4, 193, 33, 4, 202, 33, 33, 24, 194, 0, 32, 33, 2, 0, @@ -3923,7 +3923,7 @@ audiopanoramam_orc_process_f32_ch2_sim_left (gfloat * ORC_RESTRICT d1, static const orc_uint8 bc[] = { 1, 9, 43, 97, 117, 100, 105, 111, 112, 97, 110, 111, 114, 97, 109, 97, 109, 95, 111, 114, 99, 95, 112, 114, 111, 99, 101, 115, 115, 95, 102, - 51, + 51, 50, 95, 99, 104, 50, 95, 115, 105, 109, 95, 108, 101, 102, 116, 11, 8, 8, 12, 8, 8, 17, 4, 20, 4, 20, 4, 192, 32, 4, 193, 33, 4, 202, 32, 32, 24, 194, 0, 32, 33, 2, 0, diff --git a/gst/audioparsers/gstdcaparse.c b/gst/audioparsers/gstdcaparse.c index 4b1a6ea98..de7385665 100644 --- a/gst/audioparsers/gstdcaparse.c +++ b/gst/audioparsers/gstdcaparse.c @@ -324,7 +324,7 @@ gst_dca_parse_handle_frame (GstBaseParse * parse, gboolean parser_in_sync; gboolean terminator; guint32 sync = 0; - guint size, rate, chans, num_blocks, samples_per_block, depth; + guint size = 0, rate, chans, num_blocks, samples_per_block, depth; gint block_size; gint endianness; gint off = -1; diff --git a/gst/audioparsers/gstflacparse.c b/gst/audioparsers/gstflacparse.c index 93ff7bde4..154e133ce 100644 --- a/gst/audioparsers/gstflacparse.c +++ b/gst/audioparsers/gstflacparse.c @@ -366,6 +366,10 @@ gst_flac_parse_stop (GstBaseParse * parse) gst_toc_unref (flacparse->toc); flacparse->toc = NULL; } + if (flacparse->seektable) { + gst_buffer_unref (flacparse->seektable); + flacparse->seektable = NULL; + } g_list_foreach (flacparse->headers, (GFunc) gst_mini_object_unref, NULL); g_list_free (flacparse->headers); diff --git a/gst/audioparsers/gstmpegaudioparse.c b/gst/audioparsers/gstmpegaudioparse.c index 5372b39bd..88d31bfe4 100644 --- a/gst/audioparsers/gstmpegaudioparse.c +++ b/gst/audioparsers/gstmpegaudioparse.c @@ -606,7 +606,7 @@ gst_mpeg_audio_parse_handle_frame (GstBaseParse * parse, GstMpegAudioParse *mp3parse = GST_MPEG_AUDIO_PARSE (parse); GstBuffer *buf = frame->buffer; GstByteReader reader; - gint off, bpf; + gint off, bpf = 0; gboolean lost_sync, draining, valid, caps_change; guint32 header; guint bitrate, layer, rate, channels, version, mode, crc; diff --git a/gst/deinterlace/tvtime-dist.c b/gst/deinterlace/tvtime-dist.c index d92ce306f..9ac33461d 100644 --- a/gst/deinterlace/tvtime-dist.c +++ b/gst/deinterlace/tvtime-dist.c @@ -713,7 +713,7 @@ deinterlace_line_linear_blend (guint8 * ORC_RESTRICT d1, static const orc_uint8 bc[] = { 1, 9, 29, 100, 101, 105, 110, 116, 101, 114, 108, 97, 99, 101, 95, 108, 105, 110, 101, 95, 108, 105, 110, 101, 97, 114, 95, 98, 108, 101, 110, - 100, + 100, 11, 1, 1, 12, 1, 1, 12, 1, 1, 12, 1, 1, 14, 2, 2, 0, 0, 0, 20, 2, 20, 2, 20, 2, 150, 32, 4, 150, 33, 5, 150, 34, 6, 70, 32, 32, 33, 70, 34, 34, 34, 70, 32, 32, 34, 70, 32, 32, diff --git a/gst/flv/gstflvdemux.c b/gst/flv/gstflvdemux.c index afa1490b3..3658844a4 100644 --- a/gst/flv/gstflvdemux.c +++ b/gst/flv/gstflvdemux.c @@ -944,18 +944,16 @@ gst_flv_demux_parse_tag_audio (GstFlvDemux * demux, GstBuffer * buffer) GST_LOG_OBJECT (demux, "parsing an audio tag"); - if G_UNLIKELY - (!demux->audio_pad && demux->no_more_pads) { + if (G_UNLIKELY (!demux->audio_pad && demux->no_more_pads)) { #ifndef GST_DISABLE_DEBUG - if G_UNLIKELY - (!demux->no_audio_warned) { + if (G_UNLIKELY (!demux->no_audio_warned)) { GST_WARNING_OBJECT (demux, "Signaled no-more-pads already but had no audio pad -- ignoring"); demux->no_audio_warned = TRUE; - } + } #endif return GST_FLOW_OK; - } + } g_return_val_if_fail (gst_buffer_get_size (buffer) == demux->tag_size, GST_FLOW_ERROR); diff --git a/gst/flv/gstflvmux.c b/gst/flv/gstflvmux.c index 7a5a9e57c..6694caf5e 100644 --- a/gst/flv/gstflvmux.c +++ b/gst/flv/gstflvmux.c @@ -253,7 +253,7 @@ gst_flv_mux_reset (GstElement * element) mux->have_audio = mux->have_video = FALSE; mux->duration = GST_CLOCK_TIME_NONE; mux->new_tags = FALSE; - mux->first_timestamp = GST_CLOCK_TIME_NONE; + mux->first_timestamp = GST_CLOCK_STIME_NONE; mux->state = GST_FLV_MUX_STATE_HEADER; @@ -531,6 +531,8 @@ gst_flv_mux_reset_pad (GstFlvMux * mux, GstFlvPad * cpad, gboolean video) cpad->video_codec_data = NULL; cpad->video_codec = G_MAXUINT; cpad->last_timestamp = 0; + cpad->pts = GST_CLOCK_STIME_NONE; + cpad->dts = GST_CLOCK_STIME_NONE; } static GstPad * @@ -1003,37 +1005,35 @@ gst_flv_mux_buffer_to_tag_internal (GstFlvMux * mux, GstBuffer * buffer, GstMapInfo map; guint size; guint32 pts, dts, cts; - guint8 *data, *bdata; - gsize bsize; + guint8 *data, *bdata = NULL; + gsize bsize = 0; - if (GST_BUFFER_DTS_IS_VALID (buffer)) - dts = GST_BUFFER_DTS (buffer) / GST_MSECOND; - else if (GST_BUFFER_PTS_IS_VALID (buffer)) - dts = GST_BUFFER_PTS (buffer) / GST_MSECOND; - else - dts = cpad->last_timestamp / GST_MSECOND; - - if (GST_BUFFER_PTS_IS_VALID (buffer)) - pts = GST_BUFFER_PTS (buffer) / GST_MSECOND; - else - pts = dts; + if (!GST_CLOCK_STIME_IS_VALID (cpad->dts)) { + pts = dts = cpad->last_timestamp / GST_MSECOND; + } else { + pts = cpad->pts / GST_MSECOND; + dts = cpad->dts / GST_MSECOND; + } + /* Be safe in case TS are buggy */ if (pts > dts) cts = pts - dts; else cts = 0; /* Timestamp must start at zero */ - if (GST_CLOCK_TIME_IS_VALID (mux->first_timestamp)) { + if (GST_CLOCK_STIME_IS_VALID (mux->first_timestamp)) { dts -= mux->first_timestamp / GST_MSECOND; pts = dts + cts; } GST_LOG_OBJECT (mux, "got pts %i dts %i cts %i\n", pts, dts, cts); - gst_buffer_map (buffer, &map, GST_MAP_READ); - bdata = map.data; - bsize = map.size; + if (buffer != NULL) { + gst_buffer_map (buffer, &map, GST_MAP_READ); + bdata = map.data; + bsize = map.size; + } size = 11; if (cpad->video) { @@ -1066,7 +1066,7 @@ gst_flv_mux_buffer_to_tag_internal (GstFlvMux * mux, GstBuffer * buffer, data[8] = data[9] = data[10] = 0; if (cpad->video) { - if (GST_BUFFER_FLAG_IS_SET (buffer, GST_BUFFER_FLAG_DELTA_UNIT)) + if (buffer && GST_BUFFER_FLAG_IS_SET (buffer, GST_BUFFER_FLAG_DELTA_UNIT)) data[11] |= 2 << 4; else data[11] |= 1 << 4; @@ -1077,6 +1077,10 @@ gst_flv_mux_buffer_to_tag_internal (GstFlvMux * mux, GstBuffer * buffer, if (is_codec_data) { data[12] = 0; GST_WRITE_UINT24_BE (data + 13, 0); + } else if (bsize == 0) { + /* AVC end of sequence */ + data[12] = 2; + GST_WRITE_UINT24_BE (data + 13, 0); } else { /* ACV NALU */ data[12] = 1; @@ -1101,24 +1105,29 @@ gst_flv_mux_buffer_to_tag_internal (GstFlvMux * mux, GstBuffer * buffer, } } - gst_buffer_unmap (buffer, &map); + if (buffer) + gst_buffer_unmap (buffer, &map); GST_WRITE_UINT32_BE (data + size - 4, size - 4); GST_BUFFER_PTS (tag) = GST_CLOCK_TIME_NONE; GST_BUFFER_DTS (tag) = GST_CLOCK_TIME_NONE; GST_BUFFER_DURATION (tag) = GST_CLOCK_TIME_NONE; - GST_BUFFER_OFFSET (tag) = GST_BUFFER_OFFSET (buffer); - GST_BUFFER_OFFSET_END (tag) = GST_BUFFER_OFFSET_END (buffer); - /* mark the buffer if it's an audio buffer and there's also video being muxed - * or it's a video interframe */ - if ((mux->have_video && !cpad->video) || - GST_BUFFER_FLAG_IS_SET (buffer, GST_BUFFER_FLAG_DELTA_UNIT)) - GST_BUFFER_FLAG_SET (tag, GST_BUFFER_FLAG_DELTA_UNIT); + if (buffer) { + GST_BUFFER_OFFSET (tag) = GST_BUFFER_OFFSET (buffer); + GST_BUFFER_OFFSET_END (tag) = GST_BUFFER_OFFSET_END (buffer); - GST_BUFFER_OFFSET (tag) = GST_BUFFER_OFFSET_END (tag) = - GST_BUFFER_OFFSET_NONE; + /* mark the buffer if it's an audio buffer and there's also video being muxed + * or it's a video interframe */ + if ((mux->have_video && !cpad->video) || + GST_BUFFER_FLAG_IS_SET (buffer, GST_BUFFER_FLAG_DELTA_UNIT)) + GST_BUFFER_FLAG_SET (tag, GST_BUFFER_FLAG_DELTA_UNIT); + } else { + GST_BUFFER_FLAG_SET (tag, GST_BUFFER_FLAG_DELTA_UNIT); + GST_BUFFER_OFFSET (tag) = GST_BUFFER_OFFSET_END (tag) = + GST_BUFFER_OFFSET_NONE; + } return tag; } @@ -1137,6 +1146,12 @@ gst_flv_mux_codec_data_buffer_to_tag (GstFlvMux * mux, GstBuffer * buffer, return gst_flv_mux_buffer_to_tag_internal (mux, buffer, cpad, TRUE); } +static inline GstBuffer * +gst_flv_mux_eos_to_tag (GstFlvMux * mux, GstFlvPad * cpad) +{ + return gst_flv_mux_buffer_to_tag_internal (mux, NULL, cpad, FALSE); +} + static void gst_flv_mux_put_buffer_in_streamheader (GValue * streamheader, GstBuffer * buffer) @@ -1346,6 +1361,29 @@ gst_flv_mux_determine_duration (GstFlvMux * mux) return duration; } +static GstFlowReturn +gst_flv_mux_write_eos (GstFlvMux * mux) +{ + GstBuffer *tag; + GstFlvPad *video_pad = NULL; + GSList *l = mux->collect->data; + + if (!mux->have_video) + return GST_FLOW_OK; + + for (; l; l = l->next) { + GstFlvPad *cpad = l->data; + if (cpad && cpad->video) { + video_pad = cpad; + break; + } + } + + tag = gst_flv_mux_eos_to_tag (mux, video_pad); + + return gst_flv_mux_push (mux, tag); +} + static GstFlowReturn gst_flv_mux_rewrite_header (GstFlvMux * mux) { @@ -1490,7 +1528,7 @@ gst_flv_mux_handle_buffer (GstCollectPads * pads, GstCollectData * cdata, { GstFlvMux *mux = GST_FLV_MUX (user_data); GstFlvPad *best; - GstClockTime best_time; + gint64 best_time = GST_CLOCK_STIME_NONE; GstFlowReturn ret; if (mux->state == GST_FLV_MUX_STATE_HEADER) { @@ -1505,8 +1543,8 @@ gst_flv_mux_handle_buffer (GstCollectPads * pads, GstCollectData * cdata, return ret; mux->state = GST_FLV_MUX_STATE_DATA; - if (GST_BUFFER_DTS_IS_VALID (buffer)) - mux->first_timestamp = GST_BUFFER_DTS (buffer); + if (GST_COLLECT_PADS_DTS_IS_VALID (cdata)) + mux->first_timestamp = GST_COLLECT_PADS_DTS (cdata); else mux->first_timestamp = 0; } @@ -1521,15 +1559,27 @@ gst_flv_mux_handle_buffer (GstCollectPads * pads, GstCollectData * cdata, best = (GstFlvPad *) cdata; if (best) { g_assert (buffer); - best_time = GST_BUFFER_DTS (buffer); + best->dts = GST_COLLECT_PADS_DTS (cdata); + + if (GST_CLOCK_STIME_IS_VALID (best->dts)) + best_time = best->dts - mux->first_timestamp; + + if (GST_BUFFER_PTS_IS_VALID (buffer)) + best->pts = GST_BUFFER_PTS (buffer); + else + best->pts = best->dts; + + GST_LOG_OBJECT (mux, "got buffer PTS %" GST_TIME_FORMAT " DTS %" + GST_STIME_FORMAT "\n", GST_TIME_ARGS (best->pts), + GST_STIME_ARGS (best->dts)); } else { - best_time = GST_CLOCK_TIME_NONE; + best_time = GST_CLOCK_STIME_NONE; } /* The FLV timestamp is an int32 field. For non-live streams error out if a bigger timestamp is seen, for live the timestamp will get wrapped in gst_flv_mux_buffer_to_tag */ - if (!mux->streamable && GST_CLOCK_TIME_IS_VALID (best_time) + if (!mux->streamable && (GST_CLOCK_STIME_IS_VALID (best_time)) && best_time / GST_MSECOND > G_MAXINT32) { GST_WARNING_OBJECT (mux, "Timestamp larger than FLV supports - EOS"); gst_buffer_unref (buffer); @@ -1540,6 +1590,8 @@ gst_flv_mux_handle_buffer (GstCollectPads * pads, GstCollectData * cdata, if (best) { return gst_flv_mux_write_buffer (mux, best, buffer); } else { + /* FIXME check return values */ + gst_flv_mux_write_eos (mux); gst_flv_mux_rewrite_header (mux); gst_pad_push_event (mux->srcpad, gst_event_new_eos ()); return GST_FLOW_EOS; diff --git a/gst/flv/gstflvmux.h b/gst/flv/gstflvmux.h index c08c5dec7..a87afcb61 100644 --- a/gst/flv/gstflvmux.h +++ b/gst/flv/gstflvmux.h @@ -53,6 +53,8 @@ typedef struct GstBuffer *video_codec_data; GstClockTime last_timestamp; + gint64 pts; + gint64 dts; } GstFlvPad; typedef enum @@ -78,7 +80,7 @@ typedef struct _GstFlvMux { GList *index; guint64 byte_count; guint64 duration; - GstClockTime first_timestamp; + gint64 first_timestamp; } GstFlvMux; typedef struct _GstFlvMuxClass { diff --git a/gst/goom/goom_core.c b/gst/goom/goom_core.c index 6f6597ff5..90b8c6fb3 100644 --- a/gst/goom/goom_core.c +++ b/gst/goom/goom_core.c @@ -847,6 +847,9 @@ choose_a_goom_line (PluginInfo * goomInfo, float *param1, float *param2, *amplitude = 1.5f; } break; + default: + *param1 = *param2 = 0; + break; } *couleur = goom_irand (goomInfo->gRandom, 6); diff --git a/gst/goom/gstaudiovisualizer.c b/gst/goom/gstaudiovisualizer.c index 1abccbec0..3e8f3c3ef 100644 --- a/gst/goom/gstaudiovisualizer.c +++ b/gst/goom/gstaudiovisualizer.c @@ -2,7 +2,7 @@ * Copyright (C) <2011> Stefan Kost <ensonic@users.sf.net> * Copyright (C) <2015> Luis de Bethencourt <luis@debethencourt.com> * - * gstaudiovisualizer.h: class for audio visualisation elements + * gstaudiovisualizer.c: class for audio visualisation elements * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -63,7 +63,7 @@ static void gst_audio_visualizer_set_property (GObject * object, guint prop_id, const GValue * value, GParamSpec * pspec); static void gst_audio_visualizer_get_property (GObject * object, guint prop_id, GValue * value, GParamSpec * pspec); -static void gst_audio_visualizer_dispose (GObject * object); +static void gst_audio_visualizer_finalize (GObject * object); static gboolean gst_audio_visualizer_src_negotiate (GstAudioVisualizer * scope); static gboolean gst_audio_visualizer_src_setcaps (GstAudioVisualizer * @@ -199,9 +199,10 @@ shader_fade (GstAudioVisualizer * scope, const GstVideoFrame * sframe, GstVideoFrame * dframe) { guint i, j; - guint r = (scope->priv->shade_amount >> 16) & 0xff; - guint g = (scope->priv->shade_amount >> 8) & 0xff; - guint b = (scope->priv->shade_amount >> 0) & 0xff; + guint32 shade_amount = scope->priv->shade_amount; + guint r = (shade_amount >> 16) & 0xff; + guint g = (shade_amount >> 8) & 0xff; + guint b = (shade_amount >> 0) & 0xff; guint8 *s, *d; gint ss, ds, width, height; @@ -227,9 +228,10 @@ shader_fade_and_move_up (GstAudioVisualizer * scope, const GstVideoFrame * sframe, GstVideoFrame * dframe) { guint i, j; - guint r = (scope->priv->shade_amount >> 16) & 0xff; - guint g = (scope->priv->shade_amount >> 8) & 0xff; - guint b = (scope->priv->shade_amount >> 0) & 0xff; + guint32 shade_amount = scope->priv->shade_amount; + guint r = (shade_amount >> 16) & 0xff; + guint g = (shade_amount >> 8) & 0xff; + guint b = (shade_amount >> 0) & 0xff; guint8 *s, *d; gint ss, ds, width, height; @@ -255,9 +257,10 @@ shader_fade_and_move_down (GstAudioVisualizer * scope, const GstVideoFrame * sframe, GstVideoFrame * dframe) { guint i, j; - guint r = (scope->priv->shade_amount >> 16) & 0xff; - guint g = (scope->priv->shade_amount >> 8) & 0xff; - guint b = (scope->priv->shade_amount >> 0) & 0xff; + guint32 shade_amount = scope->priv->shade_amount; + guint r = (shade_amount >> 16) & 0xff; + guint g = (shade_amount >> 8) & 0xff; + guint b = (shade_amount >> 0) & 0xff; guint8 *s, *d; gint ss, ds, width, height; @@ -283,9 +286,10 @@ shader_fade_and_move_left (GstAudioVisualizer * scope, const GstVideoFrame * sframe, GstVideoFrame * dframe) { guint i, j; - guint r = (scope->priv->shade_amount >> 16) & 0xff; - guint g = (scope->priv->shade_amount >> 8) & 0xff; - guint b = (scope->priv->shade_amount >> 0) & 0xff; + guint32 shade_amount = scope->priv->shade_amount; + guint r = (shade_amount >> 16) & 0xff; + guint g = (shade_amount >> 8) & 0xff; + guint b = (shade_amount >> 0) & 0xff; guint8 *s, *d; gint ss, ds, width, height; @@ -315,9 +319,10 @@ shader_fade_and_move_right (GstAudioVisualizer * scope, const GstVideoFrame * sframe, GstVideoFrame * dframe) { guint i, j; - guint r = (scope->priv->shade_amount >> 16) & 0xff; - guint g = (scope->priv->shade_amount >> 8) & 0xff; - guint b = (scope->priv->shade_amount >> 0) & 0xff; + guint32 shade_amount = scope->priv->shade_amount; + guint r = (shade_amount >> 16) & 0xff; + guint g = (shade_amount >> 8) & 0xff; + guint b = (shade_amount >> 0) & 0xff; guint8 *s, *d; gint ss, ds, width, height; @@ -347,9 +352,10 @@ shader_fade_and_move_horiz_out (GstAudioVisualizer * scope, const GstVideoFrame * sframe, GstVideoFrame * dframe) { guint i, j; - guint r = (scope->priv->shade_amount >> 16) & 0xff; - guint g = (scope->priv->shade_amount >> 8) & 0xff; - guint b = (scope->priv->shade_amount >> 0) & 0xff; + guint32 shade_amount = scope->priv->shade_amount; + guint r = (shade_amount >> 16) & 0xff; + guint g = (shade_amount >> 8) & 0xff; + guint b = (shade_amount >> 0) & 0xff; guint8 *s, *d; gint ss, ds, width, height; @@ -384,9 +390,10 @@ shader_fade_and_move_horiz_in (GstAudioVisualizer * scope, const GstVideoFrame * sframe, GstVideoFrame * dframe) { guint i, j; - guint r = (scope->priv->shade_amount >> 16) & 0xff; - guint g = (scope->priv->shade_amount >> 8) & 0xff; - guint b = (scope->priv->shade_amount >> 0) & 0xff; + guint32 shade_amount = scope->priv->shade_amount; + guint r = (shade_amount >> 16) & 0xff; + guint g = (shade_amount >> 8) & 0xff; + guint b = (shade_amount >> 0) & 0xff; guint8 *s, *d; gint ss, ds, width, height; @@ -421,9 +428,10 @@ shader_fade_and_move_vert_out (GstAudioVisualizer * scope, const GstVideoFrame * sframe, GstVideoFrame * dframe) { guint i, j; - guint r = (scope->priv->shade_amount >> 16) & 0xff; - guint g = (scope->priv->shade_amount >> 8) & 0xff; - guint b = (scope->priv->shade_amount >> 0) & 0xff; + guint32 shade_amount = scope->priv->shade_amount; + guint r = (shade_amount >> 16) & 0xff; + guint g = (shade_amount >> 8) & 0xff; + guint b = (shade_amount >> 0) & 0xff; guint8 *s, *s1, *d, *d1; gint ss, ds, width, height; @@ -456,9 +464,10 @@ shader_fade_and_move_vert_in (GstAudioVisualizer * scope, const GstVideoFrame * sframe, GstVideoFrame * dframe) { guint i, j; - guint r = (scope->priv->shade_amount >> 16) & 0xff; - guint g = (scope->priv->shade_amount >> 8) & 0xff; - guint b = (scope->priv->shade_amount >> 0) & 0xff; + guint32 shade_amount = scope->priv->shade_amount; + guint r = (shade_amount >> 16) & 0xff; + guint g = (shade_amount >> 8) & 0xff; + guint b = (shade_amount >> 0) & 0xff; guint8 *s, *s1, *d, *d1; gint ss, ds, width, height; @@ -489,42 +498,46 @@ shader_fade_and_move_vert_in (GstAudioVisualizer * scope, static void gst_audio_visualizer_change_shader (GstAudioVisualizer * scope) { + GstAudioVisualizerShaderFunc shader; + switch (scope->priv->shader_type) { case GST_AUDIO_VISUALIZER_SHADER_NONE: - scope->priv->shader = NULL; + shader = NULL; break; case GST_AUDIO_VISUALIZER_SHADER_FADE: - scope->priv->shader = shader_fade; + shader = shader_fade; break; case GST_AUDIO_VISUALIZER_SHADER_FADE_AND_MOVE_UP: - scope->priv->shader = shader_fade_and_move_up; + shader = shader_fade_and_move_up; break; case GST_AUDIO_VISUALIZER_SHADER_FADE_AND_MOVE_DOWN: - scope->priv->shader = shader_fade_and_move_down; + shader = shader_fade_and_move_down; break; case GST_AUDIO_VISUALIZER_SHADER_FADE_AND_MOVE_LEFT: - scope->priv->shader = shader_fade_and_move_left; + shader = shader_fade_and_move_left; break; case GST_AUDIO_VISUALIZER_SHADER_FADE_AND_MOVE_RIGHT: - scope->priv->shader = shader_fade_and_move_right; + shader = shader_fade_and_move_right; break; case GST_AUDIO_VISUALIZER_SHADER_FADE_AND_MOVE_HORIZ_OUT: - scope->priv->shader = shader_fade_and_move_horiz_out; + shader = shader_fade_and_move_horiz_out; break; case GST_AUDIO_VISUALIZER_SHADER_FADE_AND_MOVE_HORIZ_IN: - scope->priv->shader = shader_fade_and_move_horiz_in; + shader = shader_fade_and_move_horiz_in; break; case GST_AUDIO_VISUALIZER_SHADER_FADE_AND_MOVE_VERT_OUT: - scope->priv->shader = shader_fade_and_move_vert_out; + shader = shader_fade_and_move_vert_out; break; case GST_AUDIO_VISUALIZER_SHADER_FADE_AND_MOVE_VERT_IN: - scope->priv->shader = shader_fade_and_move_vert_in; + shader = shader_fade_and_move_vert_in; break; default: GST_ERROR ("invalid shader function"); - scope->priv->shader = NULL; + shader = NULL; break; } + + scope->priv->shader = shader; } /* class */ @@ -550,7 +563,7 @@ gst_audio_visualizer_get_type (void) /* TODO: rename when exporting it as a library */ _type = g_type_register_static (GST_TYPE_ELEMENT, - "GstAudioVisualizer-ExtGom", &audio_visualizer_info, + "GstAudioVisualizer-ExtGoom", &audio_visualizer_info, G_TYPE_FLAG_ABSTRACT); g_once_init_leave (&audio_visualizer_type, _type); } @@ -572,7 +585,7 @@ gst_audio_visualizer_class_init (GstAudioVisualizerClass * klass) gobject_class->set_property = gst_audio_visualizer_set_property; gobject_class->get_property = gst_audio_visualizer_get_property; - gobject_class->dispose = gst_audio_visualizer_dispose; + gobject_class->finalize = gst_audio_visualizer_finalize; element_class->change_state = GST_DEBUG_FUNCPTR (gst_audio_visualizer_change_state); @@ -679,41 +692,43 @@ gst_audio_visualizer_get_property (GObject * object, guint prop_id, } static void -gst_audio_visualizer_dispose (GObject * object) +gst_audio_visualizer_finalize (GObject * object) { GstAudioVisualizer *scope = GST_AUDIO_VISUALIZER (object); + GstAudioVisualizerPrivate *priv = scope->priv; - if (scope->priv->adapter) { - g_object_unref (scope->priv->adapter); - scope->priv->adapter = NULL; + if (priv->adapter) { + g_object_unref (priv->adapter); + priv->adapter = NULL; } - if (scope->priv->inbuf) { - gst_buffer_unref (scope->priv->inbuf); - scope->priv->inbuf = NULL; + if (priv->inbuf) { + gst_buffer_unref (priv->inbuf); + priv->inbuf = NULL; } - if (scope->priv->tempbuf) { - gst_video_frame_unmap (&scope->priv->tempframe); - gst_buffer_unref (scope->priv->tempbuf); - scope->priv->tempbuf = NULL; + if (priv->tempbuf) { + gst_video_frame_unmap (&priv->tempframe); + gst_buffer_unref (priv->tempbuf); + priv->tempbuf = NULL; } - if (scope->priv->config_lock.p) { - g_mutex_clear (&scope->priv->config_lock); - scope->priv->config_lock.p = NULL; - } - G_OBJECT_CLASS (parent_class)->dispose (object); + + g_mutex_clear (&priv->config_lock); + + G_OBJECT_CLASS (parent_class)->finalize (object); } static void gst_audio_visualizer_reset (GstAudioVisualizer * scope) { - gst_adapter_clear (scope->priv->adapter); - gst_segment_init (&scope->priv->segment, GST_FORMAT_UNDEFINED); + GstAudioVisualizerPrivate *priv = scope->priv; + + gst_adapter_clear (priv->adapter); + gst_segment_init (&priv->segment, GST_FORMAT_UNDEFINED); GST_OBJECT_LOCK (scope); - scope->priv->proportion = 1.0; - scope->priv->earliest_time = -1; - scope->priv->dropped = 0; - scope->priv->processed = 0; + priv->proportion = 1.0; + priv->earliest_time = -1; + priv->dropped = 0; + priv->processed = 0; GST_OBJECT_UNLOCK (scope); } @@ -754,6 +769,7 @@ gst_audio_visualizer_src_setcaps (GstAudioVisualizer * scope, GstCaps * caps) { GstVideoInfo info; GstAudioVisualizerClass *klass; + GstAudioVisualizerPrivate *priv; gboolean res; if (!gst_video_info_from_caps (&info, caps)) @@ -761,23 +777,24 @@ gst_audio_visualizer_src_setcaps (GstAudioVisualizer * scope, GstCaps * caps) klass = GST_AUDIO_VISUALIZER_CLASS (G_OBJECT_GET_CLASS (scope)); + priv = scope->priv; + scope->vinfo = info; - scope->priv->frame_duration = gst_util_uint64_scale_int (GST_SECOND, + priv->frame_duration = gst_util_uint64_scale_int (GST_SECOND, GST_VIDEO_INFO_FPS_D (&info), GST_VIDEO_INFO_FPS_N (&info)); - scope->priv->spf = - gst_util_uint64_scale_int (GST_AUDIO_INFO_RATE (&scope->ainfo), + priv->spf = gst_util_uint64_scale_int (GST_AUDIO_INFO_RATE (&scope->ainfo), GST_VIDEO_INFO_FPS_D (&info), GST_VIDEO_INFO_FPS_N (&info)); - scope->req_spf = scope->priv->spf; + scope->req_spf = priv->spf; - if (scope->priv->tempbuf) { - gst_video_frame_unmap (&scope->priv->tempframe); - gst_buffer_unref (scope->priv->tempbuf); + if (priv->tempbuf) { + gst_video_frame_unmap (&priv->tempframe); + gst_buffer_unref (priv->tempbuf); } - scope->priv->tempbuf = gst_buffer_new_wrapped (g_malloc0 (scope->vinfo.size), + priv->tempbuf = gst_buffer_new_wrapped (g_malloc0 (scope->vinfo.size), scope->vinfo.size); - gst_video_frame_map (&scope->priv->tempframe, &scope->vinfo, - scope->priv->tempbuf, GST_MAP_READWRITE); + gst_video_frame_map (&priv->tempframe, &scope->vinfo, priv->tempbuf, + GST_MAP_READWRITE); if (klass->setup && !klass->setup (scope)) goto setup_failed; @@ -785,10 +802,10 @@ gst_audio_visualizer_src_setcaps (GstAudioVisualizer * scope, GstCaps * caps) GST_DEBUG_OBJECT (scope, "video: dimension %dx%d, framerate %d/%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->priv->spf, scope->req_spf); + GST_DEBUG_OBJECT (scope, "blocks: spf %u, req_spf %u", priv->spf, + scope->req_spf); - gst_pad_set_caps (scope->priv->srcpad, caps); + gst_pad_set_caps (priv->srcpad, caps); /* find a pool for the negotiated caps now */ res = gst_audio_visualizer_do_bufferpool (scope, caps); @@ -1064,6 +1081,7 @@ gst_audio_visualizer_chain (GstPad * pad, GstObject * parent, { GstFlowReturn ret = GST_FLOW_OK; GstAudioVisualizer *scope; + GstAudioVisualizerPrivate *priv; GstAudioVisualizerClass *klass; GstBuffer *inbuf; guint64 dist, ts; @@ -1072,19 +1090,20 @@ gst_audio_visualizer_chain (GstPad * pad, GstObject * parent, gint bps, channels, rate; scope = GST_AUDIO_VISUALIZER (parent); + priv = scope->priv; klass = GST_AUDIO_VISUALIZER_CLASS (G_OBJECT_GET_CLASS (scope)); GST_LOG_OBJECT (scope, "chainfunc called"); /* resync on DISCONT */ if (GST_BUFFER_FLAG_IS_SET (buffer, GST_BUFFER_FLAG_DISCONT)) { - gst_adapter_clear (scope->priv->adapter); + gst_adapter_clear (priv->adapter); } /* Make sure have an output format */ - if (gst_pad_check_reconfigure (scope->priv->srcpad)) { + if (gst_pad_check_reconfigure (priv->srcpad)) { if (!gst_audio_visualizer_src_negotiate (scope)) { - gst_pad_mark_reconfigure (scope->priv->srcpad); + gst_pad_mark_reconfigure (priv->srcpad); goto not_negotiated; } } @@ -1098,26 +1117,26 @@ gst_audio_visualizer_chain (GstPad * pad, GstObject * parent, goto beach; } - gst_adapter_push (scope->priv->adapter, buffer); + gst_adapter_push (priv->adapter, buffer); - g_mutex_lock (&scope->priv->config_lock); + g_mutex_lock (&priv->config_lock); /* this is what we want */ sbpf = scope->req_spf * channels * sizeof (gint16); - inbuf = scope->priv->inbuf; + inbuf = priv->inbuf; /* FIXME: the timestamp in the adapter would be different */ gst_buffer_copy_into (inbuf, buffer, GST_BUFFER_COPY_METADATA, 0, -1); /* this is what we have */ - avail = gst_adapter_available (scope->priv->adapter); + avail = gst_adapter_available (priv->adapter); GST_LOG_OBJECT (scope, "avail: %u, bpf: %u", avail, sbpf); while (avail >= sbpf) { GstBuffer *outbuf; GstVideoFrame outframe; /* get timestamp of the current adapter content */ - ts = gst_adapter_prev_pts (scope->priv->adapter, &dist); + ts = gst_adapter_prev_pts (priv->adapter, &dist); if (GST_CLOCK_TIME_IS_VALID (ts)) { /* convert bytes to time */ dist /= bps; @@ -1131,12 +1150,12 @@ gst_audio_visualizer_chain (GstPad * pad, GstObject * parent, gint64 qostime; qostime = - gst_segment_to_running_time (&scope->priv->segment, - GST_FORMAT_TIME, ts) + scope->priv->frame_duration; + gst_segment_to_running_time (&priv->segment, GST_FORMAT_TIME, + ts) + priv->frame_duration; GST_OBJECT_LOCK (scope); - earliest_time = scope->priv->earliest_time; - proportion = scope->priv->proportion; + earliest_time = priv->earliest_time; + proportion = priv->proportion; GST_OBJECT_UNLOCK (scope); if (GST_CLOCK_TIME_IS_VALID (earliest_time) && qostime <= earliest_time) { @@ -1147,26 +1166,26 @@ gst_audio_visualizer_chain (GstPad * pad, GstObject * parent, "QoS: skip ts: %" GST_TIME_FORMAT ", earliest: %" GST_TIME_FORMAT, GST_TIME_ARGS (qostime), GST_TIME_ARGS (earliest_time)); - ++scope->priv->dropped; - stream_time = gst_segment_to_stream_time (&scope->priv->segment, + ++priv->dropped; + stream_time = gst_segment_to_stream_time (&priv->segment, GST_FORMAT_TIME, ts); jitter = GST_CLOCK_DIFF (qostime, earliest_time); qos_msg = gst_message_new_qos (GST_OBJECT (scope), FALSE, qostime, stream_time, ts, GST_BUFFER_DURATION (buffer)); gst_message_set_qos_values (qos_msg, jitter, proportion, 1000000); gst_message_set_qos_stats (qos_msg, GST_FORMAT_BUFFERS, - scope->priv->processed, scope->priv->dropped); + priv->processed, priv->dropped); gst_element_post_message (GST_ELEMENT (scope), qos_msg); goto skip; } } - ++scope->priv->processed; + ++priv->processed; - g_mutex_unlock (&scope->priv->config_lock); + g_mutex_unlock (&priv->config_lock); ret = default_prepare_output_buffer (scope, &outbuf); - g_mutex_lock (&scope->priv->config_lock); + g_mutex_lock (&priv->config_lock); /* recheck as the value could have changed */ sbpf = scope->req_spf * channels * sizeof (gint16); @@ -1179,16 +1198,16 @@ gst_audio_visualizer_chain (GstPad * pad, GstObject * parent, gst_object_sync_values (GST_OBJECT (scope), ts); GST_BUFFER_TIMESTAMP (outbuf) = ts; - GST_BUFFER_DURATION (outbuf) = scope->priv->frame_duration; + GST_BUFFER_DURATION (outbuf) = priv->frame_duration; /* this can fail as the data size we need could have changed */ - if (!(adata = (gpointer) gst_adapter_map (scope->priv->adapter, sbpf))) + if (!(adata = (gpointer) gst_adapter_map (priv->adapter, sbpf))) break; gst_video_frame_map (&outframe, &scope->vinfo, outbuf, GST_MAP_READWRITE); - if (scope->priv->shader) { - gst_video_frame_copy (&outframe, &scope->priv->tempframe); + if (priv->shader) { + gst_video_frame_copy (&outframe, &priv->tempframe); } else { /* gst_video_frame_clear() or is output frame already cleared */ gint i; @@ -1211,18 +1230,17 @@ gst_audio_visualizer_chain (GstPad * pad, GstObject * parent, } else { /* run various post processing (shading and geometric transformation) */ /* FIXME: SHADER assumes 32bpp */ - if (scope->priv->shader && - GST_VIDEO_INFO_COMP_PSTRIDE (&scope->vinfo, 0) == 4) { - scope->priv->shader (scope, &outframe, &scope->priv->tempframe); + if (priv->shader && GST_VIDEO_INFO_COMP_PSTRIDE (&scope->vinfo, 0) == 4) { + priv->shader (scope, &outframe, &priv->tempframe); } } } gst_video_frame_unmap (&outframe); - g_mutex_unlock (&scope->priv->config_lock); - ret = gst_pad_push (scope->priv->srcpad, outbuf); + g_mutex_unlock (&priv->config_lock); + ret = gst_pad_push (priv->srcpad, outbuf); outbuf = NULL; - g_mutex_lock (&scope->priv->config_lock); + g_mutex_lock (&priv->config_lock); skip: /* recheck as the value could have changed */ @@ -1230,21 +1248,21 @@ gst_audio_visualizer_chain (GstPad * pad, GstObject * parent, GST_LOG_OBJECT (scope, "avail: %u, bpf: %u", avail, sbpf); /* we want to take less or more, depending on spf : req_spf */ if (avail - sbpf >= sbpf) { - gst_adapter_flush (scope->priv->adapter, sbpf); - gst_adapter_unmap (scope->priv->adapter); + gst_adapter_flush (priv->adapter, sbpf); + gst_adapter_unmap (priv->adapter); } else if (avail >= sbpf) { /* just flush a bit and stop */ - gst_adapter_flush (scope->priv->adapter, (avail - sbpf)); - gst_adapter_unmap (scope->priv->adapter); + gst_adapter_flush (priv->adapter, (avail - sbpf)); + gst_adapter_unmap (priv->adapter); break; } - avail = gst_adapter_available (scope->priv->adapter); + avail = gst_adapter_available (priv->adapter); if (ret != GST_FLOW_OK) break; } - g_mutex_unlock (&scope->priv->config_lock); + g_mutex_unlock (&priv->config_lock); beach: return ret; @@ -1263,8 +1281,10 @@ gst_audio_visualizer_src_event (GstPad * pad, GstObject * parent, { gboolean res; GstAudioVisualizer *scope; + GstAudioVisualizerPrivate *priv; scope = GST_AUDIO_VISUALIZER (parent); + priv = scope->priv; switch (GST_EVENT_TYPE (event)) { case GST_EVENT_QOS: @@ -1277,17 +1297,16 @@ gst_audio_visualizer_src_event (GstPad * pad, GstObject * parent, /* save stuff for the _chain() function */ GST_OBJECT_LOCK (scope); - scope->priv->proportion = proportion; + priv->proportion = proportion; if (diff >= 0) /* we're late, this is a good estimate for next displayable * frame (see part-qos.txt) */ - scope->priv->earliest_time = timestamp + 2 * diff + - scope->priv->frame_duration; + priv->earliest_time = timestamp + 2 * diff + priv->frame_duration; else - scope->priv->earliest_time = timestamp + diff; + priv->earliest_time = timestamp + diff; GST_OBJECT_UNLOCK (scope); - res = gst_pad_push_event (scope->priv->sinkpad, event); + res = gst_pad_push_event (priv->sinkpad, event); break; } case GST_EVENT_RECONFIGURE: diff --git a/gst/goom2k1/gstaudiovisualizer.c b/gst/goom2k1/gstaudiovisualizer.c index d807ad54c..66b03b611 100644 --- a/gst/goom2k1/gstaudiovisualizer.c +++ b/gst/goom2k1/gstaudiovisualizer.c @@ -2,7 +2,7 @@ * Copyright (C) <2011> Stefan Kost <ensonic@users.sf.net> * Copyright (C) <2015> Luis de Bethencourt <luis@debethencourt.com> * - * gstaudiovisualizer.h: class for audio visualisation elements + * gstaudiovisualizer.c: class for audio visualisation elements * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -63,7 +63,7 @@ static void gst_audio_visualizer_set_property (GObject * object, guint prop_id, const GValue * value, GParamSpec * pspec); static void gst_audio_visualizer_get_property (GObject * object, guint prop_id, GValue * value, GParamSpec * pspec); -static void gst_audio_visualizer_dispose (GObject * object); +static void gst_audio_visualizer_finalize (GObject * object); static gboolean gst_audio_visualizer_src_negotiate (GstAudioVisualizer * scope); static gboolean gst_audio_visualizer_src_setcaps (GstAudioVisualizer * @@ -199,9 +199,10 @@ shader_fade (GstAudioVisualizer * scope, const GstVideoFrame * sframe, GstVideoFrame * dframe) { guint i, j; - guint r = (scope->priv->shade_amount >> 16) & 0xff; - guint g = (scope->priv->shade_amount >> 8) & 0xff; - guint b = (scope->priv->shade_amount >> 0) & 0xff; + guint32 shade_amount = scope->priv->shade_amount; + guint r = (shade_amount >> 16) & 0xff; + guint g = (shade_amount >> 8) & 0xff; + guint b = (shade_amount >> 0) & 0xff; guint8 *s, *d; gint ss, ds, width, height; @@ -227,9 +228,10 @@ shader_fade_and_move_up (GstAudioVisualizer * scope, const GstVideoFrame * sframe, GstVideoFrame * dframe) { guint i, j; - guint r = (scope->priv->shade_amount >> 16) & 0xff; - guint g = (scope->priv->shade_amount >> 8) & 0xff; - guint b = (scope->priv->shade_amount >> 0) & 0xff; + guint32 shade_amount = scope->priv->shade_amount; + guint r = (shade_amount >> 16) & 0xff; + guint g = (shade_amount >> 8) & 0xff; + guint b = (shade_amount >> 0) & 0xff; guint8 *s, *d; gint ss, ds, width, height; @@ -255,9 +257,10 @@ shader_fade_and_move_down (GstAudioVisualizer * scope, const GstVideoFrame * sframe, GstVideoFrame * dframe) { guint i, j; - guint r = (scope->priv->shade_amount >> 16) & 0xff; - guint g = (scope->priv->shade_amount >> 8) & 0xff; - guint b = (scope->priv->shade_amount >> 0) & 0xff; + guint32 shade_amount = scope->priv->shade_amount; + guint r = (shade_amount >> 16) & 0xff; + guint g = (shade_amount >> 8) & 0xff; + guint b = (shade_amount >> 0) & 0xff; guint8 *s, *d; gint ss, ds, width, height; @@ -283,9 +286,10 @@ shader_fade_and_move_left (GstAudioVisualizer * scope, const GstVideoFrame * sframe, GstVideoFrame * dframe) { guint i, j; - guint r = (scope->priv->shade_amount >> 16) & 0xff; - guint g = (scope->priv->shade_amount >> 8) & 0xff; - guint b = (scope->priv->shade_amount >> 0) & 0xff; + guint32 shade_amount = scope->priv->shade_amount; + guint r = (shade_amount >> 16) & 0xff; + guint g = (shade_amount >> 8) & 0xff; + guint b = (shade_amount >> 0) & 0xff; guint8 *s, *d; gint ss, ds, width, height; @@ -315,9 +319,10 @@ shader_fade_and_move_right (GstAudioVisualizer * scope, const GstVideoFrame * sframe, GstVideoFrame * dframe) { guint i, j; - guint r = (scope->priv->shade_amount >> 16) & 0xff; - guint g = (scope->priv->shade_amount >> 8) & 0xff; - guint b = (scope->priv->shade_amount >> 0) & 0xff; + guint32 shade_amount = scope->priv->shade_amount; + guint r = (shade_amount >> 16) & 0xff; + guint g = (shade_amount >> 8) & 0xff; + guint b = (shade_amount >> 0) & 0xff; guint8 *s, *d; gint ss, ds, width, height; @@ -347,9 +352,10 @@ shader_fade_and_move_horiz_out (GstAudioVisualizer * scope, const GstVideoFrame * sframe, GstVideoFrame * dframe) { guint i, j; - guint r = (scope->priv->shade_amount >> 16) & 0xff; - guint g = (scope->priv->shade_amount >> 8) & 0xff; - guint b = (scope->priv->shade_amount >> 0) & 0xff; + guint32 shade_amount = scope->priv->shade_amount; + guint r = (shade_amount >> 16) & 0xff; + guint g = (shade_amount >> 8) & 0xff; + guint b = (shade_amount >> 0) & 0xff; guint8 *s, *d; gint ss, ds, width, height; @@ -384,9 +390,10 @@ shader_fade_and_move_horiz_in (GstAudioVisualizer * scope, const GstVideoFrame * sframe, GstVideoFrame * dframe) { guint i, j; - guint r = (scope->priv->shade_amount >> 16) & 0xff; - guint g = (scope->priv->shade_amount >> 8) & 0xff; - guint b = (scope->priv->shade_amount >> 0) & 0xff; + guint32 shade_amount = scope->priv->shade_amount; + guint r = (shade_amount >> 16) & 0xff; + guint g = (shade_amount >> 8) & 0xff; + guint b = (shade_amount >> 0) & 0xff; guint8 *s, *d; gint ss, ds, width, height; @@ -421,9 +428,10 @@ shader_fade_and_move_vert_out (GstAudioVisualizer * scope, const GstVideoFrame * sframe, GstVideoFrame * dframe) { guint i, j; - guint r = (scope->priv->shade_amount >> 16) & 0xff; - guint g = (scope->priv->shade_amount >> 8) & 0xff; - guint b = (scope->priv->shade_amount >> 0) & 0xff; + guint32 shade_amount = scope->priv->shade_amount; + guint r = (shade_amount >> 16) & 0xff; + guint g = (shade_amount >> 8) & 0xff; + guint b = (shade_amount >> 0) & 0xff; guint8 *s, *s1, *d, *d1; gint ss, ds, width, height; @@ -456,9 +464,10 @@ shader_fade_and_move_vert_in (GstAudioVisualizer * scope, const GstVideoFrame * sframe, GstVideoFrame * dframe) { guint i, j; - guint r = (scope->priv->shade_amount >> 16) & 0xff; - guint g = (scope->priv->shade_amount >> 8) & 0xff; - guint b = (scope->priv->shade_amount >> 0) & 0xff; + guint32 shade_amount = scope->priv->shade_amount; + guint r = (shade_amount >> 16) & 0xff; + guint g = (shade_amount >> 8) & 0xff; + guint b = (shade_amount >> 0) & 0xff; guint8 *s, *s1, *d, *d1; gint ss, ds, width, height; @@ -489,42 +498,46 @@ shader_fade_and_move_vert_in (GstAudioVisualizer * scope, static void gst_audio_visualizer_change_shader (GstAudioVisualizer * scope) { + GstAudioVisualizerShaderFunc shader; + switch (scope->priv->shader_type) { case GST_AUDIO_VISUALIZER_SHADER_NONE: - scope->priv->shader = NULL; + shader = NULL; break; case GST_AUDIO_VISUALIZER_SHADER_FADE: - scope->priv->shader = shader_fade; + shader = shader_fade; break; case GST_AUDIO_VISUALIZER_SHADER_FADE_AND_MOVE_UP: - scope->priv->shader = shader_fade_and_move_up; + shader = shader_fade_and_move_up; break; case GST_AUDIO_VISUALIZER_SHADER_FADE_AND_MOVE_DOWN: - scope->priv->shader = shader_fade_and_move_down; + shader = shader_fade_and_move_down; break; case GST_AUDIO_VISUALIZER_SHADER_FADE_AND_MOVE_LEFT: - scope->priv->shader = shader_fade_and_move_left; + shader = shader_fade_and_move_left; break; case GST_AUDIO_VISUALIZER_SHADER_FADE_AND_MOVE_RIGHT: - scope->priv->shader = shader_fade_and_move_right; + shader = shader_fade_and_move_right; break; case GST_AUDIO_VISUALIZER_SHADER_FADE_AND_MOVE_HORIZ_OUT: - scope->priv->shader = shader_fade_and_move_horiz_out; + shader = shader_fade_and_move_horiz_out; break; case GST_AUDIO_VISUALIZER_SHADER_FADE_AND_MOVE_HORIZ_IN: - scope->priv->shader = shader_fade_and_move_horiz_in; + shader = shader_fade_and_move_horiz_in; break; case GST_AUDIO_VISUALIZER_SHADER_FADE_AND_MOVE_VERT_OUT: - scope->priv->shader = shader_fade_and_move_vert_out; + shader = shader_fade_and_move_vert_out; break; case GST_AUDIO_VISUALIZER_SHADER_FADE_AND_MOVE_VERT_IN: - scope->priv->shader = shader_fade_and_move_vert_in; + shader = shader_fade_and_move_vert_in; break; default: GST_ERROR ("invalid shader function"); - scope->priv->shader = NULL; + shader = NULL; break; } + + scope->priv->shader = shader; } /* class */ @@ -572,7 +585,7 @@ gst_audio_visualizer_class_init (GstAudioVisualizerClass * klass) gobject_class->set_property = gst_audio_visualizer_set_property; gobject_class->get_property = gst_audio_visualizer_get_property; - gobject_class->dispose = gst_audio_visualizer_dispose; + gobject_class->finalize = gst_audio_visualizer_finalize; element_class->change_state = GST_DEBUG_FUNCPTR (gst_audio_visualizer_change_state); @@ -679,41 +692,43 @@ gst_audio_visualizer_get_property (GObject * object, guint prop_id, } static void -gst_audio_visualizer_dispose (GObject * object) +gst_audio_visualizer_finalize (GObject * object) { GstAudioVisualizer *scope = GST_AUDIO_VISUALIZER (object); + GstAudioVisualizerPrivate *priv = scope->priv; - if (scope->priv->adapter) { - g_object_unref (scope->priv->adapter); - scope->priv->adapter = NULL; + if (priv->adapter) { + g_object_unref (priv->adapter); + priv->adapter = NULL; } - if (scope->priv->inbuf) { - gst_buffer_unref (scope->priv->inbuf); - scope->priv->inbuf = NULL; + if (priv->inbuf) { + gst_buffer_unref (priv->inbuf); + priv->inbuf = NULL; } - if (scope->priv->tempbuf) { - gst_video_frame_unmap (&scope->priv->tempframe); - gst_buffer_unref (scope->priv->tempbuf); - scope->priv->tempbuf = NULL; + if (priv->tempbuf) { + gst_video_frame_unmap (&priv->tempframe); + gst_buffer_unref (priv->tempbuf); + priv->tempbuf = NULL; } - if (scope->priv->config_lock.p) { - g_mutex_clear (&scope->priv->config_lock); - scope->priv->config_lock.p = NULL; - } - G_OBJECT_CLASS (parent_class)->dispose (object); + + g_mutex_clear (&priv->config_lock); + + G_OBJECT_CLASS (parent_class)->finalize (object); } static void gst_audio_visualizer_reset (GstAudioVisualizer * scope) { - gst_adapter_clear (scope->priv->adapter); - gst_segment_init (&scope->priv->segment, GST_FORMAT_UNDEFINED); + GstAudioVisualizerPrivate *priv = scope->priv; + + gst_adapter_clear (priv->adapter); + gst_segment_init (&priv->segment, GST_FORMAT_UNDEFINED); GST_OBJECT_LOCK (scope); - scope->priv->proportion = 1.0; - scope->priv->earliest_time = -1; - scope->priv->dropped = 0; - scope->priv->processed = 0; + priv->proportion = 1.0; + priv->earliest_time = -1; + priv->dropped = 0; + priv->processed = 0; GST_OBJECT_UNLOCK (scope); } @@ -754,6 +769,7 @@ gst_audio_visualizer_src_setcaps (GstAudioVisualizer * scope, GstCaps * caps) { GstVideoInfo info; GstAudioVisualizerClass *klass; + GstAudioVisualizerPrivate *priv; gboolean res; if (!gst_video_info_from_caps (&info, caps)) @@ -761,23 +777,24 @@ gst_audio_visualizer_src_setcaps (GstAudioVisualizer * scope, GstCaps * caps) klass = GST_AUDIO_VISUALIZER_CLASS (G_OBJECT_GET_CLASS (scope)); + priv = scope->priv; + scope->vinfo = info; - scope->priv->frame_duration = gst_util_uint64_scale_int (GST_SECOND, + priv->frame_duration = gst_util_uint64_scale_int (GST_SECOND, GST_VIDEO_INFO_FPS_D (&info), GST_VIDEO_INFO_FPS_N (&info)); - scope->priv->spf = - gst_util_uint64_scale_int (GST_AUDIO_INFO_RATE (&scope->ainfo), + priv->spf = gst_util_uint64_scale_int (GST_AUDIO_INFO_RATE (&scope->ainfo), GST_VIDEO_INFO_FPS_D (&info), GST_VIDEO_INFO_FPS_N (&info)); - scope->req_spf = scope->priv->spf; + scope->req_spf = priv->spf; - if (scope->priv->tempbuf) { - gst_video_frame_unmap (&scope->priv->tempframe); - gst_buffer_unref (scope->priv->tempbuf); + if (priv->tempbuf) { + gst_video_frame_unmap (&priv->tempframe); + gst_buffer_unref (priv->tempbuf); } - scope->priv->tempbuf = gst_buffer_new_wrapped (g_malloc0 (scope->vinfo.size), + priv->tempbuf = gst_buffer_new_wrapped (g_malloc0 (scope->vinfo.size), scope->vinfo.size); - gst_video_frame_map (&scope->priv->tempframe, &scope->vinfo, - scope->priv->tempbuf, GST_MAP_READWRITE); + gst_video_frame_map (&priv->tempframe, &scope->vinfo, priv->tempbuf, + GST_MAP_READWRITE); if (klass->setup && !klass->setup (scope)) goto setup_failed; @@ -785,10 +802,10 @@ gst_audio_visualizer_src_setcaps (GstAudioVisualizer * scope, GstCaps * caps) GST_DEBUG_OBJECT (scope, "video: dimension %dx%d, framerate %d/%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->priv->spf, scope->req_spf); + GST_DEBUG_OBJECT (scope, "blocks: spf %u, req_spf %u", priv->spf, + scope->req_spf); - gst_pad_set_caps (scope->priv->srcpad, caps); + gst_pad_set_caps (priv->srcpad, caps); /* find a pool for the negotiated caps now */ res = gst_audio_visualizer_do_bufferpool (scope, caps); @@ -1064,6 +1081,7 @@ gst_audio_visualizer_chain (GstPad * pad, GstObject * parent, { GstFlowReturn ret = GST_FLOW_OK; GstAudioVisualizer *scope; + GstAudioVisualizerPrivate *priv; GstAudioVisualizerClass *klass; GstBuffer *inbuf; guint64 dist, ts; @@ -1072,19 +1090,20 @@ gst_audio_visualizer_chain (GstPad * pad, GstObject * parent, gint bps, channels, rate; scope = GST_AUDIO_VISUALIZER (parent); + priv = scope->priv; klass = GST_AUDIO_VISUALIZER_CLASS (G_OBJECT_GET_CLASS (scope)); GST_LOG_OBJECT (scope, "chainfunc called"); /* resync on DISCONT */ if (GST_BUFFER_FLAG_IS_SET (buffer, GST_BUFFER_FLAG_DISCONT)) { - gst_adapter_clear (scope->priv->adapter); + gst_adapter_clear (priv->adapter); } /* Make sure have an output format */ - if (gst_pad_check_reconfigure (scope->priv->srcpad)) { + if (gst_pad_check_reconfigure (priv->srcpad)) { if (!gst_audio_visualizer_src_negotiate (scope)) { - gst_pad_mark_reconfigure (scope->priv->srcpad); + gst_pad_mark_reconfigure (priv->srcpad); goto not_negotiated; } } @@ -1098,26 +1117,26 @@ gst_audio_visualizer_chain (GstPad * pad, GstObject * parent, goto beach; } - gst_adapter_push (scope->priv->adapter, buffer); + gst_adapter_push (priv->adapter, buffer); - g_mutex_lock (&scope->priv->config_lock); + g_mutex_lock (&priv->config_lock); /* this is what we want */ sbpf = scope->req_spf * channels * sizeof (gint16); - inbuf = scope->priv->inbuf; + inbuf = priv->inbuf; /* FIXME: the timestamp in the adapter would be different */ gst_buffer_copy_into (inbuf, buffer, GST_BUFFER_COPY_METADATA, 0, -1); /* this is what we have */ - avail = gst_adapter_available (scope->priv->adapter); + avail = gst_adapter_available (priv->adapter); GST_LOG_OBJECT (scope, "avail: %u, bpf: %u", avail, sbpf); while (avail >= sbpf) { GstBuffer *outbuf; GstVideoFrame outframe; /* get timestamp of the current adapter content */ - ts = gst_adapter_prev_pts (scope->priv->adapter, &dist); + ts = gst_adapter_prev_pts (priv->adapter, &dist); if (GST_CLOCK_TIME_IS_VALID (ts)) { /* convert bytes to time */ dist /= bps; @@ -1131,12 +1150,12 @@ gst_audio_visualizer_chain (GstPad * pad, GstObject * parent, gint64 qostime; qostime = - gst_segment_to_running_time (&scope->priv->segment, - GST_FORMAT_TIME, ts) + scope->priv->frame_duration; + gst_segment_to_running_time (&priv->segment, GST_FORMAT_TIME, + ts) + priv->frame_duration; GST_OBJECT_LOCK (scope); - earliest_time = scope->priv->earliest_time; - proportion = scope->priv->proportion; + earliest_time = priv->earliest_time; + proportion = priv->proportion; GST_OBJECT_UNLOCK (scope); if (GST_CLOCK_TIME_IS_VALID (earliest_time) && qostime <= earliest_time) { @@ -1147,26 +1166,26 @@ gst_audio_visualizer_chain (GstPad * pad, GstObject * parent, "QoS: skip ts: %" GST_TIME_FORMAT ", earliest: %" GST_TIME_FORMAT, GST_TIME_ARGS (qostime), GST_TIME_ARGS (earliest_time)); - ++scope->priv->dropped; - stream_time = gst_segment_to_stream_time (&scope->priv->segment, + ++priv->dropped; + stream_time = gst_segment_to_stream_time (&priv->segment, GST_FORMAT_TIME, ts); jitter = GST_CLOCK_DIFF (qostime, earliest_time); qos_msg = gst_message_new_qos (GST_OBJECT (scope), FALSE, qostime, stream_time, ts, GST_BUFFER_DURATION (buffer)); gst_message_set_qos_values (qos_msg, jitter, proportion, 1000000); gst_message_set_qos_stats (qos_msg, GST_FORMAT_BUFFERS, - scope->priv->processed, scope->priv->dropped); + priv->processed, priv->dropped); gst_element_post_message (GST_ELEMENT (scope), qos_msg); goto skip; } } - ++scope->priv->processed; + ++priv->processed; - g_mutex_unlock (&scope->priv->config_lock); + g_mutex_unlock (&priv->config_lock); ret = default_prepare_output_buffer (scope, &outbuf); - g_mutex_lock (&scope->priv->config_lock); + g_mutex_lock (&priv->config_lock); /* recheck as the value could have changed */ sbpf = scope->req_spf * channels * sizeof (gint16); @@ -1179,16 +1198,16 @@ gst_audio_visualizer_chain (GstPad * pad, GstObject * parent, gst_object_sync_values (GST_OBJECT (scope), ts); GST_BUFFER_TIMESTAMP (outbuf) = ts; - GST_BUFFER_DURATION (outbuf) = scope->priv->frame_duration; + GST_BUFFER_DURATION (outbuf) = priv->frame_duration; /* this can fail as the data size we need could have changed */ - if (!(adata = (gpointer) gst_adapter_map (scope->priv->adapter, sbpf))) + if (!(adata = (gpointer) gst_adapter_map (priv->adapter, sbpf))) break; gst_video_frame_map (&outframe, &scope->vinfo, outbuf, GST_MAP_READWRITE); - if (scope->priv->shader) { - gst_video_frame_copy (&outframe, &scope->priv->tempframe); + if (priv->shader) { + gst_video_frame_copy (&outframe, &priv->tempframe); } else { /* gst_video_frame_clear() or is output frame already cleared */ gint i; @@ -1211,18 +1230,17 @@ gst_audio_visualizer_chain (GstPad * pad, GstObject * parent, } else { /* run various post processing (shading and geometric transformation) */ /* FIXME: SHADER assumes 32bpp */ - if (scope->priv->shader && - GST_VIDEO_INFO_COMP_PSTRIDE (&scope->vinfo, 0) == 4) { - scope->priv->shader (scope, &outframe, &scope->priv->tempframe); + if (priv->shader && GST_VIDEO_INFO_COMP_PSTRIDE (&scope->vinfo, 0) == 4) { + priv->shader (scope, &outframe, &priv->tempframe); } } } gst_video_frame_unmap (&outframe); - g_mutex_unlock (&scope->priv->config_lock); - ret = gst_pad_push (scope->priv->srcpad, outbuf); + g_mutex_unlock (&priv->config_lock); + ret = gst_pad_push (priv->srcpad, outbuf); outbuf = NULL; - g_mutex_lock (&scope->priv->config_lock); + g_mutex_lock (&priv->config_lock); skip: /* recheck as the value could have changed */ @@ -1230,21 +1248,21 @@ gst_audio_visualizer_chain (GstPad * pad, GstObject * parent, GST_LOG_OBJECT (scope, "avail: %u, bpf: %u", avail, sbpf); /* we want to take less or more, depending on spf : req_spf */ if (avail - sbpf >= sbpf) { - gst_adapter_flush (scope->priv->adapter, sbpf); - gst_adapter_unmap (scope->priv->adapter); + gst_adapter_flush (priv->adapter, sbpf); + gst_adapter_unmap (priv->adapter); } else if (avail >= sbpf) { /* just flush a bit and stop */ - gst_adapter_flush (scope->priv->adapter, (avail - sbpf)); - gst_adapter_unmap (scope->priv->adapter); + gst_adapter_flush (priv->adapter, (avail - sbpf)); + gst_adapter_unmap (priv->adapter); break; } - avail = gst_adapter_available (scope->priv->adapter); + avail = gst_adapter_available (priv->adapter); if (ret != GST_FLOW_OK) break; } - g_mutex_unlock (&scope->priv->config_lock); + g_mutex_unlock (&priv->config_lock); beach: return ret; @@ -1263,8 +1281,10 @@ gst_audio_visualizer_src_event (GstPad * pad, GstObject * parent, { gboolean res; GstAudioVisualizer *scope; + GstAudioVisualizerPrivate *priv; scope = GST_AUDIO_VISUALIZER (parent); + priv = scope->priv; switch (GST_EVENT_TYPE (event)) { case GST_EVENT_QOS: @@ -1277,17 +1297,16 @@ gst_audio_visualizer_src_event (GstPad * pad, GstObject * parent, /* save stuff for the _chain() function */ GST_OBJECT_LOCK (scope); - scope->priv->proportion = proportion; + priv->proportion = proportion; if (diff >= 0) /* we're late, this is a good estimate for next displayable * frame (see part-qos.txt) */ - scope->priv->earliest_time = timestamp + 2 * diff + - scope->priv->frame_duration; + priv->earliest_time = timestamp + 2 * diff + priv->frame_duration; else - scope->priv->earliest_time = timestamp + diff; + priv->earliest_time = timestamp + diff; GST_OBJECT_UNLOCK (scope); - res = gst_pad_push_event (scope->priv->sinkpad, event); + res = gst_pad_push_event (priv->sinkpad, event); break; } case GST_EVENT_RECONFIGURE: diff --git a/gst/isomp4/atoms.c b/gst/isomp4/atoms.c index a8ca9cdcf..45e668d9a 100644 --- a/gst/isomp4/atoms.c +++ b/gst/isomp4/atoms.c @@ -196,13 +196,21 @@ atom_data_new (guint32 fourcc) static void atom_data_alloc_mem (AtomData * data, guint32 size) { - if (data->data) { - g_free (data->data); - } + g_free (data->data); data->data = g_new0 (guint8, size); data->datalen = size; } +static AtomData * +atom_data_new_from_data (guint32 fourcc, const guint8 * mem, gsize size) +{ + AtomData *data = atom_data_new (fourcc); + + atom_data_alloc_mem (data, size); + memcpy (data->data, mem, size); + return data; +} + static AtomData * atom_data_new_from_gst_buffer (guint32 fourcc, const GstBuffer * buf) { @@ -1132,6 +1140,20 @@ atom_udta_clear (AtomUDTA * udta) atom_info_list_free (udta->entries); } +/* Clear added tags, but keep the context/flavor the same */ +void +atom_udta_clear_tags (AtomUDTA * udta) +{ + if (udta->entries) { + atom_info_list_free (udta->entries); + udta->entries = NULL; + } + if (udta->meta && udta->meta->ilst->entries) { + atom_info_list_free (udta->meta->ilst->entries); + udta->meta->ilst->entries = NULL; + } +} + static void atom_tag_data_init (AtomTagData * data) { @@ -1727,23 +1749,6 @@ atom_frma_copy_data (AtomFRMA * frma, guint8 ** buffer, return *offset - original_offset; } -static guint64 -atom_mp4s_copy_data (SampleTableEntryMP4S * mp4s, guint8 ** buffer, - guint64 * size, guint64 * offset) -{ - guint64 original_offset = *offset; - - if (!atom_sample_entry_copy_data (&mp4s->se, buffer, size, offset)) { - return 0; - } - if (!atom_esds_copy_data (&mp4s->es, buffer, size, offset)) { - return 0; - } - - atom_write_size (buffer, size, offset, original_offset); - return *offset - original_offset; -} - static guint64 atom_hint_sample_entry_copy_data (AtomHintSampleEntry * hse, guint8 ** buffer, guint64 * size, guint64 * offset) @@ -1980,12 +1985,13 @@ atom_stco64_copy_data (AtomSTCO64 * stco64, guint8 ** buffer, guint64 * size, prop_copy_ensure_buffer (buffer, size, offset, 8 * atom_array_get_len (&stco64->entries)); for (i = 0; i < atom_array_get_len (&stco64->entries); i++) { - guint64 *value = &atom_array_index (&stco64->entries, i); + guint64 value = + atom_array_index (&stco64->entries, i) + stco64->chunk_offset; if (trunc_to_32) { - prop_copy_uint32 ((guint32) * value, buffer, size, offset); + prop_copy_uint32 ((guint32) value, buffer, size, offset); } else { - prop_copy_uint64 (*value, buffer, size, offset); + prop_copy_uint64 (value, buffer, size, offset); } } @@ -2046,12 +2052,6 @@ atom_stsd_copy_data (AtomSTSD * stsd, guint8 ** buffer, guint64 * size, return 0; } break; - case FOURCC_mp4s: - if (!atom_mp4s_copy_data ((SampleTableEntryMP4S *) walker->data, - buffer, size, offset)) { - return 0; - } - break; case FOURCC_mp4v: if (!sample_entry_mp4v_copy_data ((SampleTableEntryMP4V *) walker->data, buffer, size, offset)) { @@ -2749,6 +2749,12 @@ atom_moov_add_trak (AtomMOOV * moov, AtomTRAK * trak) atom_moov_add_trex (moov, atom_trex_new (trak)); } +guint +atom_moov_get_trak_count (AtomMOOV * moov) +{ + return g_list_length (moov->traks); +} + static guint64 atom_trak_get_duration (AtomTRAK * trak) { @@ -2821,28 +2827,27 @@ atom_moov_set_fragmented (AtomMOOV * moov, gboolean fragmented) } void -atom_stco64_chunks_add_offset (AtomSTCO64 * stco64, guint32 offset) +atom_stco64_chunks_set_offset (AtomSTCO64 * stco64, guint32 offset) { - guint i; - - for (i = 0; i < atom_array_get_len (&stco64->entries); i++) { - guint64 *value = &atom_array_index (&stco64->entries, i); - - *value += offset; - } + stco64->chunk_offset = offset; } void -atom_moov_chunks_add_offset (AtomMOOV * moov, guint32 offset) +atom_moov_chunks_set_offset (AtomMOOV * moov, guint32 offset) { GList *traks = moov->traks; + if (offset == moov->chunks_offset) + return; /* Nothing to do */ + while (traks) { AtomTRAK *trak = (AtomTRAK *) traks->data; - atom_stco64_chunks_add_offset (&trak->mdia.minf.stbl.stco64, offset); + atom_stco64_chunks_set_offset (&trak->mdia.minf.stbl.stco64, offset); traks = g_list_next (traks); } + + moov->chunks_offset = offset; } void @@ -3020,24 +3025,14 @@ atom_udta_add_uint_tag (AtomUDTA * udta, guint32 fourcc, guint32 flags, } } -static GstBuffer * -_gst_buffer_new_wrapped (gpointer mem, gsize size, GFreeFunc free_func) -{ - GstBuffer *buf; - - buf = gst_buffer_new (); - gst_buffer_append_memory (buf, - gst_memory_new_wrapped (free_func ? 0 : GST_MEMORY_FLAG_READONLY, - mem, size, 0, size, mem, free_func)); - - return buf; -} +#define GST_BUFFER_NEW_READONLY(mem, size) \ + gst_buffer_new_wrapped_full (GST_MEMORY_FLAG_READONLY, mem, size, \ + 0, size, mem, NULL) void atom_udta_add_blob_tag (AtomUDTA * udta, guint8 * data, guint size) { AtomData *data_atom; - GstBuffer *buf; guint len; guint32 fourcc; @@ -3051,9 +3046,7 @@ atom_udta_add_blob_tag (AtomUDTA * udta, guint8 * data, guint size) if (len > size) return; - buf = _gst_buffer_new_wrapped (data + 8, len - 8, NULL); - data_atom = atom_data_new_from_gst_buffer (fourcc, buf); - gst_buffer_unref (buf); + data_atom = atom_data_new_from_data (fourcc, data + 8, len - 8); atom_udta_append_tag (udta, build_atom_info_wrapper ((Atom *) data_atom, atom_data_copy_data, @@ -3065,18 +3058,15 @@ atom_udta_add_3gp_tag (AtomUDTA * udta, guint32 fourcc, guint8 * data, guint size) { AtomData *data_atom; - GstBuffer *buf; - guint8 *bdata; + + data_atom = atom_data_new (fourcc); /* need full atom */ - bdata = g_malloc (size + 4); - /* full atom: version and flags */ - GST_WRITE_UINT32_BE (bdata, 0); - memcpy (bdata + 4, data, size); + atom_data_alloc_mem (data_atom, size + 4); - buf = _gst_buffer_new_wrapped (bdata, size + 4, g_free); - data_atom = atom_data_new_from_gst_buffer (fourcc, buf); - gst_buffer_unref (buf); + /* full atom: version and flags */ + GST_WRITE_UINT32_BE (data_atom->data, 0); + memcpy (data_atom->data + 4, data, size); atom_udta_append_tag (udta, build_atom_info_wrapper ((Atom *) data_atom, atom_data_copy_data, @@ -3279,31 +3269,41 @@ atom_tkhd_set_subtitle (AtomTKHD * tkhd, AtomsContext * context, guint32 width, static void -atom_edts_add_entry (AtomEDTS * edts, EditListEntry * entry) +atom_edts_add_entry (AtomEDTS * edts, gint index, EditListEntry * entry) { - edts->elst.entries = g_slist_append (edts->elst.entries, entry); + EditListEntry *e = + (EditListEntry *) g_slist_nth_data (edts->elst.entries, index); + /* Create a new entry if missing (appends to the list if index is larger) */ + if (e == NULL) { + e = g_new (EditListEntry, 1); + edts->elst.entries = g_slist_insert (edts->elst.entries, e, index); + } + + /* Update the entry */ + *e = *entry; } -/* - * Adds a new entry to this trak edits list +/* + * Update an entry in this trak edits list, creating it if needed. + * index is the index of the entry to update, or create if it's past the end. * duration is in the moov's timescale * media_time is the offset in the media time to start from (media's timescale) * rate is a 32 bits fixed-point */ void -atom_trak_add_elst_entry (AtomTRAK * trak, guint32 duration, guint32 media_time, - guint32 rate) +atom_trak_set_elst_entry (AtomTRAK * trak, gint index, + guint32 duration, guint32 media_time, guint32 rate) { - EditListEntry *entry = g_new (EditListEntry, 1); + EditListEntry entry; - entry->duration = duration; - entry->media_time = media_time; - entry->media_rate = rate; + entry.duration = duration; + entry.media_time = media_time; + entry.media_rate = rate; - if (trak->edts == NULL) { + if (trak->edts == NULL) trak->edts = atom_edts_new (); - } - atom_edts_add_entry (trak->edts, entry); + + atom_edts_add_entry (trak->edts, index, &entry); } /* re-negotiation is prevented at top-level, so only 1 entry expected. @@ -3422,6 +3422,22 @@ atom_trak_set_subtitle_commons (AtomTRAK * trak, AtomsContext * context) } void +sample_table_entry_add_ext_atom (SampleTableEntry * ste, AtomInfo * ext) +{ + GList **list = NULL; + if (ste->kind == AUDIO) { + list = &(((SampleTableEntryMP4A *) ste)->extension_atoms); + } else if (ste->kind == VIDEO) { + list = &(((SampleTableEntryMP4V *) ste)->extension_atoms); + } else { + g_assert_not_reached (); + return; + } + + *list = g_list_prepend (*list, ext); +} + +SampleTableEntryMP4A * atom_trak_set_audio_type (AtomTRAK * trak, AtomsContext * context, AudioSampleEntry * entry, guint32 scale, AtomInfo * ext, gint sample_size) { @@ -3450,29 +3466,28 @@ atom_trak_set_audio_type (AtomTRAK * trak, AtomsContext * context, /* 0 size means variable size */ atom_trak_set_constant_size_samples (trak, sample_size); + + return ste; } static AtomInfo * build_pasp_extension (AtomTRAK * trak, gint par_width, gint par_height) { - AtomData *atom_data; - GstBuffer *buf; + AtomData *atom_data = atom_data_new (FOURCC_pasp); guint8 *data; - data = g_malloc (8); + atom_data_alloc_mem (atom_data, 8); + data = atom_data->data; + /* ihdr = image header box */ GST_WRITE_UINT32_BE (data, par_width); GST_WRITE_UINT32_BE (data + 4, par_height); - buf = _gst_buffer_new_wrapped (data, 8, g_free); - atom_data = atom_data_new_from_gst_buffer (FOURCC_pasp, buf); - gst_buffer_unref (buf); - return build_atom_info_wrapper ((Atom *) atom_data, atom_data_copy_data, atom_data_free); } -void +SampleTableEntryMP4V * atom_trak_set_video_type (AtomTRAK * trak, AtomsContext * context, VisualSampleEntry * entry, guint32 scale, GList * ext_atoms_list) { @@ -3521,6 +3536,8 @@ atom_trak_set_video_type (AtomTRAK * trak, AtomsContext * context, ste->extension_atoms = g_list_append (ste->extension_atoms, build_pasp_extension (trak, par_n, par_d)); } + + return ste; } void @@ -3531,7 +3548,7 @@ subtitle_sample_entry_init (SubtitleSampleEntry * entry) entry->foreground_color_rgba = 0xFFFFFFFF; /* all white, opaque */ } -void +SampleTableEntryTX3G * atom_trak_set_subtitle_type (AtomTRAK * trak, AtomsContext * context, SubtitleSampleEntry * entry) { @@ -3547,6 +3564,8 @@ atom_trak_set_subtitle_type (AtomTRAK * trak, AtomsContext * context, trak->is_video = FALSE; trak->is_h264 = FALSE; + + return tx3g; } static void @@ -4254,19 +4273,16 @@ AtomInfo * build_btrt_extension (guint32 buffer_size_db, guint32 avg_bitrate, guint32 max_bitrate) { - AtomData *atom_data; - GstBuffer *buf; + AtomData *atom_data = atom_data_new (FOURCC_btrt); guint8 *data; - data = g_malloc (12); + atom_data_alloc_mem (atom_data, 12); + data = atom_data->data; + GST_WRITE_UINT32_BE (data, buffer_size_db); GST_WRITE_UINT32_BE (data + 4, max_bitrate); GST_WRITE_UINT32_BE (data + 8, avg_bitrate); - buf = _gst_buffer_new_wrapped (data, 12, g_free); - atom_data = atom_data_new_from_gst_buffer (FOURCC_btrt, buf); - gst_buffer_unref (buf); - return build_atom_info_wrapper ((Atom *) atom_data, atom_data_copy_data, atom_data_free); } @@ -4322,7 +4338,7 @@ build_mov_aac_extension (AtomTRAK * trak, const GstBuffer * codec_data, /* Add MP4A atom to the WAVE: * not really in spec, but makes offset based players happy */ - buf = _gst_buffer_new_wrapped (&tmp, 4, NULL); + buf = GST_BUFFER_NEW_READONLY (&tmp, 4); mp4a = build_codec_data_extension (FOURCC_mp4a, buf); gst_buffer_unref (buf); @@ -4343,17 +4359,14 @@ AtomInfo * build_fiel_extension (gint fields) { AtomData *atom_data; - GstBuffer *buf; guint8 f = fields; if (fields == 1) { return NULL; } - buf = _gst_buffer_new_wrapped (&f, 1, NULL); atom_data = - atom_data_new_from_gst_buffer (GST_MAKE_FOURCC ('f', 'i', 'e', 'l'), buf); - gst_buffer_unref (buf); + atom_data_new_from_data (GST_MAKE_FOURCC ('f', 'i', 'e', 'l'), &f, 1); return build_atom_info_wrapper ((Atom *) atom_data, atom_data_copy_data, atom_data_free); @@ -4550,7 +4563,7 @@ build_amr_extension (void) /* frames per sample */ GST_WRITE_UINT8 (ext + 8, 1); - buf = _gst_buffer_new_wrapped (ext, sizeof (ext), NULL); + buf = GST_BUFFER_NEW_READONLY (ext, sizeof (ext)); res = build_codec_data_extension (GST_MAKE_FOURCC ('d', 'a', 'm', 'r'), buf); gst_buffer_unref (buf); return res; @@ -4572,7 +4585,7 @@ build_h263_extension (void) GST_WRITE_UINT8 (ext + 5, 10); GST_WRITE_UINT8 (ext + 6, 0); - buf = _gst_buffer_new_wrapped (ext, sizeof (ext), NULL); + buf = GST_BUFFER_NEW_READONLY (ext, sizeof (ext)); res = build_codec_data_extension (GST_MAKE_FOURCC ('d', '2', '6', '3'), buf); gst_buffer_unref (buf); return res; @@ -4589,7 +4602,7 @@ build_gama_atom (gdouble gamma) gamma_fp = (guint32) 65536 *gamma; gamma_fp = GUINT32_TO_BE (gamma_fp); - buf = _gst_buffer_new_wrapped (&gamma_fp, 4, NULL); + buf = GST_BUFFER_NEW_READONLY (&gamma_fp, 4); res = build_codec_data_extension (FOURCC_gama, buf); gst_buffer_unref (buf); return res; @@ -4610,7 +4623,7 @@ build_SMI_atom (const GstBuffer * seqh) GST_WRITE_UINT32_LE (data, FOURCC_SEQH); GST_WRITE_UINT32_BE (data + 4, size + 8); gst_buffer_extract ((GstBuffer *) seqh, 0, data + 8, size); - buf = _gst_buffer_new_wrapped (data, size + 8, g_free); + buf = gst_buffer_new_wrapped (data, size + 8); res = build_codec_data_extension (FOURCC_SMI_, buf); gst_buffer_unref (buf); return res; @@ -4619,10 +4632,9 @@ build_SMI_atom (const GstBuffer * seqh) static AtomInfo * build_ima_adpcm_atom (gint channels, gint rate, gint blocksize) { +#define IMA_ADPCM_ATOM_SIZE 20 AtomData *atom_data; - GstBuffer *buf; guint8 *data; - const gint ima_adpcm_atom_size = 20; guint32 fourcc; gint samplesperblock; gint bytespersec; @@ -4632,7 +4644,9 @@ build_ima_adpcm_atom (gint channels, gint rate, gint blocksize) within the WAVE header (below), it's little endian. */ fourcc = MS_WAVE_FOURCC (0x11); - data = g_malloc (ima_adpcm_atom_size); + atom_data = atom_data_new (fourcc); + atom_data_alloc_mem (atom_data, IMA_ADPCM_ATOM_SIZE); + data = atom_data->data; /* This atom's content is a WAVE header, including 2 bytes of extra data. Note that all of this is little-endian, unlike most stuff in qt. */ @@ -4649,10 +4663,6 @@ build_ima_adpcm_atom (gint channels, gint rate, gint blocksize) GST_WRITE_UINT16_LE (data + 16, 2); /* Two extra bytes */ GST_WRITE_UINT16_LE (data + 18, samplesperblock); - buf = _gst_buffer_new_wrapped (data, ima_adpcm_atom_size, g_free); - atom_data = atom_data_new_from_gst_buffer (fourcc, buf); - gst_buffer_unref (buf); - return build_atom_info_wrapper ((Atom *) atom_data, atom_data_copy_data, atom_data_free); } @@ -4689,6 +4699,37 @@ build_ima_adpcm_extension (gint channels, gint rate, gint blocksize) atom_wave_free); } +AtomInfo * +build_ac3_extension (guint8 fscod, guint8 bsid, guint8 bsmod, guint8 acmod, + guint8 lfe_on, guint8 bitrate_code) +{ + AtomData *atom_data = atom_data_new (FOURCC_dac3); + guint8 *data; + + atom_data_alloc_mem (atom_data, 3); + data = atom_data->data; + + /* Bits from the spec + * fscod 2 + * bsid 5 + * bsmod 3 + * acmod 3 + * lfeon 1 + * bit_rate_code 5 + * reserved 5 + */ + + /* Some bit manipulation magic. Need bitwriter */ + data[0] = (fscod << 6) | (bsid << 1) | ((bsmod >> 2) & 1); + data[1] = + ((bsmod & 0x3) << 6) | (acmod << 3) | ((lfe_on & 1) << 2) | ((bitrate_code + >> 3) & 0x3); + data[2] = ((bitrate_code & 0x7) << 5); + + return build_atom_info_wrapper ((Atom *) atom_data, atom_data_copy_data, + atom_data_free); +} + AtomInfo * build_uuid_xmp_atom (GstBuffer * xmp_data) { diff --git a/gst/isomp4/atoms.h b/gst/isomp4/atoms.h index a54838093..b2073c693 100644 --- a/gst/isomp4/atoms.h +++ b/gst/isomp4/atoms.h @@ -415,13 +415,6 @@ typedef struct _SampleTableEntryMP4A GList *extension_atoms; } SampleTableEntryMP4A; -typedef struct _SampleTableEntryMP4S -{ - SampleTableEntry se; - - AtomESDS es; -} SampleTableEntryMP4S; - typedef struct _SampleTableEntryTX3G { SampleTableEntry se; @@ -478,7 +471,8 @@ typedef struct _AtomSTSC typedef struct _AtomSTCO64 { AtomFull header; - + /* Global offset to add to entries when serialising */ + guint32 chunk_offset; ATOM_ARRAY (guint64) entries; } AtomSTCO64; @@ -754,6 +748,7 @@ typedef struct _AtomMOOV AtomUDTA udta; gboolean fragmented; + guint32 chunks_offset; } AtomMOOV; typedef struct _AtomWAVE @@ -828,7 +823,7 @@ AtomTRAK* atom_trak_new (AtomsContext *context); void atom_trak_add_samples (AtomTRAK * trak, guint32 nsamples, guint32 delta, guint32 size, guint64 chunk_offset, gboolean sync, gint64 pts_offset); -void atom_trak_add_elst_entry (AtomTRAK * trak, guint32 duration, +void atom_trak_set_elst_entry (AtomTRAK * trak, gint index, guint32 duration, guint32 media_time, guint32 rate); guint32 atom_trak_get_timescale (AtomTRAK *trak); guint32 atom_trak_get_id (AtomTRAK * trak); @@ -843,12 +838,13 @@ guint64 atom_moov_copy_data (AtomMOOV *atom, guint8 **buffer, guint64 void atom_moov_update_timescale (AtomMOOV *moov, guint32 timescale); void atom_moov_update_duration (AtomMOOV *moov); void atom_moov_set_fragmented (AtomMOOV *moov, gboolean fragmented); -void atom_moov_chunks_add_offset (AtomMOOV *moov, guint32 offset); +void atom_moov_chunks_set_offset (AtomMOOV *moov, guint32 offset); void atom_moov_add_trak (AtomMOOV *moov, AtomTRAK *trak); +guint atom_moov_get_trak_count (AtomMOOV *moov); guint64 atom_mvhd_copy_data (AtomMVHD * atom, guint8 ** buffer, guint64 * size, guint64 * offset); -void atom_stco64_chunks_add_offset (AtomSTCO64 * stco64, guint32 offset); +void atom_stco64_chunks_set_offset (AtomSTCO64 * stco64, guint32 offset); guint64 atom_trak_copy_data (AtomTRAK * atom, guint8 ** buffer, guint64 * size, guint64 * offset); void atom_stbl_clear (AtomSTBL * stbl); @@ -929,15 +925,15 @@ typedef struct void subtitle_sample_entry_init (SubtitleSampleEntry * entry); -void atom_trak_set_audio_type (AtomTRAK * trak, AtomsContext * context, +SampleTableEntryMP4A * atom_trak_set_audio_type (AtomTRAK * trak, AtomsContext * context, AudioSampleEntry * entry, guint32 scale, AtomInfo * ext, gint sample_size); -void atom_trak_set_video_type (AtomTRAK * trak, AtomsContext * context, +SampleTableEntryMP4V * atom_trak_set_video_type (AtomTRAK * trak, AtomsContext * context, VisualSampleEntry * entry, guint32 rate, GList * ext_atoms_list); -void atom_trak_set_subtitle_type (AtomTRAK * trak, AtomsContext * context, +SampleTableEntryTX3G * atom_trak_set_subtitle_type (AtomTRAK * trak, AtomsContext * context, SubtitleSampleEntry * entry); void atom_trak_update_bitrates (AtomTRAK * trak, guint32 avg_bitrate, @@ -946,6 +942,8 @@ void atom_trak_update_bitrates (AtomTRAK * trak, guint32 avg_bitrate, void atom_trak_tx3g_update_dimension (AtomTRAK * trak, guint32 width, guint32 height); +void sample_table_entry_add_ext_atom (SampleTableEntry * ste, AtomInfo * ext); + AtomInfo * build_codec_data_extension (guint32 fourcc, const GstBuffer * codec_data); AtomInfo * build_mov_aac_extension (AtomTRAK * trak, const GstBuffer * codec_data, guint32 avg_bitrate, guint32 max_bitrate); @@ -962,6 +960,9 @@ AtomInfo * build_jp2h_extension (AtomTRAK * trak, gint width, gint heig AtomInfo * build_jp2x_extension (const GstBuffer * prefix); AtomInfo * build_fiel_extension (gint fields); +AtomInfo * build_ac3_extension (guint8 fscod, guint8 bsid, + guint8 bsmod, guint8 acmod, + guint8 lfe_on, guint8 bitrate_code); AtomInfo * build_amr_extension (void); AtomInfo * build_h263_extension (void); AtomInfo * build_gama_atom (gdouble gamma); @@ -974,6 +975,7 @@ AtomInfo * build_uuid_xmp_atom (GstBuffer * xmp); /* * Meta tags functions */ +void atom_udta_clear_tags (AtomUDTA *udta); void atom_udta_add_str_tag (AtomUDTA *udta, guint32 fourcc, const gchar *value); void atom_udta_add_uint_tag (AtomUDTA *udta, guint32 fourcc, guint32 flags, guint32 value); diff --git a/gst/isomp4/atomsrecovery.c b/gst/isomp4/atomsrecovery.c index fec76a37d..83ee37206 100644 --- a/gst/isomp4/atomsrecovery.c +++ b/gst/isomp4/atomsrecovery.c @@ -972,7 +972,7 @@ moov_recov_write_file (MoovRecovFile * moovrf, MdatRecovFile * mdatrf, TrakRecovData *trak = &(moovrf->traks_rd[i]); /* 16 for the mdat header */ gint64 offset = moov_size + ftell (outf) + 16; - atom_stco64_chunks_add_offset (&trak->stbl.stco64, offset); + atom_stco64_chunks_set_offset (&trak->stbl.stco64, offset); } /* write the moov */ diff --git a/gst/isomp4/fourcc.h b/gst/isomp4/fourcc.h index c361e9827..147027bb5 100644 --- a/gst/isomp4/fourcc.h +++ b/gst/isomp4/fourcc.h @@ -83,6 +83,7 @@ G_BEGIN_DECLS #define FOURCC__too GST_MAKE_FOURCC(0xa9,'t','o','o') #define FOURCC__wrt GST_MAKE_FOURCC(0xa9,'w','r','t') #define FOURCC_aART GST_MAKE_FOURCC('a','A','R','T') +#define FOURCC_ac_3 GST_MAKE_FOURCC('a','c','-','3') #define FOURCC_agsm GST_MAKE_FOURCC('a','g','s','m') #define FOURCC_alac GST_MAKE_FOURCC('a','l','a','c') #define FOURCC_alaw GST_MAKE_FOURCC('a','l','a','w') @@ -101,6 +102,8 @@ G_BEGIN_DECLS #define FOURCC_crgn GST_MAKE_FOURCC('c','r','g','n') #define FOURCC_ctab GST_MAKE_FOURCC('c','t','a','b') #define FOURCC_ctts GST_MAKE_FOURCC('c','t','t','s') +#define FOURCC_cslg GST_MAKE_FOURCC('c','s','l','g') +#define FOURCC_dac3 GST_MAKE_FOURCC('d','a','c','3') #define FOURCC_data GST_MAKE_FOURCC('d','a','t','a') #define FOURCC_dcom GST_MAKE_FOURCC('d','c','o','m') #define FOURCC_desc GST_MAKE_FOURCC('d','e','s','c') @@ -319,6 +322,12 @@ G_BEGIN_DECLS #define MS_WAVE_FOURCC(codecid) GST_MAKE_FOURCC( \ 'm', 's', ((codecid)>>8)&0xff, ((codecid)&0xff)) +/* MPEG Application Format , Stereo Video */ +#define FOURCC_ss01 GST_MAKE_FOURCC('s','s','0','1') +#define FOURCC_ss02 GST_MAKE_FOURCC('s','s','0','2') +#define FOURCC_svmi GST_MAKE_FOURCC('s','v','m','i') +#define FOURCC_scdi GST_MAKE_FOURCC('s','c','d','i') + G_END_DECLS #endif /* __FOURCC_H__ */ diff --git a/gst/isomp4/gstqtmux.c b/gst/isomp4/gstqtmux.c index 14e699bd4..c43d612ce 100644 --- a/gst/isomp4/gstqtmux.c +++ b/gst/isomp4/gstqtmux.c @@ -2,6 +2,7 @@ * Copyright (C) 2008-2010 Thiago Santos <thiagoss@embedded.ufcg.edu.br> * Copyright (C) 2008 Mark Nauwelaerts <mnauw@users.sf.net> * Copyright (C) 2010 Nokia Corporation. All rights reserved. + * Copyright (C) 2014 Jan Schmidt <jan@centricular.com> * Contact: Stefan Kost <stefan.kost@nokia.com> * This library is free software; you can redistribute it and/or @@ -80,6 +81,21 @@ * #GstQTMux:streamable allows foregoing to add index metadata (at the end of * file). * + * When the maximum duration to be recorded can be known in advance, #GstQTMux + * also supports a 'Robust Muxing' mode. In robust muxing mode, space for the + * headers are reserved at the start of muxing, and rewritten at a configurable + * interval, so that the output file is always playable, even if the recording + * is interrupted uncleanly by a crash. Robust muxing mode requires a seekable + * output, such as filesink, because it needs to rewrite the start of the file. + * + * To enable robust muxing mode, set the #GstQTMux::reserved-moov-update-period + * and #GstQTMux::reserved-max-duration property. Also present is the + * #GstQTMux::reserved-bytes-per-sec property, which can be increased if + * for some reason the default is not large enough and the initial reserved + * space for headers is too small. Applications can monitor the + * #GstQTMux::reserved-duration-remaining property to see how close to full + * the reserved space is becoming. + * * <refsect2> * <title>Example pipelines</title> * |[ @@ -101,6 +117,8 @@ #include <gst/gst.h> #include <gst/base/gstcollectpads.h> +#include <gst/base/gstbytereader.h> +#include <gst/base/gstbitreader.h> #include <gst/audio/audio.h> #include <gst/video/video.h> #include <gst/tag/tag.h> @@ -146,7 +164,7 @@ GST_DEBUG_CATEGORY_STATIC (gst_qt_mux_debug); * - a 'mfra' box for Fragmented MP4, which is written at the end and * contains a summary of all fragments and seek tables. * - * Currently mp4mux can work in 3 different modes / generate 3 types + * Currently mp4mux can work in 4 different modes / generate 4 types * of output files/streams: * * - Normal mp4: mp4mux will write a little ftyp identifier at the @@ -160,7 +178,7 @@ GST_DEBUG_CATEGORY_STATIC (gst_qt_mux_debug); * the mdat box at EOS. * * - Fragmented mp4: moov header with track headers at start - * but no sample table), followed by N fragments, each containing + * but no sample table, followed by N fragments, each containing * track headers with sample tables followed by some data. Downstream * does not need to be seekable if the 'streamable' flag is TRUE, * as the final mfra and total duration will be omitted. @@ -177,6 +195,19 @@ GST_DEBUG_CATEGORY_STATIC (gst_qt_mux_debug); * out of the temp file at EOS, which can be expensive. Downstream does * not need to be seekable, because of the use of the temp file. * + * - Robust Muxing mode: In this mode, qtmux uses the reserved-max-duration + * and reserved-moov-update-period properties to reserve free space + * at the start of the file and periodically write the MOOV atom out + * to it. That means that killing the muxing at any point still + * results in a playable file, at the cost of wasting some amount of + * free space at the start of file. The approximate recording duration + * has to be known in advance to estimate how much free space to reserve + * for the moov, and the downstream must be seekable. + * If the moov header grows larger than the reserved space, an error + * is generated - so it's better to over-estimate the amount of space + * to reserve. To ensure the file is playable at any point, the moov + * is updated using a 'ping-pong' strategy, so the output is never in + * an invalid state. */ #ifndef GST_REMOVE_DEPRECATED @@ -228,6 +259,10 @@ enum PROP_MOOV_RECOV_FILE, PROP_FRAGMENT_DURATION, PROP_STREAMABLE, + PROP_RESERVED_MAX_DURATION, + PROP_RESERVED_DURATION_REMAINING, + PROP_RESERVED_MOOV_UPDATE_PERIOD, + PROP_RESERVED_BYTES_PER_SEC, #ifndef GST_REMOVE_DEPRECATED PROP_DTS_METHOD, #endif @@ -248,7 +283,9 @@ enum #ifndef GST_REMOVE_DEPRECATED #define DEFAULT_DTS_METHOD DTS_METHOD_REORDER #endif - +#define DEFAULT_RESERVED_MAX_DURATION GST_CLOCK_TIME_NONE +#define DEFAULT_RESERVED_MOOV_UPDATE_PERIOD GST_CLOCK_TIME_NONE +#define DEFAULT_RESERVED_BYTES_PER_SEC_PER_TRAK 550 static void gst_qt_mux_finalize (GObject * object); @@ -275,6 +312,9 @@ static GstFlowReturn gst_qt_mux_handle_buffer (GstCollectPads * pads, static GstFlowReturn gst_qt_mux_add_buffer (GstQTMux * qtmux, GstQTPad * pad, GstBuffer * buf); +static GstFlowReturn +gst_qt_mux_robust_recording_rewrite_moov (GstQTMux * qtmux); + static GstElementClass *parent_class = NULL; static void @@ -410,6 +450,34 @@ gst_qt_mux_class_init (GstQTMuxClass * klass) g_object_class_install_property (gobject_class, PROP_STREAMABLE, g_param_spec_boolean ("streamable", "Streamable", streamable_desc, streamable, streamable_flags | G_PARAM_STATIC_STRINGS)); + g_object_class_install_property (gobject_class, PROP_RESERVED_MAX_DURATION, + g_param_spec_uint64 ("reserved-max-duration", + "Reserved maximum file duration (ns)", + "When set to a value > 0, reserves space for index tables at the " + "beginning of the file.", + 0, G_MAXUINT64, DEFAULT_RESERVED_MAX_DURATION, + G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); + g_object_class_install_property (gobject_class, + PROP_RESERVED_DURATION_REMAINING, + g_param_spec_uint64 ("reserved-duration-remaining", + "Report the approximate amount of remaining recording space (ns)", + "Reports the approximate amount of remaining moov header space " + "reserved using reserved-max-duration", 0, G_MAXUINT64, 0, + G_PARAM_READABLE | G_PARAM_STATIC_STRINGS)); + g_object_class_install_property (gobject_class, + PROP_RESERVED_MOOV_UPDATE_PERIOD, + g_param_spec_uint64 ("reserved-moov-update-period", + "Interval at which to update index tables (ns)", + "When used with reserved-max-duration, periodically updates the " + "index tables with information muxed so far.", 0, G_MAXUINT64, + DEFAULT_RESERVED_MOOV_UPDATE_PERIOD, + G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); + g_object_class_install_property (gobject_class, PROP_RESERVED_BYTES_PER_SEC, + g_param_spec_uint ("reserved-bytes-per-sec", + "Reserved MOOV bytes per second, per track", + "Multiplier for converting reserved-max-duration into bytes of header to reserve, per second, per track", + 0, 10000, DEFAULT_RESERVED_BYTES_PER_SEC_PER_TRAK, + G_PARAM_READWRITE | G_PARAM_CONSTRUCT | G_PARAM_STATIC_STRINGS)); gstelement_class->request_new_pad = GST_DEBUG_FUNCPTR (gst_qt_mux_request_new_pad); @@ -425,7 +493,9 @@ gst_qt_mux_pad_reset (GstQTPad * qtpad) qtpad->sample_size = 0; qtpad->sync = FALSE; qtpad->last_dts = 0; + qtpad->dts_adjustment = GST_CLOCK_TIME_NONE; qtpad->first_ts = GST_CLOCK_TIME_NONE; + qtpad->first_dts = GST_CLOCK_TIME_NONE; qtpad->prepare_buf_func = NULL; qtpad->create_empty_buffer = NULL; qtpad->avg_bitrate = 0; @@ -468,6 +538,7 @@ gst_qt_mux_reset (GstQTMux * qtmux, gboolean alloc) qtmux->state = GST_QT_MUX_STATE_NONE; qtmux->header_size = 0; qtmux->mdat_size = 0; + qtmux->moov_pos = 0; qtmux->mdat_pos = 0; qtmux->longest_chunk = GST_CLOCK_TIME_NONE; qtmux->video_pads = 0; @@ -527,6 +598,11 @@ gst_qt_mux_reset (GstQTMux * qtmux, gboolean alloc) atom_moov_add_trak (qtmux->moov, qtpad->trak); } } + + qtmux->reserved_moov_size = 0; + qtmux->last_moov_update = GST_CLOCK_TIME_NONE; + qtmux->muxed_since_last_update = 0; + qtmux->reserved_duration_remaining = GST_CLOCK_TIME_NONE; } static void @@ -551,6 +627,11 @@ gst_qt_mux_init (GstQTMux * qtmux, GstQTMuxClass * qtmux_klass) /* properties set to default upon construction */ + qtmux->reserved_max_duration = DEFAULT_RESERVED_MAX_DURATION; + qtmux->reserved_moov_update_period = DEFAULT_RESERVED_MOOV_UPDATE_PERIOD; + qtmux->reserved_bytes_per_sec_per_trak = + DEFAULT_RESERVED_BYTES_PER_SEC_PER_TRAK; + /* always need this */ qtmux->context = atoms_context_new (gst_qt_mux_map_format_to_flavor (qtmux_klass->format)); @@ -643,6 +724,82 @@ gst_qt_mux_prepare_tx3g_buffer (GstQTPad * qtpad, GstBuffer * buf, return newbuf; } +static void +gst_qt_mux_pad_add_ac3_extension (GstQTMux * qtmux, GstQTPad * qtpad, + guint8 fscod, guint8 frmsizcod, guint8 bsid, guint8 bsmod, guint8 acmod, + guint8 lfe_on) +{ + AtomInfo *ext; + + g_return_if_fail (qtpad->trak_ste); + + ext = build_ac3_extension (fscod, bsid, bsmod, acmod, lfe_on, frmsizcod >> 1); /* bitrate_code is inside frmsizcod */ + + sample_table_entry_add_ext_atom (qtpad->trak_ste, ext); +} + +static GstBuffer * +gst_qt_mux_prepare_parse_ac3_frame (GstQTPad * qtpad, GstBuffer * buf, + GstQTMux * qtmux) +{ + GstMapInfo map; + GstByteReader reader; + guint off; + + if (!gst_buffer_map (buf, &map, GST_MAP_READ)) { + GST_WARNING_OBJECT (qtpad->collect.pad, "Failed to map buffer"); + return buf; + } + + if (G_UNLIKELY (map.size < 8)) + goto done; + + gst_byte_reader_init (&reader, map.data, map.size); + off = gst_byte_reader_masked_scan_uint32 (&reader, 0xffff0000, 0x0b770000, + 0, map.size); + + if (off != -1) { + GstBitReader bits; + guint8 fscod, frmsizcod, bsid, bsmod, acmod, lfe_on; + + GST_DEBUG_OBJECT (qtpad->collect.pad, "Found ac3 sync point at offset: %u", + off); + + gst_bit_reader_init (&bits, map.data, map.size); + + /* off + sync + crc */ + gst_bit_reader_skip_unchecked (&bits, off * 8 + 16 + 16); + + fscod = gst_bit_reader_get_bits_uint8_unchecked (&bits, 2); + frmsizcod = gst_bit_reader_get_bits_uint8_unchecked (&bits, 6); + bsid = gst_bit_reader_get_bits_uint8_unchecked (&bits, 5); + bsmod = gst_bit_reader_get_bits_uint8_unchecked (&bits, 3); + acmod = gst_bit_reader_get_bits_uint8_unchecked (&bits, 3); + + if ((acmod & 0x1) && (acmod != 0x1)) /* 3 front channels */ + gst_bit_reader_skip_unchecked (&bits, 2); + if ((acmod & 0x4)) /* if a surround channel exists */ + gst_bit_reader_skip_unchecked (&bits, 2); + if (acmod == 0x2) /* if in 2/0 mode */ + gst_bit_reader_skip_unchecked (&bits, 2); + + lfe_on = gst_bit_reader_get_bits_uint8_unchecked (&bits, 1); + + gst_qt_mux_pad_add_ac3_extension (qtmux, qtpad, fscod, frmsizcod, bsid, + bsmod, acmod, lfe_on); + + /* AC-3 spec says that those values should be constant for the + * whole stream when muxed in mp4. We trust the input follows it */ + GST_DEBUG_OBJECT (qtpad->collect.pad, "Data parsed, removing " + "prepare buffer function"); + qtpad->prepare_buf_func = NULL; + } + +done: + gst_buffer_unmap (buf, &map); + return buf; +} + static GstBuffer * gst_qt_mux_create_empty_tx3g_buffer (GstQTPad * qtpad, gint64 duration) { @@ -1209,6 +1366,9 @@ gst_qt_mux_add_metadata_tags (GstQTMux * qtmux, const GstTagList * list, if (!tag_matches) return; + /* Clear existing tags so we don't add them over and over */ + atom_udta_clear_tags (udta); + for (i = 0; tag_matches[i].fourcc; i++) { fourcc = tag_matches[i].fourcc; tag = tag_matches[i].gsttag; @@ -1267,11 +1427,14 @@ gst_qt_mux_add_metadata_tags (GstQTMux * qtmux, const GstTagList * list, static void gst_qt_mux_setup_metadata (GstQTMux * qtmux) { - const GstTagList *tags; + const GstTagList *tags = NULL; GSList *walk; GST_OBJECT_LOCK (qtmux); - tags = gst_tag_setter_get_tag_list (GST_TAG_SETTER (qtmux)); + if (qtmux->tags_changed) { + tags = gst_tag_setter_get_tag_list (GST_TAG_SETTER (qtmux)); + qtmux->tags_changed = FALSE; + } GST_OBJECT_UNLOCK (qtmux); GST_LOG_OBJECT (qtmux, "tags: %" GST_PTR_FORMAT, tags); @@ -1289,7 +1452,7 @@ gst_qt_mux_setup_metadata (GstQTMux * qtmux) gst_qt_mux_add_xmp_tags (qtmux, copy); gst_tag_list_unref (copy); } else { - GST_DEBUG_OBJECT (qtmux, "No tags received"); + GST_DEBUG_OBJECT (qtmux, "No new tags received"); } for (walk = qtmux->sinkpads; walk; walk = g_slist_next (walk)) { @@ -1297,13 +1460,14 @@ gst_qt_mux_setup_metadata (GstQTMux * qtmux) GstQTPad *qpad = (GstQTPad *) cdata; GstPad *pad = qpad->collect.pad; - if (qpad->tags) { + if (qpad->tags_changed && qpad->tags) { GST_DEBUG_OBJECT (pad, "Adding tags"); gst_tag_list_remove_tag (qpad->tags, GST_TAG_CONTAINER_FORMAT); gst_qt_mux_add_metadata_tags (qtmux, qpad->tags, &qpad->trak->udta); + qpad->tags_changed = FALSE; GST_DEBUG_OBJECT (pad, "Tags added"); } else { - GST_DEBUG_OBJECT (pad, "No tags received"); + GST_DEBUG_OBJECT (pad, "No new tags received"); } } } @@ -1459,46 +1623,55 @@ fail: */ static GstFlowReturn gst_qt_mux_send_mdat_header (GstQTMux * qtmux, guint64 * off, guint64 size, - gboolean extended) + gboolean extended, gboolean fsync_after) { - Atom *node_header; GstBuffer *buf; - guint8 *data = NULL; - guint64 offset = 0; + GstMapInfo map; GST_DEBUG_OBJECT (qtmux, "Sending mdat's atom header, " "size %" G_GUINT64_FORMAT, size); - node_header = g_malloc0 (sizeof (Atom)); - node_header->type = FOURCC_mdat; + /* if the qtmux state is EOS, really write the mdat, otherwise + * allow size == 0 for a placeholder atom */ + if (qtmux->state == GST_QT_MUX_STATE_EOS || size > 0) + size += 8; + if (extended) { - /* use extended size */ - node_header->size = 1; - node_header->extended_size = 0; - if (size) - node_header->extended_size = size + 16; + gboolean large_file = (size > MDAT_LARGE_FILE_LIMIT); + /* Always write 16-bytes, but put a free atom first + * if the size is < 4GB. */ + buf = gst_buffer_new_and_alloc (16); + gst_buffer_map (buf, &map, GST_MAP_WRITE); + + if (large_file) { + /* Write extended mdat header and large_size field */ + GST_WRITE_UINT32_BE (map.data, 1); + GST_WRITE_UINT32_LE (map.data + 4, FOURCC_mdat); + GST_WRITE_UINT64_BE (map.data + 8, size + 8); + } else { + /* Write an empty free atom, then standard 32-bit mdat */ + GST_WRITE_UINT32_BE (map.data, 8); + GST_WRITE_UINT32_LE (map.data + 4, FOURCC_free); + GST_WRITE_UINT32_BE (map.data + 8, size); + GST_WRITE_UINT32_LE (map.data + 12, FOURCC_mdat); + } + gst_buffer_unmap (buf, &map); } else { - node_header->size = size + 8; + buf = gst_buffer_new_and_alloc (8); + gst_buffer_map (buf, &map, GST_MAP_WRITE); + + /* Vanilla 32-bit mdat */ + GST_WRITE_UINT32_BE (map.data, size); + GST_WRITE_UINT32_LE (map.data + 4, FOURCC_mdat); + gst_buffer_unmap (buf, &map); } - size = offset = 0; - if (atom_copy_data (node_header, &data, &size, &offset) == 0) - goto serialize_error; + GST_LOG_OBJECT (qtmux, "Pushing mdat header"); + if (fsync_after) + GST_BUFFER_FLAG_SET (buf, GST_BUFFER_FLAG_SYNC_AFTER); - buf = _gst_buffer_new_take_data (data, offset); - g_free (node_header); - - GST_LOG_OBJECT (qtmux, "Pushing mdat start"); return gst_qt_mux_send_buffer (qtmux, buf, off, FALSE); - /* ERRORS */ -serialize_error: - { - GST_ELEMENT_ERROR (qtmux, STREAM, MUX, (NULL), - ("Failed to serialize mdat")); - g_free (node_header); - return GST_FLOW_ERROR; - } } /* @@ -1507,38 +1680,20 @@ serialize_error: */ static GstFlowReturn gst_qt_mux_update_mdat_size (GstQTMux * qtmux, guint64 mdat_pos, - guint64 mdat_size, guint64 * offset) + guint64 mdat_size, guint64 * offset, gboolean fsync_after) { - GstBuffer *buf; - gboolean large_file; GstSegment segment; - GstMapInfo map; - - large_file = (mdat_size > MDAT_LARGE_FILE_LIMIT); - if (large_file) - mdat_pos += 8; + /* We must have recorded the mdat position for this to work */ + g_assert (mdat_pos != 0); /* seek and rewrite the header */ gst_segment_init (&segment, GST_FORMAT_BYTES); segment.start = mdat_pos; gst_pad_push_event (qtmux->srcpad, gst_event_new_segment (&segment)); - if (large_file) { - buf = gst_buffer_new_and_alloc (sizeof (guint64)); - gst_buffer_map (buf, &map, GST_MAP_WRITE); - GST_WRITE_UINT64_BE (map.data, mdat_size + 16); - } else { - buf = gst_buffer_new_and_alloc (16); - gst_buffer_map (buf, &map, GST_MAP_WRITE); - GST_WRITE_UINT32_BE (map.data, 8); - GST_WRITE_UINT32_LE (map.data + 4, FOURCC_free); - GST_WRITE_UINT32_BE (map.data + 8, mdat_size + 8); - GST_WRITE_UINT32_LE (map.data + 12, FOURCC_mdat); - } - gst_buffer_unmap (buf, &map); - - return gst_qt_mux_send_buffer (qtmux, buf, offset, FALSE); + return gst_qt_mux_send_mdat_header (qtmux, offset, mdat_size, TRUE, + fsync_after); } static GstFlowReturn @@ -1645,15 +1800,83 @@ gst_qt_mux_set_header_on_caps (GstQTMux * mux, GstBuffer * buf) gst_caps_unref (caps); } +/* + * Write out a free space atom. The offset is adjusted by the full + * size, but a smaller buffer is sent + */ +static GstFlowReturn +gst_qt_mux_send_free_atom (GstQTMux * qtmux, guint64 * off, guint32 size, + gboolean fsync_after) +{ + Atom *node_header; + GstBuffer *buf; + guint8 *data = NULL; + guint64 offset = 0, bsize = 0; + GstFlowReturn ret; + + GST_DEBUG_OBJECT (qtmux, "Sending free atom header of size %u", size); + + /* We can't make a free space atom smaller than the header */ + if (size < 8) + goto too_small; + + node_header = g_malloc0 (sizeof (Atom)); + node_header->type = FOURCC_free; + node_header->size = size; + + bsize = offset = 0; + if (atom_copy_data (node_header, &data, &bsize, &offset) == 0) + goto serialize_error; + + buf = _gst_buffer_new_take_data (data, offset); + g_free (node_header); + + if (fsync_after) + GST_BUFFER_FLAG_SET (buf, GST_BUFFER_FLAG_SYNC_AFTER); + + GST_LOG_OBJECT (qtmux, "Pushing free atom"); + ret = gst_qt_mux_send_buffer (qtmux, buf, off, FALSE); + + if (off) { + GstSegment segment; + + *off += size - 8; + + /* Make sure downstream position ends up at the end of this free box */ + gst_segment_init (&segment, GST_FORMAT_BYTES); + segment.start = *off; + gst_pad_push_event (qtmux->srcpad, gst_event_new_segment (&segment)); + } + + return ret; + + /* ERRORS */ +too_small: + { + GST_ELEMENT_ERROR (qtmux, STREAM, MUX, (NULL), + ("Not enough free reserved space")); + return GST_FLOW_ERROR; + } +serialize_error: + { + GST_ELEMENT_ERROR (qtmux, STREAM, MUX, (NULL), + ("Failed to serialize mdat")); + g_free (node_header); + return GST_FLOW_ERROR; + } +} + static void -gst_qt_mux_configure_moov (GstQTMux * qtmux, guint32 * _timescale) +gst_qt_mux_configure_moov (GstQTMux * qtmux) { - gboolean fragmented; + gboolean fragmented = FALSE; guint32 timescale; GST_OBJECT_LOCK (qtmux); timescale = qtmux->timescale; - fragmented = qtmux->fragment_sequence > 0; + if (qtmux->mux_mode == GST_QT_MUX_MODE_FRAGMENTED || + qtmux->mux_mode == GST_QT_MUX_MODE_FRAGMENTED_STREAMABLE) + fragmented = TRUE; GST_OBJECT_UNLOCK (qtmux); /* inform lower layers of our property wishes, and determine duration. @@ -1665,13 +1888,11 @@ gst_qt_mux_configure_moov (GstQTMux * qtmux, guint32 * _timescale) atom_moov_set_fragmented (qtmux->moov, fragmented); atom_moov_update_duration (qtmux->moov); - - if (_timescale) - *_timescale = timescale; } static GstFlowReturn -gst_qt_mux_send_moov (GstQTMux * qtmux, guint64 * _offset, gboolean mind_fast) +gst_qt_mux_send_moov (GstQTMux * qtmux, guint64 * _offset, + guint64 padded_moov_size, gboolean mind_fast, gboolean fsync_after) { guint64 offset = 0, size = 0; guint8 *data; @@ -1684,14 +1905,41 @@ gst_qt_mux_send_moov (GstQTMux * qtmux, guint64 * _offset, gboolean mind_fast) GST_LOG_OBJECT (qtmux, "Copying movie header into buffer"); if (!atom_moov_copy_data (qtmux->moov, &data, &size, &offset)) goto serialize_error; + qtmux->last_moov_size = offset; + /* Check we have enough reserved space for this and a Free atom */ + if (padded_moov_size > 0 && offset + 8 > padded_moov_size) + goto too_small_reserved; buf = _gst_buffer_new_take_data (data, offset); GST_DEBUG_OBJECT (qtmux, "Pushing moov atoms"); - gst_qt_mux_set_header_on_caps (qtmux, buf); + + /* If at EOS, this is the final moov, put in the streamheader + * (apparently used by a flumotion util) */ + if (qtmux->state == GST_QT_MUX_STATE_EOS) + gst_qt_mux_set_header_on_caps (qtmux, buf); + + if (fsync_after) + GST_BUFFER_FLAG_SET (buf, GST_BUFFER_FLAG_SYNC_AFTER); ret = gst_qt_mux_send_buffer (qtmux, buf, _offset, mind_fast); - return ret; + /* Write out a free atom if needed */ + if (ret == GST_FLOW_OK && offset < padded_moov_size) { + GST_LOG_OBJECT (qtmux, "Writing out free atom of size %u", + (guint32) (padded_moov_size - offset)); + ret = + gst_qt_mux_send_free_atom (qtmux, _offset, padded_moov_size - offset, + fsync_after); + } + return ret; +too_small_reserved: + { + GST_ELEMENT_ERROR (qtmux, STREAM, MUX, + ("Not enough free reserved header space"), + ("Needed %" G_GUINT64_FORMAT " bytes, reserved %" G_GUINT64_FORMAT, + offset, padded_moov_size)); + return GST_FLOW_ERROR; + } serialize_error: { g_free (data); @@ -1820,9 +2068,16 @@ gst_qt_mux_start_file (GstQTMux * qtmux) GstCaps *caps; GstSegment segment; gchar s_id[32]; + GstClockTime reserved_max_duration; + guint reserved_bytes_per_sec_per_trak; GST_DEBUG_OBJECT (qtmux, "starting file"); + GST_OBJECT_LOCK (qtmux); + reserved_max_duration = qtmux->reserved_max_duration; + reserved_bytes_per_sec_per_trak = qtmux->reserved_bytes_per_sec_per_trak; + GST_OBJECT_UNLOCK (qtmux); + /* stream-start (FIXME: create id based on input ids) */ g_snprintf (s_id, sizeof (s_id), "qtmux-%08x", g_random_int ()); gst_pad_push_event (qtmux->srcpad, gst_event_new_stream_start (s_id)); @@ -1850,10 +2105,13 @@ gst_qt_mux_start_file (GstQTMux * qtmux) qtmux->mux_mode = GST_QT_MUX_MODE_FRAGMENTED; } else if (qtmux->fast_start) { qtmux->mux_mode = GST_QT_MUX_MODE_FAST_START; + } else if (reserved_max_duration != GST_CLOCK_TIME_NONE) { + qtmux->mux_mode = GST_QT_MUX_MODE_ROBUST_RECORDING; } switch (qtmux->mux_mode) { case GST_QT_MUX_MODE_MOOV_AT_END: + case GST_QT_MUX_MODE_ROBUST_RECORDING: /* We have to be able to seek to rewrite the mdat header, or any * moov atom we write will not be visible in the file, because an * MDAT with 0 as the size covers the rest of the file. A file @@ -1888,6 +2146,11 @@ gst_qt_mux_start_file (GstQTMux * qtmux) if (qtmux->moov_recov_file_path) { gst_qt_mux_prepare_moov_recovery (qtmux); } + + /* Make sure the first time we update the moov, we'll + * include any tagsetter tags */ + qtmux->tags_changed = TRUE; + GST_OBJECT_UNLOCK (qtmux); /* @@ -1902,11 +2165,109 @@ gst_qt_mux_start_file (GstQTMux * qtmux) if (ret != GST_FLOW_OK) break; - /* store the mdat position for rewriting later ... */ + /* Store this as the mdat offset for later updating + * when we write the moov */ qtmux->mdat_pos = qtmux->header_size; /* extended atom in case we go over 4GB while writing and need * the full 64-bit atom */ - ret = gst_qt_mux_send_mdat_header (qtmux, &qtmux->header_size, 0, TRUE); + ret = + gst_qt_mux_send_mdat_header (qtmux, &qtmux->header_size, 0, TRUE, + FALSE); + break; + case GST_QT_MUX_MODE_ROBUST_RECORDING: + + ret = gst_qt_mux_prepare_and_send_ftyp (qtmux); + if (ret != GST_FLOW_OK) + break; + + /* Pad ftyp out to an 8-byte boundary before starting the moov + * ping pong region. It should be well less than 1 disk sector, + * unless there's a bajillion compatible types listed, + * but let's be sure the free atom doesn't cross a sector + * boundary anyway */ + if (qtmux->header_size % 8) { + /* Extra 8 bytes for the padding free atom header */ + guint padding = (guint) (16 - (qtmux->header_size % 8)); + GST_LOG_OBJECT (qtmux, "Rounding ftyp by %u bytes", padding); + ret = + gst_qt_mux_send_free_atom (qtmux, &qtmux->header_size, padding, + FALSE); + if (ret != GST_FLOW_OK) + return ret; + } + + /* Store this as the moov offset for later updating. + * We record mdat position below */ + qtmux->moov_pos = qtmux->header_size; + + /* Set up the initial 'ping' state of the ping-pong buffers */ + qtmux->reserved_moov_first_active = TRUE; + + gst_qt_mux_configure_moov (qtmux); + gst_qt_mux_setup_metadata (qtmux); + /* Empty free atom to begin, starting on an 8-byte boundary */ + ret = gst_qt_mux_send_free_atom (qtmux, &qtmux->header_size, 8, FALSE); + if (ret != GST_FLOW_OK) + return ret; + /* Moov header, not padded yet */ + ret = gst_qt_mux_send_moov (qtmux, &qtmux->header_size, 0, FALSE, FALSE); + if (ret != GST_FLOW_OK) + return ret; + /* The moov we just sent contains the 'base' size of the moov, before + * we put in any time-dependent per-trak data. Use that to make + * a good estimate of how much extra to reserve */ + /* Calculate how much space to reserve for our MOOV atom. + * We actually reserve twice that, for ping-pong buffers */ + qtmux->base_moov_size = qtmux->last_moov_size; + GST_LOG_OBJECT (qtmux, "Base moov size is %u before any indexes", + qtmux->base_moov_size); + qtmux->reserved_moov_size = qtmux->base_moov_size + + gst_util_uint64_scale (reserved_max_duration, + reserved_bytes_per_sec_per_trak * + atom_moov_get_trak_count (qtmux->moov), GST_SECOND); + + /* Need space for at least 4 atom headers. More really, but + * this as an absolute minimum */ + if (qtmux->reserved_moov_size < 4 * 8) + goto reserved_moov_too_small; + + GST_DEBUG_OBJECT (qtmux, "reserving header area of size %u", + 2 * qtmux->reserved_moov_size + 16); + + GST_OBJECT_LOCK (qtmux); + qtmux->reserved_duration_remaining = + gst_util_uint64_scale (qtmux->reserved_moov_size - + qtmux->base_moov_size, GST_SECOND, + reserved_bytes_per_sec_per_trak * + atom_moov_get_trak_count (qtmux->moov)); + GST_OBJECT_UNLOCK (qtmux); + + /* Now that we know how much reserved space is targetted, + * output a free atom to fill the extra reserved */ + ret = gst_qt_mux_send_free_atom (qtmux, &qtmux->header_size, + qtmux->reserved_moov_size - qtmux->base_moov_size, FALSE); + if (ret != GST_FLOW_OK) + return ret; + + /* Then a free atom containing 'pong' buffer, with an + * extra 8 bytes to account for the free atom header itself */ + ret = gst_qt_mux_send_free_atom (qtmux, &qtmux->header_size, + qtmux->reserved_moov_size + 8, FALSE); + if (ret != GST_FLOW_OK) + return ret; + + /* extra atoms go after the free/moov(s), before the mdat */ + ret = + gst_qt_mux_send_extra_atoms (qtmux, TRUE, &qtmux->header_size, FALSE); + if (ret != GST_FLOW_OK) + return ret; + + qtmux->mdat_pos = qtmux->header_size; + /* extended atom in case we go over 4GB while writing and need + * the full 64-bit atom */ + ret = + gst_qt_mux_send_mdat_header (qtmux, &qtmux->header_size, 0, TRUE, + FALSE); break; case GST_QT_MUX_MODE_FAST_START: GST_OBJECT_LOCK (qtmux); @@ -1922,16 +2283,18 @@ gst_qt_mux_start_file (GstQTMux * qtmux) ret = gst_qt_mux_prepare_and_send_ftyp (qtmux); if (ret != GST_FLOW_OK) break; - /* well, it's moov pos if fragmented ... */ - qtmux->mdat_pos = qtmux->header_size; + /* store the moov pos so we can update the duration later + * in non-streamable mode */ + qtmux->moov_pos = qtmux->header_size; + GST_DEBUG_OBJECT (qtmux, "fragment duration %d ms, writing headers", qtmux->fragment_duration); /* also used as snapshot marker to indicate fragmented file */ qtmux->fragment_sequence = 1; /* prepare moov and/or tags */ - gst_qt_mux_configure_moov (qtmux, NULL); + gst_qt_mux_configure_moov (qtmux); gst_qt_mux_setup_metadata (qtmux); - ret = gst_qt_mux_send_moov (qtmux, &qtmux->header_size, FALSE); + ret = gst_qt_mux_send_moov (qtmux, &qtmux->header_size, 0, FALSE, FALSE); if (ret != GST_FLOW_OK) return ret; /* extra atoms */ @@ -1953,7 +2316,12 @@ invalid_isml: ("Cannot create an ISML file with 0 fragment duration"), (NULL)); return GST_FLOW_ERROR; } - +reserved_moov_too_small: + { + GST_ELEMENT_ERROR (qtmux, STREAM, MUX, + ("Not enough reserved space for creating headers"), (NULL)); + return GST_FLOW_ERROR; + } open_failed: { GST_ELEMENT_ERROR (qtmux, RESOURCE, OPEN_READ_WRITE, @@ -1965,22 +2333,11 @@ open_failed: } static GstFlowReturn -gst_qt_mux_stop_file (GstQTMux * qtmux) +gst_qt_mux_send_last_buffers (GstQTMux * qtmux) { - gboolean ret = GST_FLOW_OK; - guint64 offset = 0, size = 0; + GstFlowReturn ret = GST_FLOW_OK; GSList *walk; - gboolean large_file; - guint32 timescale; - GstClockTime first_ts = GST_CLOCK_TIME_NONE; - /* for setting some subtitles fields */ - guint max_width = 0; - guint max_height = 0; - - GST_DEBUG_OBJECT (qtmux, "Updating remaining values and sending last data"); - - /* pushing last buffers for each pad */ for (walk = qtmux->collect->data; walk; walk = g_slist_next (walk)) { GstCollectData *cdata = (GstCollectData *) walk->data; GstQTPad *qtpad = (GstQTPad *) cdata; @@ -2002,19 +2359,43 @@ gst_qt_mux_stop_file (GstQTMux * qtmux) "flow return: %s", GST_PAD_NAME (qtpad->collect.pad), gst_flow_get_name (ret)); } + } - /* having flushed above, can check for buffers now */ - if (!GST_CLOCK_TIME_IS_VALID (qtpad->first_ts)) { - GST_DEBUG_OBJECT (qtmux, "Pad %s has no buffers", + return ret; +} + +static void +gst_qt_mux_update_global_statistics (GstQTMux * qtmux) +{ + GSList *walk; + + /* for setting some subtitles fields */ + guint max_width = 0; + guint max_height = 0; + + qtmux->first_ts = qtmux->last_dts = GST_CLOCK_TIME_NONE; + + for (walk = qtmux->collect->data; walk; walk = g_slist_next (walk)) { + GstCollectData *cdata = (GstCollectData *) walk->data; + GstQTPad *qtpad = (GstQTPad *) cdata; + + if (!qtpad->fourcc) { + GST_DEBUG_OBJECT (qtmux, "Pad %s has never had buffers", GST_PAD_NAME (qtpad->collect.pad)); continue; } - /* determine max stream duration */ - if (!GST_CLOCK_TIME_IS_VALID (first_ts) || - (GST_CLOCK_TIME_IS_VALID (qtpad->first_ts) && - qtpad->last_dts > first_ts)) { - first_ts = qtpad->last_dts; + /* having flushed above, can check for buffers now */ + if (GST_CLOCK_TIME_IS_VALID (qtpad->first_ts)) { + /* determine max stream duration */ + if (!GST_CLOCK_TIME_IS_VALID (qtmux->last_dts) + || qtpad->last_dts > qtmux->last_dts) { + qtmux->last_dts = qtpad->last_dts; + } + if (!GST_CLOCK_TIME_IS_VALID (qtmux->first_ts) + || qtpad->first_ts < qtmux->first_ts) { + qtmux->first_ts = qtpad->first_ts; + } } /* subtitles need to know the video width/height, @@ -2054,16 +2435,96 @@ gst_qt_mux_stop_file (GstQTMux * qtmux) atom_trak_tx3g_update_dimension (qtpad->trak, max_width, max_height); } } +} - switch (qtmux->mux_mode) { - case GST_QT_MUX_MODE_FRAGMENTED_STREAMABLE: - { - /* Streamable mode; no need to write duration or MFRA */ - GST_DEBUG_OBJECT (qtmux, "streamable file; nothing to stop"); - return GST_FLOW_OK; +/* Called after gst_qt_mux_update_global_statistics() updates the + * first_ts tracking, to create/set edit lists for delayed streams */ +static void +gst_qt_mux_update_edit_lists (GstQTMux * qtmux) +{ + GSList *walk; + + GST_DEBUG_OBJECT (qtmux, "Media first ts selected: %" GST_TIME_FORMAT, + GST_TIME_ARGS (qtmux->first_ts)); + /* add/update EDTSs for late streams. configure_moov will have + * set the trak durations above by summing the sample tables, + * here we extend that if needing to insert an empty segment */ + for (walk = qtmux->collect->data; walk; walk = g_slist_next (walk)) { + GstCollectData *cdata = (GstCollectData *) walk->data; + GstQTPad *qtpad = (GstQTPad *) cdata; + + if (GST_CLOCK_TIME_IS_VALID (qtpad->first_ts)) { + guint32 lateness = 0; + guint32 duration = qtpad->trak->tkhd.duration; + gboolean has_gap; + gboolean has_shift; + + has_gap = (qtpad->first_ts > (qtmux->first_ts + qtpad->dts_adjustment)); + has_shift = (qtpad->dts_adjustment > 0); + + if (has_gap) { + GstClockTime diff; + + diff = qtpad->first_ts - (qtmux->first_ts + qtpad->dts_adjustment); + lateness = gst_util_uint64_scale_round (diff, + qtmux->timescale, GST_SECOND); + + GST_DEBUG_OBJECT (qtmux, "Pad %s is a late stream by %" GST_TIME_FORMAT, + GST_PAD_NAME (qtpad->collect.pad), GST_TIME_ARGS (lateness)); + + atom_trak_set_elst_entry (qtpad->trak, 0, lateness, (guint32) - 1, + (guint32) (1 * 65536.0)); + } + + if (has_gap || has_shift) { + GstClockTime ctts; + guint32 media_start; + + ctts = qtpad->first_ts - qtpad->first_dts; + media_start = gst_util_uint64_scale_round (ctts, + atom_trak_get_timescale (qtpad->trak), GST_SECOND); + + atom_trak_set_elst_entry (qtpad->trak, 1, duration, media_start, + (guint32) (1 * 65536.0)); + } + + /* need to add the empty time to the trak duration */ + duration += lateness; + + qtpad->trak->tkhd.duration = duration; + + /* And possibly grow the moov duration */ + if (duration > qtmux->moov->mvhd.time_info.duration) { + qtmux->moov->mvhd.time_info.duration = duration; + qtmux->moov->mvex.mehd.fragment_duration = duration; + } } - case GST_QT_MUX_MODE_FRAGMENTED: - { + } +} + +static GstFlowReturn +gst_qt_mux_stop_file (GstQTMux * qtmux) +{ + gboolean ret = GST_FLOW_OK; + guint64 offset = 0, size = 0; + gboolean large_file; + + GST_DEBUG_OBJECT (qtmux, "Updating remaining values and sending last data"); + + /* pushing last buffers for each pad */ + if ((ret = gst_qt_mux_send_last_buffers (qtmux)) != GST_FLOW_OK) + return ret; + + if (qtmux->mux_mode == GST_QT_MUX_MODE_FRAGMENTED_STREAMABLE) { + /* Streamable mode; no need to write duration or MFRA */ + GST_DEBUG_OBJECT (qtmux, "streamable file; nothing to stop"); + return GST_FLOW_OK; + } + + gst_qt_mux_update_global_statistics (qtmux); + + switch (qtmux->mux_mode) { + case GST_QT_MUX_MODE_FRAGMENTED:{ GstSegment segment; guint8 *data = NULL; GstBuffer *buf; @@ -2077,111 +2538,81 @@ gst_qt_mux_stop_file (GstQTMux * qtmux) if (ret != GST_FLOW_OK) return ret; - timescale = qtmux->timescale; /* only mvex duration is updated, * mvhd should be consistent with empty moov * (but TODO maybe some clients do not handle that well ?) */ qtmux->moov->mvex.mehd.fragment_duration = - gst_util_uint64_scale (first_ts, timescale, GST_SECOND); + gst_util_uint64_scale (qtmux->last_dts, qtmux->timescale, GST_SECOND); GST_DEBUG_OBJECT (qtmux, "rewriting moov with mvex duration %" - GST_TIME_FORMAT, GST_TIME_ARGS (first_ts)); + GST_TIME_FORMAT, GST_TIME_ARGS (qtmux->last_dts)); /* seek and rewrite the header */ gst_segment_init (&segment, GST_FORMAT_BYTES); - segment.start = qtmux->mdat_pos; + segment.start = qtmux->moov_pos; gst_pad_push_event (qtmux->srcpad, gst_event_new_segment (&segment)); /* no need to seek back */ - return gst_qt_mux_send_moov (qtmux, NULL, FALSE); + return gst_qt_mux_send_moov (qtmux, NULL, 0, FALSE, FALSE); + } + case GST_QT_MUX_MODE_ROBUST_RECORDING:{ + ret = gst_qt_mux_robust_recording_rewrite_moov (qtmux); + if (G_UNLIKELY (ret != GST_FLOW_OK)) + return ret; + /* Finalise by writing the final size into the mdat. Up until now + * it's been 0, which means 'rest of the file' + * No need to seek back after this, we won't write any more */ + return gst_qt_mux_update_mdat_size (qtmux, qtmux->mdat_pos, + qtmux->mdat_size, NULL, TRUE); } default: break; } /* Moov-at-end or fast-start mode from here down */ - gst_qt_mux_configure_moov (qtmux, ×cale); - /* check for late streams. First, find the earliest start time */ - first_ts = GST_CLOCK_TIME_NONE; - for (walk = qtmux->collect->data; walk; walk = g_slist_next (walk)) { - GstCollectData *cdata = (GstCollectData *) walk->data; - GstQTPad *qtpad = (GstQTPad *) cdata; - - if (!GST_CLOCK_TIME_IS_VALID (first_ts) || - (GST_CLOCK_TIME_IS_VALID (qtpad->first_ts) && - qtpad->first_ts < first_ts)) { - first_ts = qtpad->first_ts; - } - } - GST_DEBUG_OBJECT (qtmux, "Media first ts selected: %" GST_TIME_FORMAT, - GST_TIME_ARGS (first_ts)); - /* add EDTSs for late streams */ - for (walk = qtmux->collect->data; walk; walk = g_slist_next (walk)) { - GstCollectData *cdata = (GstCollectData *) walk->data; - GstQTPad *qtpad = (GstQTPad *) cdata; - guint32 lateness; - guint32 duration; - - if (GST_CLOCK_TIME_IS_VALID (qtpad->first_ts) && qtpad->first_ts > first_ts) { - GST_DEBUG_OBJECT (qtmux, "Pad %s is a late stream by %" GST_TIME_FORMAT, - GST_PAD_NAME (qtpad->collect.pad), - GST_TIME_ARGS (qtpad->first_ts - first_ts)); - lateness = gst_util_uint64_scale_round (qtpad->first_ts - first_ts, - timescale, GST_SECOND); - duration = qtpad->trak->tkhd.duration; - atom_trak_add_elst_entry (qtpad->trak, lateness, (guint32) - 1, - (guint32) (1 * 65536.0)); - atom_trak_add_elst_entry (qtpad->trak, duration, 0, - (guint32) (1 * 65536.0)); - - /* need to add the empty time to the trak duration */ - duration += lateness; - - qtpad->trak->tkhd.duration = duration; + gst_qt_mux_configure_moov (qtmux); - /* And possibly grow the moov duration */ - if (duration > qtmux->moov->mvhd.time_info.duration) { - qtmux->moov->mvhd.time_info.duration = duration; - qtmux->moov->mvex.mehd.fragment_duration = duration; - } - } - } + gst_qt_mux_update_edit_lists (qtmux); /* tags into file metadata */ gst_qt_mux_setup_metadata (qtmux); + large_file = (qtmux->mdat_size > MDAT_LARGE_FILE_LIMIT); - /* if faststart, update the offset of the atoms in the movie with the offset - * that the movie headers before mdat will cause. - * Also, send the ftyp */ - if (qtmux->mux_mode == GST_QT_MUX_MODE_FAST_START) { - GstFlowReturn flow_ret; - offset = size = 0; + switch (qtmux->mux_mode) { + case GST_QT_MUX_MODE_FAST_START:{ + /* if faststart, update the offset of the atoms in the movie with the offset + * that the movie headers before mdat will cause. + * Also, send the ftyp */ + offset = size = 0; - flow_ret = gst_qt_mux_prepare_and_send_ftyp (qtmux); - if (flow_ret != GST_FLOW_OK) { - goto ftyp_error; - } - /* copy into NULL to obtain size */ - if (!atom_moov_copy_data (qtmux->moov, NULL, &size, &offset)) - goto serialize_error; - GST_DEBUG_OBJECT (qtmux, "calculated moov atom size %" G_GUINT64_FORMAT, - offset); - offset += qtmux->header_size + (large_file ? 16 : 8); + ret = gst_qt_mux_prepare_and_send_ftyp (qtmux); + if (ret != GST_FLOW_OK) { + goto ftyp_error; + } + /* copy into NULL to obtain size */ + if (!atom_moov_copy_data (qtmux->moov, NULL, &size, &offset)) + goto serialize_error; + GST_DEBUG_OBJECT (qtmux, "calculated moov atom size %" G_GUINT64_FORMAT, + offset); + offset += qtmux->header_size + (large_file ? 16 : 8); - /* sum up with the extra atoms size */ - ret = gst_qt_mux_send_extra_atoms (qtmux, FALSE, &offset, FALSE); - if (ret != GST_FLOW_OK) - return ret; - } else { - offset = qtmux->header_size; + /* sum up with the extra atoms size */ + ret = gst_qt_mux_send_extra_atoms (qtmux, FALSE, &offset, FALSE); + if (ret != GST_FLOW_OK) + return ret; + break; + } + default: + offset = qtmux->header_size; + break; } /* Now that we know the size of moov + extra atoms, we can adjust * the chunk offsets stored into the moov */ - atom_moov_chunks_add_offset (qtmux->moov, offset); + atom_moov_chunks_set_offset (qtmux->moov, offset); /* write out moov and extra atoms */ /* note: as of this point, we no longer care about tracking written data size, * since there is no more use for it anyway */ - ret = gst_qt_mux_send_moov (qtmux, NULL, FALSE); + ret = gst_qt_mux_send_moov (qtmux, NULL, 0, FALSE, FALSE); if (ret != GST_FLOW_OK) return ret; @@ -2196,7 +2627,7 @@ gst_qt_mux_stop_file (GstQTMux * qtmux) /* mdat needs update iff not using faststart */ GST_DEBUG_OBJECT (qtmux, "updating mdat size"); ret = gst_qt_mux_update_mdat_size (qtmux, qtmux->mdat_pos, - qtmux->mdat_size, NULL); + qtmux->mdat_size, NULL, FALSE); /* note; no seeking back to the end of file is done, * since we no longer write anything anyway */ break; @@ -2206,7 +2637,7 @@ gst_qt_mux_stop_file (GstQTMux * qtmux) /* send mdat atom and move buffered data into it */ /* mdat_size = accumulated (buffered data) */ ret = gst_qt_mux_send_mdat_header (qtmux, NULL, qtmux->mdat_size, - large_file); + large_file, FALSE); if (ret != GST_FLOW_OK) return ret; ret = gst_qt_mux_send_buffered_data (qtmux, NULL); @@ -2281,7 +2712,7 @@ flush: atom_array_get_len (&pad->fragment_buffers), total_size); if (ret == GST_FLOW_OK) ret = gst_qt_mux_send_mdat_header (qtmux, &qtmux->header_size, total_size, - FALSE); + FALSE, FALSE); for (i = 0; i < atom_array_get_len (&pad->fragment_buffers); i++) { if (G_LIKELY (ret == GST_FLOW_OK)) ret = gst_qt_mux_send_buffer (qtmux, @@ -2330,6 +2761,174 @@ init: return ret; } +/* Here's the clever bit of robust recording: Updating the moov + * header is done using a ping-pong scheme inside 2 blocks of size + * 'reserved_moov_size' at the start of the file, in such a way that the + * file on-disk is always valid if interrupted. + * Inside the reserved space, we have 2 pairs of free + moov atoms + * (in that order), free-A + moov-A @ offset 0 and free-B + moov-B at + * at offset "reserved_moov_size". + * + * 1. Free-A has 0 size payload, moov-A immediately after is + * active/current, and is padded with an internal Free atom to + * end at reserved_space/2. Free-B is at reserved_space/2, sized + * to cover the remaining free space (including moov-B). + * 2. We write moov-B (which is invisible inside free-B), and pad it to + * end at the end of free space. Then, we update free-A to size + * reserved_space/2 + sizeof(free-B), which hides moov-A and the + * free-B header, and makes moov-B active. + * 3. Rewrite moov-A inside free-A, with padding out to free-B. + * Change the size of free-A to make moov-A active again. + * 4. Rinse and repeat. + * + */ +static GstFlowReturn +gst_qt_mux_robust_recording_rewrite_moov (GstQTMux * qtmux) +{ + GstSegment segment; + GstFlowReturn ret; + guint64 freeA_offset; + guint32 new_freeA_size; + guint64 new_moov_offset; + + /* Update moov info, then seek and rewrite the MOOV atom */ + gst_qt_mux_update_global_statistics (qtmux); + gst_qt_mux_configure_moov (qtmux); + + gst_qt_mux_update_edit_lists (qtmux); + + /* tags into file metadata */ + gst_qt_mux_setup_metadata (qtmux); + + /* chunks position is set relative to the first byte of the + * MDAT atom payload. Set the overall offset into the file */ + atom_moov_chunks_set_offset (qtmux->moov, qtmux->header_size); + + /* Calculate which moov to rewrite. qtmux->moov_pos points to + * the start of the free-A header */ + freeA_offset = qtmux->moov_pos; + if (qtmux->reserved_moov_first_active) { + GST_DEBUG_OBJECT (qtmux, "Updating pong moov header"); + /* After this, freeA will include itself, moovA, plus the freeB + * header */ + new_freeA_size = qtmux->reserved_moov_size + 16; + } else { + GST_DEBUG_OBJECT (qtmux, "Updating ping moov header"); + new_freeA_size = 8; + } + /* the moov we update is after free-A, calculate its offset */ + new_moov_offset = freeA_offset + new_freeA_size; + + /* Swap ping-pong cadence marker */ + qtmux->reserved_moov_first_active = !qtmux->reserved_moov_first_active; + + /* seek and rewrite the MOOV atom */ + gst_segment_init (&segment, GST_FORMAT_BYTES); + segment.start = new_moov_offset; + gst_pad_push_event (qtmux->srcpad, gst_event_new_segment (&segment)); + + ret = + gst_qt_mux_send_moov (qtmux, NULL, qtmux->reserved_moov_size, FALSE, + TRUE); + if (ret != GST_FLOW_OK) + return ret; + + /* Update the estimated recording space remaining, based on amount used so + * far and duration muxed so far */ + if (qtmux->last_moov_size > qtmux->base_moov_size && qtmux->last_dts > 0) { + GstClockTime remain; + GstClockTime time_muxed = qtmux->last_dts; + + remain = + gst_util_uint64_scale (qtmux->reserved_moov_size - + qtmux->last_moov_size, time_muxed, + qtmux->last_moov_size - qtmux->base_moov_size); + /* Always under-estimate slightly, so users + * have time to stop muxing before we run out */ + if (remain < GST_SECOND / 2) + remain = 0; + else + remain -= GST_SECOND / 2; + + GST_INFO_OBJECT (qtmux, + "Reserved %u header bytes. Used %u in %" GST_TIME_FORMAT + ". Remaining now %u or approx %" G_GUINT64_FORMAT " ns\n", + qtmux->reserved_moov_size, qtmux->last_moov_size, + GST_TIME_ARGS (qtmux->last_dts), + qtmux->reserved_moov_size - qtmux->last_moov_size, remain); + + GST_OBJECT_LOCK (qtmux); + qtmux->reserved_duration_remaining = remain; + qtmux->muxed_since_last_update = 0; + GST_DEBUG_OBJECT (qtmux, "reserved remaining duration now %" + G_GUINT64_FORMAT, qtmux->reserved_duration_remaining); + GST_OBJECT_UNLOCK (qtmux); + } + + + /* Now update the moov-A size. Don't pass offset, since we don't need + * send_free_atom() to seek for us - all our callers seek back to + * where they need after this, or they don't need it */ + gst_segment_init (&segment, GST_FORMAT_BYTES); + segment.start = freeA_offset; + gst_pad_push_event (qtmux->srcpad, gst_event_new_segment (&segment)); + + ret = gst_qt_mux_send_free_atom (qtmux, NULL, new_freeA_size, TRUE); + + return ret; +} + +static GstFlowReturn +gst_qt_mux_robust_recording_update (GstQTMux * qtmux, GstClockTime position) +{ + GstSegment segment; + GstFlowReturn flow_ret; + + guint64 mdat_offset = qtmux->mdat_pos + 16 + qtmux->mdat_size; + + GST_OBJECT_LOCK (qtmux); + if (qtmux->reserved_moov_update_period == GST_CLOCK_TIME_NONE) { + GST_OBJECT_UNLOCK (qtmux); + return GST_FLOW_OK; + } + + /* Update if position is > the threshold or there's been no update yet */ + if (qtmux->last_moov_update != GST_CLOCK_TIME_NONE && + (position <= qtmux->last_moov_update || + (position - qtmux->last_moov_update) < + qtmux->reserved_moov_update_period)) { + /* Update the offset of how much we've muxed, so the + * report of remaining space keeps counting down */ + if (position > qtmux->last_moov_update && + position - qtmux->last_moov_update > qtmux->muxed_since_last_update) { + GST_LOG_OBJECT (qtmux, + "Muxed time %" G_GUINT64_FORMAT " since last moov update", + qtmux->muxed_since_last_update); + qtmux->muxed_since_last_update = position - qtmux->last_moov_update; + } + GST_OBJECT_UNLOCK (qtmux); + return GST_FLOW_OK; /* No update needed yet */ + } + + qtmux->last_moov_update = position; + GST_OBJECT_UNLOCK (qtmux); + + GST_DEBUG_OBJECT (qtmux, "Update moov atom, position %" GST_TIME_FORMAT + " mdat starts @ %" G_GUINT64_FORMAT " we were a %" G_GUINT64_FORMAT, + GST_TIME_ARGS (position), qtmux->mdat_pos, mdat_offset); + + flow_ret = gst_qt_mux_robust_recording_rewrite_moov (qtmux); + if (G_UNLIKELY (flow_ret != GST_FLOW_OK)) + return flow_ret; + + /* Seek back to previous position */ + gst_segment_init (&segment, GST_FORMAT_BYTES); + segment.start = mdat_offset; + gst_pad_push_event (qtmux->srcpad, gst_event_new_segment (&segment)); + + return flow_ret; +} + static GstFlowReturn gst_qt_mux_register_and_push_sample (GstQTMux * qtmux, GstQTPad * pad, GstBuffer * buffer, gboolean is_last_buffer, guint nsamples, @@ -2353,10 +2952,14 @@ gst_qt_mux_register_and_push_sample (GstQTMux * qtmux, GstQTPad * pad, switch (qtmux->mux_mode) { case GST_QT_MUX_MODE_MOOV_AT_END: case GST_QT_MUX_MODE_FAST_START: - + case GST_QT_MUX_MODE_ROBUST_RECORDING: atom_trak_add_samples (pad->trak, nsamples, (gint32) scaled_duration, sample_size, chunk_offset, sync, pts_offset); ret = gst_qt_mux_send_buffer (qtmux, buffer, &qtmux->mdat_size, TRUE); + /* Check if it's time to re-write the headers in robust-recording mode */ + if (ret == GST_FLOW_OK + && qtmux->mux_mode == GST_QT_MUX_MODE_ROBUST_RECORDING) + ret = gst_qt_mux_robust_recording_update (qtmux, pad->total_duration); break; case GST_QT_MUX_MODE_FRAGMENTED: case GST_QT_MUX_MODE_FRAGMENTED_STREAMABLE: @@ -2414,9 +3017,6 @@ gst_qt_mux_add_buffer (GstQTMux * qtmux, GstQTPad * pad, GstBuffer * buf) GST_BUFFER_DTS (buf)) { GST_BUFFER_DTS (buf) = GST_BUFFER_DTS (last_buf) + last_buf_duration; } - - if (GST_BUFFER_PTS_IS_VALID (buf)) - GST_BUFFER_DTS (buf) = MIN (GST_BUFFER_DTS (buf), GST_BUFFER_PTS (buf)); } if (last_buf && !buf && !GST_BUFFER_DURATION_IS_VALID (last_buf)) { @@ -2444,10 +3044,16 @@ gst_qt_mux_add_buffer (GstQTMux * qtmux, GstQTPad * pad, GstBuffer * buf) /* if this is the first buffer, store the timestamp */ if (G_UNLIKELY (pad->first_ts == GST_CLOCK_TIME_NONE) && last_buf) { - if (GST_BUFFER_DTS_IS_VALID (last_buf)) { + if (GST_BUFFER_PTS_IS_VALID (last_buf)) { + pad->first_ts = GST_BUFFER_PTS (last_buf); + } else if (GST_BUFFER_DTS_IS_VALID (last_buf)) { pad->first_ts = GST_BUFFER_DTS (last_buf); + } + + if (GST_BUFFER_DTS_IS_VALID (last_buf)) { + pad->first_dts = pad->last_dts = GST_BUFFER_DTS (last_buf); } else if (GST_BUFFER_PTS_IS_VALID (last_buf)) { - pad->first_ts = GST_BUFFER_PTS (last_buf); + pad->first_dts = pad->last_dts = GST_BUFFER_PTS (last_buf); } if (GST_CLOCK_TIME_IS_VALID (pad->first_ts)) { @@ -2455,7 +3061,7 @@ gst_qt_mux_add_buffer (GstQTMux * qtmux, GstQTPad * pad, GstBuffer * buf) } else { GST_WARNING_OBJECT (qtmux, "First buffer for pad %s has no timestamp, " "using 0 as first timestamp", GST_PAD_NAME (pad->collect.pad)); - pad->first_ts = 0; + pad->first_ts = pad->first_dts = 0; } GST_DEBUG_OBJECT (qtmux, "Stored first timestamp for pad %s %" GST_TIME_FORMAT, GST_PAD_NAME (pad->collect.pad), @@ -2666,6 +3272,57 @@ not_negotiated: } } +/* + * DTS running time can be negative. There is no way to represent that in + * MP4 however, thus we need to offset DTS so that it starts from 0. + */ +static void +gst_qt_pad_adjust_buffer_dts (GstQTMux * qtmux, GstQTPad * pad, + GstCollectData * cdata, GstBuffer ** buf) +{ + GstClockTime pts; + gint64 dts; + + pts = GST_BUFFER_PTS (*buf); + dts = GST_COLLECT_PADS_DTS (cdata); + + GST_LOG_OBJECT (qtmux, "selected pad %s with PTS %" GST_TIME_FORMAT + " and DTS %" GST_STIME_FORMAT, GST_PAD_NAME (cdata->pad), + GST_TIME_ARGS (pts), GST_STIME_ARGS (dts)); + + if (!GST_CLOCK_TIME_IS_VALID (pad->dts_adjustment)) { + if (GST_CLOCK_STIME_IS_VALID (dts) && dts < 0) + pad->dts_adjustment = -dts; + else + pad->dts_adjustment = 0; + } + + if (pad->dts_adjustment > 0) { + *buf = gst_buffer_make_writable (*buf); + + dts += pad->dts_adjustment; + + if (GST_CLOCK_TIME_IS_VALID (pts)) + pts += pad->dts_adjustment; + + if (GST_CLOCK_STIME_IS_VALID (dts) && dts < 0) { + GST_WARNING_OBJECT (pad, "Decreasing DTS."); + dts = 0; + } + + if (pts < dts) { + GST_WARNING_OBJECT (pad, "DTS is bigger then PTS"); + pts = dts; + } + + GST_BUFFER_PTS (*buf) = pts; + GST_BUFFER_DTS (*buf) = dts; + + GST_LOG_OBJECT (qtmux, "time adjusted to PTS %" GST_TIME_FORMAT + " and DTS %" GST_TIME_FORMAT, GST_TIME_ARGS (pts), GST_TIME_ARGS (dts)); + } +} + static GstFlowReturn gst_qt_mux_handle_buffer (GstCollectPads * pads, GstCollectData * cdata, GstBuffer * buf, gpointer user_data) @@ -2673,13 +3330,12 @@ gst_qt_mux_handle_buffer (GstCollectPads * pads, GstCollectData * cdata, GstFlowReturn ret = GST_FLOW_OK; GstQTMux *qtmux = GST_QT_MUX_CAST (user_data); GstQTPad *best_pad = NULL; - GstClockTime best_time = GST_CLOCK_TIME_NONE; if (G_UNLIKELY (qtmux->state == GST_QT_MUX_STATE_STARTED)) { if ((ret = gst_qt_mux_start_file (qtmux)) != GST_FLOW_OK) return ret; - else - qtmux->state = GST_QT_MUX_STATE_DATA; + + qtmux->state = GST_QT_MUX_STATE_DATA; } if (G_UNLIKELY (qtmux->state == GST_QT_MUX_STATE_EOS)) @@ -2690,11 +3346,10 @@ gst_qt_mux_handle_buffer (GstCollectPads * pads, GstCollectData * cdata, /* clipping already converted to running time */ if (best_pad != NULL) { g_assert (buf); - best_time = GST_BUFFER_PTS (buf); - GST_LOG_OBJECT (qtmux, "selected pad %s with time %" GST_TIME_FORMAT, - GST_PAD_NAME (best_pad->collect.pad), GST_TIME_ARGS (best_time)); + gst_qt_pad_adjust_buffer_dts (qtmux, best_pad, cdata, &buf); ret = gst_qt_mux_add_buffer (qtmux, best_pad, buf); } else { + qtmux->state = GST_QT_MUX_STATE_EOS; ret = gst_qt_mux_stop_file (qtmux); if (ret == GST_FLOW_OK) { GST_DEBUG_OBJECT (qtmux, "Pushing eos"); @@ -2704,7 +3359,6 @@ gst_qt_mux_handle_buffer (GstCollectPads * pads, GstCollectData * cdata, GST_WARNING_OBJECT (qtmux, "Failed to stop file: %s", gst_flow_get_name (ret)); } - qtmux->state = GST_QT_MUX_STATE_EOS; } return ret; @@ -2993,6 +3647,18 @@ gst_qt_mux_audio_sink_set_caps (GstQTPad * qtpad, GstCaps * caps) entry.samples_per_packet = GST_READ_UINT32_BE (map.data + 4); gst_buffer_unmap (codec_config, &map); gst_buffer_unref (codec_config); + } else if (strcmp (mimetype, "audio/x-ac3") == 0) { + entry.fourcc = FOURCC_ac_3; + + /* Fixed values according to TS 102 366 but it also mentions that + * they should be ignored */ + entry.channels = 2; + entry.sample_size = 16; + + /* AC-3 needs an extension atom but its data can only be obtained from + * the stream itself. Abuse the prepare_buf_func so we parse a frame + * and get the needed data */ + qtpad->prepare_buf_func = gst_qt_mux_prepare_parse_ac3_frame; } if (!entry.fourcc) @@ -3001,7 +3667,9 @@ gst_qt_mux_audio_sink_set_caps (GstQTPad * qtpad, GstCaps * caps) /* ok, set the pad info accordingly */ qtpad->fourcc = entry.fourcc; qtpad->sample_size = constant_size; - atom_trak_set_audio_type (qtpad->trak, qtmux->context, &entry, + qtpad->trak_ste = + (SampleTableEntry *) atom_trak_set_audio_type (qtpad->trak, + qtmux->context, &entry, qtmux->trak_timescale ? qtmux->trak_timescale : entry.sample_rate, ext_atom, constant_size); @@ -3362,8 +4030,9 @@ gst_qt_mux_video_sink_set_caps (GstQTPad * qtpad, GstCaps * caps) /* ok, set the pad info accordingly */ qtpad->fourcc = entry.fourcc; qtpad->sync = sync; - atom_trak_set_video_type (qtpad->trak, qtmux->context, &entry, rate, - ext_atom_list); + qtpad->trak_ste = + (SampleTableEntry *) atom_trak_set_video_type (qtpad->trak, + qtmux->context, &entry, rate, ext_atom_list); gst_object_unref (qtmux); return TRUE; @@ -3394,8 +4063,6 @@ gst_qt_mux_subtitle_sink_set_caps (GstQTPad * qtpad, GstCaps * caps) GstStructure *structure; SubtitleSampleEntry entry = { 0, }; - qtpad->prepare_buf_func = NULL; - /* does not go well to renegotiate stream mid-way, unless * the old caps are a subset of the new one (this means upstream * added more info to the caps, as both should be 'fixed' caps) */ @@ -3440,7 +4107,9 @@ gst_qt_mux_subtitle_sink_set_caps (GstQTPad * qtpad, GstCaps * caps) goto refuse_caps; qtpad->fourcc = entry.fourcc; - atom_trak_set_subtitle_type (qtpad->trak, qtmux->context, &entry); + qtpad->trak_ste = + (SampleTableEntry *) atom_trak_set_subtitle_type (qtpad->trak, + qtmux->context, &entry); gst_object_unref (qtmux); return TRUE; @@ -3508,10 +4177,12 @@ gst_qt_mux_sink_event (GstCollectPads * pads, GstCollectData * data, if (gst_tag_list_get_scope (list) == GST_TAG_SCOPE_GLOBAL) { gst_tag_setter_merge_tags (setter, list, mode); + qtmux->tags_changed = TRUE; } else { if (!collect_pad->tags) collect_pad->tags = gst_tag_list_new_empty (); gst_tag_list_insert (collect_pad->tags, list, mode); + collect_pad->tags_changed = TRUE; } GST_OBJECT_UNLOCK (qtmux); @@ -3700,6 +4371,34 @@ gst_qt_mux_get_property (GObject * object, case PROP_STREAMABLE: g_value_set_boolean (value, qtmux->streamable); break; + case PROP_RESERVED_MAX_DURATION: + g_value_set_uint64 (value, qtmux->reserved_max_duration); + break; + case PROP_RESERVED_DURATION_REMAINING: + if (qtmux->reserved_duration_remaining == GST_CLOCK_TIME_NONE) + g_value_set_uint64 (value, qtmux->reserved_max_duration); + else { + GstClockTime remaining = qtmux->reserved_duration_remaining; + + /* Report the remaining space as the calculated remaining, minus + * however much we've muxed since the last update */ + if (remaining > qtmux->muxed_since_last_update) + remaining -= qtmux->muxed_since_last_update; + else + remaining = 0; + GST_LOG_OBJECT (qtmux, "reserved duration remaining - reporting %" + G_GUINT64_FORMAT "(%" G_GUINT64_FORMAT " - %" G_GUINT64_FORMAT, + remaining, qtmux->reserved_duration_remaining, + qtmux->muxed_since_last_update); + g_value_set_uint64 (value, remaining); + } + break; + case PROP_RESERVED_MOOV_UPDATE_PERIOD: + g_value_set_uint64 (value, qtmux->reserved_moov_update_period); + break; + case PROP_RESERVED_BYTES_PER_SEC: + g_value_set_uint (value, qtmux->reserved_bytes_per_sec_per_trak); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; @@ -3768,6 +4467,15 @@ gst_qt_mux_set_property (GObject * object, } break; } + case PROP_RESERVED_MAX_DURATION: + qtmux->reserved_max_duration = g_value_get_uint64 (value); + break; + case PROP_RESERVED_MOOV_UPDATE_PERIOD: + qtmux->reserved_moov_update_period = g_value_get_uint64 (value); + break; + case PROP_RESERVED_BYTES_PER_SEC: + qtmux->reserved_bytes_per_sec_per_trak = g_value_get_uint (value); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; diff --git a/gst/isomp4/gstqtmux.h b/gst/isomp4/gstqtmux.h index 0e30eb4a0..81a23faa4 100644 --- a/gst/isomp4/gstqtmux.h +++ b/gst/isomp4/gstqtmux.h @@ -109,15 +109,21 @@ struct _GstQTPad /* dts of last_buf */ GstClockTime last_dts; + /* This is compensate for CTTS */ + GstClockTime dts_adjustment; + /* store the first timestamp for comparing with other streams and * know if there are late streams */ GstClockTime first_ts; + GstClockTime first_dts; + guint buf_head; guint buf_tail; /* all the atom and chunk book-keeping is delegated here * unowned/uncounted reference, parent MOOV owns */ AtomTRAK *trak; + SampleTableEntry *trak_ste; /* fragmented support */ /* meta data book-keeping delegated here */ AtomTRAF *traf; @@ -128,6 +134,9 @@ struct _GstQTPad /* optional fragment index book-keeping */ AtomTFRA *tfra; + /* Set when tags are received, cleared when written to moov */ + gboolean tags_changed; + GstTagList *tags; /* if nothing is set, it won't be called */ @@ -148,7 +157,8 @@ typedef enum _GstQtMuxMode { GST_QT_MUX_MODE_MOOV_AT_END, GST_QT_MUX_MODE_FRAGMENTED, GST_QT_MUX_MODE_FRAGMENTED_STREAMABLE, - GST_QT_MUX_MODE_FAST_START + GST_QT_MUX_MODE_FAST_START, + GST_QT_MUX_MODE_ROBUST_RECORDING } GstQtMuxMode; struct _GstQTMux @@ -168,14 +178,23 @@ struct _GstQTMux /* size of header (prefix, atoms (ftyp, possibly moov, mdat header)) */ guint64 header_size; - /* accumulated size of raw media data (a priori not including mdat header) */ + /* accumulated size of raw media data (not including mdat header) */ guint64 mdat_size; - /* position of mdat atom (for later updating) */ + /* position of the moov (for fragmented mode) or reserved moov atom + * area (for robust-muxing mode) */ + guint64 moov_pos; + /* position of mdat atom header (for later updating of size) in + * moov-at-end, fragmented and robust-muxing modes */ guint64 mdat_pos; /* keep track of the largest chunk to fine-tune brands */ GstClockTime longest_chunk; + /* Earliest timestamp across all pads/traks */ + GstClockTime first_ts; + /* Last DTS across all pads (= duration) */ + GstClockTime last_dts; + /* atom helper objects */ AtomsContext *context; AtomFTYP *ftyp; @@ -183,6 +202,10 @@ struct _GstQTMux GSList *extra_atoms; /* list of extra top-level atoms (e.g. UUID for xmp) * Stored as AtomInfo structs */ + /* Set when tags are received, cleared when written to moov */ + gboolean tags_changed; + + /* fragmented file index */ AtomMFRA *mfra; @@ -212,6 +235,30 @@ struct _GstQTMux * mode. */ gboolean streamable; + /* Requested target maximum duration */ + GstClockTime reserved_max_duration; + /* Estimate of remaining reserved header space (in ns of recording) */ + GstClockTime reserved_duration_remaining; + /* Multiplier for conversion from reserved_max_duration to bytes */ + guint reserved_bytes_per_sec_per_trak; + + /* Reserved minimum MOOV size in bytes + * This is converted from reserved_max_duration + * using the bytes/trak/sec estimate */ + guint32 reserved_moov_size; + /* Basic size of the moov (static headers + tags) */ + guint32 base_moov_size; + /* Size of the most recently generated moov header */ + guint32 last_moov_size; + /* True if the first moov in the ping-pong buffers + * is the active one. See gst_qt_mux_robust_recording_rewrite_moov() */ + gboolean reserved_moov_first_active; + + /* Tracking of periodic MOOV updates */ + GstClockTime last_moov_update; + GstClockTime reserved_moov_update_period; + GstClockTime muxed_since_last_update; + /* for request pad naming */ guint video_pads, audio_pads, subtitle_pads; }; diff --git a/gst/isomp4/gstqtmuxmap.c b/gst/isomp4/gstqtmuxmap.c index bc0f101c0..e088a424a 100644 --- a/gst/isomp4/gstqtmuxmap.c +++ b/gst/isomp4/gstqtmuxmap.c @@ -115,6 +115,10 @@ "stream-format = (string) raw, " \ COMMON_AUDIO_CAPS (8, MAX) +#define AC3_CAPS \ + "audio/x-ac3, " \ + COMMON_AUDIO_CAPS (6, MAX) + #define AMR_CAPS \ "audio/AMR, " \ "rate = (int) 8000, " \ @@ -184,7 +188,7 @@ GstQTMuxFormatProp gst_qt_mux_format_list[] = { GST_STATIC_CAPS ("video/quicktime, variant = (string) iso"), GST_STATIC_CAPS (MPEG4V_CAPS "; " H264_CAPS ";" "video/x-mp4-part," COMMON_VIDEO_CAPS), - GST_STATIC_CAPS (MP3_CAPS "; " AAC_CAPS " ; " ALAC_CAPS), + GST_STATIC_CAPS (MP3_CAPS "; " AAC_CAPS " ; " AC3_CAPS " ; " ALAC_CAPS), GST_STATIC_CAPS (TEXT_UTF8)} , /* Microsoft Smooth Streaming fmp4/isml */ @@ -210,7 +214,7 @@ GstQTMuxFormatProp gst_qt_mux_format_list[] = { "Gst3GPPMux", GST_STATIC_CAPS ("video/quicktime, variant = (string) 3gpp"), GST_STATIC_CAPS (H263_CAPS "; " MPEG4V_CAPS "; " H264_CAPS), - GST_STATIC_CAPS (AMR_CAPS "; " MP3_CAPS "; " AAC_CAPS), + GST_STATIC_CAPS (AMR_CAPS "; " MP3_CAPS "; " AAC_CAPS "; " AC3_CAPS), GST_STATIC_CAPS (TEXT_UTF8)} , /* ISO 15444-3: Motion-JPEG-2000 (also ISO base media extension) */ diff --git a/gst/isomp4/qtdemux.c b/gst/isomp4/qtdemux.c index 2b771aea2..edd0a585a 100644 --- a/gst/isomp4/qtdemux.c +++ b/gst/isomp4/qtdemux.c @@ -127,7 +127,7 @@ struct _QtDemuxSample /* timestamp is the DTS */ #define QTSAMPLE_DTS(stream,sample) (QTSTREAMTIME_TO_GSTTIME((stream), (sample)->timestamp)) /* timestamp + offset is the PTS */ -#define QTSAMPLE_PTS(stream,sample) (QTSTREAMTIME_TO_GSTTIME((stream), (sample)->timestamp + (sample)->pts_offset)) +#define QTSAMPLE_PTS(stream,sample) (QTSTREAMTIME_TO_GSTTIME((stream), (sample)->timestamp + (stream)->cslg_shift + (sample)->pts_offset)) /* timestamp + duration - dts is the duration */ #define QTSAMPLE_DUR_DTS(stream, sample, dts) (QTSTREAMTIME_TO_GSTTIME ((stream), (sample)->timestamp + (sample)->duration) - (dts)) @@ -304,6 +304,7 @@ struct _QtDemuxStream guint32 segment_index; guint32 sample_index; GstClockTime time_position; /* in gst time */ + guint64 accumulated_base; /* the Gst segment we are processing out, used for clipping */ GstSegment segment; @@ -376,6 +377,9 @@ struct _QtDemuxStream guint32 ctts_count; gint32 ctts_soffset; + /* cslg */ + guint32 cslg_shift; + /* fragmented */ gboolean parsed_trex; guint32 def_sample_duration; @@ -383,6 +387,10 @@ struct _QtDemuxStream guint32 def_sample_flags; gboolean disabled; + + /* stereoscopic video streams */ + GstVideoMultiviewMode multiview_mode; + GstVideoMultiviewFlags multiview_flags; }; enum QtDemuxState @@ -1127,21 +1135,21 @@ gst_qtdemux_find_segment (GstQTDemux * qtdemux, QtDemuxStream * stream, gint i; guint32 seg_idx; - GST_LOG_OBJECT (qtdemux, "finding segment for %" GST_TIME_FORMAT, + GST_LOG_OBJECT (stream->pad, "finding segment for %" GST_TIME_FORMAT, GST_TIME_ARGS (time_position)); seg_idx = -1; for (i = 0; i < stream->n_segments; i++) { QtDemuxSegment *segment = &stream->segments[i]; - GST_LOG_OBJECT (qtdemux, + GST_LOG_OBJECT (stream->pad, "looking at segment %" GST_TIME_FORMAT "-%" GST_TIME_FORMAT, GST_TIME_ARGS (segment->time), GST_TIME_ARGS (segment->stop_time)); /* For the last segment we include stop_time in the last segment */ if (i < stream->n_segments - 1) { if (segment->time <= time_position && time_position < segment->stop_time) { - GST_LOG_OBJECT (qtdemux, "segment %d matches", i); + GST_LOG_OBJECT (stream->pad, "segment %d matches", i); seg_idx = i; break; } @@ -1421,6 +1429,7 @@ gst_qtdemux_perform_seek (GstQTDemux * qtdemux, GstSegment * segment, QtDemuxStream *stream = qtdemux->streams[n]; stream->time_position = desired_offset; + stream->accumulated_base = 0; stream->sample_index = -1; stream->offset_in_sample = 0; stream->segment_index = -1; @@ -1432,11 +1441,15 @@ gst_qtdemux_perform_seek (GstQTDemux * qtdemux, GstSegment * segment, } segment->position = desired_offset; segment->time = desired_offset; - segment->start = desired_offset; + if (segment->rate >= 0) { + segment->start = desired_offset; - /* we stop at the end */ - if (segment->stop == -1) - segment->stop = segment->duration; + /* we stop at the end */ + if (segment->stop == -1) + segment->stop = segment->duration; + } else { + segment->stop = desired_offset; + } if (qtdemux->fragmented) qtdemux->fragmented_seek_pending = TRUE; @@ -1740,6 +1753,8 @@ _create_stream (void) stream->sample_index = -1; stream->offset_in_sample = 0; stream->new_stream = TRUE; + stream->multiview_mode = GST_VIDEO_MULTIVIEW_MODE_NONE; + stream->multiview_flags = GST_VIDEO_MULTIVIEW_FLAGS_NONE; return stream; } @@ -1908,6 +1923,7 @@ gst_qtdemux_reset (GstQTDemux * qtdemux, gboolean hard) qtdemux->streams[n]->sent_eos = FALSE; qtdemux->streams[n]->segment_seqnum = 0; qtdemux->streams[n]->time_position = 0; + qtdemux->streams[n]->accumulated_base = 0; } } } @@ -2169,6 +2185,7 @@ gst_qtdemux_stream_flush_samples_data (GstQTDemux * qtdemux, stream->n_samples = 0; stream->time_position = 0; stream->segment_index = -1; + stream->accumulated_base = 0; } static void @@ -3653,7 +3670,7 @@ gst_qtdemux_activate_segment (GstQTDemux * qtdemux, QtDemuxStream * stream, GstClockTime start, stop, time; gdouble rate; - GST_LOG_OBJECT (qtdemux, "activate segment %d, offset %" GST_TIME_FORMAT, + GST_LOG_OBJECT (stream->pad, "activate segment %d, offset %" GST_TIME_FORMAT, seg_idx, GST_TIME_ARGS (offset)); /* update the current segment */ @@ -3663,7 +3680,7 @@ gst_qtdemux_activate_segment (GstQTDemux * qtdemux, QtDemuxStream * stream, segment = &stream->segments[seg_idx]; if (G_UNLIKELY (offset < segment->time)) { - GST_WARNING_OBJECT (qtdemux, "offset < segment->time %" GST_TIME_FORMAT, + GST_WARNING_OBJECT (stream->pad, "offset < segment->time %" GST_TIME_FORMAT, GST_TIME_ARGS (segment->time)); return FALSE; } @@ -3671,7 +3688,7 @@ gst_qtdemux_activate_segment (GstQTDemux * qtdemux, QtDemuxStream * stream, /* segment lies beyond total indicated duration */ if (G_UNLIKELY (qtdemux->segment.duration != GST_CLOCK_TIME_NONE && segment->time > qtdemux->segment.duration)) { - GST_WARNING_OBJECT (qtdemux, "file duration %" GST_TIME_FORMAT + GST_WARNING_OBJECT (stream->pad, "file duration %" GST_TIME_FORMAT " < segment->time %" GST_TIME_FORMAT, GST_TIME_ARGS (qtdemux->segment.duration), GST_TIME_ARGS (segment->time)); @@ -3681,11 +3698,12 @@ gst_qtdemux_activate_segment (GstQTDemux * qtdemux, QtDemuxStream * stream, /* get time in this segment */ seg_time = offset - segment->time; - GST_LOG_OBJECT (qtdemux, "seg_time %" GST_TIME_FORMAT, + GST_LOG_OBJECT (stream->pad, "seg_time %" GST_TIME_FORMAT, GST_TIME_ARGS (seg_time)); if (G_UNLIKELY (seg_time > segment->duration)) { - GST_LOG_OBJECT (qtdemux, "seg_time > segment->duration %" GST_TIME_FORMAT, + GST_LOG_OBJECT (stream->pad, + "seg_time > segment->duration %" GST_TIME_FORMAT, GST_TIME_ARGS (segment->duration)); seg_time = segment->duration; } @@ -3723,7 +3741,7 @@ gst_qtdemux_activate_segment (GstQTDemux * qtdemux, QtDemuxStream * stream, stop = MIN (segment->media_start + seg_time, stop); } - GST_DEBUG_OBJECT (qtdemux, "newsegment %d from %" GST_TIME_FORMAT + GST_DEBUG_OBJECT (stream->pad, "new segment %d from %" GST_TIME_FORMAT " to %" GST_TIME_FORMAT ", time %" GST_TIME_FORMAT, seg_idx, GST_TIME_ARGS (start), GST_TIME_ARGS (stop), GST_TIME_ARGS (time)); @@ -3733,16 +3751,25 @@ gst_qtdemux_activate_segment (GstQTDemux * qtdemux, QtDemuxStream * stream, /* Copy flags from main segment */ stream->segment.flags = qtdemux->segment.flags; - /* update the segment values used for clipping */ /* accumulate previous segments */ + if (GST_CLOCK_TIME_IS_VALID (stream->segment.stop)) + stream->accumulated_base += (stream->segment.stop - stream->segment.start) / + ABS (stream->segment.rate); + + /* update the segment values used for clipping */ stream->segment.offset = qtdemux->segment.offset; - stream->segment.base = qtdemux->segment.base; + stream->segment.base = qtdemux->segment.base + stream->accumulated_base; stream->segment.applied_rate = qtdemux->segment.applied_rate; stream->segment.rate = rate; - stream->segment.start = start; - stream->segment.stop = stop; + stream->segment.start = start + QTSTREAMTIME_TO_GSTTIME (stream, + stream->cslg_shift); + stream->segment.stop = stop + QTSTREAMTIME_TO_GSTTIME (stream, + stream->cslg_shift); stream->segment.time = time; - stream->segment.position = start; + stream->segment.position = stream->segment.start; + + GST_DEBUG_OBJECT (stream->pad, "New segment: %" GST_SEGMENT_FORMAT, + &stream->segment); /* now prepare and send the segment */ if (stream->pad) { @@ -3773,20 +3800,20 @@ gst_qtdemux_activate_segment (GstQTDemux * qtdemux, QtDemuxStream * stream, if (qtdemux->segment.rate >= 0) { index = gst_qtdemux_find_index_linear (qtdemux, stream, start); stream->to_sample = G_MAXUINT32; - GST_DEBUG_OBJECT (qtdemux, + GST_DEBUG_OBJECT (stream->pad, "moving data pointer to %" GST_TIME_FORMAT ", index: %u, pts %" GST_TIME_FORMAT, GST_TIME_ARGS (start), index, GST_TIME_ARGS (QTSAMPLE_PTS (stream, &stream->samples[index]))); } else { index = gst_qtdemux_find_index_linear (qtdemux, stream, stop); stream->to_sample = index; - GST_DEBUG_OBJECT (qtdemux, + GST_DEBUG_OBJECT (stream->pad, "moving data pointer to %" GST_TIME_FORMAT ", index: %u, pts %" GST_TIME_FORMAT, GST_TIME_ARGS (stop), index, GST_TIME_ARGS (QTSAMPLE_PTS (stream, &stream->samples[index]))); } } else { - GST_DEBUG_OBJECT (qtdemux, "No need to look for keyframe, " + GST_DEBUG_OBJECT (stream->pad, "No need to look for keyframe, " "this is an empty segment"); return TRUE; } @@ -3798,7 +3825,7 @@ gst_qtdemux_activate_segment (GstQTDemux * qtdemux, QtDemuxStream * stream, /* we're at the right spot */ if (index == stream->sample_index) { - GST_DEBUG_OBJECT (qtdemux, "we are at the right index"); + GST_DEBUG_OBJECT (stream->pad, "we are at the right index"); return TRUE; } @@ -3814,19 +3841,19 @@ gst_qtdemux_activate_segment (GstQTDemux * qtdemux, QtDemuxStream * stream, if (index > stream->sample_index) { /* moving forwards check if we move past a keyframe */ if (kf_index > stream->sample_index) { - GST_DEBUG_OBJECT (qtdemux, + GST_DEBUG_OBJECT (stream->pad, "moving forwards to keyframe at %u (pts %" GST_TIME_FORMAT " dts %"GST_TIME_FORMAT" )", kf_index, GST_TIME_ARGS (QTSAMPLE_PTS(stream, &stream->samples[kf_index])), GST_TIME_ARGS (QTSAMPLE_DTS(stream, &stream->samples[kf_index]))); gst_qtdemux_move_stream (qtdemux, stream, kf_index); } else { - GST_DEBUG_OBJECT (qtdemux, + GST_DEBUG_OBJECT (stream->pad, "moving forwards, keyframe at %u (pts %" GST_TIME_FORMAT " dts %"GST_TIME_FORMAT" ) already sent", kf_index, GST_TIME_ARGS (QTSAMPLE_PTS (stream, &stream->samples[kf_index])), GST_TIME_ARGS (QTSAMPLE_DTS (stream, &stream->samples[kf_index]))); } } else { - GST_DEBUG_OBJECT (qtdemux, + GST_DEBUG_OBJECT (stream->pad, "moving backwards to keyframe at %u (pts %" GST_TIME_FORMAT " dts %"GST_TIME_FORMAT" )", kf_index, GST_TIME_ARGS (QTSAMPLE_PTS(stream, &stream->samples[kf_index])), GST_TIME_ARGS (QTSAMPLE_DTS(stream, &stream->samples[kf_index]))); @@ -6270,8 +6297,12 @@ gst_qtdemux_configure_stream (GstQTDemux * qtdemux, QtDemuxStream * stream) GST_DEBUG_OBJECT (qtdemux, "video size %dx%d, target display size %dx%d", stream->width, stream->height, stream->display_width, stream->display_height); - - if (stream->display_width > 0 && stream->display_height > 0 && + /* qt file might have pasp atom */ + if (stream->par_w > 0 && stream->par_h > 0) { + GST_DEBUG_OBJECT (qtdemux, "par %d:%d", stream->par_w, stream->par_h); + gst_caps_set_simple (stream->caps, "pixel-aspect-ratio", + GST_TYPE_FRACTION, stream->par_w, stream->par_h, NULL); + } else if (stream->display_width > 0 && stream->display_height > 0 && stream->width > 0 && stream->height > 0) { gint n, d; @@ -6281,18 +6312,35 @@ gst_qtdemux_configure_stream (GstQTDemux * qtdemux, QtDemuxStream * stream) if (n == d) n = d = 1; GST_DEBUG_OBJECT (qtdemux, "setting PAR to %d/%d", n, d); + stream->par_w = n; + stream->par_h = d; gst_caps_set_simple (stream->caps, "pixel-aspect-ratio", - GST_TYPE_FRACTION, n, d, NULL); + GST_TYPE_FRACTION, stream->par_w, stream->par_h, NULL); } - /* qt file might have pasp atom */ - if (stream->par_w > 0 && stream->par_h > 0) { - GST_DEBUG_OBJECT (qtdemux, "par %d:%d", stream->par_w, stream->par_h); - gst_caps_set_simple (stream->caps, "pixel-aspect-ratio", - GST_TYPE_FRACTION, stream->par_w, stream->par_h, NULL); + if (stream->multiview_mode != GST_VIDEO_MULTIVIEW_MODE_NONE) { + guint par_w = 1, par_h = 1; + + if (stream->par_w > 0 && stream->par_h > 0) { + par_w = stream->par_w; + par_h = stream->par_h; + } + + if (gst_video_multiview_guess_half_aspect (stream->multiview_mode, + stream->width, stream->height, par_w, par_h)) { + stream->multiview_flags |= GST_VIDEO_MULTIVIEW_FLAGS_HALF_ASPECT; + } + + gst_caps_set_simple (stream->caps, + "multiview-mode", G_TYPE_STRING, + gst_video_multiview_mode_to_caps_string (stream->multiview_mode), + "multiview-flags", GST_TYPE_VIDEO_MULTIVIEW_FLAGSET, + stream->multiview_flags, GST_FLAG_SET_MASK_EXACT, NULL); } } - } else if (stream->subtype == FOURCC_soun) { + } + + else if (stream->subtype == FOURCC_soun) { if (stream->caps) { stream->caps = gst_caps_make_writable (stream->caps); if (stream->rate > 0) @@ -6728,11 +6776,12 @@ qtdemux_stbl_init (GstQTDemux * qtdemux, QtDemuxStream * stream, GNode * stbl) return FALSE; } - /* composition time-to-sample */ if ((stream->ctts_present = ! !qtdemux_tree_get_child_by_type_full (stbl, FOURCC_ctts, &stream->ctts) ? TRUE : FALSE) == TRUE) { + GstByteReader cslg = GST_BYTE_READER_INIT (NULL, 0); + /* copy atom data into a new buffer for later use */ stream->ctts.data = g_memdup (stream->ctts.data, stream->ctts.size); @@ -6746,6 +6795,46 @@ qtdemux_stbl_init (GstQTDemux * qtdemux, QtDemuxStream * stream, GNode * stbl) if (!qt_atom_parser_has_chunks (&stream->ctts, stream->n_composition_times, 4 + 4)) goto corrupt_file; + + /* This is optional, if missing we iterate the ctts */ + if (qtdemux_tree_get_child_by_type_full (stbl, FOURCC_cslg, &cslg)) { + if (!gst_byte_reader_skip (&cslg, 1 + 3) + || !gst_byte_reader_get_uint32_be (&cslg, &stream->cslg_shift)) { + g_free ((gpointer) cslg.data); + goto corrupt_file; + } + } else { + gint32 cslg_least = 0; + guint num_entries, pos; + gint i; + + pos = gst_byte_reader_get_pos (&stream->ctts); + num_entries = stream->n_composition_times; + + stream->cslg_shift = 0; + + for (i = 0; i < num_entries; i++) { + gint32 offset; + + gst_byte_reader_skip_unchecked (&stream->ctts, 4); + offset = gst_byte_reader_get_int32_be_unchecked (&stream->ctts); + + if (offset < cslg_least) + cslg_least = offset; + } + + if (cslg_least < 0) + stream->cslg_shift = ABS (cslg_least); + else + stream->cslg_shift = 0; + + /* reset the reader so we can generate sample table */ + gst_byte_reader_set_pos (&stream->ctts, pos); + } + } else { + /* Ensure the cslg_shift value is consistent so we can use it + * unconditionnally to produce TS and Segment */ + stream->cslg_shift = 0; } return TRUE; @@ -7690,6 +7779,7 @@ qtdemux_parse_trak (GstQTDemux * qtdemux, GNode * trak) GNode *pasp; GNode *tref; GNode *udta; + GNode *svmi; QtDemuxStream *stream = NULL; gboolean new_stream = FALSE; @@ -7845,6 +7935,51 @@ qtdemux_parse_trak (GstQTDemux * qtdemux, GNode * trak) if (!(stbl = qtdemux_tree_get_child_by_type (minf, FOURCC_stbl))) goto corrupt_file; + /*parse svmi header if existing */ + svmi = qtdemux_tree_get_child_by_type (stbl, FOURCC_svmi); + if (svmi) { + len = QT_UINT32 ((guint8 *) svmi->data); + version = QT_UINT32 ((guint8 *) svmi->data + 8); + if (!version) { + GstVideoMultiviewMode mode = GST_VIDEO_MULTIVIEW_MODE_NONE; + GstVideoMultiviewFlags flags = GST_VIDEO_MULTIVIEW_FLAGS_NONE; + guint8 frame_type, frame_layout; + + /* MPEG-A stereo video */ + if (qtdemux->major_brand == FOURCC_ss02) + flags |= GST_VIDEO_MULTIVIEW_FLAGS_MIXED_MONO; + + frame_type = QT_UINT8 ((guint8 *) svmi->data + 12); + frame_layout = QT_UINT8 ((guint8 *) svmi->data + 13) & 0x01; + switch (frame_type) { + case 0: + mode = GST_VIDEO_MULTIVIEW_MODE_SIDE_BY_SIDE; + break; + case 1: + mode = GST_VIDEO_MULTIVIEW_MODE_ROW_INTERLEAVED; + break; + case 2: + mode = GST_VIDEO_MULTIVIEW_MODE_FRAME_BY_FRAME; + break; + case 3: + /* mode 3 is primary/secondary view sequence, ie + * left/right views in separate tracks. See section 7.2 + * of ISO/IEC 23000-11:2009 */ + GST_FIXME_OBJECT (qtdemux, + "Implement stereo video in separate streams"); + } + + if ((frame_layout & 0x1) == 0) + flags |= GST_VIDEO_MULTIVIEW_FLAGS_RIGHT_VIEW_FIRST; + + GST_LOG_OBJECT (qtdemux, + "StereoVideo: composition type: %u, is_left_first: %u", + frame_type, frame_layout); + stream->multiview_mode = mode; + stream->multiview_flags = flags; + } + } + /* parse stsd */ if (!(stsd = qtdemux_tree_get_child_by_type (stbl, FOURCC_stsd))) goto corrupt_file; @@ -11562,6 +11697,7 @@ qtdemux_video_caps (GstQTDemux * qtdemux, QtDemuxStream * stream, gst_video_info_init (&info); gst_video_info_set_format (&info, format, stream->width, stream->height); + caps = gst_video_info_to_caps (&info); *codec_name = gst_pb_utils_get_codec_description (caps); diff --git a/gst/isomp4/qtdemux_dump.c b/gst/isomp4/qtdemux_dump.c index a73812e2a..880bb74cb 100644 --- a/gst/isomp4/qtdemux_dump.c +++ b/gst/isomp4/qtdemux_dump.c @@ -499,14 +499,16 @@ qtdemux_dump_stco (GstQTDemux * qtdemux, GstByteReader * data, int depth) gboolean qtdemux_dump_ctts (GstQTDemux * qtdemux, GstByteReader * data, int depth) { - guint32 ver_flags = 0, num_entries = 0, i, count, offset; + guint32 ver_flags = 0, num_entries = 0, i, count; + gint32 offset; + if (!gst_byte_reader_get_uint32_be (data, &ver_flags) || !gst_byte_reader_get_uint32_be (data, &num_entries)) return FALSE; GST_LOG ("%*s version/flags: %08x", depth, "", ver_flags); - GST_LOG ("%*s n entries: %d", depth, "", num_entries); + GST_LOG ("%*s n entries: %u", depth, "", num_entries); if (!qt_atom_parser_has_chunks (data, num_entries, 4 + 4)) return FALSE; @@ -519,6 +521,28 @@ qtdemux_dump_ctts (GstQTDemux * qtdemux, GstByteReader * data, int depth) return TRUE; } +gboolean +qtdemux_dump_cslg (GstQTDemux * qtdemux, GstByteReader * data, int depth) +{ + guint32 ver_flags = 0, shift = 0; + gint32 least_offset = 0, start_time = 0, end_time = 0; + + if (!gst_byte_reader_get_uint32_be (data, &ver_flags) || + !gst_byte_reader_get_uint32_be (data, &shift) || + !gst_byte_reader_get_int32_be (data, &least_offset) || + !gst_byte_reader_get_int32_be (data, &start_time) || + !gst_byte_reader_get_int32_be (data, &end_time)) + return FALSE; + + GST_LOG ("%*s version/flags: %08x", depth, "", ver_flags); + GST_LOG ("%*s shift: %u", depth, "", shift); + GST_LOG ("%*s least offset: %d", depth, "", least_offset); + GST_LOG ("%*s start time: %d", depth, "", start_time); + GST_LOG ("%*s end time: %d", depth, "", end_time); + + return TRUE; +} + gboolean qtdemux_dump_co64 (GstQTDemux * qtdemux, GstByteReader * data, int depth) { @@ -836,6 +860,36 @@ qtdemux_dump_sdtp (GstQTDemux * qtdemux, GstByteReader * data, int depth) return TRUE; } +gboolean +qtdemux_dump_svmi (GstQTDemux * qtdemux, GstByteReader * data, int depth) +{ + guint32 version; + guint stereo_mono_change_count; + guint i; + + version = GET_UINT32 (data); + GST_LOG ("%*s version/flags: %08x", depth, "", version); + + if (!version) { + /* stereoscopic visual type information */ + GST_LOG ("%*s stereo_composition_type: %d", depth, "", + GET_UINT8 (data)); + GST_LOG ("%*s is_left_first: %d", depth, "", + ((guint8) GET_UINT8 (data)) & 0x01); + + /* stereo_mono_change information */ + stereo_mono_change_count = GET_UINT32 (data); + GST_LOG ("%*s stereo_mono_change_count: %d", depth, "", + stereo_mono_change_count); + for (i = 1; i <= stereo_mono_change_count; i++) { + GST_LOG ("%*s sample_count: %d", depth, "", GET_UINT32 (data)); + GST_LOG ("%*s stereo_flag: %d", depth, "", + ((guint8) GET_UINT8 (data)) & 0x01); + } + } + return TRUE; +} + gboolean qtdemux_dump_unknown (GstQTDemux * qtdemux, GstByteReader * data, int depth) { diff --git a/gst/isomp4/qtdemux_dump.h b/gst/isomp4/qtdemux_dump.h index 6b1287418..4234023b4 100644 --- a/gst/isomp4/qtdemux_dump.h +++ b/gst/isomp4/qtdemux_dump.h @@ -61,6 +61,8 @@ gboolean qtdemux_dump_cmvd (GstQTDemux * qtdemux, GstByteReader * data, int depth); gboolean qtdemux_dump_ctts (GstQTDemux * qtdemux, GstByteReader * data, int depth); +gboolean qtdemux_dump_cslg (GstQTDemux * qtdemux, GstByteReader * data, + int depth); gboolean qtdemux_dump_mfro (GstQTDemux * qtdemux, GstByteReader * data, int depth); gboolean qtdemux_dump_mfhd (GstQTDemux * qtdemux, GstByteReader * data, @@ -81,6 +83,8 @@ gboolean qtdemux_dump_tfdt (GstQTDemux * qtdemux, GstByteReader * data, int depth); gboolean qtdemux_dump_unknown (GstQTDemux * qtdemux, GstByteReader * data, int depth); +gboolean qtdemux_dump_svmi (GstQTDemux *qtdemux, GstByteReader *data, + int depth); gboolean qtdemux_node_dump (GstQTDemux * qtdemux, GNode * node); diff --git a/gst/isomp4/qtdemux_types.c b/gst/isomp4/qtdemux_types.c index 651a85f8b..ecd02f265 100644 --- a/gst/isomp4/qtdemux_types.c +++ b/gst/isomp4/qtdemux_types.c @@ -146,6 +146,7 @@ static const QtNodeType qt_node_types[] = { {FOURCC_rdrf, "rdrf", 0,}, {FOURCC__gen, "Custom Genre", QT_FLAG_CONTAINER,}, {FOURCC_ctts, "Composition time to sample", 0, qtdemux_dump_ctts}, + {FOURCC_cslg, "Composition Shift Least Greatest", 0, qtdemux_dump_cslg}, {FOURCC_XiTh, "XiTh", 0}, {FOURCC_XdxT, "XdxT", 0}, {FOURCC_loci, "loci", 0}, @@ -184,6 +185,10 @@ static const QtNodeType qt_node_types[] = { {FOURCC_frma, "Audio codec format", 0}, {FOURCC_name, "name", 0}, {FOURCC_mean, "mean", 0}, + {FOURCC_svmi, "Stereoscopic Video Media Information", 0, + qtdemux_dump_svmi}, + {FOURCC_scdi, "Stereoscopic Camera and Display Information", 0, + qtdemux_dump_unknown}, {0, "unknown", 0,}, }; diff --git a/gst/matroska/lzo.c b/gst/matroska/lzo.c index 3c564bbdf..7462df2b6 100644 --- a/gst/matroska/lzo.c +++ b/gst/matroska/lzo.c @@ -286,6 +286,8 @@ main (int argc, char *argv[]) av_log (NULL, AV_LOG_ERROR, "decompression incorrect\n"); else av_log (NULL, AV_LOG_ERROR, "decompression ok\n"); + + fclose (in); return 0; } #endif diff --git a/gst/matroska/matroska-demux.c b/gst/matroska/matroska-demux.c index 0ee13b378..76fd8b830 100644 --- a/gst/matroska/matroska-demux.c +++ b/gst/matroska/matroska-demux.c @@ -731,12 +731,61 @@ gst_matroska_demux_add_stream (GstMatroskaDemux * demux, GstEbmlRead * ebml) g_free (data); break; } + case GST_MATROSKA_ID_VIDEOSTEREOMODE: + { + guint64 num; + + if ((ret = gst_ebml_read_uint (ebml, &id, &num)) != GST_FLOW_OK) + break; + + GST_DEBUG_OBJECT (demux, "StereoMode: %" G_GUINT64_FORMAT, num); + + switch (num) { + case GST_MATROSKA_STEREO_MODE_SBS_RL: + videocontext->multiview_flags = + GST_VIDEO_MULTIVIEW_FLAGS_RIGHT_VIEW_FIRST; + /* fall through */ + case GST_MATROSKA_STEREO_MODE_SBS_LR: + videocontext->multiview_mode = + GST_VIDEO_MULTIVIEW_MODE_SIDE_BY_SIDE; + break; + case GST_MATROSKA_STEREO_MODE_TB_RL: + videocontext->multiview_flags = + GST_VIDEO_MULTIVIEW_FLAGS_RIGHT_VIEW_FIRST; + /* fall through */ + case GST_MATROSKA_STEREO_MODE_TB_LR: + videocontext->multiview_mode = + GST_VIDEO_MULTIVIEW_MODE_TOP_BOTTOM; + break; + case GST_MATROSKA_STEREO_MODE_CHECKER_RL: + videocontext->multiview_flags = + GST_VIDEO_MULTIVIEW_FLAGS_RIGHT_VIEW_FIRST; + /* fall through */ + case GST_MATROSKA_STEREO_MODE_CHECKER_LR: + videocontext->multiview_mode = + GST_VIDEO_MULTIVIEW_MODE_CHECKERBOARD; + break; + case GST_MATROSKA_STEREO_MODE_FBF_RL: + videocontext->multiview_flags = + GST_VIDEO_MULTIVIEW_FLAGS_RIGHT_VIEW_FIRST; + /* fall through */ + case GST_MATROSKA_STEREO_MODE_FBF_LR: + videocontext->multiview_mode = + GST_VIDEO_MULTIVIEW_MODE_FRAME_BY_FRAME; + /* FIXME: In frame-by-frame mode, left/right frame buffers are + * laced within one block, and we'll need to apply FIRST_IN_BUNDLE + * accordingly. See http://www.matroska.org/technical/specs/index.html#StereoMode */ + GST_FIXME_OBJECT (demux, + "Frame-by-frame stereoscopic mode not fully implemented"); + break; + } + break; + } default: GST_WARNING_OBJECT (demux, "Unknown TrackVideo subelement 0x%x - ignoring", id); /* fall through */ - case GST_MATROSKA_ID_VIDEOSTEREOMODE: case GST_MATROSKA_ID_VIDEODISPLAYUNIT: case GST_MATROSKA_ID_VIDEOPIXELCROPBOTTOM: case GST_MATROSKA_ID_VIDEOPIXELCROPTOP: @@ -1074,9 +1123,7 @@ gst_matroska_demux_add_stream (GstMatroskaDemux * demux, GstEbmlRead * ebml) demux->common.num_streams--; g_ptr_array_remove_index (demux->common.src, demux->common.num_streams); g_assert (demux->common.src->len == demux->common.num_streams); - if (context) { - gst_matroska_track_free (context); - } + gst_matroska_track_free (context); return ret; } @@ -5184,6 +5231,20 @@ gst_matroska_demux_video_caps (GstMatroskaTrackVideoContext * gst_structure_set (structure, "interlace-mode", G_TYPE_STRING, "mixed", NULL); } + if (videocontext->multiview_mode != GST_VIDEO_MULTIVIEW_MODE_NONE) { + if (gst_video_multiview_guess_half_aspect (videocontext->multiview_mode, + videocontext->pixel_width, videocontext->pixel_height, + videocontext->display_width * videocontext->pixel_height, + videocontext->display_height * videocontext->pixel_width)) { + videocontext->multiview_flags |= GST_VIDEO_MULTIVIEW_FLAGS_HALF_ASPECT; + } + gst_caps_set_simple (caps, + "multiview-mode", G_TYPE_STRING, + gst_video_multiview_mode_to_caps_string + (videocontext->multiview_mode), "multiview-flags", + GST_TYPE_VIDEO_MULTIVIEW_FLAGSET, videocontext->multiview_flags, + GST_FLAG_SET_MASK_EXACT, NULL); + } caps = gst_caps_simplify (caps); } diff --git a/gst/matroska/matroska-ids.c b/gst/matroska/matroska-ids.c index 65af1cc4c..52e5dc30d 100644 --- a/gst/matroska/matroska-ids.c +++ b/gst/matroska/matroska-ids.c @@ -59,6 +59,9 @@ gst_matroska_track_init_video_context (GstMatroskaTrackContext ** p_context) video_context->fourcc = 0; video_context->default_fps = 0.0; video_context->earliest_time = GST_CLOCK_TIME_NONE; + video_context->multiview_mode = GST_VIDEO_MULTIVIEW_MODE_NONE; + video_context->multiview_flags = GST_VIDEO_MULTIVIEW_FLAGS_NONE; + return TRUE; } diff --git a/gst/matroska/matroska-ids.h b/gst/matroska/matroska-ids.h index 41315a052..661a4a1b0 100644 --- a/gst/matroska/matroska-ids.h +++ b/gst/matroska/matroska-ids.h @@ -23,6 +23,7 @@ #define __GST_MATROSKA_IDS_H__ #include <gst/gst.h> +#include <gst/video/video-info.h> #include "ebml-ids.h" @@ -489,6 +490,16 @@ typedef enum { GST_MATROSKA_VIDEOTRACK_INTERLACED = (GST_MATROSKA_TRACK_SHIFT<<0) } GstMatroskaVideoTrackFlags; +typedef enum { + GST_MATROSKA_STEREO_MODE_SBS_LR = 0x1, + GST_MATROSKA_STEREO_MODE_TB_RL = 0x2, + GST_MATROSKA_STEREO_MODE_TB_LR = 0x3, + GST_MATROSKA_STEREO_MODE_CHECKER_RL = 0x4, + GST_MATROSKA_STEREO_MODE_CHECKER_LR = 0x5, + GST_MATROSKA_STEREO_MODE_SBS_RL = 0x9, + GST_MATROSKA_STEREO_MODE_FBF_LR = 0xD, + GST_MATROSKA_STEREO_MODE_FBF_RL = 0xE +} GstMatroskaStereoMode; typedef struct _GstMatroskaTrackContext GstMatroskaTrackContext; @@ -571,6 +582,9 @@ typedef struct _GstMatroskaTrackVideoContext { GstMatroskaAspectRatioMode asr_mode; guint32 fourcc; + GstVideoMultiviewMode multiview_mode; + GstVideoMultiviewFlags multiview_flags; + /* QoS */ GstClockTime earliest_time; diff --git a/gst/matroska/matroska-mux.c b/gst/matroska/matroska-mux.c index 0e28ed321..f555f0df9 100644 --- a/gst/matroska/matroska-mux.c +++ b/gst/matroska/matroska-mux.c @@ -929,7 +929,7 @@ gst_matroska_mux_video_pad_setcaps (GstPad * pad, GstCaps * caps) GstMatroskaPad *collect_pad; GstStructure *structure; const gchar *mimetype; - const gchar *interlace_mode; + const gchar *interlace_mode, *s; const GValue *value = NULL; GstBuffer *codec_buf = NULL; gint width, height, pixel_width, pixel_height; @@ -1002,6 +1002,14 @@ gst_matroska_mux_video_pad_setcaps (GstPad * pad, GstCaps * caps) videocontext->display_height = 0; } + /* Collect stereoscopic info, if any */ + if ((s = gst_structure_get_string (structure, "multiview-mode"))) + videocontext->multiview_mode = + gst_video_multiview_mode_from_caps_string (s); + gst_structure_get_flagset (structure, "multiview-flags", + &videocontext->multiview_flags, NULL); + + skip_details: videocontext->asr_mode = GST_MATROSKA_ASPECT_RATIO_MODE_FREE; @@ -2432,6 +2440,53 @@ gst_matroska_mux_track_header (GstMatroskaMux * mux, gst_ebml_write_binary (ebml, GST_MATROSKA_ID_VIDEOCOLOURSPACE, (gpointer) & fcc_le, 4); } + if (videocontext->multiview_mode != GST_VIDEO_MULTIVIEW_MODE_NONE) { + guint64 stereo_mode = 0; + + switch (videocontext->multiview_mode) { + case GST_VIDEO_MULTIVIEW_MODE_SIDE_BY_SIDE: + if (videocontext->multiview_flags & + GST_VIDEO_MULTIVIEW_FLAGS_RIGHT_VIEW_FIRST) + stereo_mode = GST_MATROSKA_STEREO_MODE_SBS_RL; + else + stereo_mode = GST_MATROSKA_STEREO_MODE_SBS_LR; + break; + case GST_VIDEO_MULTIVIEW_MODE_TOP_BOTTOM: + if (videocontext->multiview_flags & + GST_VIDEO_MULTIVIEW_FLAGS_RIGHT_VIEW_FIRST) + stereo_mode = GST_MATROSKA_STEREO_MODE_TB_RL; + else + stereo_mode = GST_MATROSKA_STEREO_MODE_TB_LR; + break; + case GST_VIDEO_MULTIVIEW_MODE_CHECKERBOARD: + if (videocontext->multiview_flags & + GST_VIDEO_MULTIVIEW_FLAGS_RIGHT_VIEW_FIRST) + stereo_mode = GST_MATROSKA_STEREO_MODE_CHECKER_RL; + else + stereo_mode = GST_MATROSKA_STEREO_MODE_CHECKER_LR; + break; + case GST_VIDEO_MULTIVIEW_MODE_FRAME_BY_FRAME: + if (videocontext->multiview_flags & + GST_VIDEO_MULTIVIEW_FLAGS_RIGHT_VIEW_FIRST) + stereo_mode = GST_MATROSKA_STEREO_MODE_FBF_RL; + else + stereo_mode = GST_MATROSKA_STEREO_MODE_FBF_LR; + /* FIXME: In frame-by-frame mode, left/right frame buffers need to be + * laced within one block. See http://www.matroska.org/technical/specs/index.html#StereoMode */ + GST_FIXME_OBJECT (mux, + "Frame-by-frame stereoscopic mode not fully implemented"); + break; + default: + GST_WARNING_OBJECT (mux, + "Multiview mode %d not supported in Matroska/WebM", + videocontext->multiview_mode); + break; + } + + if (stereo_mode != 0) + gst_ebml_write_uint (ebml, GST_MATROSKA_ID_VIDEOSTEREOMODE, + stereo_mode); + } gst_ebml_write_master_finish (ebml, master); break; diff --git a/gst/matroska/matroska-parse.c b/gst/matroska/matroska-parse.c index 53b4eaca7..11de18b50 100644 --- a/gst/matroska/matroska-parse.c +++ b/gst/matroska/matroska-parse.c @@ -940,9 +940,7 @@ gst_matroska_parse_add_stream (GstMatroskaParse * parse, GstEbmlRead * ebml) parse->common.num_streams--; g_ptr_array_remove_index (parse->common.src, parse->common.num_streams); g_assert (parse->common.src->len == parse->common.num_streams); - if (context) { - gst_matroska_track_free (context); - } + gst_matroska_track_free (context); return ret; } diff --git a/gst/multifile/gstsplitmuxpartreader.c b/gst/multifile/gstsplitmuxpartreader.c index fc87f81d3..54bd6af97 100644 --- a/gst/multifile/gstsplitmuxpartreader.c +++ b/gst/multifile/gstsplitmuxpartreader.c @@ -903,9 +903,11 @@ type_found (GstElement * typefind, guint probability, return; } + gst_element_set_locked_state (demux, TRUE); gst_bin_add (GST_BIN_CAST (reader), demux); gst_element_link_pads (reader->typefind, "src", demux, NULL); - gst_element_set_state (reader->demux, GST_STATE_PLAYING); + gst_element_sync_state_with_parent (reader->demux); + gst_element_set_locked_state (demux, FALSE); /* Connect to demux signals */ g_signal_connect (demux, @@ -1025,12 +1027,11 @@ gst_splitmux_part_reader_change_state (GstElement * element, break; } case GST_STATE_CHANGE_READY_TO_PAUSED:{ - g_object_set (reader->src, "location", reader->path, NULL); + /* Hold the splitmux part lock until after the + * parent state change function has finished + * changing the states of things */ SPLITMUX_PART_LOCK (reader); - reader->prep_state = PART_STATE_PREPARING_COLLECT_STREAMS; - gst_splitmux_part_reader_set_flushing_locked (reader, FALSE); - reader->running = TRUE; - SPLITMUX_PART_UNLOCK (reader); + g_object_set (reader->src, "location", reader->path, NULL); break; } case GST_STATE_CHANGE_READY_TO_NULL: @@ -1053,25 +1054,31 @@ gst_splitmux_part_reader_change_state (GstElement * element, } ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition); - if (ret == GST_STATE_CHANGE_FAILURE) + if (ret == GST_STATE_CHANGE_FAILURE) { + if (transition == GST_STATE_CHANGE_READY_TO_PAUSED) { + /* Make sure to release the lock we took above */ + SPLITMUX_PART_UNLOCK (reader); + } goto beach; + } switch (transition) { case GST_STATE_CHANGE_READY_TO_PAUSED: /* Sleep and wait until all streams have been collected, then do the seeks - * to measure the stream lengths */ - SPLITMUX_PART_LOCK (reader); + * to measure the stream lengths. This took the part lock above already... */ + reader->prep_state = PART_STATE_PREPARING_COLLECT_STREAMS; + gst_splitmux_part_reader_set_flushing_locked (reader, FALSE); + reader->running = TRUE; while (reader->prep_state == PART_STATE_PREPARING_COLLECT_STREAMS) { GST_LOG_OBJECT (reader, "Waiting to collect all output streams"); SPLITMUX_PART_WAIT (reader); } - if (reader->prep_state == PART_STATE_PREPARING_MEASURE_STREAMS) + if (reader->prep_state == PART_STATE_PREPARING_MEASURE_STREAMS || + reader->prep_state == PART_STATE_PREPARING_RESET_FOR_READY) { gst_splitmux_part_reader_measure_streams (reader); - else if (reader->prep_state == PART_STATE_PREPARING_RESET_FOR_READY) - reader->prep_state = PART_STATE_READY; - else if (reader->prep_state == PART_STATE_FAILED) + } else if (reader->prep_state == PART_STATE_FAILED) ret = GST_STATE_CHANGE_FAILURE; SPLITMUX_PART_UNLOCK (reader); break; @@ -1256,7 +1263,7 @@ gst_splitmux_part_reader_lookup_pad (GstSplitMuxPartReader * reader, for (cur = g_list_first (reader->pads); cur != NULL; cur = g_list_next (cur)) { GstSplitMuxPartPad *part_pad = SPLITMUX_PART_PAD_CAST (cur->data); if (part_pad->target == target) { - result = (GstPad *) part_pad; + result = (GstPad *) gst_object_ref (part_pad); break; } } diff --git a/gst/multifile/gstsplitmuxsink.c b/gst/multifile/gstsplitmuxsink.c index 96f4d1d70..91d7fc4cd 100644 --- a/gst/multifile/gstsplitmuxsink.c +++ b/gst/multifile/gstsplitmuxsink.c @@ -487,8 +487,10 @@ complete_or_wait_on_out (GstSplitMuxSink * splitmux, MqStreamCtx * ctx) GST_TIME_ARGS (splitmux->max_out_running_time)); if (splitmux->max_out_running_time == GST_CLOCK_TIME_NONE || - ctx->out_running_time < splitmux->max_out_running_time) + ctx->out_running_time < splitmux->max_out_running_time) { + splitmux->have_muxed_something = TRUE; return; + } if (ctx->flushing || splitmux->state == SPLITMUX_STATE_STOPPED) return; @@ -678,10 +680,15 @@ start_next_fragment (GstSplitMuxSink * splitmux) /* Switch state and go back to processing */ splitmux->state = SPLITMUX_STATE_COLLECTING_GOP_START; - if (!splitmux->video_ctx->in_eos) + + if (!splitmux->video_ctx->in_eos) { splitmux->max_out_running_time = splitmux->video_ctx->in_running_time; - else + } else { splitmux->max_out_running_time = GST_CLOCK_TIME_NONE; + splitmux->have_muxed_something = FALSE; + } + splitmux->have_muxed_something = + (splitmux->video_ctx->in_running_time > splitmux->muxed_out_time); /* Store the overflow parameters as the basis for the next fragment */ splitmux->mux_start_time = splitmux->muxed_out_time; @@ -759,7 +766,7 @@ handle_gathered_gop (GstSplitMuxSink * splitmux) /* Check for overrun - have we output at least one byte and overrun * either threshold? */ - if ((splitmux->mux_start_bytes < splitmux->muxed_out_bytes) && + if (splitmux->have_muxed_something && ((splitmux->threshold_bytes > 0 && queued_bytes >= splitmux->threshold_bytes) || (splitmux->threshold_time > 0 && @@ -782,6 +789,8 @@ handle_gathered_gop (GstSplitMuxSink * splitmux) /* Wake everyone up to push this one GOP, then sleep */ splitmux->state = SPLITMUX_STATE_COLLECTING_GOP_START; + splitmux->have_muxed_something = TRUE; + if (!splitmux->video_ctx->in_eos) splitmux->max_out_running_time = splitmux->video_ctx->in_running_time; else @@ -872,7 +881,7 @@ check_queue_length (GstSplitMuxSink * splitmux, MqStreamCtx * ctx) splitmux->queued_gops <= 1) { allow_grow = TRUE; } else if (splitmux->state == SPLITMUX_STATE_COLLECTING_GOP_START && - ctx->is_video) { + ctx->is_video && splitmux->queued_gops <= 1) { allow_grow = TRUE; } diff --git a/gst/multifile/gstsplitmuxsink.h b/gst/multifile/gstsplitmuxsink.h index f38376733..a305ed4e0 100644 --- a/gst/multifile/gstsplitmuxsink.h +++ b/gst/multifile/gstsplitmuxsink.h @@ -118,6 +118,7 @@ struct _GstSplitMuxSink { GstClockTime muxed_out_time; gsize muxed_out_bytes; + gboolean have_muxed_something; GstClockTime mux_start_time; gsize mux_start_bytes; diff --git a/gst/multifile/gstsplitmuxsrc.c b/gst/multifile/gstsplitmuxsrc.c index 9e310c109..b827f4362 100644 --- a/gst/multifile/gstsplitmuxsrc.c +++ b/gst/multifile/gstsplitmuxsrc.c @@ -518,9 +518,17 @@ gst_splitmux_pad_loop (GstPad * pad) GstSplitMuxSrc *splitmux = (GstSplitMuxSrc *) gst_pad_get_parent (pad); GstDataQueueItem *item = NULL; GstSplitMuxPartReader *reader = splitpad->reader; - GstPad *part_pad = splitpad->part_pad; + GstPad *part_pad; GstFlowReturn ret; + GST_OBJECT_LOCK (splitpad); + if (splitpad->part_pad == NULL) { + GST_OBJECT_UNLOCK (splitpad); + return; + } + part_pad = gst_object_ref (splitpad->part_pad); + GST_OBJECT_UNLOCK (splitpad); + GST_LOG_OBJECT (splitpad, "Popping data queue item from %" GST_PTR_FORMAT " pad %" GST_PTR_FORMAT, reader, part_pad); ret = gst_splitmux_part_reader_pop (reader, part_pad, &item); @@ -552,6 +560,7 @@ gst_splitmux_pad_loop (GstPad * pad) } g_slice_free (GstDataQueueItem, item); + gst_object_unref (part_pad); gst_object_unref (splitmux); return; @@ -561,11 +570,12 @@ error: ("Error reading part file %s", GST_STR_NULL (reader->path))); flushing: gst_pad_pause_task (pad); + gst_object_unref (part_pad); gst_object_unref (splitmux); return; } -static void +static gboolean gst_splitmux_src_activate_part (GstSplitMuxSrc * splitmux, guint part) { GList *cur; @@ -573,8 +583,9 @@ gst_splitmux_src_activate_part (GstSplitMuxSrc * splitmux, guint part) GST_DEBUG_OBJECT (splitmux, "Activating part %d", part); splitmux->cur_part = part; - gst_splitmux_part_reader_activate (splitmux->parts[part], - &splitmux->play_segment); + if (!gst_splitmux_part_reader_activate (splitmux->parts[part], + &splitmux->play_segment)) + return FALSE; SPLITMUX_SRC_PADS_LOCK (splitmux); for (cur = g_list_first (splitmux->pads); @@ -582,6 +593,8 @@ gst_splitmux_src_activate_part (GstSplitMuxSrc * splitmux, guint part) SplitMuxSrcPad *splitpad = (SplitMuxSrcPad *) (cur->data); splitpad->cur_part = part; splitpad->reader = splitmux->parts[splitpad->cur_part]; + if (splitpad->part_pad) + gst_object_unref (splitpad->part_pad); splitpad->part_pad = gst_splitmux_part_reader_lookup_pad (splitpad->reader, (GstPad *) (splitpad)); @@ -594,6 +607,8 @@ gst_splitmux_src_activate_part (GstSplitMuxSrc * splitmux, guint part) (GstTaskFunction) gst_splitmux_pad_loop, splitpad, NULL); } SPLITMUX_SRC_PADS_UNLOCK (splitmux); + + return TRUE; } static gboolean @@ -606,6 +621,7 @@ gst_splitmux_src_start (GstSplitMuxSrc * splitmux) gchar **files; GstClockTime next_offset = 0; guint i; + GstClockTime total_duration = 0; GST_DEBUG_OBJECT (splitmux, "Starting"); @@ -622,6 +638,7 @@ gst_splitmux_src_start (GstSplitMuxSrc * splitmux) goto no_files; SPLITMUX_SRC_LOCK (splitmux); + splitmux->pads_complete = FALSE; splitmux->running = TRUE; SPLITMUX_SRC_UNLOCK (splitmux); @@ -649,13 +666,19 @@ gst_splitmux_src_start (GstSplitMuxSrc * splitmux) } /* Extend our total duration to cover this part */ - splitmux->total_duration = + total_duration = next_offset + gst_splitmux_part_reader_get_duration (splitmux->parts[i]); - splitmux->play_segment.duration = splitmux->total_duration; + splitmux->play_segment.duration = total_duration; next_offset = gst_splitmux_part_reader_get_end_offset (splitmux->parts[i]); } + + /* Update total_duration state variable */ + GST_OBJECT_LOCK (splitmux); + splitmux->total_duration = total_duration; + GST_OBJECT_UNLOCK (splitmux); + /* Store how many parts we actually created */ splitmux->num_parts = i; @@ -665,10 +688,10 @@ gst_splitmux_src_start (GstSplitMuxSrc * splitmux) /* All done preparing, activate the first part */ GST_INFO_OBJECT (splitmux, "All parts prepared. Total duration %" GST_TIME_FORMAT - " Activating first part", GST_TIME_ARGS (splitmux->total_duration)); - gst_splitmux_src_activate_part (splitmux, 0); - - ret = TRUE; + " Activating first part", GST_TIME_ARGS (total_duration)); + ret = gst_splitmux_src_activate_part (splitmux, 0); + if (ret == FALSE) + goto failed_first_part; done: if (err != NULL) g_error_free (err); @@ -692,6 +715,12 @@ failed_part: ("Failed to open any files for reading")); goto done; } +failed_first_part: + { + GST_ELEMENT_ERROR (splitmux, RESOURCE, OPEN_READ, (NULL), + ("Failed to activate first part for playback")); + goto done; + } } static gboolean @@ -699,7 +728,7 @@ gst_splitmux_src_stop (GstSplitMuxSrc * splitmux) { gboolean ret = TRUE; guint i; - GList *cur; + GList *cur, *pads_list; SPLITMUX_SRC_LOCK (splitmux); if (!splitmux->running) @@ -717,12 +746,16 @@ gst_splitmux_src_stop (GstSplitMuxSrc * splitmux) } SPLITMUX_SRC_PADS_LOCK (splitmux); - for (cur = g_list_first (splitmux->pads); - cur != NULL; cur = g_list_next (cur)) { + pads_list = splitmux->pads; + splitmux->pads = NULL; + SPLITMUX_SRC_PADS_UNLOCK (splitmux); + + for (cur = g_list_first (pads_list); cur != NULL; cur = g_list_next (cur)) { SplitMuxSrcPad *tmp = (SplitMuxSrcPad *) (cur->data); gst_pad_stop_task (GST_PAD (tmp)); + gst_element_remove_pad (GST_ELEMENT (splitmux), GST_PAD (tmp)); } - SPLITMUX_SRC_PADS_UNLOCK (splitmux); + g_list_free (pads_list); g_free (splitmux->parts); splitmux->parts = NULL; @@ -791,6 +824,7 @@ gst_splitmux_part_prepared (GstSplitMuxPartReader * reader, { gboolean need_no_more_pads; + GST_LOG_OBJECT (splitmux, "Part %" GST_PTR_FORMAT " prepared", reader); SPLITMUX_SRC_LOCK (splitmux); need_no_more_pads = !splitmux->pads_complete; splitmux->pads_complete = TRUE; @@ -883,6 +917,8 @@ gst_splitmux_end_of_part (GstSplitMuxSrc * splitmux, SplitMuxSrcPad * splitpad) " moving to part %d", splitpad, next_part); splitpad->cur_part = next_part; splitpad->reader = splitmux->parts[splitpad->cur_part]; + if (splitpad->part_pad) + gst_object_unref (splitpad->part_pad); splitpad->part_pad = gst_splitmux_part_reader_lookup_pad (splitpad->reader, (GstPad *) (splitpad)); @@ -901,13 +937,19 @@ gst_splitmux_end_of_part (GstSplitMuxSrc * splitmux, SplitMuxSrcPad * splitpad) GST_DEBUG_OBJECT (splitpad, "First pad to change part. Activating part %d with seg %" GST_SEGMENT_FORMAT, next_part, &tmp); - gst_splitmux_part_reader_activate (splitpad->reader, &tmp); + if (!gst_splitmux_part_reader_activate (splitpad->reader, &tmp)) + goto error; } res = TRUE; } SPLITMUX_SRC_UNLOCK (splitmux); return res; +error: + SPLITMUX_SRC_UNLOCK (splitmux); + GST_ELEMENT_ERROR (splitmux, RESOURCE, READ, (NULL), + ("Failed to activate part %d", splitmux->cur_part)); + return FALSE; } G_DEFINE_TYPE (SplitMuxSrcPad, splitmux_src_pad, GST_TYPE_PAD); @@ -923,12 +965,28 @@ splitmux_src_pad_constructed (GObject * pad) G_OBJECT_CLASS (splitmux_src_pad_parent_class)->constructed (pad); } +static void +gst_splitmux_src_pad_dispose (GObject * object) +{ + SplitMuxSrcPad *pad = (SplitMuxSrcPad *) (object); + + GST_OBJECT_LOCK (pad); + if (pad->part_pad) { + gst_object_unref (pad->part_pad); + pad->part_pad = NULL; + } + GST_OBJECT_UNLOCK (pad); + + G_OBJECT_CLASS (splitmux_src_pad_parent_class)->dispose (object); +} + static void splitmux_src_pad_class_init (SplitMuxSrcPadClass * klass) { GObjectClass *gobject_klass = (GObjectClass *) (klass); gobject_klass->constructed = splitmux_src_pad_constructed; + gobject_klass->dispose = gst_splitmux_src_pad_dispose; } static void @@ -1048,9 +1106,7 @@ splitmux_src_pad_event (GstPad * pad, GstObject * parent, GstEvent * event) GST_TIME_FORMAT, GST_TIME_ARGS (position), i, GST_TIME_ARGS (position - part_start)); - gst_splitmux_src_activate_part (splitmux, i); - - ret = TRUE; + ret = gst_splitmux_src_activate_part (splitmux, i); SPLITMUX_SRC_UNLOCK (splitmux); } default: @@ -1094,13 +1150,13 @@ splitmux_src_pad_query (GstPad * pad, GstObject * parent, GstQuery * query) if (fmt != GST_FORMAT_TIME) break; - SPLITMUX_SRC_LOCK (splitmux); + GST_OBJECT_LOCK (splitmux); if (splitmux->total_duration > 0) { gst_query_set_duration (query, GST_FORMAT_TIME, splitmux->total_duration); ret = TRUE; } - SPLITMUX_SRC_UNLOCK (splitmux); + GST_OBJECT_UNLOCK (splitmux); break; } case GST_QUERY_SEEKING:{ @@ -1110,11 +1166,11 @@ splitmux_src_pad_query (GstPad * pad, GstObject * parent, GstQuery * query) if (format != GST_FORMAT_TIME) break; - SPLITMUX_SRC_LOCK (splitmux); + GST_OBJECT_LOCK (splitmux); gst_query_set_seeking (query, GST_FORMAT_TIME, TRUE, 0, splitmux->total_duration); ret = TRUE; - SPLITMUX_SRC_UNLOCK (splitmux); + GST_OBJECT_UNLOCK (splitmux); break; } diff --git a/gst/rtp/gstasteriskh263.c b/gst/rtp/gstasteriskh263.c index 0deb6563f..0ab609dc0 100644 --- a/gst/rtp/gstasteriskh263.c +++ b/gst/rtp/gstasteriskh263.c @@ -169,7 +169,7 @@ gst_asteriskh263_chain (GstPad * pad, GstObject * parent, GstBuffer * buf) gst_buffer_unmap (outbuf, &map); - GST_BUFFER_TIMESTAMP (outbuf) = timestamp; + GST_BUFFER_PTS (outbuf) = timestamp; if (!gst_pad_has_current_caps (asteriskh263->srcpad)) { GstCaps *caps; diff --git a/gst/rtp/gstrtpac3pay.c b/gst/rtp/gstrtpac3pay.c index e283afd0d..c63d734a2 100644 --- a/gst/rtp/gstrtpac3pay.c +++ b/gst/rtp/gstrtpac3pay.c @@ -322,7 +322,7 @@ gst_rtp_ac3_pay_flush (GstRtpAC3Pay * rtpac3pay) gst_rtp_buffer_set_marker (&rtp, TRUE); gst_rtp_buffer_unmap (&rtp); - GST_BUFFER_TIMESTAMP (outbuf) = rtpac3pay->first_ts; + GST_BUFFER_PTS (outbuf) = rtpac3pay->first_ts; GST_BUFFER_DURATION (outbuf) = rtpac3pay->duration; ret = gst_rtp_base_payload_push (GST_RTP_BASE_PAYLOAD (rtpac3pay), outbuf); @@ -347,7 +347,7 @@ gst_rtp_ac3_pay_handle_buffer (GstRTPBasePayload * basepayload, gst_buffer_map (buffer, &map, GST_MAP_READ); duration = GST_BUFFER_DURATION (buffer); - timestamp = GST_BUFFER_TIMESTAMP (buffer); + timestamp = GST_BUFFER_PTS (buffer); if (GST_BUFFER_IS_DISCONT (buffer)) { GST_DEBUG_OBJECT (rtpac3pay, "DISCONT"); diff --git a/gst/rtp/gstrtpamrpay.c b/gst/rtp/gstrtpamrpay.c index ead9f9404..0f56c4cd8 100644 --- a/gst/rtp/gstrtpamrpay.c +++ b/gst/rtp/gstrtpamrpay.c @@ -259,7 +259,7 @@ gst_rtp_amr_pay_handle_buffer (GstRTPBasePayload * basepayload, gst_buffer_map (buffer, &map, GST_MAP_READ); - timestamp = GST_BUFFER_TIMESTAMP (buffer); + timestamp = GST_BUFFER_PTS (buffer); duration = GST_BUFFER_DURATION (buffer); /* setup frame size pointer */ @@ -315,7 +315,7 @@ gst_rtp_amr_pay_handle_buffer (GstRTPBasePayload * basepayload, gst_rtp_buffer_map (outbuf, GST_MAP_WRITE, &rtp); /* copy timestamp */ - GST_BUFFER_TIMESTAMP (outbuf) = timestamp; + GST_BUFFER_PTS (outbuf) = timestamp; if (duration != GST_CLOCK_TIME_NONE) GST_BUFFER_DURATION (outbuf) = duration; diff --git a/gst/rtp/gstrtpceltdepay.c b/gst/rtp/gstrtpceltdepay.c index 5e15cc6fa..bb6e42c00 100644 --- a/gst/rtp/gstrtpceltdepay.c +++ b/gst/rtp/gstrtpceltdepay.c @@ -210,7 +210,7 @@ gst_rtp_celt_depay_process (GstRTPBaseDepayload * depayload, GstBuffer * buf) frame_size = rtpceltdepay->frame_size; framesize_ns = gst_util_uint64_scale_int (frame_size, GST_SECOND, clock_rate); - timestamp = GST_BUFFER_TIMESTAMP (buf); + timestamp = GST_BUFFER_PTS (buf); gst_rtp_buffer_map (buf, GST_MAP_READ, &rtp); @@ -253,12 +253,12 @@ gst_rtp_celt_depay_process (GstRTPBaseDepayload * depayload, GstBuffer * buf) offset += size; if (frame_size != -1 && clock_rate != -1) { - GST_BUFFER_TIMESTAMP (outbuf) = timestamp + framesize_ns * n; + GST_BUFFER_PTS (outbuf) = timestamp + framesize_ns * n; GST_BUFFER_DURATION (outbuf) = framesize_ns; } GST_LOG_OBJECT (depayload, "push timestamp=%" GST_TIME_FORMAT ", duration=%" GST_TIME_FORMAT, - GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (outbuf)), + GST_TIME_ARGS (GST_BUFFER_PTS (outbuf)), GST_TIME_ARGS (GST_BUFFER_DURATION (outbuf))); gst_rtp_base_depayload_push (depayload, outbuf); diff --git a/gst/rtp/gstrtpceltpay.c b/gst/rtp/gstrtpceltpay.c index 3aabd9fea..3e701d75f 100644 --- a/gst/rtp/gstrtpceltpay.c +++ b/gst/rtp/gstrtpceltpay.c @@ -334,8 +334,8 @@ gst_rtp_celt_pay_flush_queued (GstRtpCELTPay * rtpceltpay) guint size; /* copy first timestamp to output */ - if (GST_BUFFER_TIMESTAMP (outbuf) == -1) - GST_BUFFER_TIMESTAMP (outbuf) = GST_BUFFER_TIMESTAMP (buf); + if (GST_BUFFER_PTS (outbuf) == -1) + GST_BUFFER_PTS (outbuf) = GST_BUFFER_PTS (buf); /* write the size to the header */ size = gst_buffer_get_size (buf); diff --git a/gst/rtp/gstrtpdvpay.c b/gst/rtp/gstrtpdvpay.c index db75cf659..ef93bc1d2 100644 --- a/gst/rtp/gstrtpdvpay.c +++ b/gst/rtp/gstrtpdvpay.c @@ -313,7 +313,7 @@ gst_rtp_dv_pay_handle_buffer (GstRTPBasePayload * basepayload, "DV RTP payloader got buffer of %" G_GSIZE_FORMAT " bytes, splitting in %u byte " "payload fragments, at time %" GST_TIME_FORMAT, size, max_payload_size, - GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buffer))); + GST_TIME_ARGS (GST_BUFFER_PTS (buffer))); if (!rtpdvpay->negotiated) { gst_dv_pay_negotiate (rtpdvpay, data, size); @@ -330,7 +330,7 @@ gst_rtp_dv_pay_handle_buffer (GstRTPBasePayload * basepayload, /* Allocate a new buffer, set the timestamp */ if (outbuf == NULL) { outbuf = gst_rtp_buffer_new_allocate (max_payload_size, 0, 0); - GST_BUFFER_TIMESTAMP (outbuf) = GST_BUFFER_TIMESTAMP (buffer); + GST_BUFFER_PTS (outbuf) = GST_BUFFER_PTS (buffer); if (!gst_rtp_buffer_map (outbuf, GST_MAP_WRITE, &rtp)) { gst_buffer_unref (outbuf); diff --git a/gst/rtp/gstrtpg723pay.c b/gst/rtp/gstrtpg723pay.c index 4a10b3bc2..e791fc400 100644 --- a/gst/rtp/gstrtpg723pay.c +++ b/gst/rtp/gstrtpg723pay.c @@ -159,7 +159,7 @@ gst_rtp_g723_pay_flush (GstRTPG723Pay * pay) gst_rtp_buffer_map (outbuf, GST_MAP_WRITE, &rtp); payload = gst_rtp_buffer_get_payload (&rtp); - GST_BUFFER_TIMESTAMP (outbuf) = pay->timestamp; + GST_BUFFER_PTS (outbuf) = pay->timestamp; GST_BUFFER_DURATION (outbuf) = pay->duration; /* copy G723 data as payload */ @@ -204,7 +204,7 @@ gst_rtp_g723_pay_handle_buffer (GstRTPBasePayload * payload, GstBuffer * buf) pay = GST_RTP_G723_PAY (payload); gst_buffer_map (buf, &map, GST_MAP_READ); - timestamp = GST_BUFFER_TIMESTAMP (buf); + timestamp = GST_BUFFER_PTS (buf); if (GST_BUFFER_IS_DISCONT (buf)) { /* flush everything on discont */ diff --git a/gst/rtp/gstrtpg729pay.c b/gst/rtp/gstrtpg729pay.c index 306e17571..e899d42f4 100644 --- a/gst/rtp/gstrtpg729pay.c +++ b/gst/rtp/gstrtpg729pay.c @@ -185,7 +185,7 @@ gst_rtp_g729_pay_push (GstRTPG729Pay * rtpg729pay, frames = (payload_len / G729_FRAME_SIZE) + ((payload_len % G729_FRAME_SIZE) >> 1); duration = frames * G729_FRAME_DURATION; - GST_BUFFER_TIMESTAMP (outbuf) = rtpg729pay->next_ts; + GST_BUFFER_PTS (outbuf) = rtpg729pay->next_ts; GST_BUFFER_DURATION (outbuf) = duration; GST_BUFFER_OFFSET (outbuf) = rtpg729pay->next_rtp_time; rtpg729pay->next_ts += duration; @@ -314,7 +314,7 @@ gst_rtp_g729_pay_handle_buffer (GstRTPBasePayload * payload, GstBuffer * buf) adapter = rtpg729pay->adapter; available = gst_adapter_available (adapter); - timestamp = GST_BUFFER_TIMESTAMP (buf); + timestamp = GST_BUFFER_PTS (buf); /* resync rtp time on discont or a discontinuous cn packet */ if (GST_BUFFER_IS_DISCONT (buf)) { diff --git a/gst/rtp/gstrtpgsmpay.c b/gst/rtp/gstrtpgsmpay.c index b6964c598..41f9b1361 100644 --- a/gst/rtp/gstrtpgsmpay.c +++ b/gst/rtp/gstrtpgsmpay.c @@ -137,7 +137,7 @@ gst_rtp_gsm_pay_handle_buffer (GstRTPBasePayload * basepayload, gst_buffer_map (buffer, &map, GST_MAP_READ); - timestamp = GST_BUFFER_TIMESTAMP (buffer); + timestamp = GST_BUFFER_PTS (buffer); duration = GST_BUFFER_DURATION (buffer); /* FIXME, only one GSM frame per RTP packet for now */ @@ -150,7 +150,7 @@ gst_rtp_gsm_pay_handle_buffer (GstRTPBasePayload * basepayload, outbuf = gst_rtp_buffer_new_allocate (payload_len, 0, 0); /* copy timestamp and duration */ - GST_BUFFER_TIMESTAMP (outbuf) = timestamp; + GST_BUFFER_PTS (outbuf) = timestamp; GST_BUFFER_DURATION (outbuf) = duration; /* get payload */ diff --git a/gst/rtp/gstrtpgstpay.c b/gst/rtp/gstrtpgstpay.c index 61670088c..82669c8eb 100644 --- a/gst/rtp/gstrtpgstpay.c +++ b/gst/rtp/gstrtpgstpay.c @@ -338,7 +338,7 @@ gst_rtp_gst_pay_create_from_adapter (GstRtpGSTPay * rtpgstpay, /* create a new group to hold the rtp header and the payload */ gst_buffer_append (outbuf, paybuf); - GST_BUFFER_TIMESTAMP (outbuf) = timestamp; + GST_BUFFER_PTS (outbuf) = timestamp; /* and add to list */ gst_buffer_list_insert (list, -1, outbuf); @@ -614,7 +614,7 @@ gst_rtp_gst_pay_handle_buffer (GstRTPBasePayload * basepayload, rtpgstpay = GST_RTP_GST_PAY (basepayload); - timestamp = GST_BUFFER_TIMESTAMP (buffer); + timestamp = GST_BUFFER_PTS (buffer); /* check if we need to send the caps and taglist now */ if (rtpgstpay->config_interval > 0) { diff --git a/gst/rtp/gstrtph263pay.c b/gst/rtp/gstrtph263pay.c index 0b7d24ea1..152093a35 100644 --- a/gst/rtp/gstrtph263pay.c +++ b/gst/rtp/gstrtph263pay.c @@ -1303,7 +1303,7 @@ gst_rtp_h263_pay_push (GstRtpH263Pay * rtph263pay, /* * timestamp the buffer */ - GST_BUFFER_TIMESTAMP (package->outbuf) = rtph263pay->first_ts; + GST_BUFFER_PTS (package->outbuf) = rtph263pay->first_ts; gst_rtp_buffer_set_marker (&rtp, package->marker); if (package->marker) @@ -1820,7 +1820,7 @@ gst_rtp_h263_pay_handle_buffer (GstRTPBasePayload * payload, GstBuffer * buffer) GST_DEBUG ("-------------------- NEW FRAME ---------------"); rtph263pay = GST_RTP_H263_PAY (payload); - rtph263pay->first_ts = GST_BUFFER_TIMESTAMP (buffer); + rtph263pay->first_ts = GST_BUFFER_PTS (buffer); /* we always encode and flush a full picture */ gst_adapter_push (rtph263pay->adapter, buffer); diff --git a/gst/rtp/gstrtph263ppay.c b/gst/rtp/gstrtph263ppay.c index 54adb2030..b342c9ac6 100644 --- a/gst/rtp/gstrtph263ppay.c +++ b/gst/rtp/gstrtph263ppay.c @@ -734,7 +734,7 @@ gst_rtp_h263p_pay_flush (GstRtpH263PPay * rtph263ppay) payload[0] = (fragmented && !found_gob) ? 0x00 : 0x04; payload[1] = 0; - GST_BUFFER_TIMESTAMP (outbuf) = rtph263ppay->first_timestamp; + GST_BUFFER_PTS (outbuf) = rtph263ppay->first_timestamp; GST_BUFFER_DURATION (outbuf) = rtph263ppay->first_duration; gst_rtp_buffer_unmap (&rtp); @@ -759,7 +759,7 @@ gst_rtp_h263p_pay_handle_buffer (GstRTPBasePayload * payload, rtph263ppay = GST_RTP_H263P_PAY (payload); - rtph263ppay->first_timestamp = GST_BUFFER_TIMESTAMP (buffer); + rtph263ppay->first_timestamp = GST_BUFFER_PTS (buffer); rtph263ppay->first_duration = GST_BUFFER_DURATION (buffer); /* we always encode and flush a full picture */ diff --git a/gst/rtp/gstrtph264depay.c b/gst/rtp/gstrtph264depay.c index 56b641060..b45a7206a 100644 --- a/gst/rtp/gstrtph264depay.c +++ b/gst/rtp/gstrtph264depay.c @@ -770,7 +770,7 @@ gst_rtp_h264_depay_handle_nal (GstRtpH264Depay * rtph264depay, GstBuffer * nal, } outbuf = gst_buffer_make_writable (outbuf); - GST_BUFFER_TIMESTAMP (outbuf) = out_timestamp; + GST_BUFFER_PTS (outbuf) = out_timestamp; if (out_keyframe) GST_BUFFER_FLAG_UNSET (outbuf, GST_BUFFER_FLAG_DELTA_UNIT); @@ -854,7 +854,7 @@ gst_rtp_h264_depay_process (GstRTPBaseDepayload * depayload, GstBuffer * buf) GstClockTime timestamp; gboolean marker; - timestamp = GST_BUFFER_TIMESTAMP (buf); + timestamp = GST_BUFFER_PTS (buf); gst_rtp_buffer_map (buf, GST_MAP_READ, &rtp); diff --git a/gst/rtp/gstrtpj2kpay.c b/gst/rtp/gstrtpj2kpay.c index 98880b29b..41b37dd9f 100644 --- a/gst/rtp/gstrtpj2kpay.c +++ b/gst/rtp/gstrtpj2kpay.c @@ -333,7 +333,7 @@ gst_rtp_j2k_pay_handle_buffer (GstRTPBasePayload * basepayload, mtu = GST_RTP_BASE_PAYLOAD_MTU (pay); gst_buffer_map (buffer, &map, GST_MAP_READ); - timestamp = GST_BUFFER_TIMESTAMP (buffer); + timestamp = GST_BUFFER_PTS (buffer); offset = pos = end = 0; GST_LOG_OBJECT (pay, @@ -427,7 +427,7 @@ gst_rtp_j2k_pay_handle_buffer (GstRTPBasePayload * basepayload, /* make buffer for header */ outbuf = gst_rtp_buffer_new_allocate (HEADER_SIZE, 0, 0); - GST_BUFFER_TIMESTAMP (outbuf) = timestamp; + GST_BUFFER_PTS (outbuf) = timestamp; gst_rtp_buffer_map (outbuf, GST_MAP_WRITE, &rtp); diff --git a/gst/rtp/gstrtpjpegpay.c b/gst/rtp/gstrtpjpegpay.c index bf4ed555a..bdca22035 100644 --- a/gst/rtp/gstrtpjpegpay.c +++ b/gst/rtp/gstrtpjpegpay.c @@ -689,7 +689,7 @@ gst_rtp_jpeg_pay_handle_buffer (GstRTPBasePayload * basepayload, gst_buffer_map (buffer, &map, GST_MAP_READ); data = map.data; size = map.size; - timestamp = GST_BUFFER_TIMESTAMP (buffer); + timestamp = GST_BUFFER_PTS (buffer); offset = 0; discont = GST_BUFFER_IS_DISCONT (buffer); @@ -888,7 +888,7 @@ gst_rtp_jpeg_pay_handle_buffer (GstRTPBasePayload * basepayload, /* join memory parts */ outbuf = gst_buffer_append (outbuf, paybuf); - GST_BUFFER_TIMESTAMP (outbuf) = timestamp; + GST_BUFFER_PTS (outbuf) = timestamp; if (discont) { GST_BUFFER_FLAG_SET (outbuf, GST_BUFFER_FLAG_DISCONT); diff --git a/gst/rtp/gstrtpmp2tpay.c b/gst/rtp/gstrtpmp2tpay.c index 1c6ec5132..386e09e78 100644 --- a/gst/rtp/gstrtpmp2tpay.c +++ b/gst/rtp/gstrtpmp2tpay.c @@ -157,7 +157,7 @@ gst_rtp_mp2t_pay_flush (GstRTPMP2TPay * rtpmp2tpay) outbuf = gst_buffer_append (outbuf, paybuf); avail -= payload_len; - GST_BUFFER_TIMESTAMP (outbuf) = rtpmp2tpay->first_ts; + GST_BUFFER_PTS (outbuf) = rtpmp2tpay->first_ts; GST_BUFFER_DURATION (outbuf) = rtpmp2tpay->duration; GST_DEBUG_OBJECT (rtpmp2tpay, "pushing buffer of size %u", @@ -181,7 +181,7 @@ gst_rtp_mp2t_pay_handle_buffer (GstRTPBasePayload * basepayload, rtpmp2tpay = GST_RTP_MP2T_PAY (basepayload); size = gst_buffer_get_size (buffer); - timestamp = GST_BUFFER_TIMESTAMP (buffer); + timestamp = GST_BUFFER_PTS (buffer); duration = GST_BUFFER_DURATION (buffer); again: diff --git a/gst/rtp/gstrtpmp4adepay.c b/gst/rtp/gstrtpmp4adepay.c index e70d5b335..8aa22a0f6 100644 --- a/gst/rtp/gstrtpmp4adepay.c +++ b/gst/rtp/gstrtpmp4adepay.c @@ -311,7 +311,7 @@ gst_rtp_mp4a_depay_process (GstRTPBaseDepayload * depayload, GstBuffer * buf) outbuf = gst_rtp_buffer_get_payload_buffer (&rtp); outbuf = gst_buffer_make_writable (outbuf); - GST_BUFFER_TIMESTAMP (outbuf) = GST_BUFFER_TIMESTAMP (buf); + GST_BUFFER_PTS (outbuf) = GST_BUFFER_PTS (buf); gst_adapter_push (rtpmp4adepay->adapter, outbuf); /* RTP marker bit indicates the last packet of the AudioMuxElement => create @@ -372,7 +372,7 @@ gst_rtp_mp4a_depay_process (GstRTPBaseDepayload * depayload, GstBuffer * buf) data += skip; avail -= skip; - GST_BUFFER_TIMESTAMP (tmp) = timestamp; + GST_BUFFER_PTS (tmp) = timestamp; gst_rtp_base_depayload_push (depayload, tmp); /* shift ts for next buffers */ diff --git a/gst/rtp/gstrtpmp4apay.c b/gst/rtp/gstrtpmp4apay.c index 17a80a81a..162d088c7 100644 --- a/gst/rtp/gstrtpmp4apay.c +++ b/gst/rtp/gstrtpmp4apay.c @@ -366,7 +366,7 @@ gst_rtp_mp4a_pay_handle_buffer (GstRTPBasePayload * basepayload, size = map.size; data = map.data; - timestamp = GST_BUFFER_TIMESTAMP (buffer); + timestamp = GST_BUFFER_PTS (buffer); fragmented = FALSE; mtu = GST_RTP_BASE_PAYLOAD_MTU (rtpmp4apay); @@ -431,7 +431,7 @@ gst_rtp_mp4a_pay_handle_buffer (GstRTPBasePayload * basepayload, gst_rtp_buffer_unmap (&rtp); /* copy incomming timestamp (if any) to outgoing buffers */ - GST_BUFFER_TIMESTAMP (outbuf) = timestamp; + GST_BUFFER_PTS (outbuf) = timestamp; ret = gst_rtp_base_payload_push (GST_RTP_BASE_PAYLOAD (rtpmp4apay), outbuf); diff --git a/gst/rtp/gstrtpmp4gdepay.c b/gst/rtp/gstrtpmp4gdepay.c index db472daa5..3819c8a04 100644 --- a/gst/rtp/gstrtpmp4gdepay.c +++ b/gst/rtp/gstrtpmp4gdepay.c @@ -433,7 +433,7 @@ gst_rtp_mp4g_depay_process (GstRTPBaseDepayload * depayload, GstBuffer * buf) gst_adapter_clear (rtpmp4gdepay->adapter); } - timestamp = GST_BUFFER_TIMESTAMP (buf); + timestamp = GST_BUFFER_PTS (buf); { gint payload_len, payload_AU; @@ -663,7 +663,7 @@ gst_rtp_mp4g_depay_process (GstRTPBaseDepayload * depayload, GstBuffer * buf) /* copy some of the fields we calculated above on the buffer. We also * copy the AU_index so that we can sort the packets in our queue. */ - GST_BUFFER_TIMESTAMP (outbuf) = timestamp; + GST_BUFFER_PTS (outbuf) = timestamp; GST_BUFFER_OFFSET (outbuf) = AU_index; /* make sure we don't use the timestamp again for other AUs in this diff --git a/gst/rtp/gstrtpmp4gpay.c b/gst/rtp/gstrtpmp4gpay.c index e374e5cd7..a9977e388 100644 --- a/gst/rtp/gstrtpmp4gpay.c +++ b/gst/rtp/gstrtpmp4gpay.c @@ -535,7 +535,7 @@ gst_rtp_mp4g_pay_flush (GstRtpMP4GPay * rtpmp4gpay) paybuf = gst_adapter_take_buffer_fast (rtpmp4gpay->adapter, payload_len); outbuf = gst_buffer_append (outbuf, paybuf); - GST_BUFFER_TIMESTAMP (outbuf) = rtpmp4gpay->first_timestamp; + GST_BUFFER_PTS (outbuf) = rtpmp4gpay->first_timestamp; GST_BUFFER_DURATION (outbuf) = rtpmp4gpay->first_duration; if (rtpmp4gpay->frame_len) { @@ -567,7 +567,7 @@ gst_rtp_mp4g_pay_handle_buffer (GstRTPBasePayload * basepayload, rtpmp4gpay = GST_RTP_MP4G_PAY (basepayload); - rtpmp4gpay->first_timestamp = GST_BUFFER_TIMESTAMP (buffer); + rtpmp4gpay->first_timestamp = GST_BUFFER_PTS (buffer); rtpmp4gpay->first_duration = GST_BUFFER_DURATION (buffer); rtpmp4gpay->discont = GST_BUFFER_IS_DISCONT (buffer); diff --git a/gst/rtp/gstrtpmp4vpay.c b/gst/rtp/gstrtpmp4vpay.c index 1ed1ac54b..7d2417629 100644 --- a/gst/rtp/gstrtpmp4vpay.c +++ b/gst/rtp/gstrtpmp4vpay.c @@ -288,7 +288,7 @@ gst_rtp_mp4v_pay_flush (GstRtpMP4VPay * rtpmp4vpay) outbuf = gst_buffer_append (outbuf, outbuf_data); - GST_BUFFER_TIMESTAMP (outbuf) = rtpmp4vpay->first_timestamp; + GST_BUFFER_PTS (outbuf) = rtpmp4vpay->first_timestamp; /* add to list */ gst_buffer_list_insert (list, -1, outbuf); @@ -434,7 +434,7 @@ gst_rtp_mp4v_pay_handle_buffer (GstRTPBasePayload * basepayload, gst_buffer_map (buffer, &map, GST_MAP_READ); size = map.size; - timestamp = GST_BUFFER_TIMESTAMP (buffer); + timestamp = GST_BUFFER_PTS (buffer); duration = GST_BUFFER_DURATION (buffer); avail = gst_adapter_available (rtpmp4vpay->adapter); @@ -464,7 +464,7 @@ gst_rtp_mp4v_pay_handle_buffer (GstRTPBasePayload * basepayload, /* strip off header */ subbuf = gst_buffer_copy_region (buffer, GST_BUFFER_COPY_MEMORY, strip, size - strip); - GST_BUFFER_TIMESTAMP (subbuf) = timestamp; + GST_BUFFER_PTS (subbuf) = timestamp; gst_buffer_unref (buffer); buffer = subbuf; @@ -513,7 +513,7 @@ gst_rtp_mp4v_pay_handle_buffer (GstRTPBasePayload * basepayload, /* insert header */ buffer = gst_buffer_append (gst_buffer_ref (rtpmp4vpay->config), buffer); - GST_BUFFER_TIMESTAMP (buffer) = timestamp; + GST_BUFFER_PTS (buffer) = timestamp; size = gst_buffer_get_size (buffer); if (timestamp != -1) { diff --git a/gst/rtp/gstrtpmpapay.c b/gst/rtp/gstrtpmpapay.c index 2a7061c2f..41ed1db43 100644 --- a/gst/rtp/gstrtpmpapay.c +++ b/gst/rtp/gstrtpmpapay.c @@ -233,7 +233,7 @@ gst_rtp_mpa_pay_flush (GstRtpMPAPay * rtpmpapay) paybuf = gst_adapter_take_buffer_fast (rtpmpapay->adapter, payload_len); outbuf = gst_buffer_append (outbuf, paybuf); - GST_BUFFER_TIMESTAMP (outbuf) = rtpmpapay->first_ts; + GST_BUFFER_PTS (outbuf) = rtpmpapay->first_ts; GST_BUFFER_DURATION (outbuf) = rtpmpapay->duration; ret = gst_rtp_base_payload_push (GST_RTP_BASE_PAYLOAD (rtpmpapay), outbuf); @@ -256,7 +256,7 @@ gst_rtp_mpa_pay_handle_buffer (GstRTPBasePayload * basepayload, size = gst_buffer_get_size (buffer); duration = GST_BUFFER_DURATION (buffer); - timestamp = GST_BUFFER_TIMESTAMP (buffer); + timestamp = GST_BUFFER_PTS (buffer); if (GST_BUFFER_IS_DISCONT (buffer)) { GST_DEBUG_OBJECT (rtpmpapay, "DISCONT"); diff --git a/gst/rtp/gstrtpmparobustdepay.c b/gst/rtp/gstrtpmparobustdepay.c index afdd2ba30..3df1c3bd6 100644 --- a/gst/rtp/gstrtpmparobustdepay.c +++ b/gst/rtp/gstrtpmparobustdepay.c @@ -290,7 +290,7 @@ gst_rtp_mpa_robust_depay_generate_dummy_frame (GstRtpMPARobustDepay * GST_WRITE_UINT32_BE (map.data, dummy->header); gst_buffer_unmap (dummy->buffer, &map); - GST_BUFFER_TIMESTAMP (dummy->buffer) = GST_BUFFER_TIMESTAMP (frame->buffer); + GST_BUFFER_PTS (dummy->buffer) = GST_BUFFER_PTS (frame->buffer); return dummy; } @@ -609,7 +609,7 @@ gst_rtp_mpa_robust_depay_push_mp3_frames (GstRtpMPARobustDepay * rtpmpadepay) flush: buf = gst_byte_writer_free_and_get_buffer (rtpmpadepay->mp3_frame); rtpmpadepay->mp3_frame = NULL; - GST_BUFFER_TIMESTAMP (buf) = GST_BUFFER_TIMESTAMP (head->buffer); + GST_BUFFER_PTS (buf) = GST_BUFFER_PTS (head->buffer); /* no longer need head ADU frame header and side info */ /* NOTE maybe head == current, then size and offset go off a bit, * but current gets reset to NULL, and then also offset and size */ @@ -653,7 +653,7 @@ gst_rtp_mpa_robust_depay_process (GstRTPBaseDepayload * depayload, rtpmpadepay = GST_RTP_MPA_ROBUST_DEPAY (depayload); - timestamp = GST_BUFFER_TIMESTAMP (buf); + timestamp = GST_BUFFER_PTS (buf); gst_rtp_buffer_map (buf, GST_MAP_READ, &rtp); @@ -716,7 +716,7 @@ gst_rtp_mpa_robust_depay_process (GstRTPBaseDepayload * depayload, if (av == size) { timestamp = gst_adapter_prev_pts (rtpmpadepay->adapter, NULL); buf = gst_adapter_take_buffer (rtpmpadepay->adapter, size); - GST_BUFFER_TIMESTAMP (buf) = timestamp; + GST_BUFFER_PTS (buf) = timestamp; gst_rtp_mpa_robust_depay_submit_adu (rtpmpadepay, buf); } else if (av > size) { GST_DEBUG_OBJECT (rtpmpadepay, @@ -730,7 +730,7 @@ gst_rtp_mpa_robust_depay_process (GstRTPBaseDepayload * depayload, /* not continuation, first fragment or whole ADU */ if (payload_len == size) { /* whole ADU */ - GST_BUFFER_TIMESTAMP (buf) = timestamp; + GST_BUFFER_PTS (buf) = timestamp; gst_rtp_mpa_robust_depay_submit_adu (rtpmpadepay, buf); } else if (payload_len < size) { /* first fragment */ diff --git a/gst/rtp/gstrtpmpvpay.c b/gst/rtp/gstrtpmpvpay.c index 0751bcd80..75ae678c3 100644 --- a/gst/rtp/gstrtpmpvpay.c +++ b/gst/rtp/gstrtpmpvpay.c @@ -216,7 +216,7 @@ gst_rtp_mpv_pay_flush (GstRTPMPVPay * rtpmpvpay) paybuf = gst_adapter_take_buffer_fast (rtpmpvpay->adapter, payload_len); outbuf = gst_buffer_append (outbuf, paybuf); - GST_BUFFER_TIMESTAMP (outbuf) = rtpmpvpay->first_ts; + GST_BUFFER_PTS (outbuf) = rtpmpvpay->first_ts; ret = gst_rtp_base_payload_push (GST_RTP_BASE_PAYLOAD (rtpmpvpay), outbuf); } @@ -235,7 +235,7 @@ gst_rtp_mpv_pay_handle_buffer (GstRTPBasePayload * basepayload, rtpmpvpay = GST_RTP_MPV_PAY (basepayload); - timestamp = GST_BUFFER_TIMESTAMP (buffer); + timestamp = GST_BUFFER_PTS (buffer); duration = GST_BUFFER_DURATION (buffer); if (GST_BUFFER_IS_DISCONT (buffer)) { diff --git a/gst/rtp/gstrtpqcelpdepay.c b/gst/rtp/gstrtpqcelpdepay.c index fc88f4a11..a5f791f4a 100644 --- a/gst/rtp/gstrtpqcelpdepay.c +++ b/gst/rtp/gstrtpqcelpdepay.c @@ -267,7 +267,7 @@ gst_rtp_qcelp_depay_process (GstRTPBaseDepayload * depayload, GstBuffer * buf) if (payload_len < 2) goto too_small; - timestamp = GST_BUFFER_TIMESTAMP (buf); + timestamp = GST_BUFFER_PTS (buf); payload = gst_rtp_buffer_get_payload (&rtp); @@ -354,7 +354,7 @@ gst_rtp_qcelp_depay_process (GstRTPBaseDepayload * depayload, GstBuffer * buf) outbuf = gst_rtp_buffer_get_payload_subbuffer (&rtp, offset, frame_len); } - GST_BUFFER_TIMESTAMP (outbuf) = timestamp; + GST_BUFFER_PTS (outbuf) = timestamp; GST_BUFFER_DURATION (outbuf) = FRAME_DURATION; if (!depay->interleaved || index == 0) { diff --git a/gst/rtp/gstrtpqdmdepay.c b/gst/rtp/gstrtpqdmdepay.c index ba85018ea..3049f9b9e 100644 --- a/gst/rtp/gstrtpqdmdepay.c +++ b/gst/rtp/gstrtpqdmdepay.c @@ -251,7 +251,7 @@ gst_rtp_qdm2_depay_process (GstRTPBaseDepayload * depayload, GstBuffer * buf) flush_data (rtpqdm2depay); /* And store new timestamp */ rtpqdm2depay->ptimestamp = rtpqdm2depay->timestamp; - rtpqdm2depay->timestamp = GST_BUFFER_TIMESTAMP (buf); + rtpqdm2depay->timestamp = GST_BUFFER_PTS (buf); /* And that previous data will be pushed at the bottom */ } rtpqdm2depay->nextseq = seq + 1; @@ -273,7 +273,7 @@ gst_rtp_qdm2_depay_process (GstRTPBaseDepayload * depayload, GstBuffer * buf) GST_DEBUG ("Headers"); /* Store the incoming timestamp */ rtpqdm2depay->ptimestamp = rtpqdm2depay->timestamp; - rtpqdm2depay->timestamp = GST_BUFFER_TIMESTAMP (buf); + rtpqdm2depay->timestamp = GST_BUFFER_PTS (buf); /* flush the internal data if needed */ flush_data (rtpqdm2depay); if (G_UNLIKELY (!rtpqdm2depay->configured)) { @@ -356,7 +356,7 @@ gst_rtp_qdm2_depay_process (GstRTPBaseDepayload * depayload, GstBuffer * buf) if (G_UNLIKELY (avail)) { GST_DEBUG ("Pushing out %d bytes of collected data", avail); outbuf = gst_adapter_take_buffer (rtpqdm2depay->adapter, avail); - GST_BUFFER_TIMESTAMP (outbuf) = rtpqdm2depay->ptimestamp; + GST_BUFFER_PTS (outbuf) = rtpqdm2depay->ptimestamp; GST_DEBUG ("Outgoing buffer timestamp %" GST_TIME_FORMAT, GST_TIME_ARGS (rtpqdm2depay->ptimestamp)); } diff --git a/gst/rtp/gstrtpsbcpay.c b/gst/rtp/gstrtpsbcpay.c index 8a8f5cdaf..7c4d3dab2 100644 --- a/gst/rtp/gstrtpsbcpay.c +++ b/gst/rtp/gstrtpsbcpay.c @@ -205,7 +205,7 @@ gst_rtp_sbc_pay_flush_buffers (GstRtpSBCPay * sbcpay) gst_adapter_flush (sbcpay->adapter, payload_length); /* FIXME: what about duration? */ - GST_BUFFER_TIMESTAMP (outbuf) = sbcpay->timestamp; + GST_BUFFER_PTS (outbuf) = sbcpay->timestamp; GST_DEBUG_OBJECT (sbcpay, "Pushing %d bytes", payload_length); return gst_rtp_base_payload_push (GST_RTP_BASE_PAYLOAD (sbcpay), outbuf); @@ -220,7 +220,7 @@ gst_rtp_sbc_pay_handle_buffer (GstRTPBasePayload * payload, GstBuffer * buffer) /* FIXME check for negotiation */ sbcpay = GST_RTP_SBC_PAY (payload); - sbcpay->timestamp = GST_BUFFER_TIMESTAMP (buffer); + sbcpay->timestamp = GST_BUFFER_PTS (buffer); gst_adapter_push (sbcpay->adapter, buffer); diff --git a/gst/rtp/gstrtpspeexpay.c b/gst/rtp/gstrtpspeexpay.c index 1f838664f..842389416 100644 --- a/gst/rtp/gstrtpspeexpay.c +++ b/gst/rtp/gstrtpspeexpay.c @@ -271,7 +271,7 @@ gst_rtp_speex_pay_handle_buffer (GstRTPBasePayload * basepayload, goto done; } - timestamp = GST_BUFFER_TIMESTAMP (buffer); + timestamp = GST_BUFFER_PTS (buffer); duration = GST_BUFFER_DURATION (buffer); /* FIXME, only one SPEEX frame per RTP packet for now */ @@ -282,7 +282,7 @@ gst_rtp_speex_pay_handle_buffer (GstRTPBasePayload * basepayload, g_assert (payload_len <= GST_RTP_BASE_PAYLOAD_MTU (rtpspeexpay)); /* copy timestamp and duration */ - GST_BUFFER_TIMESTAMP (outbuf) = timestamp; + GST_BUFFER_PTS (outbuf) = timestamp; GST_BUFFER_DURATION (outbuf) = duration; gst_rtp_buffer_map (outbuf, GST_MAP_WRITE, &rtp); diff --git a/gst/rtp/gstrtpsv3vdepay.c b/gst/rtp/gstrtpsv3vdepay.c index 7e3bc8991..aeaa63ea1 100644 --- a/gst/rtp/gstrtpsv3vdepay.c +++ b/gst/rtp/gstrtpsv3vdepay.c @@ -157,7 +157,7 @@ gst_rtp_sv3v_depay_process (GstRTPBaseDepayload * depayload, GstBuffer * buf) seq = gst_rtp_buffer_get_seq (&rtp); GST_DEBUG ("timestamp %" GST_TIME_FORMAT ", sequence number:%d", - GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buf)), seq); + GST_TIME_ARGS (GST_BUFFER_PTS (buf)), seq); if (seq != rtpsv3vdepay->nextseq) { GST_DEBUG ("Sequence discontinuity, clearing adapter"); diff --git a/gst/rtp/gstrtptheorapay.c b/gst/rtp/gstrtptheorapay.c index 10055c0f4..dc8ae8e75 100644 --- a/gst/rtp/gstrtptheorapay.c +++ b/gst/rtp/gstrtptheorapay.c @@ -285,7 +285,7 @@ gst_rtp_theora_pay_init_packet (GstRtpTheoraPay * rtptheorapay, guint8 TDT, (rtptheorapay), 0, 0); gst_rtp_theora_pay_reset_packet (rtptheorapay, TDT); - GST_BUFFER_TIMESTAMP (rtptheorapay->packet) = timestamp; + GST_BUFFER_PTS (rtptheorapay->packet) = timestamp; } static GstFlowReturn @@ -731,7 +731,7 @@ gst_rtp_theora_pay_handle_buffer (GstRTPBasePayload * basepayload, data = map.data; size = map.size; duration = GST_BUFFER_DURATION (buffer); - timestamp = GST_BUFFER_TIMESTAMP (buffer); + timestamp = GST_BUFFER_PTS (buffer); GST_DEBUG_OBJECT (rtptheorapay, "size %" G_GSIZE_FORMAT ", duration %" GST_TIME_FORMAT, size, GST_TIME_ARGS (duration)); diff --git a/gst/rtp/gstrtpvorbispay.c b/gst/rtp/gstrtpvorbispay.c index a89b3a691..de03f2030 100644 --- a/gst/rtp/gstrtpvorbispay.c +++ b/gst/rtp/gstrtpvorbispay.c @@ -280,7 +280,7 @@ gst_rtp_vorbis_pay_init_packet (GstRtpVorbisPay * rtpvorbispay, guint8 VDT, (rtpvorbispay), 0, 0); gst_rtp_vorbis_pay_reset_packet (rtpvorbispay, VDT); - GST_BUFFER_TIMESTAMP (rtpvorbispay->packet) = timestamp; + GST_BUFFER_PTS (rtpvorbispay->packet) = timestamp; } static GstFlowReturn @@ -724,7 +724,7 @@ gst_rtp_vorbis_pay_handle_buffer (GstRTPBasePayload * basepayload, data = map.data; size = map.size; duration = GST_BUFFER_DURATION (buffer); - timestamp = GST_BUFFER_TIMESTAMP (buffer); + timestamp = GST_BUFFER_PTS (buffer); GST_LOG_OBJECT (rtpvorbispay, "size %" G_GSIZE_FORMAT ", duration %" GST_TIME_FORMAT, size, GST_TIME_ARGS (duration)); diff --git a/gst/rtp/gstrtpvp8pay.c b/gst/rtp/gstrtpvp8pay.c index 133c2fd82..d611520cd 100644 --- a/gst/rtp/gstrtpvp8pay.c +++ b/gst/rtp/gstrtpvp8pay.c @@ -350,13 +350,12 @@ gst_rtp_vp8_offset_to_partition (GstRtpVP8Pay * self, guint offset) { int i; - for (i = 0; i < self->n_partitions; i++) { - if (offset >= self->partition_offset[i] && - offset < self->partition_offset[i + 1]) - return i; + for (i = 1; i < self->n_partitions; i++) { + if (offset < self->partition_offset[i]) + return i - 1; } - return i; + return i - 1; } static gsize diff --git a/gst/rtp/gstrtpvrawdepay.c b/gst/rtp/gstrtpvrawdepay.c index ee106c595..8533b269e 100644 --- a/gst/rtp/gstrtpvrawdepay.c +++ b/gst/rtp/gstrtpvrawdepay.c @@ -364,7 +364,7 @@ gst_rtp_vraw_depay_process (GstRTPBaseDepayload * depayload, GstBuffer * buf) goto alloc_failed; /* clear timestamp from alloc... */ - GST_BUFFER_TIMESTAMP (new_buffer) = -1; + GST_BUFFER_PTS (new_buffer) = -1; if (!gst_video_frame_map (&rtpvrawdepay->frame, &rtpvrawdepay->vinfo, new_buffer, GST_MAP_WRITE | GST_VIDEO_FRAME_MAP_FLAG_NO_REF)) { diff --git a/gst/rtp/gstrtpvrawpay.c b/gst/rtp/gstrtpvrawpay.c index c03c8d2fd..0592fc08f 100644 --- a/gst/rtp/gstrtpvrawpay.c +++ b/gst/rtp/gstrtpvrawpay.c @@ -346,9 +346,9 @@ gst_rtp_vraw_pay_handle_buffer (GstRTPBasePayload * payload, GstBuffer * buffer) out = gst_rtp_buffer_new_allocate (left, 0, 0); if (field == 0) { - GST_BUFFER_TIMESTAMP (out) = GST_BUFFER_TIMESTAMP (buffer); + GST_BUFFER_PTS (out) = GST_BUFFER_PTS (buffer); } else { - GST_BUFFER_TIMESTAMP (out) = GST_BUFFER_TIMESTAMP (buffer) + + GST_BUFFER_PTS (out) = GST_BUFFER_PTS (buffer) + GST_BUFFER_DURATION (buffer) / 2; } diff --git a/gst/rtpmanager/gstrtpbin.c b/gst/rtpmanager/gstrtpbin.c index fcb8a4b2e..73f8dc5e2 100644 --- a/gst/rtpmanager/gstrtpbin.c +++ b/gst/rtpmanager/gstrtpbin.c @@ -235,8 +235,8 @@ struct _GstRtpBinPrivate gboolean autoremove; - /* UNIX (ntp) time of last SR sync used */ - guint64 last_unix; + /* NTP time in ns of last SR sync used */ + guint64 last_ntpnstime; /* list of extra elements */ GList *elements; @@ -288,7 +288,8 @@ enum #define DEFAULT_RTCP_SYNC_INTERVAL 0 #define DEFAULT_DO_SYNC_EVENT FALSE #define DEFAULT_DO_RETRANSMISSION FALSE -#define DEFAULT_RTP_PROFILE GST_RTP_PROFILE_AVPF +#define DEFAULT_RTP_PROFILE GST_RTP_PROFILE_AVP +#define DEFAULT_NTP_TIME_SOURCE GST_RTP_NTP_TIME_SOURCE_NTP enum { @@ -306,7 +307,8 @@ enum PROP_USE_PIPELINE_CLOCK, PROP_DO_SYNC_EVENT, PROP_DO_RETRANSMISSION, - PROP_RTP_PROFILE + PROP_RTP_PROFILE, + PROP_NTP_TIME_SOURCE }; #define GST_RTP_BIN_RTCP_SYNC_TYPE (gst_rtp_bin_rtcp_sync_get_type()) @@ -622,8 +624,13 @@ create_session (GstRtpBin * rtpbin, gint id) /* configure SDES items */ GST_OBJECT_LOCK (rtpbin); - g_object_set (session, "sdes", rtpbin->sdes, "use-pipeline-clock", - rtpbin->use_pipeline_clock, "rtp-profile", rtpbin->rtp_profile, NULL); + g_object_set (session, "sdes", rtpbin->sdes, "rtp-profile", + rtpbin->rtp_profile, NULL); + if (rtpbin->use_pipeline_clock) + g_object_set (session, "use-pipeline-clock", rtpbin->use_pipeline_clock, + NULL); + else + g_object_set (session, "ntp-time-source", rtpbin->ntp_time_source, NULL); GST_OBJECT_UNLOCK (rtpbin); /* provide clock_rate to the session manager when needed */ @@ -1004,24 +1011,41 @@ get_current_times (GstRtpBin * bin, GstClockTime * running_time, gst_object_ref (clock); GST_OBJECT_UNLOCK (bin); + /* get current clock time and convert to running time */ clock_time = gst_clock_get_time (clock); + rt = clock_time - base_time; if (bin->use_pipeline_clock) { - ntpns = clock_time - base_time; + ntpns = rt; + /* add constant to convert from 1970 based time to 1900 based time */ + ntpns += (2208988800LL * GST_SECOND); } else { - GTimeVal current; - - /* get current NTP time */ - g_get_current_time (¤t); - ntpns = GST_TIMEVAL_TO_TIME (current); + switch (bin->ntp_time_source) { + case GST_RTP_NTP_TIME_SOURCE_NTP: + case GST_RTP_NTP_TIME_SOURCE_UNIX:{ + GTimeVal current; + + /* get current NTP time */ + g_get_current_time (¤t); + ntpns = GST_TIMEVAL_TO_TIME (current); + + /* add constant to convert from 1970 based time to 1900 based time */ + if (bin->ntp_time_source == GST_RTP_NTP_TIME_SOURCE_NTP) + ntpns += (2208988800LL * GST_SECOND); + break; + } + case GST_RTP_NTP_TIME_SOURCE_RUNNING_TIME: + ntpns = rt; + break; + case GST_RTP_NTP_TIME_SOURCE_CLOCK_TIME: + ntpns = clock_time; + break; + default: + g_assert_not_reached (); + break; + } } - /* add constant to convert from 1970 based time to 1900 based time */ - ntpns += (2208988800LL * GST_SECOND); - - /* get current clock time and convert to running time */ - rt = clock_time - base_time; - gst_object_unref (clock); } else { GST_OBJECT_UNLOCK (bin); @@ -1102,12 +1126,8 @@ gst_rtp_bin_associate (GstRtpBin * bin, GstRtpBinStream * stream, guint8 len, GstRtpBinClient *client; gboolean created; GSList *walk; - guint64 local_rt; - guint64 local_rtp; - GstClockTime running_time; + GstClockTime running_time, running_time_rtp; guint64 ntpnstime; - gint64 ntpdiff, rtdiff; - guint64 last_unix; /* first find or create the CNAME */ client = get_client (bin, len, data, &created); @@ -1149,51 +1169,56 @@ gst_rtp_bin_associate (GstRtpBin * bin, GstRtpBinStream * stream, guint8 len, * local rtptime. The local rtp time is used to construct timestamps on the * buffers so we will calculate what running_time corresponds to the RTP * timestamp in the SR packet. */ - local_rtp = last_extrtptime - base_rtptime; + running_time_rtp = last_extrtptime - base_rtptime; GST_DEBUG_OBJECT (bin, "base %" G_GUINT64_FORMAT ", extrtptime %" G_GUINT64_FORMAT ", local RTP %" G_GUINT64_FORMAT ", clock-rate %d, " "clock-base %" G_GINT64_FORMAT, base_rtptime, - last_extrtptime, local_rtp, clock_rate, rtp_clock_base); + last_extrtptime, running_time_rtp, clock_rate, rtp_clock_base); /* calculate local RTP time in gstreamer timestamp, we essentially perform the * same conversion that a jitterbuffer would use to convert an rtp timestamp * into a corresponding gstreamer timestamp. Note that the base_time also * contains the drift between sender and receiver. */ - local_rt = gst_util_uint64_scale_int (local_rtp, GST_SECOND, clock_rate); - local_rt += base_time; + running_time = + gst_util_uint64_scale_int (running_time_rtp, GST_SECOND, clock_rate); + running_time += base_time; - /* convert ntptime to unix time since 1900 */ - last_unix = gst_util_uint64_scale (ntptime, GST_SECOND, + /* convert ntptime to nanoseconds */ + ntpnstime = gst_util_uint64_scale (ntptime, GST_SECOND, (G_GINT64_CONSTANT (1) << 32)); stream->have_sync = TRUE; GST_DEBUG_OBJECT (bin, - "local UNIX %" G_GUINT64_FORMAT ", remote UNIX %" G_GUINT64_FORMAT, - local_rt, last_unix); + "SR RTP running time %" G_GUINT64_FORMAT ", SR NTP %" G_GUINT64_FORMAT, + running_time, ntpnstime); /* recalc inter stream playout offset, but only if there is more than one * stream or we're doing NTP sync. */ if (bin->ntp_sync) { + gint64 ntpdiff, rtdiff; + guint64 local_ntpnstime; + GstClockTime local_running_time; + /* For NTP sync we need to first get a snapshot of running_time and NTP * time. We know at what running_time we play a certain RTP time, we also * calculated when we would play the RTP time in the SR packet. Now we need * to know how the running_time and the NTP time relate to eachother. */ - get_current_times (bin, &running_time, &ntpnstime); + get_current_times (bin, &local_running_time, &local_ntpnstime); /* see how far away the NTP time is. This is the difference between the * current NTP time and the NTP time in the last SR packet. */ - ntpdiff = ntpnstime - last_unix; + ntpdiff = local_ntpnstime - ntpnstime; /* see how far away the running_time is. This is the difference between the * current running_time and the running_time of the RTP timestamp in the * last SR packet. */ - rtdiff = running_time - local_rt; + rtdiff = local_running_time - running_time; GST_DEBUG_OBJECT (bin, - "NTP time %" G_GUINT64_FORMAT ", last unix %" G_GUINT64_FORMAT, - ntpnstime, last_unix); + "local NTP time %" G_GUINT64_FORMAT ", SR NTP time %" G_GUINT64_FORMAT, + local_ntpnstime, ntpnstime); GST_DEBUG_OBJECT (bin, "NTP diff %" G_GINT64_FORMAT ", RT diff %" G_GINT64_FORMAT, ntpdiff, rtdiff); @@ -1207,12 +1232,12 @@ gst_rtp_bin_associate (GstRtpBin * bin, GstRtpBinStream * stream, guint8 len, gboolean all_sync, use_rtp; gboolean rtcp_sync = g_atomic_int_get (&bin->rtcp_sync); - /* calculate delta between server and receiver. last_unix is created by + /* calculate delta between server and receiver. ntpnstime is created by * converting the ntptime in the last SR packet to a gstreamer timestamp. This * delta expresses the difference to our timeline and the server timeline. The * difference in itself doesn't mean much but we can combine the delta of * multiple streams to create a stream specific offset. */ - stream->rt_delta = last_unix - local_rt; + stream->rt_delta = ntpnstime - running_time; /* calculate the min of all deltas, ignoring streams that did not yet have a * valid rt_delta because we did not yet receive an SR packet for those @@ -1326,14 +1351,14 @@ gst_rtp_bin_associate (GstRtpBin * bin, GstRtpBinStream * stream, guint8 len, } /* bail out if we adjusted recently enough */ - if (all_sync && (last_unix - bin->priv->last_unix) < + if (all_sync && (ntpnstime - bin->priv->last_ntpnstime) < bin->rtcp_sync_interval * GST_MSECOND) { GST_DEBUG_OBJECT (bin, "discarding RTCP sender packet for sync; " "previous sender info too recent " - "(previous UNIX %" G_GUINT64_FORMAT ")", bin->priv->last_unix); + "(previous NTP %" G_GUINT64_FORMAT ")", bin->priv->last_ntpnstime); return; } - bin->priv->last_unix = last_unix; + bin->priv->last_ntpnstime = ntpnstime; /* calculate offsets for each stream */ for (walk = client->streams; walk; walk = g_slist_next (walk)) { @@ -2060,9 +2085,10 @@ gst_rtp_bin_class_init (GstRtpBinClass * klass) g_object_class_install_property (gobject_class, PROP_USE_PIPELINE_CLOCK, g_param_spec_boolean ("use-pipeline-clock", "Use pipeline clock", - "Use the pipeline running-time to set the NTP time in the RTCP SR messages", + "Use the pipeline running-time to set the NTP time in the RTCP SR messages " + "(DEPRECATED: Use ntp-source property)", DEFAULT_USE_PIPELINE_CLOCK, - G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); + G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_DEPRECATED)); /** * GstRtpBin:buffer-mode: * @@ -2139,6 +2165,12 @@ gst_rtp_bin_class_init (GstRtpBinClass * klass) GST_TYPE_RTP_PROFILE, DEFAULT_RTP_PROFILE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); + g_object_class_install_property (gobject_class, PROP_NTP_TIME_SOURCE, + g_param_spec_enum ("ntp-time-source", "NTP Time Source", + "NTP time source for RTCP packets", + gst_rtp_ntp_time_source_get_type (), DEFAULT_NTP_TIME_SOURCE, + G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); + gstelement_class->change_state = GST_DEBUG_FUNCPTR (gst_rtp_bin_change_state); gstelement_class->request_new_pad = GST_DEBUG_FUNCPTR (gst_rtp_bin_request_new_pad); @@ -2202,6 +2234,7 @@ gst_rtp_bin_init (GstRtpBin * rtpbin) rtpbin->send_sync_event = DEFAULT_DO_SYNC_EVENT; rtpbin->do_retransmission = DEFAULT_DO_RETRANSMISSION; rtpbin->rtp_profile = DEFAULT_RTP_PROFILE; + rtpbin->ntp_time_source = DEFAULT_NTP_TIME_SOURCE; /* some default SDES entries */ cname = g_strdup_printf ("user%u@host-%x", g_random_int (), g_random_int ()); @@ -2365,6 +2398,20 @@ gst_rtp_bin_set_property (GObject * object, guint prop_id, case PROP_RTP_PROFILE: rtpbin->rtp_profile = g_value_get_enum (value); break; + case PROP_NTP_TIME_SOURCE:{ + GSList *sessions; + GST_RTP_BIN_LOCK (rtpbin); + rtpbin->ntp_time_source = g_value_get_enum (value); + for (sessions = rtpbin->sessions; sessions; + sessions = g_slist_next (sessions)) { + GstRtpBinSession *session = (GstRtpBinSession *) sessions->data; + + g_object_set (G_OBJECT (session->session), + "ntp-time-source", rtpbin->ntp_time_source, NULL); + } + GST_RTP_BIN_UNLOCK (rtpbin); + break; + } default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; @@ -2430,6 +2477,9 @@ gst_rtp_bin_get_property (GObject * object, guint prop_id, case PROP_RTP_PROFILE: g_value_set_enum (value, rtpbin->rtp_profile); break; + case PROP_NTP_TIME_SOURCE: + g_value_set_enum (value, rtpbin->ntp_time_source); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; @@ -2647,7 +2697,7 @@ gst_rtp_bin_change_state (GstElement * element, GstStateChange transition) case GST_STATE_CHANGE_NULL_TO_READY: break; case GST_STATE_CHANGE_READY_TO_PAUSED: - priv->last_unix = 0; + priv->last_ntpnstime = 0; GST_LOG_OBJECT (rtpbin, "clearing shutdown flag"); g_atomic_int_set (&priv->shutdown, 0); break; diff --git a/gst/rtpmanager/gstrtpbin.h b/gst/rtpmanager/gstrtpbin.h index 61cf5dd3f..87c1fada4 100644 --- a/gst/rtpmanager/gstrtpbin.h +++ b/gst/rtpmanager/gstrtpbin.h @@ -23,6 +23,7 @@ #include <gst/gst.h> #include "rtpsession.h" +#include "gstrtpsession.h" #include "rtpjitterbuffer.h" #define GST_TYPE_RTP_BIN \ @@ -63,6 +64,7 @@ struct _GstRtpBin { RTPJitterBufferMode buffer_mode; gboolean buffering; gboolean use_pipeline_clock; + GstRtpNtpTimeSource ntp_time_source; gboolean send_sync_event; GstClockTime buffer_start; gboolean do_retransmission; diff --git a/gst/rtpmanager/gstrtpjitterbuffer.c b/gst/rtpmanager/gstrtpjitterbuffer.c index 1aabb0be0..8f9c51f06 100644 --- a/gst/rtpmanager/gstrtpjitterbuffer.c +++ b/gst/rtpmanager/gstrtpjitterbuffer.c @@ -899,6 +899,8 @@ alloc_item (gpointer data, guint type, GstClockTime dts, GstClockTime pts, static void free_item (RTPJitterBufferItem * item) { + g_return_if_fail (item != NULL); + if (item->data && item->type != ITEM_TYPE_QUERY) gst_mini_object_unref (item->data); g_slice_free (RTPJitterBufferItem, item); @@ -2715,10 +2717,12 @@ compute_elapsed (GstRtpJitterBuffer * jitterbuffer, RTPJitterBufferItem * item) GST_LOG_OBJECT (jitterbuffer, "rtp %" G_GUINT32_FORMAT ", ext %" G_GUINT64_FORMAT, rtp_time, priv->ext_timestamp); - if (rtp_time < priv->ext_timestamp) { + ext_time = priv->ext_timestamp; + ext_time = gst_rtp_buffer_ext_timestamp (&ext_time, rtp_time); + if (ext_time < priv->ext_timestamp) { ext_time = priv->ext_timestamp; } else { - ext_time = gst_rtp_buffer_ext_timestamp (&priv->ext_timestamp, rtp_time); + priv->ext_timestamp = ext_time; } if (ext_time > priv->clock_base) @@ -3408,8 +3412,7 @@ gst_rtp_jitter_buffer_loop (GstRtpJitterBuffer * jitterbuffer) JBUF_WAIT_EVENT (priv, flushing); result = GST_FLOW_OK; } - } - while (result == GST_FLOW_OK); + } while (result == GST_FLOW_OK); /* store result for upstream */ priv->srcresult = result; /* if we get here we need to pause */ diff --git a/gst/rtpmanager/gstrtpmux.c b/gst/rtpmanager/gstrtpmux.c index db3585bc1..575b6521e 100644 --- a/gst/rtpmanager/gstrtpmux.c +++ b/gst/rtpmanager/gstrtpmux.c @@ -394,8 +394,8 @@ process_list_item (GstBuffer ** buffer, guint idx, gpointer user_data) return FALSE; if (GST_BUFFER_DURATION_IS_VALID (*buffer) && - GST_BUFFER_TIMESTAMP_IS_VALID (*buffer)) - bd->rtp_mux->last_stop = GST_BUFFER_TIMESTAMP (*buffer) + + GST_BUFFER_PTS_IS_VALID (*buffer)) + bd->rtp_mux->last_stop = GST_BUFFER_PTS (*buffer) + GST_BUFFER_DURATION (*buffer); else bd->rtp_mux->last_stop = GST_CLOCK_TIME_NONE; @@ -504,8 +504,8 @@ gst_rtp_mux_chain (GstPad * pad, GstObject * parent, GstBuffer * buffer) } if (GST_BUFFER_DURATION_IS_VALID (buffer) && - GST_BUFFER_TIMESTAMP_IS_VALID (buffer)) - rtp_mux->last_stop = GST_BUFFER_TIMESTAMP (buffer) + + GST_BUFFER_PTS_IS_VALID (buffer)) + rtp_mux->last_stop = GST_BUFFER_PTS (buffer) + GST_BUFFER_DURATION (buffer); else rtp_mux->last_stop = GST_CLOCK_TIME_NONE; diff --git a/gst/rtpmanager/gstrtprtxqueue.c b/gst/rtpmanager/gstrtprtxqueue.c index 8e9854399..0566f74a6 100644 --- a/gst/rtpmanager/gstrtprtxqueue.c +++ b/gst/rtpmanager/gstrtprtxqueue.c @@ -276,6 +276,7 @@ gst_rtp_rtx_queue_chain (GstPad * pad, GstObject * parent, GstBuffer * buffer) rtx->pending = NULL; g_mutex_unlock (&rtx->lock); + pending = g_list_reverse (pending); g_list_foreach (pending, (GFunc) do_push, rtx); g_list_free (pending); @@ -312,6 +313,7 @@ gst_rtp_rtx_queue_chain_list (GstPad * pad, GstObject * parent, rtx->pending = NULL; g_mutex_unlock (&rtx->lock); + pending = g_list_reverse (pending); g_list_foreach (pending, (GFunc) do_push, rtx); g_list_free (pending); diff --git a/gst/rtpmanager/gstrtpsession.c b/gst/rtpmanager/gstrtpsession.c index 022f3c361..b1ebceafc 100644 --- a/gst/rtpmanager/gstrtpsession.c +++ b/gst/rtpmanager/gstrtpsession.c @@ -122,6 +122,26 @@ GST_DEBUG_CATEGORY_STATIC (gst_rtp_session_debug); #define GST_CAT_DEFAULT gst_rtp_session_debug +GType +gst_rtp_ntp_time_source_get_type (void) +{ + static GType type = 0; + static const GEnumValue values[] = { + {GST_RTP_NTP_TIME_SOURCE_NTP, "NTP time based on realtime clock", "ntp"}, + {GST_RTP_NTP_TIME_SOURCE_UNIX, "UNIX time based on realtime clock", "unix"}, + {GST_RTP_NTP_TIME_SOURCE_RUNNING_TIME, + "Running time based on pipeline clock", + "running-time"}, + {GST_RTP_NTP_TIME_SOURCE_CLOCK_TIME, "Pipeline clock time", "clock-time"}, + {0, NULL, NULL}, + }; + + if (!type) { + type = g_enum_register_static ("GstRtpNtpTimeSource", values); + } + return type; +} + /* sink pads */ static GstStaticPadTemplate rtpsession_recv_rtp_sink_template = GST_STATIC_PAD_TEMPLATE ("recv_rtp_sink", @@ -202,6 +222,7 @@ enum #define DEFAULT_RTCP_MIN_INTERVAL (RTP_STATS_MIN_INTERVAL * GST_SECOND) #define DEFAULT_PROBATION RTP_DEFAULT_PROBATION #define DEFAULT_RTP_PROFILE GST_RTP_PROFILE_AVP +#define DEFAULT_NTP_TIME_SOURCE GST_RTP_NTP_TIME_SOURCE_NTP enum { @@ -218,7 +239,8 @@ enum PROP_RTCP_MIN_INTERVAL, PROP_PROBATION, PROP_STATS, - PROP_RTP_PROFILE + PROP_RTP_PROFILE, + PROP_NTP_TIME_SOURCE }; #define GST_RTP_SESSION_GET_PRIVATE(obj) \ @@ -251,6 +273,7 @@ struct _GstRtpSessionPrivate GstClockTime send_latency; gboolean use_pipeline_clock; + GstRtpNtpTimeSource ntp_time_source; guint rtx_count; }; @@ -611,9 +634,10 @@ gst_rtp_session_class_init (GstRtpSessionClass * klass) g_object_class_install_property (gobject_class, PROP_USE_PIPELINE_CLOCK, g_param_spec_boolean ("use-pipeline-clock", "Use pipeline clock", - "Use the pipeline running-time to set the NTP time in the RTCP SR messages", + "Use the pipeline running-time to set the NTP time in the RTCP SR messages " + "(DEPRECATED: Use ntp-source property)", DEFAULT_USE_PIPELINE_CLOCK, - G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); + G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_DEPRECATED)); g_object_class_install_property (gobject_class, PROP_RTCP_MIN_INTERVAL, g_param_spec_uint64 ("rtcp-min-interval", "Minimum RTCP interval", @@ -652,6 +676,12 @@ gst_rtp_session_class_init (GstRtpSessionClass * klass) "RTP profile to use", GST_TYPE_RTP_PROFILE, DEFAULT_RTP_PROFILE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); + g_object_class_install_property (gobject_class, PROP_NTP_TIME_SOURCE, + g_param_spec_enum ("ntp-time-source", "NTP Time Source", + "NTP time source for RTCP packets", + gst_rtp_ntp_time_source_get_type (), DEFAULT_NTP_TIME_SOURCE, + G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); + gstelement_class->change_state = GST_DEBUG_FUNCPTR (gst_rtp_session_change_state); gstelement_class->request_new_pad = @@ -727,6 +757,8 @@ gst_rtp_session_init (GstRtpSession * rtpsession) rtpsession->priv->thread_stopped = TRUE; rtpsession->priv->rtx_count = 0; + + rtpsession->priv->ntp_time_source = DEFAULT_NTP_TIME_SOURCE; } static void @@ -786,6 +818,9 @@ gst_rtp_session_set_property (GObject * object, guint prop_id, case PROP_RTP_PROFILE: g_object_set_property (G_OBJECT (priv->session), "rtp-profile", value); break; + case PROP_NTP_TIME_SOURCE: + priv->ntp_time_source = g_value_get_enum (value); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; @@ -846,6 +881,9 @@ gst_rtp_session_get_property (GObject * object, guint prop_id, case PROP_RTP_PROFILE: g_object_get_property (G_OBJECT (priv->session), "rtp-profile", value); break; + case PROP_NTP_TIME_SOURCE: + g_value_set_enum (value, priv->ntp_time_source); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; @@ -884,17 +922,35 @@ get_current_times (GstRtpSession * rtpsession, GstClockTime * running_time, if (rtpsession->priv->use_pipeline_clock) { ntpns = rt; + /* add constant to convert from 1970 based time to 1900 based time */ + ntpns += (2208988800LL * GST_SECOND); } else { - GTimeVal current; - - /* get current NTP time */ - g_get_current_time (¤t); - ntpns = GST_TIMEVAL_TO_TIME (current); + switch (rtpsession->priv->ntp_time_source) { + case GST_RTP_NTP_TIME_SOURCE_NTP: + case GST_RTP_NTP_TIME_SOURCE_UNIX:{ + GTimeVal current; + + /* get current NTP time */ + g_get_current_time (¤t); + ntpns = GST_TIMEVAL_TO_TIME (current); + + /* add constant to convert from 1970 based time to 1900 based time */ + if (rtpsession->priv->ntp_time_source == GST_RTP_NTP_TIME_SOURCE_NTP) + ntpns += (2208988800LL * GST_SECOND); + break; + } + case GST_RTP_NTP_TIME_SOURCE_RUNNING_TIME: + ntpns = rt; + break; + case GST_RTP_NTP_TIME_SOURCE_CLOCK_TIME: + ntpns = clock_time; + break; + default: + g_assert_not_reached (); + break; + } } - /* add constant to convert from 1970 based time to 1900 based time */ - ntpns += (2208988800LL * GST_SECOND); - gst_object_unref (clock); } else { GST_OBJECT_UNLOCK (rtpsession); @@ -1742,7 +1798,7 @@ gst_rtp_session_chain_recv_rtp (GstPad * pad, GstObject * parent, GST_RTP_SESSION_UNLOCK (rtpsession); /* get NTP time when this packet was captured, this depends on the timestamp. */ - timestamp = GST_BUFFER_TIMESTAMP (buffer); + timestamp = GST_BUFFER_PTS (buffer); if (GST_CLOCK_TIME_IS_VALID (timestamp)) { /* convert to running time using the segment values */ running_time = @@ -2106,11 +2162,11 @@ gst_rtp_session_chain_send_rtp_common (GstRtpSession * rtpsession, * So, just take it from the first group. */ buffer = gst_buffer_list_get (GST_BUFFER_LIST_CAST (data), 0); if (buffer) - timestamp = GST_BUFFER_TIMESTAMP (buffer); + timestamp = GST_BUFFER_PTS (buffer); else timestamp = -1; } else { - timestamp = GST_BUFFER_TIMESTAMP (GST_BUFFER_CAST (data)); + timestamp = GST_BUFFER_PTS (GST_BUFFER_CAST (data)); } if (GST_CLOCK_TIME_IS_VALID (timestamp)) { diff --git a/gst/rtpmanager/gstrtpsession.h b/gst/rtpmanager/gstrtpsession.h index bbaafa616..a144c28ca 100644 --- a/gst/rtpmanager/gstrtpsession.h +++ b/gst/rtpmanager/gstrtpsession.h @@ -76,4 +76,13 @@ struct _GstRtpSessionClass { GType gst_rtp_session_get_type (void); +typedef enum { + GST_RTP_NTP_TIME_SOURCE_NTP, + GST_RTP_NTP_TIME_SOURCE_UNIX, + GST_RTP_NTP_TIME_SOURCE_RUNNING_TIME, + GST_RTP_NTP_TIME_SOURCE_CLOCK_TIME +} GstRtpNtpTimeSource; + +GType gst_rtp_ntp_time_source_get_type (void); + #endif /* __GST_RTP_SESSION_H__ */ diff --git a/gst/rtpmanager/rtpjitterbuffer.c b/gst/rtpmanager/rtpjitterbuffer.c index f41b799c9..80d82663c 100644 --- a/gst/rtpmanager/rtpjitterbuffer.c +++ b/gst/rtpmanager/rtpjitterbuffer.c @@ -261,7 +261,7 @@ get_buffer_level (RTPJitterBuffer * jbuf) RTPJitterBufferItem *high_buf = NULL, *low_buf = NULL; guint64 level; - /* first first buffer with timestamp */ + /* first buffer with timestamp */ high_buf = (RTPJitterBufferItem *) g_queue_peek_tail_link (jbuf->packets); while (high_buf) { if (high_buf->dts != -1 || high_buf->pts != -1) @@ -741,7 +741,7 @@ rtp_jitter_buffer_insert (RTPJitterBuffer * jbuf, RTPJitterBufferItem * item, case RTP_JITTER_BUFFER_MODE_NONE: case RTP_JITTER_BUFFER_MODE_BUFFER: /* send 0 as the first timestamp and -1 for the other ones. This will - * interpollate them from the RTP timestamps with a 0 origin. In buffering + * interpolate them from the RTP timestamps with a 0 origin. In buffering * mode we will adjust the outgoing timestamps according to the amount of * time we spent buffering. */ if (jbuf->base_time == -1) diff --git a/gst/rtpmanager/rtpsession.c b/gst/rtpmanager/rtpsession.c index 96ffedbc1..879b1deea 100644 --- a/gst/rtpmanager/rtpsession.c +++ b/gst/rtpmanager/rtpsession.c @@ -2557,7 +2557,7 @@ rtp_session_process_feedback (RTPSession * sess, GstRTCPPacket * packet, fci_buffer = gst_buffer_copy_region (packet->rtcp->buffer, GST_BUFFER_COPY_MEMORY, fci_data - packet->rtcp->map.data, fci_length); - GST_BUFFER_TIMESTAMP (fci_buffer) = pinfo->running_time; + GST_BUFFER_PTS (fci_buffer) = pinfo->running_time; } RTP_SESSION_UNLOCK (sess); diff --git a/gst/rtpmanager/rtpsource.c b/gst/rtpmanager/rtpsource.c index 3dd95173f..e26817b55 100644 --- a/gst/rtpmanager/rtpsource.c +++ b/gst/rtpmanager/rtpsource.c @@ -110,7 +110,7 @@ rtp_source_class_init (RTPSourceClass * klass) * 'tool' G_TYPE_STRING : The name of application or tool * 'note' G_TYPE_STRING : A notice about the source * - * other fields may be present and these represent private items in + * Other fields may be present and these represent private items in * the SDES where the field name is the prefix. */ g_object_class_install_property (gobject_class, PROP_SDES, @@ -121,25 +121,37 @@ rtp_source_class_init (RTPSourceClass * klass) /** * RTPSource::stats * - * The statistics of the source. This property returns a GstStructure with - * name application/x-rtp-source-stats with the following fields: + * This property returns a GstStructure named application/x-rtp-source-stats with + * fields useful for statistics and diagnostics. * - * "ssrc" G_TYPE_UINT The SSRC of this source - * "internal" G_TYPE_BOOLEAN If this source is a source of the session - * "validated" G_TYPE_BOOLEAN If the source is validated - * "received-bye" G_TYPE_BOOLEAN If we received a BYE from this source - * "is-csrc" G_TYPE_BOOLEAN If this source was found as CSRC - * "is-sender" G_TYPE_BOOLEAN If this source is a sender + * Take note of each respective field's units: + * + * - NTP times are in the appropriate 32-bit or 64-bit fixed-point format + * starting from January 1, 1970 (except for timespans). + * - RTP times are in clock rate units (i.e. clock rate = 1 second) + * starting at a random offset. + * - For fields indicating packet loss, note that late packets are not considered lost, + * and duplicates are not taken into account. Hence, the loss may be negative + * if there are duplicates. + * + * The following fields are always present. + * + * "ssrc" G_TYPE_UINT the SSRC of this source + * "internal" G_TYPE_BOOLEAN this source is a source of the session + * "validated" G_TYPE_BOOLEAN the source is validated + * "received-bye" G_TYPE_BOOLEAN we received a BYE from this source + * "is-csrc" G_TYPE_BOOLEAN this source was found as CSRC + * "is-sender" G_TYPE_BOOLEAN this source is a sender * "seqnum-base" G_TYPE_INT first seqnum if known * "clock-rate" G_TYPE_INT the clock rate of the media * - * The following two fields are only present when known. + * The following fields are only present when known. * * "rtp-from" G_TYPE_STRING where we received the last RTP packet from * "rtcp-from" G_TYPE_STRING where we received the last RTCP packet from * * The following fields make sense for internal sources and will only increase - * when "is-sender" is TRUE: + * when "is-sender" is TRUE. * * "octets-sent" G_TYPE_UINT64 number of bytes we sent * "packets-sent" G_TYPE_UINT64 number of packets we sent @@ -153,15 +165,15 @@ rtp_source_class_init (RTPSourceClass * klass) * Following fields are updated when "is-sender" is TRUE. * * "bitrate" G_TYPE_UINT64 bitrate in bits per second - * "jitter" G_TYPE_UINT estimated jitter + * "jitter" G_TYPE_UINT estimated jitter (in clock rate units) * "packets-lost" G_TYPE_INT estimated amount of packets lost * * The last SR report this source sent. This only updates when "is-sender" is * TRUE. * * "have-sr" G_TYPE_BOOLEAN the source has sent SR - * "sr-ntptime" G_TYPE_UINT64 ntptime of SR - * "sr-rtptime" G_TYPE_UINT rtptime of SR + * "sr-ntptime" G_TYPE_UINT64 NTP time of SR (in NTP Timestamp Format, 32.32 fixed point) + * "sr-rtptime" G_TYPE_UINT RTP time of SR (in clock rate units) * "sr-octet-count" G_TYPE_UINT the number of bytes in the SR * "sr-packet-count" G_TYPE_UINT the number of packets in the SR * @@ -173,9 +185,9 @@ rtp_source_class_init (RTPSourceClass * klass) * "sent-rb-fractionlost" G_TYPE_UINT calculated lost fraction * "sent-rb-packetslost" G_TYPE_INT lost packets * "sent-rb-exthighestseq" G_TYPE_UINT last seen seqnum - * "sent-rb-jitter" G_TYPE_UINT jitter - * "sent-rb-lsr" G_TYPE_UINT last SR time - * "sent-rb-dlsr" G_TYPE_UINT delay since last SR + * "sent-rb-jitter" G_TYPE_UINT jitter (in clock rate units) + * "sent-rb-lsr" G_TYPE_UINT last SR time (in NTP Short Format, 16.16 fixed point) + * "sent-rb-dlsr" G_TYPE_UINT delay since last SR (in NTP Short Format, 16.16 fixed point) * * The following fields are only present for non-internal sources and * represents the last RB that this source sent. This is only updated @@ -185,15 +197,16 @@ rtp_source_class_init (RTPSourceClass * klass) * "rb-fractionlost" G_TYPE_UINT lost fraction * "rb-packetslost" G_TYPE_INT lost packets * "rb-exthighestseq" G_TYPE_UINT highest received seqnum - * "rb-jitter" G_TYPE_UINT reception jitter - * "rb-lsr" G_TYPE_UINT last SR time - * "rb-dlsr" G_TYPE_UINT delay since last SR + * "rb-jitter" G_TYPE_UINT reception jitter (in clock rate units) + * "rb-lsr" G_TYPE_UINT last SR time (in NTP Short Format, 16.16 fixed point) + * "rb-dlsr" G_TYPE_UINT delay since last SR (in NTP Short Format, 16.16 fixed point) * - * The round trip of this source. This is calculated from the last RB - * values and the recption time of the last RB packet. Only present for + * The round trip of this source is calculated from the last RB + * values and the reception time of the last RB packet. It is only present for * non-internal sources. * - * "rb-round-trip" G_TYPE_UINT the round trip time in nanoseconds + * "rb-round-trip" G_TYPE_UINT the round-trip time (in NTP Short Format, 16.16 fixed point) + * */ g_object_class_install_property (gobject_class, PROP_STATS, g_param_spec_boxed ("stats", "Stats", @@ -1203,12 +1216,14 @@ rtp_source_send_rtp (RTPSource * src, RTPPacketInfo * pinfo) /* we are a sender now */ src->is_sender = TRUE; + /* we are also a receiver of our packets */ + if (!update_receiver_stats (src, pinfo)) + return GST_FLOW_OK; + /* update stats for the SR */ src->stats.packets_sent += pinfo->packets; src->stats.octets_sent += pinfo->payload_len; src->bytes_sent += pinfo->payload_len; - /* we are also a receiver of our packets */ - update_receiver_stats (src, pinfo); running_time = pinfo->running_time; @@ -1262,10 +1277,10 @@ no_callback: * rtp_source_process_sr: * @src: an #RTPSource * @time: time of packet arrival - * @ntptime: the NTP time in 32.32 fixed point - * @rtptime: the RTP time + * @ntptime: the NTP time (in NTP Timestamp Format, 32.32 fixed point) + * @rtptime: the RTP time (in clock rate units) * @packet_count: the packet count - * @octet_count: the octect count + * @octet_count: the octet count * * Update the sender report in @src. */ @@ -1309,11 +1324,13 @@ rtp_source_process_sr (RTPSource * src, GstClockTime time, guint64 ntptime, * @src: an #RTPSource * @ntpnstime: the current time in nanoseconds since 1970 * @fractionlost: fraction lost since last SR/RR - * @packetslost: the cumululative number of packets lost + * @packetslost: the cumulative number of packets lost * @exthighestseq: the extended last sequence number received - * @jitter: the interarrival jitter - * @lsr: the last SR packet from this source - * @dlsr: the delay since last SR packet + * @jitter: the interarrival jitter (in clock rate units) + * @lsr: the time of the last SR packet on this source + * (in NTP Short Format, 16.16 fixed point) + * @dlsr: the delay since the last SR packet + * (in NTP Short Format, 16.16 fixed point) * * Update the report block in @src. */ @@ -1369,17 +1386,17 @@ rtp_source_process_rb (RTPSource * src, guint64 ntpnstime, * rtp_source_get_new_sr: * @src: an #RTPSource * @ntpnstime: the current time in nanoseconds since 1970 - * @running_time: the current running_time of the pipeline. - * @ntptime: the NTP time in 32.32 fixed point - * @rtptime: the RTP time corresponding to @ntptime + * @running_time: the current running_time of the pipeline + * @ntptime: the NTP time (in NTP Timestamp Format, 32.32 fixed point) + * @rtptime: the RTP time corresponding to @ntptime (in clock rate units) * @packet_count: the packet count - * @octet_count: the octect count + * @octet_count: the octet count * * Get new values to put into a new SR report from this source. * * @running_time and @ntpnstime are captured at the same time and represent the * running time of the pipeline clock and the absolute current system time in - * nanoseconds respectively. Together with the last running_time and rtp timestamp + * nanoseconds respectively. Together with the last running_time and RTP timestamp * we have observed in the source, we can generate @ntptime and @rtptime for an SR * packet. @ntptime is basically the fixed point representation of @ntpnstime * and @rtptime the associated RTP timestamp. @@ -1457,11 +1474,13 @@ rtp_source_get_new_sr (RTPSource * src, guint64 ntpnstime, * @src: an #RTPSource * @time: the current time of the system clock * @fractionlost: fraction lost since last SR/RR - * @packetslost: the cumululative number of packets lost + * @packetslost: the cumulative number of packets lost * @exthighestseq: the extended last sequence number received - * @jitter: the interarrival jitter - * @lsr: the last SR packet from this source - * @dlsr: the delay since last SR packet + * @jitter: the interarrival jitter (in clock rate units) + * @lsr: the time of the last SR packet on this source + * (in NTP Short Format, 16.16 fixed point) + * @dlsr: the delay since the last SR packet + * (in NTP Short Format, 16.16 fixed point) * * Get new values to put into a new report block from this source. * @@ -1547,10 +1566,10 @@ rtp_source_get_new_rb (RTPSource * src, GstClockTime time, * rtp_source_get_last_sr: * @src: an #RTPSource * @time: time of packet arrival - * @ntptime: the NTP time in 32.32 fixed point - * @rtptime: the RTP time + * @ntptime: the NTP time (in NTP Timestamp Format, 32.32 fixed point) + * @rtptime: the RTP time (in clock rate units) * @packet_count: the packet count - * @octet_count: the octect count + * @octet_count: the octet count * * Get the values of the last sender report as set with rtp_source_process_sr(). * @@ -1586,12 +1605,15 @@ rtp_source_get_last_sr (RTPSource * src, GstClockTime * time, guint64 * ntptime, * rtp_source_get_last_rb: * @src: an #RTPSource * @fractionlost: fraction lost since last SR/RR - * @packetslost: the cumululative number of packets lost + * @packetslost: the cumulative number of packets lost * @exthighestseq: the extended last sequence number received - * @jitter: the interarrival jitter - * @lsr: the last SR packet from this source - * @dlsr: the delay since last SR packet - * @round_trip: the round trip time + * @jitter: the interarrival jitter (in clock rate units) + * @lsr: the time of the last SR packet on this source + * (in NTP Short Format, 16.16 fixed point) + * @dlsr: the delay since the last SR packet + * (in NTP Short Format, 16.16 fixed point) + * @round_trip: the round-trip time + * (in NTP Short Format, 16.16 fixed point) * * Get the values of the last RB report set with rtp_source_process_rb(). * @@ -1744,7 +1766,7 @@ rtp_source_timeout (RTPSource * src, GstClockTime current_time, /* Time out AVPF packets that are older than the desired length */ while ((pkt = g_queue_peek_tail (src->retained_feedback)) && - GST_BUFFER_TIMESTAMP (pkt) < feedback_retention_window) + GST_BUFFER_PTS (pkt) < feedback_retention_window) gst_buffer_unref (g_queue_pop_tail (src->retained_feedback)); } @@ -1754,7 +1776,7 @@ compare_buffers (gconstpointer a, gconstpointer b, gpointer user_data) const GstBuffer *bufa = a; const GstBuffer *bufb = b; - return GST_BUFFER_TIMESTAMP (bufa) - GST_BUFFER_TIMESTAMP (bufb); + return GST_BUFFER_PTS (bufa) - GST_BUFFER_PTS (bufb); } void @@ -1766,7 +1788,7 @@ rtp_source_retain_rtcp_packet (RTPSource * src, GstRTCPPacket * packet, buffer = gst_buffer_copy_region (packet->rtcp->buffer, GST_BUFFER_COPY_MEMORY, packet->offset, (gst_rtcp_packet_get_length (packet) + 1) * 4); - GST_BUFFER_TIMESTAMP (buffer) = running_time; + GST_BUFFER_PTS (buffer) = running_time; g_queue_insert_sorted (src->retained_feedback, buffer, compare_buffers, NULL); } diff --git a/gst/rtpmanager/rtpstats.h b/gst/rtpmanager/rtpstats.h index 47c4b823f..d221aea03 100644 --- a/gst/rtpmanager/rtpstats.h +++ b/gst/rtpmanager/rtpstats.h @@ -106,7 +106,7 @@ typedef struct { * protocol level overhead * @max_seqnr: highest sequence number received * @transit: previous transit time used for calculating @jitter - * @jitter: current jitter + * @jitter: current jitter (in clock rate units scaled by 16 for precision) * @prev_rtptime: previous time when an RTP packet was received * @prev_rtcptime: previous time when an RTCP packet was received * @last_rtptime: time when last RTP packet received diff --git a/gst/rtsp/gstrtspsrc.c b/gst/rtsp/gstrtspsrc.c index b7adc4366..610b08461 100644 --- a/gst/rtsp/gstrtspsrc.c +++ b/gst/rtsp/gstrtspsrc.c @@ -197,6 +197,7 @@ gst_rtsp_src_buffer_mode_get_type (void) #define DEFAULT_USE_PIPELINE_CLOCK FALSE #define DEFAULT_TLS_VALIDATION_FLAGS G_TLS_CERTIFICATE_VALIDATE_ALL #define DEFAULT_TLS_DATABASE NULL +#define DEFAULT_TLS_INTERACTION NULL #define DEFAULT_DO_RETRANSMISSION TRUE enum @@ -232,6 +233,7 @@ enum PROP_SDES, PROP_TLS_VALIDATION_FLAGS, PROP_TLS_DATABASE, + PROP_TLS_INTERACTION, PROP_DO_RETRANSMISSION }; @@ -639,6 +641,20 @@ gst_rtspsrc_class_init (GstRTSPSrcClass * klass) "TLS database with anchor certificate authorities used to validate the server certificate", G_TYPE_TLS_DATABASE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); + /** + * GstRTSPSrc::tls-interaction: + * + * A #GTlsInteraction object to be used when the connection or certificate + * database need to interact with the user. This will be used to prompt the + * user for passwords where necessary. + * + * Since: 1.6 + */ + g_object_class_install_property (gobject_class, PROP_TLS_INTERACTION, + g_param_spec_object ("tls-interaction", "TLS interaction", + "A GTlsInteraction object to promt the user for password or certificate", + G_TYPE_TLS_INTERACTION, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); + /** * GstRTSPSrc::do-retransmission: * @@ -797,6 +813,7 @@ gst_rtspsrc_init (GstRTSPSrc * src) src->sdes = NULL; src->tls_validation_flags = DEFAULT_TLS_VALIDATION_FLAGS; src->tls_database = DEFAULT_TLS_DATABASE; + src->tls_interaction = DEFAULT_TLS_INTERACTION; src->do_retransmission = DEFAULT_DO_RETRANSMISSION; /* get a list of all extensions */ @@ -846,6 +863,9 @@ gst_rtspsrc_finalize (GObject * object) if (rtspsrc->tls_database) g_object_unref (rtspsrc->tls_database); + if (rtspsrc->tls_interaction) + g_object_unref (rtspsrc->tls_interaction); + /* free locks */ g_rec_mutex_clear (&rtspsrc->stream_rec_lock); g_rec_mutex_clear (&rtspsrc->state_rec_lock); @@ -1062,6 +1082,10 @@ gst_rtspsrc_set_property (GObject * object, guint prop_id, const GValue * value, g_clear_object (&rtspsrc->tls_database); rtspsrc->tls_database = g_value_dup_object (value); break; + case PROP_TLS_INTERACTION: + g_clear_object (&rtspsrc->tls_interaction); + rtspsrc->tls_interaction = g_value_dup_object (value); + break; case PROP_DO_RETRANSMISSION: rtspsrc->do_retransmission = g_value_get_boolean (value); break; @@ -1196,6 +1220,9 @@ gst_rtspsrc_get_property (GObject * object, guint prop_id, GValue * value, case PROP_TLS_DATABASE: g_value_set_object (value, rtspsrc->tls_database); break; + case PROP_TLS_INTERACTION: + g_value_set_object (value, rtspsrc->tls_interaction); + break; case PROP_DO_RETRANSMISSION: g_value_set_boolean (value, rtspsrc->do_retransmission); break; @@ -4351,6 +4378,10 @@ gst_rtsp_conninfo_connect (GstRTSPSrc * src, GstRTSPConnInfo * info, if (src->tls_database) gst_rtsp_connection_set_tls_database (info->connection, src->tls_database); + + if (src->tls_interaction) + gst_rtsp_connection_set_tls_interaction (info->connection, + src->tls_interaction); } if (info->url->transports & GST_RTSP_LOWER_TRANS_HTTP) diff --git a/gst/rtsp/gstrtspsrc.h b/gst/rtsp/gstrtspsrc.h index 44b76d527..579666eca 100644 --- a/gst/rtsp/gstrtspsrc.h +++ b/gst/rtsp/gstrtspsrc.h @@ -234,6 +234,7 @@ struct _GstRTSPSrc { GstStructure *sdes; GTlsCertificateFlags tls_validation_flags; GTlsDatabase *tls_database; + GTlsInteraction *tls_interaction; gboolean do_retransmission; /* state */ diff --git a/gst/videomixer/videomixerorc-dist.c b/gst/videomixer/videomixerorc-dist.c index 7ddc1b080..115b6fcc9 100644 --- a/gst/videomixer/videomixerorc-dist.c +++ b/gst/videomixer/videomixerorc-dist.c @@ -1713,7 +1713,7 @@ video_mixer_orc_overlay_argb (guint8 * ORC_RESTRICT d1, int d1_stride, static const orc_uint8 bc[] = { 1, 7, 9, 28, 118, 105, 100, 101, 111, 95, 109, 105, 120, 101, 114, 95, 111, 114, 99, 95, 111, 118, 101, 114, 108, 97, 121, 95, 97, 114, 103, - 98, + 98, 11, 4, 4, 12, 4, 4, 14, 4, 255, 255, 255, 255, 14, 4, 255, 0, 0, 0, 14, 4, 0, 255, 255, 255, 14, 2, 8, 0, 0, 0, 16, 2, 20, 4, 20, 2, 20, 1, 20, 8, 20, 8, 20, 8, 20, 4, 20, 8, @@ -2283,7 +2283,7 @@ video_mixer_orc_overlay_bgra (guint8 * ORC_RESTRICT d1, int d1_stride, static const orc_uint8 bc[] = { 1, 7, 9, 28, 118, 105, 100, 101, 111, 95, 109, 105, 120, 101, 114, 95, 111, 114, 99, 95, 111, 118, 101, 114, 108, 97, 121, 95, 98, 103, 114, - 97, + 97, 11, 4, 4, 12, 4, 4, 14, 4, 255, 255, 255, 255, 14, 4, 0, 0, 0, 255, 14, 4, 255, 255, 255, 0, 14, 4, 24, 0, 0, 0, 14, 2, 8, 0, 0, 0, 16, 2, 20, 4, 20, 4, 20, 2, 20, 1, 20, 8, diff --git a/po/af.gmo b/po/af.gmo index 482eaea6413fd33aa495c0fd66aa0ee389f3f1d6..a772c8e3f36fedec328dc5088efdd31c498a3ddd 100644 GIT binary patch delta 21 ccmbQmI*WCK4<m<>iGq=lm8s$85Jopf06nS&9RL6T delta 21 ccmbQmI*WCK4<m<xxq_jAm9g385Jopf06nM$9smFU diff --git a/po/af.po b/po/af.po index baab051c5..7ded82c69 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: 2015-06-07 10:36+0200\n" +"POT-Creation-Date: 2015-06-24 22:51+0200\n" "PO-Revision-Date: 2004-03-18 14:16+0200\n" "Last-Translator: Petri Jooste <rkwjpj@puk.ac.za>\n" "Language-Team: Afrikaans <i18n@af.org.za>\n" diff --git a/po/az.gmo b/po/az.gmo index ddd2e5ecf3ef20df903909be8c586ed69aa432fa..b294945d02b2739adba9f08f027bbdb4ade112e1 100644 GIT binary patch delta 21 ccmcc2dYN^D4<m<>iGq=lm8s$85XO2&07nD`$N&HU delta 21 ccmcc2dYN^D4<m<xxq_jAm9g385XO2&07n7^$p8QV diff --git a/po/az.po b/po/az.po index 2c679825f..633b34e04 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: 2015-06-07 10:36+0200\n" +"POT-Creation-Date: 2015-06-24 22:51+0200\n" "PO-Revision-Date: 2004-03-19 18:29+0200\n" "Last-Translator: Metin Amiroff <metin@karegen.com>\n" "Language-Team: Azerbaijani <translation-team-az@lists.sourceforge.net>\n" diff --git a/po/bg.gmo b/po/bg.gmo index 8f3bf3caedc803567aee8428dce81e3c61c59520..635822d88da26a8514f0106cfd6a4b313aada759 100644 GIT binary patch delta 21 ccmeAT?+xFOD8yl8qF`iXWoo!NQ%FS;07`fT=>Px# delta 21 ccmeAT?+xFOD8yl4u3%_jWo))NQ%FS;07`ZR>Hq)$ diff --git a/po/bg.po b/po/bg.po index e3e1dd334..2e75e64de 100644 --- a/po/bg.po +++ b/po/bg.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: gst-plugins-good 0.10.28.2\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2015-06-07 10:36+0200\n" +"POT-Creation-Date: 2015-06-24 22:51+0200\n" "PO-Revision-Date: 2011-04-26 22:35+0300\n" "Last-Translator: Alexander Shopov <ash@kambanaria.org>\n" "Language-Team: Bulgarian <dict@fsa-bg.org>\n" diff --git a/po/ca.gmo b/po/ca.gmo index a032fdeed0a7fdbe2353539f212e6b2e7e21996e..cddc8625099c13f20d14c2c71c2473246e9f52f2 100644 GIT binary patch delta 21 ccmZ4DzQlb)q7a9XiGq=lm8s$8Od)GQ087>e1^@s6 delta 21 ccmZ4DzQlb)q7a9Hxq_jAm9g38Od)GQ087*c2LJ#7 diff --git a/po/ca.po b/po/ca.po index 05349678a..c826dffbe 100644 --- a/po/ca.po +++ b/po/ca.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: gst-plugins-good 0.10.28.2\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2015-06-07 10:36+0200\n" +"POT-Creation-Date: 2015-06-24 22:51+0200\n" "PO-Revision-Date: 2012-01-01 14:19+0100\n" "Last-Translator: Gil Forcada <gforcada@gnome.org>\n" "Language-Team: Catalan <ca@dodds.net>\n" diff --git a/po/cs.gmo b/po/cs.gmo index 3fee2016b2aa4e93c631fdac7b2b3cebdabdcb78..f9cc72ac6bdfff21128d2d67ef64e0f5252f2a20 100644 GIT binary patch delta 21 ccmeyL`agBUXDJRN69pq9D^tVGzol3t0BREl`~Uy| delta 21 ccmeyL`agBUXDJQ?a|J^KD`T_Gzol3t0BR8j{Qv*} diff --git a/po/cs.po b/po/cs.po index ec71c0982..ca2fb78d7 100644 --- a/po/cs.po +++ b/po/cs.po @@ -10,7 +10,7 @@ msgid "" msgstr "" "Project-Id-Version: gst-plugins-good-1.4.1\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2015-06-07 10:36+0200\n" +"POT-Creation-Date: 2015-06-24 22:51+0200\n" "PO-Revision-Date: 2015-02-16 10:40+0100\n" "Last-Translator: Marek ÄŒernocký <marek@manet.cz>\n" "Language-Team: Czech <translation-team-cs@lists.sourceforge.net>\n" diff --git a/po/da.gmo b/po/da.gmo index 6434f650914b313d285a9398e462c4cc2b98e3b5..00377121dbe3bc541c04a9d1b19e398bba197013 100644 GIT binary patch delta 21 ccmZ1xw<2!C7by-S69pq9D^tVGf24Fo09(-qW&i*H delta 21 ccmZ1xw<2!C7by+{a|J^KD`T_Gf24Fo09(%oX8-^I diff --git a/po/da.po b/po/da.po index ae7b12331..2f9288cdf 100644 --- a/po/da.po +++ b/po/da.po @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: gst-plugins-good-1.3.90\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2015-06-07 10:36+0200\n" +"POT-Creation-Date: 2015-06-24 22:51+0200\n" "PO-Revision-Date: 2014-06-29 23:54+0200\n" "Last-Translator: Joe Hansen <joedalton2@yahoo.dk>\n" "Language-Team: Danish <dansk@dansk-gruppen.dk>\n" diff --git a/po/de.gmo b/po/de.gmo index b4f683564250d7ffe4993d5f9f5e97e876e904f9..6efa97af99b23f32257ce827d09daa7bdb21e60c 100644 GIT binary patch delta 21 ccmeB8?@izEMT*17M8U|&%G7Z4AE}8F09m~Us{jB1 delta 21 ccmeB8?@izEMT*0~T*1)5%Ghl4AE}8F09m^StN;K2 diff --git a/po/de.po b/po/de.po index ed92bba00..977d1fcf0 100644 --- a/po/de.po +++ b/po/de.po @@ -14,7 +14,7 @@ msgid "" msgstr "" "Project-Id-Version: gst-plugins-good 1.3.90\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2015-06-07 10:36+0200\n" +"POT-Creation-Date: 2015-06-24 22:51+0200\n" "PO-Revision-Date: 2014-06-29 21:20+0100\n" "Last-Translator: Christian Kirbach <christian.kirbach@gmail.com>\n" "Language-Team: German <translation-team-de@lists.sourceforge.net>\n" diff --git a/po/el.gmo b/po/el.gmo index 55cda84ae8835a7626f91efe66989941649b6220..f3f92529570301800fb527b479198982fb590f17 100644 GIT binary patch delta 21 ccmX>bbv9~4q7a9XiGq=lm8s$8Ora-I09I=UFaQ7m delta 21 ccmX>bbv9~4q7a9Hxq_jAm9g38Ora-I09I)SF#rGn diff --git a/po/el.po b/po/el.po index 28302a83a..2e714768f 100644 --- a/po/el.po +++ b/po/el.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: gst-plugins-good 0.10.28.2\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2015-06-07 10:36+0200\n" +"POT-Creation-Date: 2015-06-24 22:51+0200\n" "PO-Revision-Date: 2012-05-05 19:05+0100\n" "Last-Translator: Savvas Radevic <vicedar@gmail.com>\n" "Language-Team: Greek <team@lists.gnome.gr>\n" diff --git a/po/en_GB.gmo b/po/en_GB.gmo index 1ae72613e0b476210bcf292c21ad3763489e9472..b413274a785f97c2ccf0b3b156db5d30b5f431d8 100644 GIT binary patch delta 21 ccmbQwI-hle4<m<>iGq=lm8s$85JqoC06u&LEC2ui delta 21 ccmbQwI-hle4<m<xxq_jAm9g385JqoC06uyJEdT%j diff --git a/po/en_GB.po b/po/en_GB.po index 259f487b0..38e0e6694 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: 2015-06-07 10:36+0200\n" +"POT-Creation-Date: 2015-06-24 22:51+0200\n" "PO-Revision-Date: 2004-04-26 10:41-0400\n" "Last-Translator: Gareth Owen <gowen72@yahoo.com>\n" "Language-Team: English (British) <en_gb@li.org>\n" diff --git a/po/eo.gmo b/po/eo.gmo index c9575b4fbca12d123c8c9ca859b5aa04d399c45f..3c0d8cd302c391ceb6cfca5925f3669899808e32 100644 GIT binary patch delta 21 ccmdnMwSjBHMkWp;69pq9D^tVGJDJLv07@|iQ2+n{ delta 21 ccmdnMwSjBHMkWpea|J^KD`T_GJDJLv07@?gQUCw| diff --git a/po/eo.po b/po/eo.po index 9b68f3534..cba611bf5 100644 --- a/po/eo.po +++ b/po/eo.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: gst-plugins-good 0.10.28.2\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2015-06-07 10:36+0200\n" +"POT-Creation-Date: 2015-06-24 22:51+0200\n" "PO-Revision-Date: 2011-06-04 21:48+0100\n" "Last-Translator: Kristjan SCHMIDT <kristjan.schmidt@googlemail.com>\n" "Language-Team: Esperanto <translation-team-eo@lists.sourceforge.net>\n" diff --git a/po/es.gmo b/po/es.gmo index 2e271a452ba268ebc828a18ccc1435b08ebd4cbd..499d8b400e5865be1e79a65688cac3582a733159 100644 GIT binary patch delta 21 ccmbQ~In#54sW69;iGq=lm8s!oTj3Z%07p&*zW@LL delta 21 ccmbQ~In#54sW69uxq_jAm9g1oTj3Z%07py(zyJUM diff --git a/po/es.po b/po/es.po index 6f0dd6989..501abead2 100644 --- a/po/es.po +++ b/po/es.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: gst-plugins-good 0.10.26.2\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2015-06-07 10:36+0200\n" +"POT-Creation-Date: 2015-06-24 22:51+0200\n" "PO-Revision-Date: 2011-02-12 18:30+0100\n" "Last-Translator: Jorge González González <aloriel@gmail.com>\n" "Language-Team: Spanish <es@li.org>\n" diff --git a/po/eu.gmo b/po/eu.gmo index 6ede6c815d26249335e75bcde30e7192c6b3bd78..2279a900c6840f4711b86882868650a7fc13a99e 100644 GIT binary patch delta 21 ccmX?Qead=+gaC(;iGq=lm8s!o1%Xw(080P{4*&oF delta 21 ccmX?Qead=+gaC(uxq_jAm9g1o1%Xw(080J_5C8xG diff --git a/po/eu.po b/po/eu.po index 4ccef9e81..74f023329 100644 --- a/po/eu.po +++ b/po/eu.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: gst-plugins-good-0.10.18.2\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2015-06-07 10:36+0200\n" +"POT-Creation-Date: 2015-06-24 22:51+0200\n" "PO-Revision-Date: 2010-03-25 12:37+0100\n" "Last-Translator: Mikel Olasagasti Uranga <hey_neken@mundurat.net>\n" "Language-Team: Basque <translation-team-eu@lists.sourceforge.net>\n" diff --git a/po/fi.gmo b/po/fi.gmo index c98c3fe8de8ab17518aba398031c5c97b5e8f02c..54f7732b4e5fa3b60ab243c78fd589bbf6e96039 100644 GIT binary patch delta 21 dcmaE9_tI{|d_fK)69pq9D^tVG%LNbd0svbW2YUbj delta 21 dcmaE9_tI{|d_fKaa|J^KD`T_G%LNbd0svbU2Ydhk diff --git a/po/fi.po b/po/fi.po index 05a29099f..63fa0ce9f 100644 --- a/po/fi.po +++ b/po/fi.po @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: gst-plugins-good 0.10.25.3\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2015-06-07 10:36+0200\n" +"POT-Creation-Date: 2015-06-24 22:51+0200\n" "PO-Revision-Date: 2010-11-17 23:03+0200\n" "Last-Translator: Tommi Vainikainen <Tommi.Vainikainen@iki.fi>\n" "Language-Team: Finnish <translation-team-fi@lists.sourceforge.net>\n" diff --git a/po/fr.gmo b/po/fr.gmo index 5701e57e7d1647d84c689690f998859e33a46052..da0d7d92fd9856880fedfa5817bbcf7d99ae4925 100644 GIT binary patch delta 21 ccmZ1xwjyl92T=|q69pq9D^tVGKST{g0a^eDNdN!< delta 21 ccmZ1xwjyl92T=|Ka|J^KD`T_GKST{g0a^YBN&o-= diff --git a/po/fr.po b/po/fr.po index 24725e487..10b4c2a5d 100644 --- a/po/fr.po +++ b/po/fr.po @@ -10,7 +10,7 @@ msgid "" msgstr "" "Project-Id-Version: gst-plugins-good 1.4.1\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2015-06-07 10:36+0200\n" +"POT-Creation-Date: 2015-06-24 22:51+0200\n" "PO-Revision-Date: 2015-04-26 19:35+0200\n" "Last-Translator: Stéphane Aulery <lkppo@free.fr>\n" "Language-Team: French <traduc@traduc.org>\n" diff --git a/po/gl.gmo b/po/gl.gmo index 85fd2907181232344caa61fad7bc290db47fc6cd..f278cc2a0fbb8787863f0ac34bd93f8017600fe1 100644 GIT binary patch delta 21 ccmX>Vaw=rQ4p9yx69pq9D^tVG2SmF>09#iFasU7T delta 21 ccmX>Vaw=rQ4p9yRa|J^KD`T_G2SmF>09#cDa{vGU diff --git a/po/gl.po b/po/gl.po index ae001d32f..64b8857e7 100644 --- a/po/gl.po +++ b/po/gl.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: gst-plugins-good 1.0.3\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2015-06-07 10:36+0200\n" +"POT-Creation-Date: 2015-06-24 22:51+0200\n" "PO-Revision-Date: 2012-12-15 03:46+0200\n" "Last-Translator: Fran Dieguez <frandieguez@ubuntu.com>\n" "Language-Team: Galician <proxecto@trasno.net>\n" diff --git a/po/gst-plugins-good-1.0.pot b/po/gst-plugins-good-1.0.pot index 3823d9da8..02865216f 100644 --- a/po/gst-plugins-good-1.0.pot +++ b/po/gst-plugins-good-1.0.pot @@ -5,9 +5,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: gst-plugins-good 1.5.1\n" +"Project-Id-Version: gst-plugins-good 1.5.2\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2015-06-07 10:36+0200\n" +"POT-Creation-Date: 2015-06-24 22:51+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -37,32 +37,32 @@ msgstr "" msgid "Could not connect to server" msgstr "" -#: ext/soup/gstsouphttpsrc.c:859 +#: ext/soup/gstsouphttpsrc.c:893 msgid "No URL set." msgstr "" -#: ext/soup/gstsouphttpsrc.c:1216 +#: ext/soup/gstsouphttpsrc.c:1252 msgid "Server does not support seeking." msgstr "" -#: ext/soup/gstsouphttpsrc.c:1491 +#: ext/soup/gstsouphttpsrc.c:1527 msgid "Could not resolve server name." msgstr "" -#: ext/soup/gstsouphttpsrc.c:1497 +#: ext/soup/gstsouphttpsrc.c:1533 msgid "Could not establish connection to server." msgstr "" -#: ext/soup/gstsouphttpsrc.c:1502 +#: ext/soup/gstsouphttpsrc.c:1538 msgid "Secure connection setup failed." msgstr "" -#: ext/soup/gstsouphttpsrc.c:1512 +#: ext/soup/gstsouphttpsrc.c:1548 msgid "" "A network error occured, or the server closed the connection unexpectedly." msgstr "" -#: ext/soup/gstsouphttpsrc.c:1519 +#: ext/soup/gstsouphttpsrc.c:1555 msgid "Server sent bad data." msgstr "" @@ -74,54 +74,54 @@ msgstr "" msgid "No or invalid input audio, AVI stream will be corrupt." msgstr "" -#: gst/isomp4/qtdemux.c:599 gst/isomp4/qtdemux.c:603 +#: gst/isomp4/qtdemux.c:607 gst/isomp4/qtdemux.c:611 msgid "This file contains no playable streams." msgstr "" -#: gst/isomp4/qtdemux.c:649 gst/isomp4/qtdemux.c:5080 -#: gst/isomp4/qtdemux.c:5147 gst/isomp4/qtdemux.c:5385 +#: gst/isomp4/qtdemux.c:657 gst/isomp4/qtdemux.c:5107 +#: gst/isomp4/qtdemux.c:5174 gst/isomp4/qtdemux.c:5412 msgid "This file is invalid and cannot be played." msgstr "" -#: gst/isomp4/qtdemux.c:2338 +#: gst/isomp4/qtdemux.c:2355 msgid "Cannot play stream because it is encrypted with PlayReady DRM." msgstr "" -#: gst/isomp4/qtdemux.c:3042 gst/isomp4/qtdemux.c:6092 -#: gst/isomp4/qtdemux.c:6099 gst/isomp4/qtdemux.c:6756 -#: gst/isomp4/qtdemux.c:7183 gst/isomp4/qtdemux.c:7190 -#: gst/isomp4/qtdemux.c:9307 +#: gst/isomp4/qtdemux.c:3059 gst/isomp4/qtdemux.c:6119 +#: gst/isomp4/qtdemux.c:6126 gst/isomp4/qtdemux.c:6845 +#: gst/isomp4/qtdemux.c:7272 gst/isomp4/qtdemux.c:7279 +#: gst/isomp4/qtdemux.c:9442 msgid "This file is corrupt and cannot be played." msgstr "" -#: gst/isomp4/qtdemux.c:3284 +#: gst/isomp4/qtdemux.c:3301 msgid "Invalid atom size." msgstr "" -#: gst/isomp4/qtdemux.c:3360 +#: gst/isomp4/qtdemux.c:3377 msgid "This file is incomplete and cannot be played." msgstr "" -#: gst/isomp4/qtdemux.c:7959 +#: gst/isomp4/qtdemux.c:8094 msgid "The video in this file might not play correctly." msgstr "" -#: gst/isomp4/qtdemux.c:9348 +#: gst/isomp4/qtdemux.c:9483 #, c-format msgid "This file contains too many streams. Only playing first %d" msgstr "" -#: gst/multifile/gstsplitmuxsrc.c:548 gst/wavparse/gstwavparse.c:2248 +#: gst/multifile/gstsplitmuxsrc.c:556 gst/wavparse/gstwavparse.c:2248 msgid "Internal data flow error." msgstr "" -#: gst/rtsp/gstrtspsrc.c:6719 +#: gst/rtsp/gstrtspsrc.c:6750 msgid "" "No supported stream was found. You might need to install a GStreamer RTSP " "extension plugin for Real media streams." msgstr "" -#: gst/rtsp/gstrtspsrc.c:6724 +#: gst/rtsp/gstrtspsrc.c:6755 msgid "" "No supported stream was found. You might need to allow more transport " "protocols or may otherwise be missing the right GStreamer RTSP extension " @@ -251,7 +251,7 @@ msgstr "" msgid "AUX 2 Out" msgstr "" -#: sys/v4l2/gstv4l2bufferpool.c:1657 +#: sys/v4l2/gstv4l2bufferpool.c:1663 #, c-format msgid "Error reading %d bytes from device '%s'." msgstr "" @@ -261,75 +261,75 @@ msgstr "" msgid "Failed to enumerate possible video formats device '%s' can work with" msgstr "" -#: sys/v4l2/gstv4l2object.c:2452 +#: sys/v4l2/gstv4l2object.c:2574 #, c-format msgid "Could not map buffers from device '%s'" msgstr "" -#: sys/v4l2/gstv4l2object.c:2460 +#: sys/v4l2/gstv4l2object.c:2582 #, c-format msgid "The driver of device '%s' does not support the IO method %d" msgstr "" -#: sys/v4l2/gstv4l2object.c:2467 +#: sys/v4l2/gstv4l2object.c:2589 #, c-format msgid "The driver of device '%s' does not support any known IO method." msgstr "" -#: sys/v4l2/gstv4l2object.c:2973 sys/v4l2/gstv4l2object.c:2984 +#: sys/v4l2/gstv4l2object.c:3210 sys/v4l2/gstv4l2object.c:3221 #, c-format msgid "Device '%s' is busy" msgstr "" -#: sys/v4l2/gstv4l2object.c:2990 sys/v4l2/gstv4l2object.c:3002 +#: sys/v4l2/gstv4l2object.c:3227 sys/v4l2/gstv4l2object.c:3239 #, c-format msgid "Device '%s' cannot capture at %dx%d" msgstr "" -#: sys/v4l2/gstv4l2object.c:3013 +#: sys/v4l2/gstv4l2object.c:3250 #, c-format msgid "Device '%s' cannot capture in the specified format" msgstr "" -#: sys/v4l2/gstv4l2object.c:3026 +#: sys/v4l2/gstv4l2object.c:3263 #, c-format msgid "Device '%s' does support non-contiguous planes" msgstr "" -#: sys/v4l2/gstv4l2object.c:3037 +#: sys/v4l2/gstv4l2object.c:3274 #, c-format msgid "Could not get parameters on device '%s'" msgstr "" -#: sys/v4l2/gstv4l2object.c:3045 +#: sys/v4l2/gstv4l2object.c:3282 msgid "Video device did not accept new frame rate setting." msgstr "" -#: sys/v4l2/gstv4l2object.c:3150 +#: sys/v4l2/gstv4l2object.c:3387 msgid "Video device did not provide output format." msgstr "" -#: sys/v4l2/gstv4l2object.c:3156 +#: sys/v4l2/gstv4l2object.c:3393 msgid "Video device returned invalid dimensions." msgstr "" -#: sys/v4l2/gstv4l2object.c:3164 +#: sys/v4l2/gstv4l2object.c:3401 msgid "Video devices uses an unsupported interlacing method." msgstr "" -#: sys/v4l2/gstv4l2object.c:3171 +#: sys/v4l2/gstv4l2object.c:3408 msgid "Video devices uses an unsupported pixel format." msgstr "" -#: sys/v4l2/gstv4l2object.c:3583 +#: sys/v4l2/gstv4l2object.c:3820 msgid "Failed to configure internal buffer pool." msgstr "" -#: sys/v4l2/gstv4l2object.c:3589 +#: sys/v4l2/gstv4l2object.c:3826 msgid "Video device did not suggest any buffer size." msgstr "" -#: sys/v4l2/gstv4l2object.c:3604 +#: sys/v4l2/gstv4l2object.c:3841 msgid "No downstream pool to import from." msgstr "" diff --git a/po/hr.gmo b/po/hr.gmo index 1c84bc530487da3d2f609a77a8005381257f13ae..3be8676fb42766f984e74b63d36313259069a623 100644 GIT binary patch delta 21 ccmX@>bk=D@q7a9XiGq=lm8s$8Ora-y08-Be^Z)<= delta 21 ccmX@>bk=D@q7a9Hxq_jAm9g38Ora-y08-5c^#A|> diff --git a/po/hr.po b/po/hr.po index 5926e19e6..07f2bbebf 100644 --- a/po/hr.po +++ b/po/hr.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: gst-plugins-good 0.10.28.2\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2015-06-07 10:36+0200\n" +"POT-Creation-Date: 2015-06-24 22:51+0200\n" "PO-Revision-Date: 2012-04-16 03:04+0200\n" "Last-Translator: Tomislav Krznar <tomislav.krznar@gmail.com>\n" "Language-Team: Croatian <lokalizacija@linux.hr>\n" diff --git a/po/hu.gmo b/po/hu.gmo index 8070b3f49ca00bc2a43776493347b47a799ab962..5faee7557055ddff778ebf00c7f720701ddd7a4b 100644 GIT binary patch delta 21 ccmZokZ%N<qMT*17M8U|&%G7Z4AE^!r09Zo@kN^Mx delta 21 ccmZokZ%N<qMT*0~T*1)5%Ghl4AE^!r09Zi>kpKVy diff --git a/po/hu.po b/po/hu.po index 72c42e1d4..c635f263b 100644 --- a/po/hu.po +++ b/po/hu.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: gst-plugins-good 1.3.90\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2015-06-07 10:36+0200\n" +"POT-Creation-Date: 2015-06-24 22:51+0200\n" "PO-Revision-Date: 2014-06-29 12:56+0200\n" "Last-Translator: Balázs Úr <urbalazs@gmail.com>\n" "Language-Team: Hungarian <translation-team-hu@lists.sourceforge.net>\n" diff --git a/po/id.gmo b/po/id.gmo index a666feba473d079de4aeb5357c33e7bf320bf46b..b296158e5e023b89d547909b5248cd29f92e44af 100644 GIT binary patch delta 21 ccmdlIw<T`F7by-S69pq9D^tVGf21r#0A0xkiU0rr delta 21 ccmdlIw<T`F7by+{a|J^KD`T_Gf21r#0A0riivR!s diff --git a/po/id.po b/po/id.po index dabc04477..ae28a5a7b 100644 --- a/po/id.po +++ b/po/id.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: gst-plugins-good 1.3.90\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2015-06-07 10:36+0200\n" +"POT-Creation-Date: 2015-06-24 22:51+0200\n" "PO-Revision-Date: 2014-07-06 21:37+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 9c0e9c51c78a64cddbda3f8f1f60a98225e4ee00..8b66c8de26ef02115d7cad38a32e8da68efb1613 100644 GIT binary patch delta 21 dcmccZblYjed_fK)69pq9D^tVG%LTXa0{~fO2U`FD delta 21 dcmccZblYjed_fKaa|J^KD`T_G%LTXa0{~fM2V4LE diff --git a/po/it.po b/po/it.po index a3fbf6a4e..6aea8332f 100644 --- a/po/it.po +++ b/po/it.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: gst-plugins-good 0.10.25.3\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2015-06-07 10:36+0200\n" +"POT-Creation-Date: 2015-06-24 22:51+0200\n" "PO-Revision-Date: 2010-10-25 10:11+0200\n" "Last-Translator: Luca Ferretti <elle.uca@infinito.it>\n" "Language-Team: Italian <tp@lists.linux.it>\n" diff --git a/po/ja.gmo b/po/ja.gmo index b174e737043777f84ecfbba0611bc44a3423610d..a37abb9229dbd136034210f6db88f3d74d4cdbc7 100644 GIT binary patch delta 21 ccmeB*?TX#7LzKhFM8U|&%G7Z40nt+u08=psNB{r; delta 21 ccmeB*?TX#7LzKh7T*1)5%Ghl40nt+u08=jqNdN!< diff --git a/po/ja.po b/po/ja.po index 17703d665..a3fb0c09a 100644 --- a/po/ja.po +++ b/po/ja.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: gst-plugins-good 1.0.3\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2015-06-07 10:36+0200\n" +"POT-Creation-Date: 2015-06-24 22:51+0200\n" "PO-Revision-Date: 2012-12-22 20:13+0900\n" "Last-Translator: Takeshi Hamasaki <hmatrjp@users.sourceforge.jp>\n" "Language-Team: Japanese <translation-team-ja@lists.sourceforge.net>\n" diff --git a/po/lt.gmo b/po/lt.gmo index 2f606de0d28edf84dd5e6b40354ee3cf57915eeb..9412c32f05dde333f059d89d71abb613372f9dc9 100644 GIT binary patch delta 21 ccmZ2twZv+JgaC(;iGq=lm8s!o1pyXb07ISy8vp<R delta 21 ccmZ2twZv+JgaC(uxq_jAm9g1o1pyXb07IMw8~^|S diff --git a/po/lt.po b/po/lt.po index 87843d503..97f9df58f 100644 --- a/po/lt.po +++ b/po/lt.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: gst-plugins-good 0.10.23.2\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2015-06-07 10:36+0200\n" +"POT-Creation-Date: 2015-06-24 22:51+0200\n" "PO-Revision-Date: 2010-07-16 19:34+0300\n" "Last-Translator: Žygimantas BeruÄka <uid0@akl.lt>\n" "Language-Team: Lithuanian <komp_lt@konferencijos.lt>\n" diff --git a/po/lv.gmo b/po/lv.gmo index 5c2016eb7a6e21df8e79ced9bcdd52b73ee21d8b..0adb13c1c501b61729f83f1a8c15e1f96e5b21f0 100644 GIT binary patch delta 21 ccmdlHxFc{wju?lLiGq=lm8s$85-}Gc08yz1Y5)KL delta 21 ccmdlHxFc{wju?l5xq_jAm9g385-}Gc08ys~YXATM diff --git a/po/lv.po b/po/lv.po index 340229a21..9591bf46b 100644 --- a/po/lv.po +++ b/po/lv.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: gst-plugins-good 1.2.1\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2015-06-07 10:36+0200\n" +"POT-Creation-Date: 2015-06-24 22:51+0200\n" "PO-Revision-Date: 2014-04-20 16:38+0300\n" "Last-Translator: Rihards Prieditis <rprieditis@gmail.com>\n" "Language-Team: Latvian <translation-team-lv@lists.sourceforge.net>\n" diff --git a/po/mt.gmo b/po/mt.gmo index 3b11f18fba1a933a750622c3e92556fb9ac73567..068b7ae752c11fe14a36fa8d6c95e04fd557731a 100644 GIT binary patch delta 21 ccmdm{w@q)u2_6n369pq9D^tVG7kJXR08-xu-T(jq delta 21 ccmdm{w@q)u2_6mua|J^KD`T_G7kJXR08-rs-v9sr diff --git a/po/mt.po b/po/mt.po index df3d12ab1..c66507740 100644 --- a/po/mt.po +++ b/po/mt.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: gst-plugins-good-0.10.10.3\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2015-06-07 10:36+0200\n" +"POT-Creation-Date: 2015-06-24 22:51+0200\n" "PO-Revision-Date: 2008-10-26 19:09+0100\n" "Last-Translator: Michel Bugeja <michelbugeja@rabatmalta.com>\n" "Language-Team: Maltese <translation-team-mt@lists.sourceforge.net>\n" diff --git a/po/nb.gmo b/po/nb.gmo index 44d6d65cb90e61284707ba14b35e88f915d5c5b6..10c6376dddf04fd45c631edf9de3bc661656bb52 100644 GIT binary patch delta 21 dcmdlQyES&h7by-S69pq9D^tVGf24K_0{~vk2nqlI delta 21 dcmdlQyES&h7by+{a|J^KD`T_Gf24K_0{~vi2nzrJ diff --git a/po/nb.po b/po/nb.po index be6bf36d5..a5e90b636 100644 --- a/po/nb.po +++ b/po/nb.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: gst-plugins-good 1.3.90\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2015-06-07 10:36+0200\n" +"POT-Creation-Date: 2015-06-24 22:51+0200\n" "PO-Revision-Date: 2014-07-22 13:14+0100\n" "Last-Translator: Johnny A. Solbu <johnny@solbu.net>\n" "Language-Team: Norwegian Bokmaal <i18n-nb@lister.ping.uio.no>\n" diff --git a/po/nl.gmo b/po/nl.gmo index 35d436e35bf5f5c734d3346bed725247c734b1d2..6eeace24ce5737cdd583815f6ea225b20d9992e6 100644 GIT binary patch delta 914 zcmXZbPe_w-7{KvI7IRK?h!{E7>zrok+;Xd_b8agUQ%r*n>B$&+sA~~L3|=XA5JLzr zf<oFM5f2vgG7wS2AfX_H#7lyRo%9fq9y<7a*bC$R{GQ)_f1c;ryM@$;)W@{V+$a!9 zyG2SxB;gUckNxPtIV{3OE6!T+Dqdp#3tq&1yn_GGi=N9OT^PqCzCt~J6XW;;6X-I; zlsX0jhDZ#b;#FM6Fz#X#I;%xO*oq_g7{~A%j^cn<q#3iQ-ydQN_SEDPGBH3rhn@Hx zuVb0d%vW&RCsNDA5Nai9tjG6AQSucv^CL`P9gEv=1SfG8HDN#1=)PfW$BY%PTmHr< z^QBy(h4q*W^ulL6x^V`F@Br^&jMH?(1nLD_cni-^6N%C;P2>f3;3uSMa)O$0$u*L~ zKJ3Hi7{t%ky!nTLw#I14A9xovp1@+vVF_-b6L*jz<QLL?u{DZRVy$Hy3yBBOfe*0= zA6fHHu$=fM@-bzSr?x7Gv-lU^;9JseMT0&$@d4^@nnFEz8uj3LWQ#1JCjJvO!3zW~ zY`|WOVmH3VF5E`HzAY~Lp$lTDt;|@ip<Z~3{6Qqh8<WId)C<Q^*RLQ;<QVUuhc{6R t8bv$4%kJ5?%WaWhXllXT?+D-YhQsZV(A0l-RbeF1+!6@g$Qo7S73ZteY<&O# delta 915 zcmXZbPe{{o7{~EXWI7f9kSH~qo2F&z^ydtxYi%K-tg=BD^;D)E>RLpi@e>N67zTP0 z6tch|I!M|@kf=n#pdf<kln_y;I)qeo@%^wLjNj|~eE0qHJkNex9C|#oG``n;wMQEF zOU06shotj(4t=<Q`S`?(SG;%)4=}%p6}XLc_y<E62uR(Sz$D&AJO4GF#P^uM(ki*C zWst6tPT+Msic1*5PuPToL8%oxa2T)R1ir-)Oot=~SJ1xyhV7WD&L%X0Vd4es!gtt$ z`)k~61zk1LVI~IAD!GM6@DWm!w$L*FjtQ(|aR-jz6wae1+(b3D?*hhf(u-eu{=iP= zOSr@eOSuf}!W%q#a1ICXE2c5dX|^GQcEJXo!hdLq#Auf#GKz70hBQsT&=M}Lmm2Xb zp23^gjO*UK`<sEaCU`7+U>{nX!9rZcBHX|N{D2gpFG%;5(;ywhTF(UL5f7jbFJeAk z@#e2#8SxnMadn@kwQ3dTa0fFuP1;cm(x(FKNBd1Lp&dMncJM=Fi=Lt-{t+#~eFP=g zfGLb&58lCUe1nblwv^HjTM$QU<)r5ev<v?te-O3s#w77H+J*Pf);~v<=qL7KfH%<! vx{SH_VEJ?IR#{G4bEh-2=<oA6(NL=sYipnR@2|`|9(JPPNMt!sdAEEQ-Y{(* diff --git a/po/nl.po b/po/nl.po index e215abd20..e775c0a32 100644 --- a/po/nl.po +++ b/po/nl.po @@ -1,13 +1,13 @@ -# translation of gst-plugins-good-1.3.90.nl.po to Dutch +# translation of gst-plugins-good-1.5.1.nl.po to Dutch # This file is put in the public domain. # # Freek de Kruijf <f.de.kruijf@gmail.com>, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014. msgid "" msgstr "" -"Project-Id-Version: gst-plugins-good 1.3.90\n" +"Project-Id-Version: gst-plugins-good 1.5.1\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2015-06-07 10:36+0200\n" -"PO-Revision-Date: 2014-07-22 10:55+0200\n" +"POT-Creation-Date: 2015-06-24 22:51+0200\n" +"PO-Revision-Date: 2015-06-13 10:55+0200\n" "Last-Translator: Freek de Kruijf <f.de.kruijf@gmail.com>\n" "Language-Team: Dutch <vertaling@vrijschrift.org>\n" "Language: nl\n" diff --git a/po/or.gmo b/po/or.gmo index 342727264a16250665907a31fae7866c9e266bf5..d3557c1b6350cf9eb8026c8e5de5a5c8ae78aebb 100644 GIT binary patch delta 21 ccmX@Wc7Sbz4<m<>iGq=lm8s$85XLu*07VQ25dZ)H delta 21 ccmX@Wc7Sbz4<m<xxq_jAm9g385XLu*07VK05&!@I diff --git a/po/or.po b/po/or.po index acbeb4185..4fb49a286 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: 2015-06-07 10:36+0200\n" +"POT-Creation-Date: 2015-06-24 22:51+0200\n" "PO-Revision-Date: 2004-09-27 13:32+0530\n" "Last-Translator: Gora Mohanty <gora_mohanty@yahoo.co.in>\n" "Language-Team: Oriya <gora_mohanty@yahoo.co.in>\n" diff --git a/po/pl.gmo b/po/pl.gmo index c15d9d4a1cca3b3467b682297497bfbba53d5bd6..088392e1f5fa9f2fd3891233bd21685f8e1053f9 100644 GIT binary patch delta 21 dcmdmxx*>JL7by-S69pq9D^tVGf26jE0{~wx2oC@N delta 21 dcmdmxx*>JL7by+{a|J^KD`T_Gf26jE0{~wv2oL}O diff --git a/po/pl.po b/po/pl.po index b3297daba..dbfbbe7de 100644 --- a/po/pl.po +++ b/po/pl.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: gst-plugins-good 1.3.90\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2015-06-07 10:36+0200\n" +"POT-Creation-Date: 2015-06-24 22:51+0200\n" "PO-Revision-Date: 2014-06-29 10:45+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 cb45d64499d3b8debf3e871a1792c4fed7b84c00..cf358faef3b473b61bd5e4b93d077762acb02f23 100644 GIT binary patch delta 21 ccmZonYfRhlS&GBRM8U|&%G7Z4Zz(nj09K6$1ONa4 delta 21 ccmZonYfRhlS&GBJT*1)5%Ghl4Zz(nj09K0!1poj5 diff --git a/po/pt_BR.po b/po/pt_BR.po index 8fee325d4..48828789d 100644 --- a/po/pt_BR.po +++ b/po/pt_BR.po @@ -13,7 +13,7 @@ msgid "" msgstr "" "Project-Id-Version: gst-plugins-good-1.4.1\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2015-06-07 10:36+0200\n" +"POT-Creation-Date: 2015-06-24 22:51+0200\n" "PO-Revision-Date: 2015-02-01 23:02-0200\n" "Last-Translator: FabrÃcio Godoy <skarllot@gmail.com>\n" "Language-Team: Brazilian Portuguese <ldpbr-translation@lists.sourceforge." diff --git a/po/ro.gmo b/po/ro.gmo index 966983157589052fe2bbc2ecd71bcd18a4febedd..e4aabf9a92af6427b223d237bf23496e1f5187db 100644 GIT binary patch delta 21 ccmX?TchGKwgaC(;iGq=lm8s!o1p!5V07&`;d;kCd delta 21 ccmX?TchGKwgaC(uxq_jAm9g1o1p!5V07&=+eE<Le diff --git a/po/ro.po b/po/ro.po index 9879f7bad..d806f61e2 100644 --- a/po/ro.po +++ b/po/ro.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: gst-plugins-good 0.10.23.2\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2015-06-07 10:36+0200\n" +"POT-Creation-Date: 2015-06-24 22:51+0200\n" "PO-Revision-Date: 2010-08-16 03:22+0300\n" "Last-Translator: Lucian Adrian Grijincu <lucian.grijincu@gmail.com>\n" "Language-Team: Romanian <translation-team-ro@lists.sourceforge.net>\n" diff --git a/po/ru.gmo b/po/ru.gmo index d116aadbe3d8056b72a13305336889d1d9306521..717cb3d32b7a1b0749a2514bb04a8a59799aef5a 100644 GIT binary patch delta 23 ecmcc9#CWHPal;oW4kHr<BO@zQ!_9xB64U^01_)jN delta 23 ecmcc9#CWHPal;oW4g+%qLjx;gv(0~`64U^01PEUM diff --git a/po/ru.po b/po/ru.po index 3b704b711..913e9e3f6 100644 --- a/po/ru.po +++ b/po/ru.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: gst-plugins-good 1.3.90\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2015-06-07 10:36+0200\n" +"POT-Creation-Date: 2015-06-24 22:51+0200\n" "PO-Revision-Date: 2014-06-29 18:59+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 04556e9a76da1e2763cef42f840b82cdaafb49f3..70b7e25baee3d5a1f598e749134a514a5f7a754b 100644 GIT binary patch delta 21 ccmbOqJU@6tju?lLiGq=lm8s$85;1LI08QKmBme*a delta 21 ccmbOqJU@6tju?l5xq_jAm9g385;1LI08QEkB>(^b diff --git a/po/sk.po b/po/sk.po index bc82780d1..9479e22bc 100644 --- a/po/sk.po +++ b/po/sk.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: gst-plugins-good 1.2.1\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2015-06-07 10:36+0200\n" +"POT-Creation-Date: 2015-06-24 22:51+0200\n" "PO-Revision-Date: 2014-01-30 11:08+0100\n" "Last-Translator: Peter Tuharsky <tuharsky@misbb.sk>\n" "Language-Team: Slovak <sk-i18n@lists.linux.sk>\n" diff --git a/po/sl.gmo b/po/sl.gmo index 525c4702c0f65140555c5df5e2d4c75213d2c199..53e5fb0a02bd8a0e621c14f031a4c5b4a4911007 100644 GIT binary patch delta 21 ccmX>Ra3Wwsju?lLiGq=lm8s$860s|S097If7XSbN delta 21 ccmX>Ra3Wwsju?l5xq_jAm9g3860s|S097Cd7ytkO diff --git a/po/sl.po b/po/sl.po index e842d9b50..49b2afb60 100644 --- a/po/sl.po +++ b/po/sl.po @@ -10,7 +10,7 @@ msgid "" msgstr "" "Project-Id-Version: gst-plugins-good-1.2.1\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2015-06-07 10:36+0200\n" +"POT-Creation-Date: 2015-06-24 22:51+0200\n" "PO-Revision-Date: 2014-04-09 22:52+0100\n" "Last-Translator: Klemen KoÅ¡ir <klemen913@gmail.com>\n" "Language-Team: Slovenian <translation-team-sl@lists.sourceforge.net>\n" diff --git a/po/sq.gmo b/po/sq.gmo index 5d0ce76728ed4696b92ffc7bf4b7a1b599e984bd..66f57e3c656ac12d3d078d73048c3b574176f460 100644 GIT binary patch delta 21 ccmZ3>x|Vf=4<m<>iGq=lm8s$85XMMG06@qERsaA1 delta 21 ccmZ3>x|Vf=4<m<xxq_jAm9g385XMMG06@kCR{#J2 diff --git a/po/sq.po b/po/sq.po index 1eb253c18..83237a74e 100644 --- a/po/sq.po +++ b/po/sq.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: gst-plugins 0.8.3\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2015-06-07 10:36+0200\n" +"POT-Creation-Date: 2015-06-24 22:51+0200\n" "PO-Revision-Date: 2004-08-07 20:29+0200\n" "Last-Translator: Laurent Dhima <laurenti@alblinux.net>\n" "Language-Team: Albanian <begraj@hotmail.com>\n" diff --git a/po/sr.gmo b/po/sr.gmo index 59bb95504b207bdd8fbcdfedf4395017b81bf695..7c54affc353b0ca1673994ff9a93652a2dc4ebc1 100644 GIT binary patch delta 21 ccmcatcdu^4XDJRN69pq9D^tVGzon8@0BLIoR{#J2 delta 21 ccmcatcdu^4XDJQ?a|J^KD`T_Gzon8@0BLCmSO5S3 diff --git a/po/sr.po b/po/sr.po index 9bb356bec..af67108de 100644 --- a/po/sr.po +++ b/po/sr.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: gst-plugins-good-1.4.1\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2015-06-07 10:36+0200\n" +"POT-Creation-Date: 2015-06-24 22:51+0200\n" "PO-Revision-Date: 2014-09-13 10:50+0200\n" "Last-Translator: МироÑлав Ðиколић <miroslavnikolic@rocketmail.com>\n" "Language-Team: Serbian <(nothing)>\n" diff --git a/po/sv.gmo b/po/sv.gmo index b50f2827c5e3ad16e8c24dca5b2ea80705c129a5..a1e35b916bdb2019ba97285c1640d22f26d6a58e 100644 GIT binary patch delta 21 ccmaE#@IGO~7by-S69pq9D^tVGf24{<0cXSrKmY&$ delta 21 ccmaE#@IGO~7by+{a|J^KD`T_Gf24{<0cXMpK>z>% diff --git a/po/sv.po b/po/sv.po index 57579a4ee..a84421e15 100644 --- a/po/sv.po +++ b/po/sv.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: gst-plugins-good 1.3.90\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2015-06-07 10:36+0200\n" +"POT-Creation-Date: 2015-06-24 22:51+0200\n" "PO-Revision-Date: 2014-07-11 02:52+0200\n" "Last-Translator: Sebastian Rasmussen <sebras@gmail.com>\n" "Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n" diff --git a/po/tr.gmo b/po/tr.gmo index 0075719a421d0ade1a8a668e30da19b7ed34a776..6318e943aa71cec40dc6e9086f82df98f83bcb64 100644 GIT binary patch delta 21 dcmbOiKQDg6XDJRN69pq9D^tVGzoiz7003J-2gv{c delta 21 dcmbOiKQDg6XDJQ?a|J^KD`T_Gzoiz7003J*2g(2d diff --git a/po/tr.po b/po/tr.po index da4b86a5d..fe30ac1d7 100644 --- a/po/tr.po +++ b/po/tr.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: gst-plugins-good 1.4.1\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2015-06-07 10:36+0200\n" +"POT-Creation-Date: 2015-06-24 22:51+0200\n" "PO-Revision-Date: 2015-01-10 21:07+0100\n" "Last-Translator: Volkan Gezer <volkangezer@gmail.com>\n" "Language-Team: Turkish <gnu-tr-u12a@lists.sourceforge.net>\n" diff --git a/po/uk.gmo b/po/uk.gmo index e0c68a45192c043990c3d9ce8f49b956e27b6c3e..f630c7a43633f625395003f27fa4c62f1c05606a 100644 GIT binary patch delta 23 fcmdnq%(%Uoal;oW4kHr<BO@zQ!_9xBcB=sZXs!rx delta 23 fcmdnq%(%Uoal;oW4g+%qLjx;gv(0~`cB=sZXsifw diff --git a/po/uk.po b/po/uk.po index beda58c9f..ac257f159 100644 --- a/po/uk.po +++ b/po/uk.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: gst-plugins-good 1.3.90\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2015-06-07 10:36+0200\n" +"POT-Creation-Date: 2015-06-24 22:51+0200\n" "PO-Revision-Date: 2014-06-29 11:40+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 3a20269f23e1564e23d0f8136f37d4dc38d06f4e..1fc5f306ada813193f70d4ec7184d043de1948d2 100644 GIT binary patch delta 21 ccmX?JaJ*o{7by-S69pq9D^tVGf26!+0b`s8@Bjb+ delta 21 ccmX?JaJ*o{7by+{a|J^KD`T_Gf26!+0b`m6@c;k- diff --git a/po/vi.po b/po/vi.po index 7fc895c7a..c8c15795c 100644 --- a/po/vi.po +++ b/po/vi.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: gst-plugins-good 1.3.90\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2015-06-07 10:36+0200\n" +"POT-Creation-Date: 2015-06-24 22:51+0200\n" "PO-Revision-Date: 2014-06-30 09:12+0700\n" "Last-Translator: Trần Ngá»c Quân <vnwildman@gmail.com>\n" "Language-Team: Vietnamese <translation-team-vi@lists.sourceforge.net>\n" diff --git a/po/zh_CN.gmo b/po/zh_CN.gmo index e7d5d3d5b4bb0c7cd33d5966d8c64c85b3ea49d0..53c3a198a39008068bedb0e7677f8d2481e82c22 100644 GIT binary patch delta 21 ccmdmCu)|=36Ca0>iGq=lm8s!oFTQu207^CnWdHyG delta 21 ccmdmCu)|=36Ca0xxq_jAm9g1oFTQu207^6lW&i*H diff --git a/po/zh_CN.po b/po/zh_CN.po index 423668d11..0c2c2cab8 100644 --- a/po/zh_CN.po +++ b/po/zh_CN.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: gst-plugins-good 0.10.16.2\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2015-06-07 10:36+0200\n" +"POT-Creation-Date: 2015-06-24 22:51+0200\n" "PO-Revision-Date: 2009-11-13 22:20+0800\n" "Last-Translator: Ji ZhengYu <zhengyuji@gmail.com>\n" "Language-Team: Chinese (simplified) <i18n-zh@googlegroups.com>\n" diff --git a/po/zh_HK.gmo b/po/zh_HK.gmo index 0cbd6f2a54e918c26181b49b992fd25e44e76af8..f74ffdea8cf098026ae07ddfe83fe8b0bb1c7bb0 100644 GIT binary patch delta 21 ccmZ3?vzTW?3Nwe1iGq=lm8s$89Omsz07C->;{X5v delta 21 ccmZ3?vzTW?3Nwd+xq_jAm9g389Omsz07C%<<NyEw diff --git a/po/zh_HK.po b/po/zh_HK.po index 6b09f732f..fd32c9fbd 100644 --- a/po/zh_HK.po +++ b/po/zh_HK.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: gst-plugins-good-0.10.2 0.10.2\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2015-06-07 10:36+0200\n" +"POT-Creation-Date: 2015-06-24 22:51+0200\n" "PO-Revision-Date: 2006-08-29 01:08+0800\n" "Last-Translator: Abel Cheung <abelcheung@gmail.com>\n" "Language-Team: Chinese (Hong Kong) <community@linuxhall.org>\n" diff --git a/po/zh_TW.gmo b/po/zh_TW.gmo index 933bce2729afd40ff8a22cff6c5221a7c55b3e4a..a72c5be510c4b4fcf02c4850b50c769d0db813c0 100644 GIT binary patch delta 21 ccmZ3)vxsLy3Nwe1iGq=lm8s$89Oi9I07BUX-~a#s delta 21 ccmZ3)vxsLy3Nwd+xq_jAm9g389Oi9I07BOV;Q#;t diff --git a/po/zh_TW.po b/po/zh_TW.po index 34872a03f..fff2db4f9 100644 --- a/po/zh_TW.po +++ b/po/zh_TW.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: gst-plugins-good-0.10.2 0.10.2\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2015-06-07 10:36+0200\n" +"POT-Creation-Date: 2015-06-24 22:51+0200\n" "PO-Revision-Date: 2006-08-29 01:08+0800\n" "Last-Translator: Abel Cheung <abelcheung@gmail.com>\n" "Language-Team: Chinese (traditional) <zh-l10n@linux.org.tw>\n" diff --git a/sys/osxaudio/gstosxcoreaudioremoteio.c b/sys/osxaudio/gstosxcoreaudioremoteio.c index 1d3c8439c..81a8aa2e3 100644 --- a/sys/osxaudio/gstosxcoreaudioremoteio.c +++ b/sys/osxaudio/gstosxcoreaudioremoteio.c @@ -64,7 +64,7 @@ gst_core_audio_get_samples_and_latency_impl (GstCoreAudio * core_audio, gdouble rate, guint * samples, gdouble * latency) { OSStatus status; - UInt32 size; + UInt32 size = sizeof (double); status = AudioUnitGetProperty (core_audio->audiounit, kAudioUnitProperty_Latency, kAudioUnitScope_Global, 0, /* N/A for global */ latency, &size); diff --git a/sys/v4l2/ext/types-compat.h b/sys/v4l2/ext/types-compat.h index 27482483e..f1095cb06 100644 --- a/sys/v4l2/ext/types-compat.h +++ b/sys/v4l2/ext/types-compat.h @@ -44,4 +44,6 @@ #define __s32 gint32 #define __le32 guint32 __bitwise +#define __user + #endif /* __TYPES_COMPAT_H__ */ diff --git a/sys/v4l2/ext/v4l2-common.h b/sys/v4l2/ext/v4l2-common.h index 4f0667e01..e2da59303 100644 --- a/sys/v4l2/ext/v4l2-common.h +++ b/sys/v4l2/ext/v4l2-common.h @@ -29,6 +29,8 @@ #ifndef __V4L2_COMMON__ #define __V4L2_COMMON__ +#include "ext/types-compat.h" + /* * * Selection interface definitions @@ -41,6 +43,8 @@ #define V4L2_SEL_TGT_CROP_DEFAULT 0x0001 /* Cropping bounds */ #define V4L2_SEL_TGT_CROP_BOUNDS 0x0002 +/* Native frame size */ +#define V4L2_SEL_TGT_NATIVE_SIZE 0x0003 /* Current composing area */ #define V4L2_SEL_TGT_COMPOSE 0x0100 /* Default composing area */ @@ -68,4 +72,12 @@ #define V4L2_SUBDEV_SEL_FLAG_SIZE_LE V4L2_SEL_FLAG_LE #define V4L2_SUBDEV_SEL_FLAG_KEEP_CONFIG V4L2_SEL_FLAG_KEEP_CONFIG +struct v4l2_edid { + __u32 pad; + __u32 start_block; + __u32 blocks; + __u32 reserved[5]; + __u8 *edid; +}; + #endif /* __V4L2_COMMON__ */ diff --git a/sys/v4l2/ext/v4l2-controls.h b/sys/v4l2/ext/v4l2-controls.h index 1666aabbb..9f6e108ff 100644 --- a/sys/v4l2/ext/v4l2-controls.h +++ b/sys/v4l2/ext/v4l2-controls.h @@ -60,6 +60,8 @@ #define V4L2_CTRL_CLASS_IMAGE_PROC 0x009f0000 /* Image processing controls */ #define V4L2_CTRL_CLASS_DV 0x00a00000 /* Digital Video controls */ #define V4L2_CTRL_CLASS_FM_RX 0x00a10000 /* FM Receiver controls */ +#define V4L2_CTRL_CLASS_RF_TUNER 0x00a20000 /* RF tuner controls */ +#define V4L2_CTRL_CLASS_DETECT 0x00a30000 /* Detection controls */ /* User-class control IDs */ @@ -164,6 +166,14 @@ enum v4l2_colorfx { * this driver */ #define V4L2_CID_USER_TI_VPE_BASE (V4L2_CID_USER_BASE + 0x1050) +/* The base for the saa7134 driver controls. + * We reserve 16 controls for this driver. */ +#define V4L2_CID_USER_SAA7134_BASE (V4L2_CID_USER_BASE + 0x1060) + +/* The base for the adv7180 driver controls. + * We reserve 16 controls for this driver. */ +#define V4L2_CID_USER_ADV7180_BASE (V4L2_CID_USER_BASE + 0x1070) + /* MPEG-class control IDs */ /* The MPEG controls are applicable to all codec controls * and the 'MPEG' part of the define is historical */ @@ -372,6 +382,8 @@ enum v4l2_mpeg_video_multi_slice_mode { #define V4L2_CID_MPEG_VIDEO_DEC_FRAME (V4L2_CID_MPEG_BASE+224) #define V4L2_CID_MPEG_VIDEO_VBV_DELAY (V4L2_CID_MPEG_BASE+225) #define V4L2_CID_MPEG_VIDEO_REPEAT_SEQ_HEADER (V4L2_CID_MPEG_BASE+226) +#define V4L2_CID_MPEG_VIDEO_MV_H_SEARCH_RANGE (V4L2_CID_MPEG_BASE+227) +#define V4L2_CID_MPEG_VIDEO_MV_V_SEARCH_RANGE (V4L2_CID_MPEG_BASE+228) #define V4L2_CID_MPEG_VIDEO_H263_I_FRAME_QP (V4L2_CID_MPEG_BASE+300) #define V4L2_CID_MPEG_VIDEO_H263_P_FRAME_QP (V4L2_CID_MPEG_BASE+301) @@ -554,6 +566,11 @@ enum v4l2_vp8_golden_frame_sel { V4L2_CID_MPEG_VIDEO_VPX_GOLDEN_FRAME_USE_PREV = 0, V4L2_CID_MPEG_VIDEO_VPX_GOLDEN_FRAME_USE_REF_PERIOD = 1, }; +#define V4L2_CID_MPEG_VIDEO_VPX_MIN_QP (V4L2_CID_MPEG_BASE+507) +#define V4L2_CID_MPEG_VIDEO_VPX_MAX_QP (V4L2_CID_MPEG_BASE+508) +#define V4L2_CID_MPEG_VIDEO_VPX_I_FRAME_QP (V4L2_CID_MPEG_BASE+509) +#define V4L2_CID_MPEG_VIDEO_VPX_P_FRAME_QP (V4L2_CID_MPEG_BASE+510) +#define V4L2_CID_MPEG_VIDEO_VPX_PROFILE (V4L2_CID_MPEG_BASE+511) /* MPEG-class control IDs specific to the CX2341x driver as defined by V4L2 */ #define V4L2_CID_MPEG_CX2341X_BASE (V4L2_CTRL_CLASS_MPEG | 0x1000) @@ -733,6 +750,8 @@ enum v4l2_auto_focus_range { V4L2_AUTO_FOCUS_RANGE_INFINITY = 3, }; +#define V4L2_CID_PAN_SPEED (V4L2_CID_CAMERA_CLASS_BASE+32) +#define V4L2_CID_TILT_SPEED (V4L2_CID_CAMERA_CLASS_BASE+33) /* FM Modulator class control IDs */ @@ -744,6 +763,15 @@ enum v4l2_auto_focus_range { #define V4L2_CID_RDS_TX_PTY (V4L2_CID_FM_TX_CLASS_BASE + 3) #define V4L2_CID_RDS_TX_PS_NAME (V4L2_CID_FM_TX_CLASS_BASE + 5) #define V4L2_CID_RDS_TX_RADIO_TEXT (V4L2_CID_FM_TX_CLASS_BASE + 6) +#define V4L2_CID_RDS_TX_MONO_STEREO (V4L2_CID_FM_TX_CLASS_BASE + 7) +#define V4L2_CID_RDS_TX_ARTIFICIAL_HEAD (V4L2_CID_FM_TX_CLASS_BASE + 8) +#define V4L2_CID_RDS_TX_COMPRESSED (V4L2_CID_FM_TX_CLASS_BASE + 9) +#define V4L2_CID_RDS_TX_DYNAMIC_PTY (V4L2_CID_FM_TX_CLASS_BASE + 10) +#define V4L2_CID_RDS_TX_TRAFFIC_ANNOUNCEMENT (V4L2_CID_FM_TX_CLASS_BASE + 11) +#define V4L2_CID_RDS_TX_TRAFFIC_PROGRAM (V4L2_CID_FM_TX_CLASS_BASE + 12) +#define V4L2_CID_RDS_TX_MUSIC_SPEECH (V4L2_CID_FM_TX_CLASS_BASE + 13) +#define V4L2_CID_RDS_TX_ALT_FREQS_ENABLE (V4L2_CID_FM_TX_CLASS_BASE + 14) +#define V4L2_CID_RDS_TX_ALT_FREQS (V4L2_CID_FM_TX_CLASS_BASE + 15) #define V4L2_CID_AUDIO_LIMITER_ENABLED (V4L2_CID_FM_TX_CLASS_BASE + 64) #define V4L2_CID_AUDIO_LIMITER_RELEASE_TIME (V4L2_CID_FM_TX_CLASS_BASE + 65) @@ -803,6 +831,9 @@ enum v4l2_flash_strobe_source { #define V4L2_FLASH_FAULT_SHORT_CIRCUIT (1 << 3) #define V4L2_FLASH_FAULT_OVER_CURRENT (1 << 4) #define V4L2_FLASH_FAULT_INDICATOR (1 << 5) +#define V4L2_FLASH_FAULT_UNDER_VOLTAGE (1 << 6) +#define V4L2_FLASH_FAULT_INPUT_VOLTAGE (1 << 7) +#define V4L2_FLASH_FAULT_LED_OVER_TEMPERATURE (1 << 8) #define V4L2_CID_FLASH_CHARGE (V4L2_CID_FLASH_CLASS_BASE + 11) #define V4L2_CID_FLASH_READY (V4L2_CID_FLASH_CLASS_BASE + 12) @@ -840,6 +871,10 @@ enum v4l2_jpeg_chroma_subsampling { #define V4L2_CID_VBLANK (V4L2_CID_IMAGE_SOURCE_CLASS_BASE + 1) #define V4L2_CID_HBLANK (V4L2_CID_IMAGE_SOURCE_CLASS_BASE + 2) #define V4L2_CID_ANALOGUE_GAIN (V4L2_CID_IMAGE_SOURCE_CLASS_BASE + 3) +#define V4L2_CID_TEST_PATTERN_RED (V4L2_CID_IMAGE_SOURCE_CLASS_BASE + 4) +#define V4L2_CID_TEST_PATTERN_GREENR (V4L2_CID_IMAGE_SOURCE_CLASS_BASE + 5) +#define V4L2_CID_TEST_PATTERN_BLUE (V4L2_CID_IMAGE_SOURCE_CLASS_BASE + 6) +#define V4L2_CID_TEST_PATTERN_GREENB (V4L2_CID_IMAGE_SOURCE_CLASS_BASE + 7) /* Image processing controls */ @@ -885,5 +920,40 @@ enum v4l2_deemphasis { }; #define V4L2_CID_RDS_RECEPTION (V4L2_CID_FM_RX_CLASS_BASE + 2) +#define V4L2_CID_RDS_RX_PTY (V4L2_CID_FM_RX_CLASS_BASE + 3) +#define V4L2_CID_RDS_RX_PS_NAME (V4L2_CID_FM_RX_CLASS_BASE + 4) +#define V4L2_CID_RDS_RX_RADIO_TEXT (V4L2_CID_FM_RX_CLASS_BASE + 5) +#define V4L2_CID_RDS_RX_TRAFFIC_ANNOUNCEMENT (V4L2_CID_FM_RX_CLASS_BASE + 6) +#define V4L2_CID_RDS_RX_TRAFFIC_PROGRAM (V4L2_CID_FM_RX_CLASS_BASE + 7) +#define V4L2_CID_RDS_RX_MUSIC_SPEECH (V4L2_CID_FM_RX_CLASS_BASE + 8) + +#define V4L2_CID_RF_TUNER_CLASS_BASE (V4L2_CTRL_CLASS_RF_TUNER | 0x900) +#define V4L2_CID_RF_TUNER_CLASS (V4L2_CTRL_CLASS_RF_TUNER | 1) + +#define V4L2_CID_RF_TUNER_BANDWIDTH_AUTO (V4L2_CID_RF_TUNER_CLASS_BASE + 11) +#define V4L2_CID_RF_TUNER_BANDWIDTH (V4L2_CID_RF_TUNER_CLASS_BASE + 12) +#define V4L2_CID_RF_TUNER_LNA_GAIN_AUTO (V4L2_CID_RF_TUNER_CLASS_BASE + 41) +#define V4L2_CID_RF_TUNER_LNA_GAIN (V4L2_CID_RF_TUNER_CLASS_BASE + 42) +#define V4L2_CID_RF_TUNER_MIXER_GAIN_AUTO (V4L2_CID_RF_TUNER_CLASS_BASE + 51) +#define V4L2_CID_RF_TUNER_MIXER_GAIN (V4L2_CID_RF_TUNER_CLASS_BASE + 52) +#define V4L2_CID_RF_TUNER_IF_GAIN_AUTO (V4L2_CID_RF_TUNER_CLASS_BASE + 61) +#define V4L2_CID_RF_TUNER_IF_GAIN (V4L2_CID_RF_TUNER_CLASS_BASE + 62) +#define V4L2_CID_RF_TUNER_PLL_LOCK (V4L2_CID_RF_TUNER_CLASS_BASE + 91) + + +/* Detection-class control IDs defined by V4L2 */ +#define V4L2_CID_DETECT_CLASS_BASE (V4L2_CTRL_CLASS_DETECT | 0x900) +#define V4L2_CID_DETECT_CLASS (V4L2_CTRL_CLASS_DETECT | 1) + +#define V4L2_CID_DETECT_MD_MODE (V4L2_CID_DETECT_CLASS_BASE + 1) +enum v4l2_detect_md_mode { + V4L2_DETECT_MD_MODE_DISABLED = 0, + V4L2_DETECT_MD_MODE_GLOBAL = 1, + V4L2_DETECT_MD_MODE_THRESHOLD_GRID = 2, + V4L2_DETECT_MD_MODE_REGION_GRID = 3, +}; +#define V4L2_CID_DETECT_MD_GLOBAL_THRESHOLD (V4L2_CID_DETECT_CLASS_BASE + 2) +#define V4L2_CID_DETECT_MD_THRESHOLD_GRID (V4L2_CID_DETECT_CLASS_BASE + 3) +#define V4L2_CID_DETECT_MD_REGION_GRID (V4L2_CID_DETECT_CLASS_BASE + 4) #endif diff --git a/sys/v4l2/ext/videodev2.h b/sys/v4l2/ext/videodev2.h index 2b4d1f5e0..68e82be44 100644 --- a/sys/v4l2/ext/videodev2.h +++ b/sys/v4l2/ext/videodev2.h @@ -77,6 +77,7 @@ /* Four-character-code (FOURCC) */ #define v4l2_fourcc(a, b, c, d)\ ((__u32)(a) | ((__u32)(b) << 8) | ((__u32)(c) << 16) | ((__u32)(d) << 24)) +#define v4l2_fourcc_be(a, b, c, d) (v4l2_fourcc(a, b, c, d) | (1 << 31)) /* * E N U M S @@ -122,6 +123,10 @@ enum v4l2_field { (field) == V4L2_FIELD_INTERLACED_BT ||\ (field) == V4L2_FIELD_SEQ_TB ||\ (field) == V4L2_FIELD_SEQ_BT) +#define V4L2_FIELD_HAS_T_OR_B(field) \ + ((field) == V4L2_FIELD_BOTTOM ||\ + (field) == V4L2_FIELD_TOP ||\ + (field) == V4L2_FIELD_ALTERNATE) enum v4l2_buf_type { V4L2_BUF_TYPE_VIDEO_CAPTURE = 1, @@ -137,6 +142,7 @@ enum v4l2_buf_type { #endif V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE = 9, V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE = 10, + V4L2_BUF_TYPE_SDR_CAPTURE = 11, /* Deprecated, do not use */ V4L2_BUF_TYPE_PRIVATE = 0x80, }; @@ -157,6 +163,8 @@ enum v4l2_tuner_type { V4L2_TUNER_RADIO = 1, V4L2_TUNER_ANALOG_TV = 2, V4L2_TUNER_DIGITAL_TV = 3, + V4L2_TUNER_ADC = 4, + V4L2_TUNER_RF = 5, }; enum v4l2_memory { @@ -168,32 +176,181 @@ enum v4l2_memory { /* see also http://vektor.theorem.ca/graphics/ycbcr/ */ enum v4l2_colorspace { - /* ITU-R 601 -- broadcast NTSC/PAL */ + /* + * Default colorspace, i.e. let the driver figure it out. + * Can only be used with video capture. + */ + V4L2_COLORSPACE_DEFAULT = 0, + + /* SMPTE 170M: used for broadcast NTSC/PAL SDTV */ V4L2_COLORSPACE_SMPTE170M = 1, - /* 1125-Line (US) HDTV */ + /* Obsolete pre-1998 SMPTE 240M HDTV standard, superseded by Rec 709 */ V4L2_COLORSPACE_SMPTE240M = 2, - /* HD and modern captures. */ + /* Rec.709: used for HDTV */ V4L2_COLORSPACE_REC709 = 3, - /* broken BT878 extents (601, luma range 16-253 instead of 16-235) */ + /* + * Deprecated, do not use. No driver will ever return this. This was + * based on a misunderstanding of the bt878 datasheet. + */ V4L2_COLORSPACE_BT878 = 4, - /* These should be useful. Assume 601 extents. */ + /* + * NTSC 1953 colorspace. This only makes sense when dealing with + * really, really old NTSC recordings. Superseded by SMPTE 170M. + */ V4L2_COLORSPACE_470_SYSTEM_M = 5, + + /* + * EBU Tech 3213 PAL/SECAM colorspace. This only makes sense when + * dealing with really old PAL/SECAM recordings. Superseded by + * SMPTE 170M. + */ V4L2_COLORSPACE_470_SYSTEM_BG = 6, - /* I know there will be cameras that send this. So, this is - * unspecified chromaticities and full 0-255 on each of the - * Y'CbCr components + /* + * Effectively shorthand for V4L2_COLORSPACE_SRGB, V4L2_YCBCR_ENC_601 + * and V4L2_QUANTIZATION_FULL_RANGE. To be used for (Motion-)JPEG. */ V4L2_COLORSPACE_JPEG = 7, - /* For RGB colourspaces, this is probably a good start. */ + /* For RGB colorspaces such as produces by most webcams. */ V4L2_COLORSPACE_SRGB = 8, + + /* AdobeRGB colorspace */ + V4L2_COLORSPACE_ADOBERGB = 9, + + /* BT.2020 colorspace, used for UHDTV. */ + V4L2_COLORSPACE_BT2020 = 10, + + /* Raw colorspace: for RAW unprocessed images */ + V4L2_COLORSPACE_RAW = 11, +}; + +/* + * Determine how COLORSPACE_DEFAULT should map to a proper colorspace. + * This depends on whether this is a SDTV image (use SMPTE 170M), an + * HDTV image (use Rec. 709), or something else (use sRGB). + */ +#define V4L2_MAP_COLORSPACE_DEFAULT(is_sdtv, is_hdtv) \ + ((is_sdtv) ? V4L2_COLORSPACE_SMPTE170M : \ + ((is_hdtv) ? V4L2_COLORSPACE_REC709 : V4L2_COLORSPACE_SRGB)) + +enum v4l2_xfer_func { + /* + * Mapping of V4L2_XFER_FUNC_DEFAULT to actual transfer functions + * for the various colorspaces: + * + * V4L2_COLORSPACE_SMPTE170M, V4L2_COLORSPACE_470_SYSTEM_M, + * V4L2_COLORSPACE_470_SYSTEM_BG, V4L2_COLORSPACE_REC709 and + * V4L2_COLORSPACE_BT2020: V4L2_XFER_FUNC_709 + * + * V4L2_COLORSPACE_SRGB, V4L2_COLORSPACE_JPEG: V4L2_XFER_FUNC_SRGB + * + * V4L2_COLORSPACE_ADOBERGB: V4L2_XFER_FUNC_ADOBERGB + * + * V4L2_COLORSPACE_SMPTE240M: V4L2_XFER_FUNC_SMPTE240M + * + * V4L2_COLORSPACE_RAW: V4L2_XFER_FUNC_NONE + */ + V4L2_XFER_FUNC_DEFAULT = 0, + V4L2_XFER_FUNC_709 = 1, + V4L2_XFER_FUNC_SRGB = 2, + V4L2_XFER_FUNC_ADOBERGB = 3, + V4L2_XFER_FUNC_SMPTE240M = 4, + V4L2_XFER_FUNC_NONE = 5, +}; + +/* + * Determine how XFER_FUNC_DEFAULT should map to a proper transfer function. + * This depends on the colorspace. + */ +#define V4L2_MAP_XFER_FUNC_DEFAULT(colsp) \ + ((colsp) == V4L2_XFER_FUNC_ADOBERGB ? V4L2_XFER_FUNC_ADOBERGB : \ + ((colsp) == V4L2_COLORSPACE_SMPTE240M ? V4L2_XFER_FUNC_SMPTE240M : \ + ((colsp) == V4L2_COLORSPACE_RAW ? V4L2_XFER_FUNC_NONE : \ + ((colsp) == V4L2_COLORSPACE_SRGB || (colsp) == V4L2_COLORSPACE_JPEG ? \ + V4L2_XFER_FUNC_SRGB : V4L2_XFER_FUNC_709)))) + +enum v4l2_ycbcr_encoding { + /* + * Mapping of V4L2_YCBCR_ENC_DEFAULT to actual encodings for the + * various colorspaces: + * + * V4L2_COLORSPACE_SMPTE170M, V4L2_COLORSPACE_470_SYSTEM_M, + * V4L2_COLORSPACE_470_SYSTEM_BG, V4L2_COLORSPACE_ADOBERGB and + * V4L2_COLORSPACE_JPEG: V4L2_YCBCR_ENC_601 + * + * V4L2_COLORSPACE_REC709: V4L2_YCBCR_ENC_709 + * + * V4L2_COLORSPACE_SRGB: V4L2_YCBCR_ENC_SYCC + * + * V4L2_COLORSPACE_BT2020: V4L2_YCBCR_ENC_BT2020 + * + * V4L2_COLORSPACE_SMPTE240M: V4L2_YCBCR_ENC_SMPTE240M + */ + V4L2_YCBCR_ENC_DEFAULT = 0, + + /* ITU-R 601 -- SDTV */ + V4L2_YCBCR_ENC_601 = 1, + + /* Rec. 709 -- HDTV */ + V4L2_YCBCR_ENC_709 = 2, + + /* ITU-R 601/EN 61966-2-4 Extended Gamut -- SDTV */ + V4L2_YCBCR_ENC_XV601 = 3, + + /* Rec. 709/EN 61966-2-4 Extended Gamut -- HDTV */ + V4L2_YCBCR_ENC_XV709 = 4, + + /* sYCC (Y'CbCr encoding of sRGB) */ + V4L2_YCBCR_ENC_SYCC = 5, + + /* BT.2020 Non-constant Luminance Y'CbCr */ + V4L2_YCBCR_ENC_BT2020 = 6, + + /* BT.2020 Constant Luminance Y'CbcCrc */ + V4L2_YCBCR_ENC_BT2020_CONST_LUM = 7, + + /* SMPTE 240M -- Obsolete HDTV */ + V4L2_YCBCR_ENC_SMPTE240M = 8, }; +/* + * Determine how YCBCR_ENC_DEFAULT should map to a proper Y'CbCr encoding. + * This depends on the colorspace. + */ +#define V4L2_MAP_YCBCR_ENC_DEFAULT(colsp) \ + ((colsp) == V4L2_COLORSPACE_REC709 ? V4L2_YCBCR_ENC_709 : \ + ((colsp) == V4L2_COLORSPACE_BT2020 ? V4L2_YCBCR_ENC_BT2020 : \ + ((colsp) == V4L2_COLORSPACE_SMPTE240M ? V4L2_YCBCR_ENC_SMPTE240M : \ + V4L2_YCBCR_ENC_601))) + +enum v4l2_quantization { + /* + * The default for R'G'B' quantization is always full range, except + * for the BT2020 colorspace. For Y'CbCr the quantization is always + * limited range, except for COLORSPACE_JPEG, SYCC, XV601 or XV709: + * those are full range. + */ + V4L2_QUANTIZATION_DEFAULT = 0, + V4L2_QUANTIZATION_FULL_RANGE = 1, + V4L2_QUANTIZATION_LIM_RANGE = 2, +}; + +/* + * Determine how QUANTIZATION_DEFAULT should map to a proper quantization. + * This depends on whether the image is RGB or not, the colorspace and the + * Y'CbCr encoding. + */ +#define V4L2_MAP_QUANTIZATION_DEFAULT(is_rgb, colsp, ycbcr_enc) \ + (((is_rgb) && (colsp) == V4L2_COLORSPACE_BT2020) ? V4L2_QUANTIZATION_LIM_RANGE : \ + (((is_rgb) || (ycbcr_enc) == V4L2_YCBCR_ENC_XV601 || \ + (ycbcr_enc) == V4L2_YCBCR_ENC_XV709 || (colsp) == V4L2_COLORSPACE_JPEG) ? \ + V4L2_QUANTIZATION_FULL_RANGE : V4L2_QUANTIZATION_LIM_RANGE)) + enum v4l2_priority { V4L2_PRIORITY_UNSET = 0, /* not initialized */ V4L2_PRIORITY_BACKGROUND = 1, @@ -205,8 +362,8 @@ enum v4l2_priority { struct v4l2_rect { __s32 left; __s32 top; - __s32 width; - __s32 height; + __u32 width; + __u32 height; }; struct v4l2_fract { @@ -262,6 +419,9 @@ struct v4l2_capability { #define V4L2_CAP_RADIO 0x00040000 /* is a radio device */ #define V4L2_CAP_MODULATOR 0x00080000 /* has a modulator */ +#define V4L2_CAP_SDR_CAPTURE 0x00100000 /* Is a SDR capture device */ +#define V4L2_CAP_EXT_PIX_FORMAT 0x00200000 /* Supports the extended pixel format */ + #define V4L2_CAP_READWRITE 0x01000000 /* read/write systemcalls */ #define V4L2_CAP_ASYNCIO 0x02000000 /* async I/O */ #define V4L2_CAP_STREAMING 0x04000000 /* streaming I/O ioctls */ @@ -280,6 +440,10 @@ struct v4l2_pix_format { __u32 sizeimage; __u32 colorspace; /* enum v4l2_colorspace */ __u32 priv; /* private data, depends on pixelformat */ + __u32 flags; /* format flags (V4L2_PIX_FMT_FLAG_*) */ + __u32 ycbcr_enc; /* enum v4l2_ycbcr_encoding */ + __u32 quantization; /* enum v4l2_quantization */ + __u32 xfer_func; /* enum v4l2_xfer_func */ }; /* Pixel format FOURCC depth Description */ @@ -287,15 +451,25 @@ struct v4l2_pix_format { /* RGB formats */ #define V4L2_PIX_FMT_RGB332 v4l2_fourcc('R', 'G', 'B', '1') /* 8 RGB-3-3-2 */ #define V4L2_PIX_FMT_RGB444 v4l2_fourcc('R', '4', '4', '4') /* 16 xxxxrrrr ggggbbbb */ +#define V4L2_PIX_FMT_ARGB444 v4l2_fourcc('A', 'R', '1', '2') /* 16 aaaarrrr ggggbbbb */ +#define V4L2_PIX_FMT_XRGB444 v4l2_fourcc('X', 'R', '1', '2') /* 16 xxxxrrrr ggggbbbb */ #define V4L2_PIX_FMT_RGB555 v4l2_fourcc('R', 'G', 'B', 'O') /* 16 RGB-5-5-5 */ +#define V4L2_PIX_FMT_ARGB555 v4l2_fourcc('A', 'R', '1', '5') /* 16 ARGB-1-5-5-5 */ +#define V4L2_PIX_FMT_XRGB555 v4l2_fourcc('X', 'R', '1', '5') /* 16 XRGB-1-5-5-5 */ #define V4L2_PIX_FMT_RGB565 v4l2_fourcc('R', 'G', 'B', 'P') /* 16 RGB-5-6-5 */ #define V4L2_PIX_FMT_RGB555X v4l2_fourcc('R', 'G', 'B', 'Q') /* 16 RGB-5-5-5 BE */ +#define V4L2_PIX_FMT_ARGB555X v4l2_fourcc_be('A', 'R', '1', '5') /* 16 ARGB-5-5-5 BE */ +#define V4L2_PIX_FMT_XRGB555X v4l2_fourcc_be('X', 'R', '1', '5') /* 16 XRGB-5-5-5 BE */ #define V4L2_PIX_FMT_RGB565X v4l2_fourcc('R', 'G', 'B', 'R') /* 16 RGB-5-6-5 BE */ #define V4L2_PIX_FMT_BGR666 v4l2_fourcc('B', 'G', 'R', 'H') /* 18 BGR-6-6-6 */ #define V4L2_PIX_FMT_BGR24 v4l2_fourcc('B', 'G', 'R', '3') /* 24 BGR-8-8-8 */ #define V4L2_PIX_FMT_RGB24 v4l2_fourcc('R', 'G', 'B', '3') /* 24 RGB-8-8-8 */ #define V4L2_PIX_FMT_BGR32 v4l2_fourcc('B', 'G', 'R', '4') /* 32 BGR-8-8-8-8 */ +#define V4L2_PIX_FMT_ABGR32 v4l2_fourcc('A', 'R', '2', '4') /* 32 BGRA-8-8-8-8 */ +#define V4L2_PIX_FMT_XBGR32 v4l2_fourcc('X', 'R', '2', '4') /* 32 BGRX-8-8-8-8 */ #define V4L2_PIX_FMT_RGB32 v4l2_fourcc('R', 'G', 'B', '4') /* 32 RGB-8-8-8-8 */ +#define V4L2_PIX_FMT_ARGB32 v4l2_fourcc('B', 'A', '2', '4') /* 32 ARGB-8-8-8-8 */ +#define V4L2_PIX_FMT_XRGB32 v4l2_fourcc('B', 'X', '2', '4') /* 32 XRGB-8-8-8-8 */ /* Grey formats */ #define V4L2_PIX_FMT_GREY v4l2_fourcc('G', 'R', 'E', 'Y') /* 8 Greyscale */ @@ -304,6 +478,7 @@ struct v4l2_pix_format { #define V4L2_PIX_FMT_Y10 v4l2_fourcc('Y', '1', '0', ' ') /* 10 Greyscale */ #define V4L2_PIX_FMT_Y12 v4l2_fourcc('Y', '1', '2', ' ') /* 12 Greyscale */ #define V4L2_PIX_FMT_Y16 v4l2_fourcc('Y', '1', '6', ' ') /* 16 Greyscale */ +#define V4L2_PIX_FMT_Y16_BE v4l2_fourcc_be('Y', '1', '6', ' ') /* 16 Greyscale BE */ /* Grey bit-packed formats */ #define V4L2_PIX_FMT_Y10BPACK v4l2_fourcc('Y', '1', '0', 'B') /* 10 Greyscale bit-packed */ @@ -364,10 +539,11 @@ struct v4l2_pix_format { #define V4L2_PIX_FMT_SGBRG10 v4l2_fourcc('G', 'B', '1', '0') /* 10 GBGB.. RGRG.. */ #define V4L2_PIX_FMT_SGRBG10 v4l2_fourcc('B', 'A', '1', '0') /* 10 GRGR.. BGBG.. */ #define V4L2_PIX_FMT_SRGGB10 v4l2_fourcc('R', 'G', '1', '0') /* 10 RGRG.. GBGB.. */ -#define V4L2_PIX_FMT_SBGGR12 v4l2_fourcc('B', 'G', '1', '2') /* 12 BGBG.. GRGR.. */ -#define V4L2_PIX_FMT_SGBRG12 v4l2_fourcc('G', 'B', '1', '2') /* 12 GBGB.. RGRG.. */ -#define V4L2_PIX_FMT_SGRBG12 v4l2_fourcc('B', 'A', '1', '2') /* 12 GRGR.. BGBG.. */ -#define V4L2_PIX_FMT_SRGGB12 v4l2_fourcc('R', 'G', '1', '2') /* 12 RGRG.. GBGB.. */ + /* 10bit raw bayer packed, 5 bytes for every 4 pixels */ +#define V4L2_PIX_FMT_SBGGR10P v4l2_fourcc('p', 'B', 'A', 'A') +#define V4L2_PIX_FMT_SGBRG10P v4l2_fourcc('p', 'G', 'A', 'A') +#define V4L2_PIX_FMT_SGRBG10P v4l2_fourcc('p', 'g', 'A', 'A') +#define V4L2_PIX_FMT_SRGGB10P v4l2_fourcc('p', 'R', 'A', 'A') /* 10bit raw bayer a-law compressed to 8 bits */ #define V4L2_PIX_FMT_SBGGR10ALAW8 v4l2_fourcc('a', 'B', 'A', '8') #define V4L2_PIX_FMT_SGBRG10ALAW8 v4l2_fourcc('a', 'G', 'A', '8') @@ -378,10 +554,10 @@ struct v4l2_pix_format { #define V4L2_PIX_FMT_SGBRG10DPCM8 v4l2_fourcc('b', 'G', 'A', '8') #define V4L2_PIX_FMT_SGRBG10DPCM8 v4l2_fourcc('B', 'D', '1', '0') #define V4L2_PIX_FMT_SRGGB10DPCM8 v4l2_fourcc('b', 'R', 'A', '8') - /* - * 10bit raw bayer, expanded to 16 bits - * xxxxrrrrrrrrrrxxxxgggggggggg xxxxggggggggggxxxxbbbbbbbbbb... - */ +#define V4L2_PIX_FMT_SBGGR12 v4l2_fourcc('B', 'G', '1', '2') /* 12 BGBG.. GRGR.. */ +#define V4L2_PIX_FMT_SGBRG12 v4l2_fourcc('G', 'B', '1', '2') /* 12 GBGB.. RGRG.. */ +#define V4L2_PIX_FMT_SGRBG12 v4l2_fourcc('B', 'A', '1', '2') /* 12 GRGR.. BGBG.. */ +#define V4L2_PIX_FMT_SRGGB12 v4l2_fourcc('R', 'G', '1', '2') /* 12 RGRG.. GBGB.. */ #define V4L2_PIX_FMT_SBGGR16 v4l2_fourcc('B', 'Y', 'R', '2') /* 16 BGBG.. GRGR.. */ /* compressed formats */ @@ -429,6 +605,19 @@ struct v4l2_pix_format { #define V4L2_PIX_FMT_SE401 v4l2_fourcc('S', '4', '0', '1') /* se401 janggu compressed rgb */ #define V4L2_PIX_FMT_S5C_UYVY_JPG v4l2_fourcc('S', '5', 'C', 'I') /* S5C73M3 interleaved UYVY/JPEG */ +/* SDR formats - used only for Software Defined Radio devices */ +#define V4L2_SDR_FMT_CU8 v4l2_fourcc('C', 'U', '0', '8') /* IQ u8 */ +#define V4L2_SDR_FMT_CU16LE v4l2_fourcc('C', 'U', '1', '6') /* IQ u16le */ +#define V4L2_SDR_FMT_CS8 v4l2_fourcc('C', 'S', '0', '8') /* complex s8 */ +#define V4L2_SDR_FMT_CS14LE v4l2_fourcc('C', 'S', '1', '4') /* complex s14le */ +#define V4L2_SDR_FMT_RU12LE v4l2_fourcc('R', 'U', '1', '2') /* real u12le */ + +/* priv field value to indicates that subsequent fields are valid. */ +#define V4L2_PIX_FMT_PRIV_MAGIC 0xfeedcafe + +/* Flags */ +#define V4L2_PIX_FMT_FLAG_PREMUL_ALPHA 0x00000001 + /* * F O R M A T E N U M E R A T I O N */ @@ -638,7 +827,6 @@ struct v4l2_plane { * @length: size in bytes of the buffer (NOT its payload) for single-plane * buffers (when type != *_MPLANE); number of elements in the * planes array for multi-plane buffers - * @input: input number from which the video data has has been captured * * Contains data exchanged by application and driver using one of the Streaming * I/O methods. @@ -667,24 +855,38 @@ struct v4l2_buffer { }; /* Flags for 'flags' field */ -#define V4L2_BUF_FLAG_MAPPED 0x0001 /* Buffer is mapped (flag) */ -#define V4L2_BUF_FLAG_QUEUED 0x0002 /* Buffer is queued for processing */ -#define V4L2_BUF_FLAG_DONE 0x0004 /* Buffer is ready */ -#define V4L2_BUF_FLAG_KEYFRAME 0x0008 /* Image is a keyframe (I-frame) */ -#define V4L2_BUF_FLAG_PFRAME 0x0010 /* Image is a P-frame */ -#define V4L2_BUF_FLAG_BFRAME 0x0020 /* Image is a B-frame */ +/* Buffer is mapped (flag) */ +#define V4L2_BUF_FLAG_MAPPED 0x00000001 +/* Buffer is queued for processing */ +#define V4L2_BUF_FLAG_QUEUED 0x00000002 +/* Buffer is ready */ +#define V4L2_BUF_FLAG_DONE 0x00000004 +/* Image is a keyframe (I-frame) */ +#define V4L2_BUF_FLAG_KEYFRAME 0x00000008 +/* Image is a P-frame */ +#define V4L2_BUF_FLAG_PFRAME 0x00000010 +/* Image is a B-frame */ +#define V4L2_BUF_FLAG_BFRAME 0x00000020 /* Buffer is ready, but the data contained within is corrupted. */ -#define V4L2_BUF_FLAG_ERROR 0x0040 -#define V4L2_BUF_FLAG_TIMECODE 0x0100 /* timecode field is valid */ -#define V4L2_BUF_FLAG_PREPARED 0x0400 /* Buffer is prepared for queuing */ +#define V4L2_BUF_FLAG_ERROR 0x00000040 +/* timecode field is valid */ +#define V4L2_BUF_FLAG_TIMECODE 0x00000100 +/* Buffer is prepared for queuing */ +#define V4L2_BUF_FLAG_PREPARED 0x00000400 /* Cache handling flags */ -#define V4L2_BUF_FLAG_NO_CACHE_INVALIDATE 0x0800 -#define V4L2_BUF_FLAG_NO_CACHE_CLEAN 0x1000 +#define V4L2_BUF_FLAG_NO_CACHE_INVALIDATE 0x00000800 +#define V4L2_BUF_FLAG_NO_CACHE_CLEAN 0x00001000 /* Timestamp type */ -#define V4L2_BUF_FLAG_TIMESTAMP_MASK 0xe000 -#define V4L2_BUF_FLAG_TIMESTAMP_UNKNOWN 0x0000 -#define V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC 0x2000 -#define V4L2_BUF_FLAG_TIMESTAMP_COPY 0x4000 +#define V4L2_BUF_FLAG_TIMESTAMP_MASK 0x0000e000 +#define V4L2_BUF_FLAG_TIMESTAMP_UNKNOWN 0x00000000 +#define V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC 0x00002000 +#define V4L2_BUF_FLAG_TIMESTAMP_COPY 0x00004000 +/* Timestamp sources. */ +#define V4L2_BUF_FLAG_TSTAMP_SRC_MASK 0x00070000 +#define V4L2_BUF_FLAG_TSTAMP_SRC_EOF 0x00000000 +#define V4L2_BUF_FLAG_TSTAMP_SRC_SOE 0x00010000 +/* mem2mem encoder/decoder */ +#define V4L2_BUF_FLAG_LAST 0x00100000 /** * struct v4l2_exportbuffer - export of video buffer as DMABUF file descriptor @@ -722,7 +924,16 @@ struct v4l2_framebuffer { /* FIXME: in theory we should pass something like PCI device + memory * region + offset instead of some physical address */ void *base; - struct v4l2_pix_format fmt; + struct { + __u32 width; + __u32 height; + __u32 pixelformat; + __u32 field; /* enum v4l2_field */ + __u32 bytesperline; /* for padding, zero if unused */ + __u32 sizeimage; + __u32 colorspace; /* enum v4l2_colorspace */ + __u32 priv; /* reserved field, set to 0 */ + } fmt; }; /* Flags for the 'capability' field. Read only */ #define V4L2_FBUF_CAP_EXTERNOVERLAY 0x0001 @@ -744,16 +955,16 @@ struct v4l2_framebuffer { struct v4l2_clip { struct v4l2_rect c; - struct v4l2_clip *next; + struct v4l2_clip __user *next; }; struct v4l2_window { struct v4l2_rect w; __u32 field; /* enum v4l2_field */ __u32 chromakey; - struct v4l2_clip *clips; + struct v4l2_clip __user *clips; __u32 clipcount; - void *bitmap; + void __user *bitmap; __u8 global_alpha; }; @@ -1054,17 +1265,23 @@ struct v4l2_bt_timings { exactly the same number of half-lines. Whether half-lines can be detected or used depends on the hardware. */ #define V4L2_DV_FL_HALF_LINE (1 << 3) +/* If set, then this is a Consumer Electronics (CE) video format. Such formats + * differ from other formats (commonly called IT formats) in that if RGB + * encoding is used then by default the RGB values use limited range (i.e. + * use the range 16-235) as opposed to 0-255. All formats defined in CEA-861 + * except for the 640x480 format are CE formats. */ +#define V4L2_DV_FL_IS_CE_VIDEO (1 << 4) /* A few useful defines to calculate the total blanking and frame sizes */ #define V4L2_DV_BT_BLANKING_WIDTH(bt) \ - (bt->hfrontporch + bt->hsync + bt->hbackporch) + ((bt)->hfrontporch + (bt)->hsync + (bt)->hbackporch) #define V4L2_DV_BT_FRAME_WIDTH(bt) \ - (bt->width + V4L2_DV_BT_BLANKING_WIDTH(bt)) + ((bt)->width + V4L2_DV_BT_BLANKING_WIDTH(bt)) #define V4L2_DV_BT_BLANKING_HEIGHT(bt) \ - (bt->vfrontporch + bt->vsync + bt->vbackporch + \ - bt->il_vfrontporch + bt->il_vsync + bt->il_vbackporch) + ((bt)->vfrontporch + (bt)->vsync + (bt)->vbackporch + \ + (bt)->il_vfrontporch + (bt)->il_vsync + (bt)->il_vbackporch) #define V4L2_DV_BT_FRAME_HEIGHT(bt) \ - (bt->height + V4L2_DV_BT_BLANKING_HEIGHT(bt)) + ((bt)->height + V4L2_DV_BT_BLANKING_HEIGHT(bt)) /** struct v4l2_dv_timings - DV timings * @type: the type of the timings @@ -1084,12 +1301,15 @@ struct v4l2_dv_timings { /** struct v4l2_enum_dv_timings - DV timings enumeration * @index: enumeration index + * @pad: the pad number for which to enumerate timings (used with + * v4l-subdev nodes only) * @reserved: must be zeroed * @timings: the timings for the given index */ struct v4l2_enum_dv_timings { __u32 index; - __u32 reserved[3]; + __u32 pad; + __u32 reserved[2]; struct v4l2_dv_timings timings; }; @@ -1127,11 +1347,14 @@ struct v4l2_bt_timings_cap { /** struct v4l2_dv_timings_cap - DV timings capabilities * @type: the type of the timings (same as in struct v4l2_dv_timings) + * @pad: the pad number for which to query capabilities (used with + * v4l-subdev nodes only) * @bt: the BT656/1120 timings capabilities */ struct v4l2_dv_timings_cap { __u32 type; - __u32 reserved[3]; + __u32 pad; + __u32 reserved[2]; union { struct v4l2_bt_timings_cap bt; __u32 raw_data[32]; @@ -1186,6 +1409,7 @@ struct v4l2_input { #define V4L2_IN_CAP_DV_TIMINGS 0x00000002 /* Supports S_DV_TIMINGS */ #define V4L2_IN_CAP_CUSTOM_TIMINGS V4L2_IN_CAP_DV_TIMINGS /* For compatibility */ #define V4L2_IN_CAP_STD 0x00000004 /* Supports S_STD */ +#define V4L2_IN_CAP_NATIVE_SIZE 0x00000008 /* Supports setting native size */ /* * V I D E O O U T P U T S @@ -1209,6 +1433,7 @@ struct v4l2_output { #define V4L2_OUT_CAP_DV_TIMINGS 0x00000002 /* Supports S_DV_TIMINGS */ #define V4L2_OUT_CAP_CUSTOM_TIMINGS V4L2_OUT_CAP_DV_TIMINGS /* For compatibility */ #define V4L2_OUT_CAP_STD 0x00000004 /* Supports S_STD */ +#define V4L2_OUT_CAP_NATIVE_SIZE 0x00000008 /* Supports setting native size */ /* * C O N T R O L S @@ -1225,7 +1450,11 @@ struct v4l2_ext_control { union { __s32 value; __s64 value64; - char *string; + char __user *string; + __u8 __user *p_u8; + __u16 __user *p_u16; + __u32 __user *p_u32; + void __user *ptr; }; } __attribute__ ((packed)); @@ -1240,6 +1469,7 @@ struct v4l2_ext_controls { #define V4L2_CTRL_ID_MASK (0x0fffffff) #define V4L2_CTRL_ID2CLASS(id) ((id) & 0x0fff0000UL) #define V4L2_CTRL_DRIVER_PRIV(id) (((id) & 0xffff) >= 0x1000) +#define V4L2_CTRL_MAX_DIMS (4) enum v4l2_ctrl_type { V4L2_CTRL_TYPE_INTEGER = 1, @@ -1250,7 +1480,13 @@ enum v4l2_ctrl_type { V4L2_CTRL_TYPE_CTRL_CLASS = 6, V4L2_CTRL_TYPE_STRING = 7, V4L2_CTRL_TYPE_BITMASK = 8, - V4L2_CTRL_TYPE_INTEGER_MENU = 9, + V4L2_CTRL_TYPE_INTEGER_MENU = 9, + + /* Compound types are >= 0x0100 */ + V4L2_CTRL_COMPOUND_TYPES = 0x0100, + V4L2_CTRL_TYPE_U8 = 0x0100, + V4L2_CTRL_TYPE_U16 = 0x0101, + V4L2_CTRL_TYPE_U32 = 0x0102, }; /* Used in the VIDIOC_QUERYCTRL ioctl for querying controls */ @@ -1266,6 +1502,23 @@ struct v4l2_queryctrl { __u32 reserved[2]; }; +/* Used in the VIDIOC_QUERY_EXT_CTRL ioctl for querying extended controls */ +struct v4l2_query_ext_ctrl { + __u32 id; + __u32 type; + char name[32]; + __s64 minimum; + __s64 maximum; + __u64 step; + __s64 default_value; + __u32 flags; + __u32 elem_size; + __u32 elems; + __u32 nr_of_dims; + __u32 dims[V4L2_CTRL_MAX_DIMS]; + __u32 reserved[32]; +}; + /* Used in the VIDIOC_QUERYMENU ioctl for querying menu items */ struct v4l2_querymenu { __u32 id; @@ -1286,9 +1539,12 @@ struct v4l2_querymenu { #define V4L2_CTRL_FLAG_SLIDER 0x0020 #define V4L2_CTRL_FLAG_WRITE_ONLY 0x0040 #define V4L2_CTRL_FLAG_VOLATILE 0x0080 +#define V4L2_CTRL_FLAG_HAS_PAYLOAD 0x0100 +#define V4L2_CTRL_FLAG_EXECUTE_ON_WRITE 0x0200 -/* Query flag, to be ORed with the control ID */ +/* Query flags, to be ORed with the control ID */ #define V4L2_CTRL_FLAG_NEXT_CTRL 0x80000000 +#define V4L2_CTRL_FLAG_NEXT_COMPOUND 0x40000000 /* User-class control IDs defined by V4L2 */ #define V4L2_CID_MAX_CTRLS 1024 @@ -1337,6 +1593,7 @@ struct v4l2_modulator { #define V4L2_TUNER_CAP_RDS_CONTROLS 0x0200 #define V4L2_TUNER_CAP_FREQ_BANDS 0x0400 #define V4L2_TUNER_CAP_HWSEEK_PROG_LIM 0x0800 +#define V4L2_TUNER_CAP_1HZ 0x1000 /* Flags for the 'rxsubchans' field */ #define V4L2_TUNER_SUB_MONO 0x0001 @@ -1553,6 +1810,12 @@ struct v4l2_vbi_format { #define V4L2_VBI_UNSYNC (1 << 0) #define V4L2_VBI_INTERLACED (1 << 1) +/* ITU-R start lines for each field */ +#define V4L2_VBI_ITU_525_F1_START (1) +#define V4L2_VBI_ITU_525_F2_START (264) +#define V4L2_VBI_ITU_625_F1_START (1) +#define V4L2_VBI_ITU_625_F2_START (314) + /* Sliced VBI * * This implements is a proposal V4L2 API to allow SLICED VBI @@ -1663,8 +1926,8 @@ struct v4l2_mpeg_vbi_fmt_ivtv { */ struct v4l2_plane_pix_format { __u32 sizeimage; - __u16 bytesperline; - __u16 reserved[7]; + __u32 bytesperline; + __u16 reserved[6]; } __attribute__ ((packed)); /** @@ -1676,6 +1939,10 @@ struct v4l2_plane_pix_format { * @colorspace: enum v4l2_colorspace; supplemental to pixelformat * @plane_fmt: per-plane information * @num_planes: number of planes for this format + * @flags: format flags (V4L2_PIX_FMT_FLAG_*) + * @ycbcr_enc: enum v4l2_ycbcr_encoding, Y'CbCr encoding + * @quantization: enum v4l2_quantization, colorspace quantization + * @xfer_func: enum v4l2_xfer_func, colorspace transfer function */ struct v4l2_pix_format_mplane { __u32 width; @@ -1686,7 +1953,22 @@ struct v4l2_pix_format_mplane { struct v4l2_plane_pix_format plane_fmt[VIDEO_MAX_PLANES]; __u8 num_planes; - __u8 reserved[11]; + __u8 flags; + __u8 ycbcr_enc; + __u8 quantization; + __u8 xfer_func; + __u8 reserved[7]; +} __attribute__ ((packed)); + +/** + * struct v4l2_sdr_format - SDR format definition + * @pixelformat: little endian four character code (fourcc) + * @buffersize: maximum size in bytes required for data + */ +struct v4l2_sdr_format { + __u32 pixelformat; + __u32 buffersize; + __u8 reserved[24]; } __attribute__ ((packed)); /** @@ -1707,6 +1989,7 @@ struct v4l2_format { struct v4l2_window win; /* V4L2_BUF_TYPE_VIDEO_OVERLAY */ struct v4l2_vbi_format vbi; /* V4L2_BUF_TYPE_VBI_CAPTURE */ struct v4l2_sliced_vbi_format sliced; /* V4L2_BUF_TYPE_SLICED_VBI_CAPTURE */ + struct v4l2_sdr_format sdr; /* V4L2_BUF_TYPE_SDR_CAPTURE */ __u8 raw_data[200]; /* user-defined */ } fmt; }; @@ -1731,6 +2014,8 @@ struct v4l2_streamparm { #define V4L2_EVENT_EOS 2 #define V4L2_EVENT_CTRL 3 #define V4L2_EVENT_FRAME_SYNC 4 +#define V4L2_EVENT_SOURCE_CHANGE 5 +#define V4L2_EVENT_MOTION_DET 6 #define V4L2_EVENT_PRIVATE_START 0x08000000 /* Payload for V4L2_EVENT_VSYNC */ @@ -1762,12 +2047,35 @@ struct v4l2_event_frame_sync { __u32 frame_sequence; }; +#define V4L2_EVENT_SRC_CH_RESOLUTION (1 << 0) + +struct v4l2_event_src_change { + __u32 changes; +}; + +#define V4L2_EVENT_MD_FL_HAVE_FRAME_SEQ (1 << 0) + +/** + * struct v4l2_event_motion_det - motion detection event + * @flags: if V4L2_EVENT_MD_FL_HAVE_FRAME_SEQ is set, then the + * frame_sequence field is valid. + * @frame_sequence: the frame sequence number associated with this event. + * @region_mask: which regions detected motion. + */ +struct v4l2_event_motion_det { + __u32 flags; + __u32 frame_sequence; + __u32 region_mask; +}; + struct v4l2_event { __u32 type; union { struct v4l2_event_vsync vsync; struct v4l2_event_ctrl ctrl; struct v4l2_event_frame_sync frame_sync; + struct v4l2_event_src_change src_change; + struct v4l2_event_motion_det motion_det; __u8 data[64]; } u; __u32 pending; @@ -1883,6 +2191,8 @@ struct v4l2_create_buffers { #define VIDIOC_QUERYMENU _IOWR('V', 37, struct v4l2_querymenu) #define VIDIOC_G_INPUT _IOR('V', 38, int) #define VIDIOC_S_INPUT _IOWR('V', 39, int) +#define VIDIOC_G_EDID _IOWR('V', 40, struct v4l2_edid) +#define VIDIOC_S_EDID _IOWR('V', 41, struct v4l2_edid) #define VIDIOC_G_OUTPUT _IOR('V', 46, int) #define VIDIOC_S_OUTPUT _IOWR('V', 47, int) #define VIDIOC_ENUMOUTPUT _IOWR('V', 48, struct v4l2_output) @@ -1956,6 +2266,8 @@ struct v4l2_create_buffers { Never use these in applications! */ #define VIDIOC_DBG_G_CHIP_INFO _IOWR('V', 102, struct v4l2_dbg_chip_info) +#define VIDIOC_QUERY_EXT_CTRL _IOWR('V', 103, struct v4l2_query_ext_ctrl) + /* Reminder: when adding new ioctls please add support for them to drivers/media/video/v4l2-compat-ioctl32.c as well! */ diff --git a/sys/v4l2/gstv4l2allocator.c b/sys/v4l2/gstv4l2allocator.c index b3d02ebc7..6dd39bf3c 100644 --- a/sys/v4l2/gstv4l2allocator.c +++ b/sys/v4l2/gstv4l2allocator.c @@ -1269,8 +1269,9 @@ done: return ret; } -GstV4l2MemoryGroup * -gst_v4l2_allocator_dqbuf (GstV4l2Allocator * allocator) +GstFlowReturn +gst_v4l2_allocator_dqbuf (GstV4l2Allocator * allocator, + GstV4l2MemoryGroup ** group_out) { struct v4l2_buffer buffer = { 0 }; struct v4l2_plane planes[VIDEO_MAX_PLANES] = { {0} }; @@ -1278,7 +1279,7 @@ gst_v4l2_allocator_dqbuf (GstV4l2Allocator * allocator) GstV4l2MemoryGroup *group = NULL; - g_return_val_if_fail (g_atomic_int_get (&allocator->active), FALSE); + g_return_val_if_fail (g_atomic_int_get (&allocator->active), GST_FLOW_ERROR); buffer.type = allocator->type; buffer.memory = allocator->memory; @@ -1296,7 +1297,7 @@ gst_v4l2_allocator_dqbuf (GstV4l2Allocator * allocator) if (!IS_QUEUED (group->buffer)) { GST_ERROR_OBJECT (allocator, "buffer %i was not queued, this indicate a driver bug.", buffer.index); - return NULL; + return GST_FLOW_ERROR; } group->buffer = buffer; @@ -1334,9 +1335,15 @@ gst_v4l2_allocator_dqbuf (GstV4l2Allocator * allocator) for (i = 0; i < group->n_mem; i++) gst_memory_unref (group->mem[i]); - return group; + *group_out = group; + return GST_FLOW_OK; error: + if (errno == EPIPE) { + GST_DEBUG_OBJECT (allocator, "broken pipe signals last buffer"); + return GST_FLOW_EOS; + } + GST_ERROR_OBJECT (allocator, "failed dequeuing a %s buffer: %s", memory_type_to_str (allocator->memory), g_strerror (errno)); @@ -1378,7 +1385,7 @@ error: break; } - return NULL; + return GST_FLOW_ERROR; } void diff --git a/sys/v4l2/gstv4l2allocator.h b/sys/v4l2/gstv4l2allocator.h index 71c64a407..a26038977 100644 --- a/sys/v4l2/gstv4l2allocator.h +++ b/sys/v4l2/gstv4l2allocator.h @@ -148,7 +148,8 @@ void gst_v4l2_allocator_flush (GstV4l2Allocator * alloc gboolean gst_v4l2_allocator_qbuf (GstV4l2Allocator * allocator, GstV4l2MemoryGroup * group); -GstV4l2MemoryGroup* gst_v4l2_allocator_dqbuf (GstV4l2Allocator * allocator); +GstFlowReturn gst_v4l2_allocator_dqbuf (GstV4l2Allocator * allocator, + GstV4l2MemoryGroup ** group); void gst_v4l2_allocator_reset_group (GstV4l2Allocator * allocator, GstV4l2MemoryGroup * group); diff --git a/sys/v4l2/gstv4l2bufferpool.c b/sys/v4l2/gstv4l2bufferpool.c index 7c963cc57..bcf167d58 100644 --- a/sys/v4l2/gstv4l2bufferpool.c +++ b/sys/v4l2/gstv4l2bufferpool.c @@ -1139,8 +1139,10 @@ gst_v4l2_buffer_pool_dqbuf (GstV4l2BufferPool * pool, GstBuffer ** buffer) GST_LOG_OBJECT (pool, "dequeueing a buffer"); - group = gst_v4l2_allocator_dqbuf (pool->vallocator); - if (group == NULL) + res = gst_v4l2_allocator_dqbuf (pool->vallocator, &group); + if (res == GST_FLOW_EOS) + goto eos; + if (res != GST_FLOW_OK) goto dqbuf_failed; /* get our GstBuffer with that index from the pool, if the buffer was @@ -1261,6 +1263,10 @@ poll_failed: GST_DEBUG_OBJECT (pool, "poll error %s", gst_flow_get_name (res)); return res; } +eos: + { + return GST_FLOW_EOS; + } dqbuf_failed: { return GST_FLOW_ERROR; diff --git a/sys/v4l2/gstv4l2object.c b/sys/v4l2/gstv4l2object.c index d76b9a2c6..ce2882d0c 100644 --- a/sys/v4l2/gstv4l2object.c +++ b/sys/v4l2/gstv4l2object.c @@ -1686,10 +1686,12 @@ gst_v4l2_object_get_interlace_mode (enum v4l2_field field, static gboolean gst_v4l2_object_get_colorspace (enum v4l2_colorspace colorspace, - GstVideoColorimetry * cinfo) + enum v4l2_quantization range, enum v4l2_ycbcr_encoding matrix, + enum v4l2_xfer_func transfer, GstVideoColorimetry * cinfo) { - gboolean ret = FALSE; + gboolean ret = TRUE; + /* First step, set the defaults for each primaries */ switch (colorspace) { case V4L2_COLORSPACE_SMPTE170M: ret = gst_video_colorimetry_from_string (cinfo, @@ -1699,19 +1701,128 @@ gst_v4l2_object_get_colorspace (enum v4l2_colorspace colorspace, ret = gst_video_colorimetry_from_string (cinfo, GST_VIDEO_COLORIMETRY_BT709); break; + case V4L2_COLORSPACE_SRGB: + case V4L2_COLORSPACE_JPEG: + /* This is in fact sYCC */ + cinfo->range = GST_VIDEO_COLOR_RANGE_0_255; + cinfo->matrix = GST_VIDEO_COLOR_MATRIX_BT601; + cinfo->transfer = GST_VIDEO_TRANSFER_SRGB; + cinfo->primaries = GST_VIDEO_COLOR_PRIMARIES_BT709; + break; + case V4L2_COLORSPACE_ADOBERGB: + GST_FIXME ("AdobeRGB is not yet supported by GStreamer"); + /* We are missing the primaries and the transfer function */ + ret = FALSE; + break; + case V4L2_COLORSPACE_BT2020: + ret = gst_video_colorimetry_from_string (cinfo, + GST_VIDEO_COLORIMETRY_BT2020); + break; case V4L2_COLORSPACE_SMPTE240M: ret = gst_video_colorimetry_from_string (cinfo, GST_VIDEO_COLORIMETRY_SMPTE240M); break; - case V4L2_COLORSPACE_SRGB: - ret = gst_video_colorimetry_from_string (cinfo, - GST_VIDEO_COLORIMETRY_SRGB); + case V4L2_COLORSPACE_470_SYSTEM_M: + cinfo->range = GST_VIDEO_COLOR_RANGE_16_235; + cinfo->matrix = GST_VIDEO_COLOR_MATRIX_BT601; + cinfo->transfer = GST_VIDEO_TRANSFER_BT709; + cinfo->primaries = GST_VIDEO_COLOR_PRIMARIES_BT470M; + break; + case V4L2_COLORSPACE_470_SYSTEM_BG: + cinfo->range = GST_VIDEO_COLOR_RANGE_16_235; + cinfo->matrix = GST_VIDEO_COLOR_MATRIX_BT601; + cinfo->transfer = GST_VIDEO_TRANSFER_BT709; + cinfo->primaries = GST_VIDEO_COLOR_PRIMARIES_BT470BG; + break; + case V4L2_COLORSPACE_RAW: + /* Explicitly unknown */ + cinfo->range = GST_VIDEO_COLOR_RANGE_UNKNOWN; + cinfo->matrix = GST_VIDEO_COLOR_MATRIX_UNKNOWN; + cinfo->transfer = GST_VIDEO_TRANSFER_UNKNOWN; + cinfo->primaries = GST_VIDEO_COLOR_PRIMARIES_UNKNOWN; break; default: GST_DEBUG ("Unknown enum v4l2_colorspace %d", colorspace); ret = FALSE; break; } + + if (!ret) + goto done; + + /* Second step, apply any custom variation */ + switch (range) { + case V4L2_QUANTIZATION_FULL_RANGE: + cinfo->range = GST_VIDEO_COLOR_RANGE_0_255; + break; + case V4L2_QUANTIZATION_LIM_RANGE: + cinfo->range = GST_VIDEO_COLOR_RANGE_16_235; + break; + case V4L2_QUANTIZATION_DEFAULT: + /* nothing, just use defaults for colorspace */ + break; + default: + GST_WARNING ("Unknown enum v4l2_quantization value %d", range); + cinfo->range = GST_VIDEO_COLOR_RANGE_UNKNOWN; + break; + } + + switch (matrix) { + case V4L2_YCBCR_ENC_XV601: + case V4L2_YCBCR_ENC_SYCC: + GST_FIXME ("XV601 and SYCC not defined, assuming 601"); + case V4L2_YCBCR_ENC_601: + cinfo->matrix = GST_VIDEO_COLOR_MATRIX_BT601; + break; + case V4L2_YCBCR_ENC_XV709: + GST_FIXME ("XV709 not defined, assuming 709"); + case V4L2_YCBCR_ENC_709: + cinfo->matrix = GST_VIDEO_COLOR_MATRIX_BT709; + break; + case V4L2_YCBCR_ENC_BT2020_CONST_LUM: + GST_FIXME ("BT2020 with constant lumma is not defined, assuming BT2020"); + case V4L2_YCBCR_ENC_BT2020: + cinfo->matrix = GST_VIDEO_COLOR_MATRIX_BT2020; + break; + case V4L2_YCBCR_ENC_SMPTE240M: + cinfo->matrix = GST_VIDEO_COLOR_MATRIX_SMPTE240M; + break; + case V4L2_YCBCR_ENC_DEFAULT: + /* nothing, just use defaults for colorspace */ + break; + default: + GST_WARNING ("Unknown enum v4l2_ycbcr_encoding value %d", matrix); + cinfo->matrix = GST_VIDEO_COLOR_MATRIX_UNKNOWN; + break; + } + + switch (transfer) { + case V4L2_XFER_FUNC_709: + cinfo->transfer = GST_VIDEO_TRANSFER_BT709; + break; + case V4L2_XFER_FUNC_SRGB: + cinfo->transfer = GST_VIDEO_TRANSFER_SRGB; + break; + case V4L2_XFER_FUNC_ADOBERGB: + GST_FIXME ("AdobeRGB is not yet supported by GStreamer"); + cinfo->transfer = GST_VIDEO_TRANSFER_UNKNOWN; + break; + case V4L2_XFER_FUNC_SMPTE240M: + cinfo->transfer = GST_VIDEO_TRANSFER_SMPTE240M; + break; + case V4L2_XFER_FUNC_NONE: + cinfo->transfer = GST_VIDEO_TRANSFER_GAMMA10; + break; + case V4L2_XFER_FUNC_DEFAULT: + /* nothing, just use defaults for colorspace */ + break; + default: + GST_WARNING ("Unknown enum v4l2_xfer_func value %d", transfer); + cinfo->transfer = GST_VIDEO_TRANSFER_UNKNOWN; + break; + } + +done: return ret; } @@ -1823,13 +1934,24 @@ gst_v4l2_object_add_colorspace (GstV4l2Object * v4l2object, GstStructure * s, if (gst_v4l2_object_try_fmt (v4l2object, &fmt) == 0) { enum v4l2_colorspace colorspace; + enum v4l2_quantization range; + enum v4l2_ycbcr_encoding matrix; + enum v4l2_xfer_func transfer; - if (V4L2_TYPE_IS_MULTIPLANAR (v4l2object->type)) + if (V4L2_TYPE_IS_MULTIPLANAR (v4l2object->type)) { colorspace = fmt.fmt.pix_mp.colorspace; - else + range = fmt.fmt.pix_mp.quantization; + matrix = fmt.fmt.pix_mp.ycbcr_enc; + transfer = fmt.fmt.pix_mp.xfer_func; + } else { colorspace = fmt.fmt.pix.colorspace; + range = fmt.fmt.pix.quantization; + matrix = fmt.fmt.pix.ycbcr_enc; + transfer = fmt.fmt.pix.xfer_func; + } - if (gst_v4l2_object_get_colorspace (colorspace, &cinfo)) { + if (gst_v4l2_object_get_colorspace (colorspace, range, matrix, transfer, + &cinfo)) { g_value_init (&colorimetry, G_TYPE_STRING); g_value_take_string (&colorimetry, gst_video_colorimetry_to_string (&cinfo)); @@ -2692,6 +2814,9 @@ gst_v4l2_object_set_format_full (GstV4l2Object * v4l2object, GstCaps * caps, gint i = 0; gboolean is_mplane; enum v4l2_colorspace colorspace = 0; + enum v4l2_quantization range = 0; + enum v4l2_ycbcr_encoding matrix = 0; + enum v4l2_xfer_func transfer = 0; GST_V4L2_CHECK_OPEN (v4l2object); if (!try_only) @@ -2729,14 +2854,118 @@ gst_v4l2_object_set_format_full (GstV4l2Object * v4l2object, GstCaps * caps, } if (V4L2_TYPE_IS_OUTPUT (v4l2object->type)) { - /* We should set colorspace if we have it */ - if (gst_video_colorimetry_matches (&info.colorimetry, "bt601")) { - colorspace = V4L2_COLORSPACE_SMPTE170M; - } else if (gst_video_colorimetry_matches (&info.colorimetry, "bt709")) { - colorspace = V4L2_COLORSPACE_REC709; - } else if (gst_video_colorimetry_matches (&info.colorimetry, "smpte240m")) { - colorspace = V4L2_COLORSPACE_SMPTE240M; - } else { + /* We first pick th main colorspace from the primaries */ + switch (info.colorimetry.primaries) { + case GST_VIDEO_COLOR_PRIMARIES_BT709: + /* There is two colorspaces using these primaries, use the range to + * differentiate */ + if (info.colorimetry.range == GST_VIDEO_COLOR_RANGE_16_235) + colorspace = V4L2_COLORSPACE_REC709; + else + colorspace = V4L2_COLORSPACE_SRGB; + break; + case GST_VIDEO_COLOR_PRIMARIES_BT470M: + colorspace = V4L2_COLORSPACE_470_SYSTEM_M; + break; + case GST_VIDEO_COLOR_PRIMARIES_BT470BG: + colorspace = V4L2_COLORSPACE_470_SYSTEM_BG; + break; + case GST_VIDEO_COLOR_PRIMARIES_SMPTE170M: + colorspace = V4L2_COLORSPACE_SMPTE170M; + break; + case GST_VIDEO_COLOR_PRIMARIES_SMPTE240M: + colorspace = V4L2_COLORSPACE_SMPTE240M; + break; + + case GST_VIDEO_COLOR_PRIMARIES_FILM: + case GST_VIDEO_COLOR_PRIMARIES_UNKNOWN: + /* We don't know, we will guess */ + break; + + default: + GST_WARNING_OBJECT (v4l2object->element, + "Unknown colorimetry primaries %d", info.colorimetry.primaries); + break; + } + + switch (info.colorimetry.range) { + case GST_VIDEO_COLOR_RANGE_0_255: + range = V4L2_QUANTIZATION_FULL_RANGE; + break; + case GST_VIDEO_COLOR_RANGE_16_235: + range = V4L2_QUANTIZATION_LIM_RANGE; + break; + case GST_VIDEO_COLOR_RANGE_UNKNOWN: + /* We let the driver pick a default one */ + break; + default: + GST_WARNING_OBJECT (v4l2object->element, + "Unknown colorimetry range %d", info.colorimetry.range); + break; + } + + switch (info.colorimetry.matrix) { + case GST_VIDEO_COLOR_MATRIX_RGB: + /* Unspecified, leave to default */ + break; + /* FCC is about the same as BT601 with less digit */ + case GST_VIDEO_COLOR_MATRIX_FCC: + case GST_VIDEO_COLOR_MATRIX_BT601: + matrix = V4L2_YCBCR_ENC_601; + break; + case GST_VIDEO_COLOR_MATRIX_BT709: + matrix = V4L2_YCBCR_ENC_709; + break; + case GST_VIDEO_COLOR_MATRIX_SMPTE240M: + matrix = V4L2_YCBCR_ENC_SMPTE240M; + break; + case GST_VIDEO_COLOR_MATRIX_BT2020: + matrix = V4L2_YCBCR_ENC_BT2020; + break; + case GST_VIDEO_COLOR_MATRIX_UNKNOWN: + /* We let the driver pick a default one */ + break; + default: + GST_WARNING_OBJECT (v4l2object->element, + "Unknown colorimetry matrix %d", info.colorimetry.matrix); + break; + } + + switch (info.colorimetry.transfer) { + case GST_VIDEO_TRANSFER_GAMMA18: + case GST_VIDEO_TRANSFER_GAMMA20: + case GST_VIDEO_TRANSFER_GAMMA22: + case GST_VIDEO_TRANSFER_GAMMA28: + GST_WARNING_OBJECT (v4l2object->element, + "GAMMA 18, 20, 22, 28 transfer functions not supported"); + case GST_VIDEO_TRANSFER_GAMMA10: + transfer = V4L2_XFER_FUNC_NONE; + break; + case GST_VIDEO_TRANSFER_BT709: + transfer = V4L2_XFER_FUNC_709; + break; + case GST_VIDEO_TRANSFER_SMPTE240M: + transfer = V4L2_XFER_FUNC_SMPTE240M; + break; + case GST_VIDEO_TRANSFER_SRGB: + transfer = V4L2_XFER_FUNC_SRGB; + break; + case GST_VIDEO_TRANSFER_LOG100: + case GST_VIDEO_TRANSFER_LOG316: + GST_WARNING_OBJECT (v4l2object->element, + "LOG 100, 316 transfer functions not supported"); + /* FIXME No known sensible default, maybe AdobeRGB ? */ + break; + case GST_VIDEO_TRANSFER_UNKNOWN: + /* We let the driver pick a default one */ + break; + default: + GST_WARNING_OBJECT (v4l2object->element, + "Unknown colorimetry tranfer %d", info.colorimetry.transfer); + break; + } + + if (colorspace == 0) { /* Try to guess colorspace according to pixelformat and size */ if (GST_VIDEO_INFO_IS_YUV (&info)) { /* SD streams likely use SMPTE170M and HD streams REC709 */ @@ -2746,6 +2975,7 @@ gst_v4l2_object_set_format_full (GstV4l2Object * v4l2object, GstCaps * caps, colorspace = V4L2_COLORSPACE_REC709; } else if (GST_VIDEO_INFO_IS_RGB (&info)) { colorspace = V4L2_COLORSPACE_SRGB; + transfer = V4L2_XFER_FUNC_NONE; } } } @@ -2817,13 +3047,20 @@ gst_v4l2_object_set_format_full (GstV4l2Object * v4l2object, GstCaps * caps, #endif if (V4L2_TYPE_IS_OUTPUT (v4l2object->type)) { - if (is_mplane) + if (is_mplane) { format.fmt.pix_mp.colorspace = colorspace; - else + format.fmt.pix_mp.quantization = range; + format.fmt.pix_mp.ycbcr_enc = matrix; + format.fmt.pix_mp.xfer_func = transfer; + } else { format.fmt.pix.colorspace = colorspace; + format.fmt.pix.quantization = range; + format.fmt.pix.ycbcr_enc = matrix; + format.fmt.pix.xfer_func = transfer; + } - GST_DEBUG_OBJECT (v4l2object->element, "Desired colorspace is %d", - colorspace); + GST_DEBUG_OBJECT (v4l2object->element, "Desired colorspace is %d:%d:%d:%d", + colorspace, range, matrix, transfer); } if (try_only) { diff --git a/sys/v4l2/gstv4l2transform.c b/sys/v4l2/gstv4l2transform.c index cfcc3dde9..f7b0233b3 100644 --- a/sys/v4l2/gstv4l2transform.c +++ b/sys/v4l2/gstv4l2transform.c @@ -375,7 +375,7 @@ gst_v4l2_transform_caps_remove_format_info (GstCaps * caps) && gst_caps_features_is_equal (f, GST_CAPS_FEATURES_MEMORY_SYSTEM_MEMORY)) gst_structure_remove_fields (st, "format", "colorimetry", "chroma-site", - NULL); + "width", "height", NULL); gst_caps_append_structure_full (res, st, gst_caps_features_copy (f)); } @@ -414,24 +414,437 @@ static GstCaps * gst_v4l2_transform_fixate_caps (GstBaseTransform * trans, GstPadDirection direction, GstCaps * caps, GstCaps * othercaps) { - GstCaps *result; + GstStructure *ins, *outs; + const GValue *from_par, *to_par; + GValue fpar = { 0, }, tpar = { + 0,}; + + othercaps = gst_caps_truncate (othercaps); + othercaps = gst_caps_make_writable (othercaps); GST_DEBUG_OBJECT (trans, "trying to fixate othercaps %" GST_PTR_FORMAT " based on caps %" GST_PTR_FORMAT, othercaps, caps); - result = gst_caps_intersect (othercaps, caps); - if (gst_caps_is_empty (result)) { - gst_caps_unref (result); - result = othercaps; + ins = gst_caps_get_structure (caps, 0); + outs = gst_caps_get_structure (othercaps, 0); + + from_par = gst_structure_get_value (ins, "pixel-aspect-ratio"); + to_par = gst_structure_get_value (outs, "pixel-aspect-ratio"); + + /* If we're fixating from the sinkpad we always set the PAR and + * assume that missing PAR on the sinkpad means 1/1 and + * missing PAR on the srcpad means undefined + */ + if (direction == GST_PAD_SINK) { + if (!from_par) { + g_value_init (&fpar, GST_TYPE_FRACTION); + gst_value_set_fraction (&fpar, 1, 1); + from_par = &fpar; + } + if (!to_par) { + g_value_init (&tpar, GST_TYPE_FRACTION_RANGE); + gst_value_set_fraction_range_full (&tpar, 1, G_MAXINT, G_MAXINT, 1); + to_par = &tpar; + } } else { - gst_caps_unref (othercaps); + if (!to_par) { + g_value_init (&tpar, GST_TYPE_FRACTION); + gst_value_set_fraction (&tpar, 1, 1); + to_par = &tpar; + + gst_structure_set (outs, "pixel-aspect-ratio", GST_TYPE_FRACTION, 1, 1, + NULL); + } + if (!from_par) { + g_value_init (&fpar, GST_TYPE_FRACTION); + gst_value_set_fraction (&fpar, 1, 1); + from_par = &fpar; + } } - GST_DEBUG_OBJECT (trans, "now fixating %" GST_PTR_FORMAT, result); + /* we have both PAR but they might not be fixated */ + { + gint from_w, from_h, from_par_n, from_par_d, to_par_n, to_par_d; + gint w = 0, h = 0; + gint from_dar_n, from_dar_d; + gint num, den; + + /* from_par should be fixed */ + g_return_val_if_fail (gst_value_is_fixed (from_par), othercaps); + + from_par_n = gst_value_get_fraction_numerator (from_par); + from_par_d = gst_value_get_fraction_denominator (from_par); + + gst_structure_get_int (ins, "width", &from_w); + gst_structure_get_int (ins, "height", &from_h); + + gst_structure_get_int (outs, "width", &w); + gst_structure_get_int (outs, "height", &h); + + /* if both width and height are already fixed, we can't do anything + * about it anymore */ + if (w && h) { + guint n, d; + + GST_DEBUG_OBJECT (trans, "dimensions already set to %dx%d, not fixating", + w, h); + if (!gst_value_is_fixed (to_par)) { + if (gst_video_calculate_display_ratio (&n, &d, from_w, from_h, + from_par_n, from_par_d, w, h)) { + GST_DEBUG_OBJECT (trans, "fixating to_par to %dx%d", n, d); + if (gst_structure_has_field (outs, "pixel-aspect-ratio")) + gst_structure_fixate_field_nearest_fraction (outs, + "pixel-aspect-ratio", n, d); + else if (n != d) + gst_structure_set (outs, "pixel-aspect-ratio", GST_TYPE_FRACTION, + n, d, NULL); + } + } + goto done; + } + + /* Calculate input DAR */ + if (!gst_util_fraction_multiply (from_w, from_h, from_par_n, from_par_d, + &from_dar_n, &from_dar_d)) { + GST_ELEMENT_ERROR (trans, CORE, NEGOTIATION, (NULL), + ("Error calculating the output scaled size - integer overflow")); + goto done; + } + + GST_DEBUG_OBJECT (trans, "Input DAR is %d/%d", from_dar_n, from_dar_d); - result = gst_caps_fixate (result); + /* If either width or height are fixed there's not much we + * can do either except choosing a height or width and PAR + * that matches the DAR as good as possible + */ + if (h) { + GstStructure *tmp; + gint set_w, set_par_n, set_par_d; - return result; + GST_DEBUG_OBJECT (trans, "height is fixed (%d)", h); + + /* If the PAR is fixed too, there's not much to do + * except choosing the width that is nearest to the + * width with the same DAR */ + if (gst_value_is_fixed (to_par)) { + to_par_n = gst_value_get_fraction_numerator (to_par); + to_par_d = gst_value_get_fraction_denominator (to_par); + + GST_DEBUG_OBJECT (trans, "PAR is fixed %d/%d", to_par_n, to_par_d); + + if (!gst_util_fraction_multiply (from_dar_n, from_dar_d, to_par_d, + to_par_n, &num, &den)) { + GST_ELEMENT_ERROR (trans, CORE, NEGOTIATION, (NULL), + ("Error calculating the output scaled size - integer overflow")); + goto done; + } + + w = (guint) gst_util_uint64_scale_int (h, num, den); + gst_structure_fixate_field_nearest_int (outs, "width", w); + + goto done; + } + + /* The PAR is not fixed and it's quite likely that we can set + * an arbitrary PAR. */ + + /* Check if we can keep the input width */ + tmp = gst_structure_copy (outs); + gst_structure_fixate_field_nearest_int (tmp, "width", from_w); + gst_structure_get_int (tmp, "width", &set_w); + + /* Might have failed but try to keep the DAR nonetheless by + * adjusting the PAR */ + if (!gst_util_fraction_multiply (from_dar_n, from_dar_d, h, set_w, + &to_par_n, &to_par_d)) { + GST_ELEMENT_ERROR (trans, CORE, NEGOTIATION, (NULL), + ("Error calculating the output scaled size - integer overflow")); + gst_structure_free (tmp); + goto done; + } + + if (!gst_structure_has_field (tmp, "pixel-aspect-ratio")) + gst_structure_set_value (tmp, "pixel-aspect-ratio", to_par); + gst_structure_fixate_field_nearest_fraction (tmp, "pixel-aspect-ratio", + to_par_n, to_par_d); + gst_structure_get_fraction (tmp, "pixel-aspect-ratio", &set_par_n, + &set_par_d); + gst_structure_free (tmp); + + /* Check if the adjusted PAR is accepted */ + if (set_par_n == to_par_n && set_par_d == to_par_d) { + if (gst_structure_has_field (outs, "pixel-aspect-ratio") || + set_par_n != set_par_d) + gst_structure_set (outs, "width", G_TYPE_INT, set_w, + "pixel-aspect-ratio", GST_TYPE_FRACTION, set_par_n, set_par_d, + NULL); + goto done; + } + + /* Otherwise scale the width to the new PAR and check if the + * adjusted with is accepted. If all that fails we can't keep + * the DAR */ + if (!gst_util_fraction_multiply (from_dar_n, from_dar_d, set_par_d, + set_par_n, &num, &den)) { + GST_ELEMENT_ERROR (trans, CORE, NEGOTIATION, (NULL), + ("Error calculating the output scaled size - integer overflow")); + goto done; + } + + w = (guint) gst_util_uint64_scale_int (h, num, den); + gst_structure_fixate_field_nearest_int (outs, "width", w); + if (gst_structure_has_field (outs, "pixel-aspect-ratio") || + set_par_n != set_par_d) + gst_structure_set (outs, "pixel-aspect-ratio", GST_TYPE_FRACTION, + set_par_n, set_par_d, NULL); + + goto done; + } else if (w) { + GstStructure *tmp; + gint set_h, set_par_n, set_par_d; + + GST_DEBUG_OBJECT (trans, "width is fixed (%d)", w); + + /* If the PAR is fixed too, there's not much to do + * except choosing the height that is nearest to the + * height with the same DAR */ + if (gst_value_is_fixed (to_par)) { + to_par_n = gst_value_get_fraction_numerator (to_par); + to_par_d = gst_value_get_fraction_denominator (to_par); + + GST_DEBUG_OBJECT (trans, "PAR is fixed %d/%d", to_par_n, to_par_d); + + if (!gst_util_fraction_multiply (from_dar_n, from_dar_d, to_par_d, + to_par_n, &num, &den)) { + GST_ELEMENT_ERROR (trans, CORE, NEGOTIATION, (NULL), + ("Error calculating the output scaled size - integer overflow")); + goto done; + } + + h = (guint) gst_util_uint64_scale_int (w, den, num); + gst_structure_fixate_field_nearest_int (outs, "height", h); + + goto done; + } + + /* The PAR is not fixed and it's quite likely that we can set + * an arbitrary PAR. */ + + /* Check if we can keep the input height */ + tmp = gst_structure_copy (outs); + gst_structure_fixate_field_nearest_int (tmp, "height", from_h); + gst_structure_get_int (tmp, "height", &set_h); + + /* Might have failed but try to keep the DAR nonetheless by + * adjusting the PAR */ + if (!gst_util_fraction_multiply (from_dar_n, from_dar_d, set_h, w, + &to_par_n, &to_par_d)) { + GST_ELEMENT_ERROR (trans, CORE, NEGOTIATION, (NULL), + ("Error calculating the output scaled size - integer overflow")); + gst_structure_free (tmp); + goto done; + } + if (!gst_structure_has_field (tmp, "pixel-aspect-ratio")) + gst_structure_set_value (tmp, "pixel-aspect-ratio", to_par); + gst_structure_fixate_field_nearest_fraction (tmp, "pixel-aspect-ratio", + to_par_n, to_par_d); + gst_structure_get_fraction (tmp, "pixel-aspect-ratio", &set_par_n, + &set_par_d); + gst_structure_free (tmp); + + /* Check if the adjusted PAR is accepted */ + if (set_par_n == to_par_n && set_par_d == to_par_d) { + if (gst_structure_has_field (outs, "pixel-aspect-ratio") || + set_par_n != set_par_d) + gst_structure_set (outs, "height", G_TYPE_INT, set_h, + "pixel-aspect-ratio", GST_TYPE_FRACTION, set_par_n, set_par_d, + NULL); + goto done; + } + + /* Otherwise scale the height to the new PAR and check if the + * adjusted with is accepted. If all that fails we can't keep + * the DAR */ + if (!gst_util_fraction_multiply (from_dar_n, from_dar_d, set_par_d, + set_par_n, &num, &den)) { + GST_ELEMENT_ERROR (trans, CORE, NEGOTIATION, (NULL), + ("Error calculating the output scaled size - integer overflow")); + goto done; + } + + h = (guint) gst_util_uint64_scale_int (w, den, num); + gst_structure_fixate_field_nearest_int (outs, "height", h); + if (gst_structure_has_field (outs, "pixel-aspect-ratio") || + set_par_n != set_par_d) + gst_structure_set (outs, "pixel-aspect-ratio", GST_TYPE_FRACTION, + set_par_n, set_par_d, NULL); + + goto done; + } else if (gst_value_is_fixed (to_par)) { + GstStructure *tmp; + gint set_h, set_w, f_h, f_w; + + to_par_n = gst_value_get_fraction_numerator (to_par); + to_par_d = gst_value_get_fraction_denominator (to_par); + + /* Calculate scale factor for the PAR change */ + if (!gst_util_fraction_multiply (from_dar_n, from_dar_d, to_par_n, + to_par_d, &num, &den)) { + GST_ELEMENT_ERROR (trans, CORE, NEGOTIATION, (NULL), + ("Error calculating the output scaled size - integer overflow")); + goto done; + } + + /* Try to keep the input height (because of interlacing) */ + tmp = gst_structure_copy (outs); + gst_structure_fixate_field_nearest_int (tmp, "height", from_h); + gst_structure_get_int (tmp, "height", &set_h); + + /* This might have failed but try to scale the width + * to keep the DAR nonetheless */ + w = (guint) gst_util_uint64_scale_int (set_h, num, den); + gst_structure_fixate_field_nearest_int (tmp, "width", w); + gst_structure_get_int (tmp, "width", &set_w); + gst_structure_free (tmp); + + /* We kept the DAR and the height is nearest to the original height */ + if (set_w == w) { + gst_structure_set (outs, "width", G_TYPE_INT, set_w, "height", + G_TYPE_INT, set_h, NULL); + goto done; + } + + f_h = set_h; + f_w = set_w; + + /* If the former failed, try to keep the input width at least */ + tmp = gst_structure_copy (outs); + gst_structure_fixate_field_nearest_int (tmp, "width", from_w); + gst_structure_get_int (tmp, "width", &set_w); + + /* This might have failed but try to scale the width + * to keep the DAR nonetheless */ + h = (guint) gst_util_uint64_scale_int (set_w, den, num); + gst_structure_fixate_field_nearest_int (tmp, "height", h); + gst_structure_get_int (tmp, "height", &set_h); + gst_structure_free (tmp); + + /* We kept the DAR and the width is nearest to the original width */ + if (set_h == h) { + gst_structure_set (outs, "width", G_TYPE_INT, set_w, "height", + G_TYPE_INT, set_h, NULL); + goto done; + } + + /* If all this failed, keep the height that was nearest to the orignal + * height and the nearest possible width. This changes the DAR but + * there's not much else to do here. + */ + gst_structure_set (outs, "width", G_TYPE_INT, f_w, "height", G_TYPE_INT, + f_h, NULL); + goto done; + } else { + GstStructure *tmp; + gint set_h, set_w, set_par_n, set_par_d, tmp2; + + /* width, height and PAR are not fixed but passthrough is not possible */ + + /* First try to keep the height and width as good as possible + * and scale PAR */ + tmp = gst_structure_copy (outs); + gst_structure_fixate_field_nearest_int (tmp, "height", from_h); + gst_structure_get_int (tmp, "height", &set_h); + gst_structure_fixate_field_nearest_int (tmp, "width", from_w); + gst_structure_get_int (tmp, "width", &set_w); + + if (!gst_util_fraction_multiply (from_dar_n, from_dar_d, set_h, set_w, + &to_par_n, &to_par_d)) { + GST_ELEMENT_ERROR (trans, CORE, NEGOTIATION, (NULL), + ("Error calculating the output scaled size - integer overflow")); + goto done; + } + + if (!gst_structure_has_field (tmp, "pixel-aspect-ratio")) + gst_structure_set_value (tmp, "pixel-aspect-ratio", to_par); + gst_structure_fixate_field_nearest_fraction (tmp, "pixel-aspect-ratio", + to_par_n, to_par_d); + gst_structure_get_fraction (tmp, "pixel-aspect-ratio", &set_par_n, + &set_par_d); + gst_structure_free (tmp); + + if (set_par_n == to_par_n && set_par_d == to_par_d) { + gst_structure_set (outs, "width", G_TYPE_INT, set_w, "height", + G_TYPE_INT, set_h, NULL); + + if (gst_structure_has_field (outs, "pixel-aspect-ratio") || + set_par_n != set_par_d) + gst_structure_set (outs, "pixel-aspect-ratio", GST_TYPE_FRACTION, + set_par_n, set_par_d, NULL); + goto done; + } + + /* Otherwise try to scale width to keep the DAR with the set + * PAR and height */ + if (!gst_util_fraction_multiply (from_dar_n, from_dar_d, set_par_d, + set_par_n, &num, &den)) { + GST_ELEMENT_ERROR (trans, CORE, NEGOTIATION, (NULL), + ("Error calculating the output scaled size - integer overflow")); + goto done; + } + + w = (guint) gst_util_uint64_scale_int (set_h, num, den); + tmp = gst_structure_copy (outs); + gst_structure_fixate_field_nearest_int (tmp, "width", w); + gst_structure_get_int (tmp, "width", &tmp2); + gst_structure_free (tmp); + + if (tmp2 == w) { + gst_structure_set (outs, "width", G_TYPE_INT, tmp2, "height", + G_TYPE_INT, set_h, NULL); + if (gst_structure_has_field (outs, "pixel-aspect-ratio") || + set_par_n != set_par_d) + gst_structure_set (outs, "pixel-aspect-ratio", GST_TYPE_FRACTION, + set_par_n, set_par_d, NULL); + goto done; + } + + /* ... or try the same with the height */ + h = (guint) gst_util_uint64_scale_int (set_w, den, num); + tmp = gst_structure_copy (outs); + gst_structure_fixate_field_nearest_int (tmp, "height", h); + gst_structure_get_int (tmp, "height", &tmp2); + gst_structure_free (tmp); + + if (tmp2 == h) { + gst_structure_set (outs, "width", G_TYPE_INT, set_w, "height", + G_TYPE_INT, tmp2, NULL); + if (gst_structure_has_field (outs, "pixel-aspect-ratio") || + set_par_n != set_par_d) + gst_structure_set (outs, "pixel-aspect-ratio", GST_TYPE_FRACTION, + set_par_n, set_par_d, NULL); + goto done; + } + + /* If all fails we can't keep the DAR and take the nearest values + * for everything from the first try */ + gst_structure_set (outs, "width", G_TYPE_INT, set_w, "height", + G_TYPE_INT, set_h, NULL); + if (gst_structure_has_field (outs, "pixel-aspect-ratio") || + set_par_n != set_par_d) + gst_structure_set (outs, "pixel-aspect-ratio", GST_TYPE_FRACTION, + set_par_n, set_par_d, NULL); + } + } + +done: + GST_DEBUG_OBJECT (trans, "fixated othercaps to %" GST_PTR_FORMAT, othercaps); + + if (from_par == &fpar) + g_value_unset (&fpar); + if (to_par == &tpar) + g_value_unset (&tpar); + + return othercaps; } static GstFlowReturn @@ -654,7 +1067,7 @@ gst_v4l2_transform_class_init (GstV4l2TransformClass * klass) gst_element_class_set_static_metadata (element_class, "V4L2 Video Converter", - "Filter/Converter/Video", + "Filter/Converter/Video/Scaler", "Transform streams via V4L2 API", "Nicolas Dufresne <nicolas.dufresne@collabora.com>"); diff --git a/tests/check/elements/qtmux.c b/tests/check/elements/qtmux.c index 39c7c5eff..ff8b07b10 100644 --- a/tests/check/elements/qtmux.c +++ b/tests/check/elements/qtmux.c @@ -220,7 +220,7 @@ check_qtmux_pad (GstStaticPadTemplate * srctemplate, const gchar * sinkname, int num_buffers; int i; guint8 data0[12] = "\000\000\000\024ftypqt "; - guint8 data1[8] = "\000\000\000\001mdat"; + guint8 data1[16] = "\000\000\000\010free\000\000\000\000mdat"; guint8 data2[4] = "moov"; GstSegment segment; @@ -661,6 +661,8 @@ static GstStaticPadTemplate sink_template = GST_STATIC_PAD_TEMPLATE ("sink", ); static GType test_mp3_enc_get_type (void); +static void test_input_push_segment_start (gpointer user_data, + GstClockTime start); G_DEFINE_TYPE (TestMp3Enc, test_mp3_enc, GST_TYPE_ELEMENT); @@ -926,6 +928,13 @@ struct TestInputData /* When comparing ts, the input will be subtracted from this */ gint64 ts_offset; + /* Due to DTS, the segment start might be shifted so this list + * is used to vefity each received segments */ + GList *expected_segment_start; + + GstClockTime expected_gap_ts; + GstClockTime expected_gap_duration; + gboolean gap_received; GstPad *sinkpad; @@ -936,10 +945,16 @@ static void test_input_data_init (struct TestInputData *data) { data->ts_offset = 0; + data->expected_segment_start = NULL; + data->expected_gap_ts = 0; + data->expected_gap_duration = 0; + data->gap_received = FALSE; data->srcpad = NULL; data->sinkpad = NULL; data->input = NULL; data->thread = NULL; + + test_input_push_segment_start (data, 0); } static void @@ -981,6 +996,36 @@ test_input_push_data (gpointer user_data) return NULL; } +static void +test_input_push_segment_start (gpointer user_data, GstClockTime start) +{ + struct TestInputData *data = user_data; + GstClockTime *start_data = g_malloc (sizeof (GstClockTime)); + + *start_data = start; + data->expected_segment_start = g_list_append (data->expected_segment_start, + start_data); +} + +static GstClockTime +test_input_pop_segment_start (gpointer user_data) +{ + struct TestInputData *data = user_data; + GstClockTime start = GST_CLOCK_TIME_NONE; + GstClockTime *start_data; + + if (data->expected_segment_start) { + start_data = data->expected_segment_start->data; + data->expected_segment_start = + g_list_delete_link (data->expected_segment_start, + data->expected_segment_start); + start = *start_data; + g_free (start_data); + } + + return start; +} + static GstBuffer * create_buffer (GstClockTime pts, GstClockTime dts, GstClockTime duration, guint bytes) @@ -1050,7 +1095,6 @@ _test_sink_pad_event (GstPad * pad, GstObject * parent, GstEvent * event) switch (GST_EVENT_TYPE (event)) { case GST_EVENT_STREAM_START: - case GST_EVENT_SEGMENT: case GST_EVENT_CAPS: case GST_EVENT_EOS: fail_unless (test_data->output_iter); @@ -1058,6 +1102,25 @@ _test_sink_pad_event (GstPad * pad, GstObject * parent, GstEvent * event) compare_event (event, test_data->output_iter->data); test_data->output_iter = g_list_next (test_data->output_iter); break; + case GST_EVENT_SEGMENT:{ + const GstSegment *segment; + + fail_unless (test_data->output_iter); + fail_unless (GST_IS_EVENT (test_data->output_iter->data)); + gst_event_parse_segment (event, &segment); + fail_unless (segment->start == test_input_pop_segment_start (test_data)); + test_data->output_iter = g_list_next (test_data->output_iter); + break; + } + case GST_EVENT_GAP:{ + GstClockTime timestamp; + GstClockTime duration; + gst_event_parse_gap (event, ×tamp, &duration); + fail_unless (timestamp == test_data->expected_gap_ts); + fail_unless (duration == test_data->expected_gap_duration); + test_data->gap_received = TRUE; + break; + } case GST_EVENT_TAG: /* ignore this event */ break; @@ -1380,6 +1443,143 @@ GST_START_TEST (test_muxing_non_zero_segment_different) GST_END_TEST; +GST_START_TEST (test_muxing_dts_outside_segment) +{ + struct TestInputData input1, input2; + GstCaps *caps; + + test_input_data_init (&input1); + test_input_data_init (&input2); + + /* Create the inputs, after calling the run below, all this data is + * transfered to it and we have no need to clean up */ + input1.input = NULL; + input1.input = + g_list_append (input1.input, gst_event_new_stream_start ("test-1")); + caps = gst_caps_from_string + ("video/x-h264, width=(int)800, height=(int)600, " + "framerate=(fraction)1/1, stream-format=(string)avc, codec_data=(buffer)0000," + " alignment=(string)au, level=(int)2, profile=(string)high"); + input1.input = g_list_append (input1.input, gst_event_new_caps (caps)); + gst_caps_unref (caps); + gst_segment_init (&input1.segment, GST_FORMAT_TIME); + input1.segment.start = 1 * GST_SECOND; + input1.input = + g_list_append (input1.input, gst_event_new_segment (&input1.segment)); + input1.input = + g_list_append (input1.input, create_buffer (1 * GST_SECOND, + 0, GST_SECOND, 4096)); + input1.input = + g_list_append (input1.input, create_buffer (2 * GST_SECOND, + 1 * GST_SECOND, GST_SECOND, 4096)); + input1.input = + g_list_append (input1.input, create_buffer (3 * GST_SECOND, + 2 * GST_SECOND, GST_SECOND, 4096)); + input1.input = g_list_append (input1.input, gst_event_new_eos ()); + /* First DTS is 0, first PTS is 1s. The segment start being 1, this means + * running time -1s and 0. So the output segment should start from 1s to keep + * the same running time */ + test_input_pop_segment_start (&input1); + test_input_push_segment_start (&input1, GST_SECOND); + + input2.input = NULL; + input2.input = + g_list_append (input2.input, gst_event_new_stream_start ("test-2")); + caps = gst_caps_from_string + ("audio/mpeg, rate=(int)44100, channels=(int)1, mpegversion=(int)4, " + "stream-format=(string)raw, framed=(boolean)true"); + input2.input = g_list_append (input2.input, gst_event_new_caps (caps)); + gst_caps_unref (caps); + gst_segment_init (&input2.segment, GST_FORMAT_TIME); + input2.input = + g_list_append (input2.input, gst_event_new_segment (&input2.segment)); + input2.input = + g_list_append (input2.input, create_buffer (0, 0, GST_SECOND, + 44100 * 4 * 2)); + input2.input = + g_list_append (input2.input, create_buffer (GST_SECOND, GST_SECOND, + GST_SECOND, 44100 * 4 * 2)); + input2.input = + g_list_append (input2.input, create_buffer (2 * GST_SECOND, + 2 * GST_SECOND, GST_SECOND, 44100 * 4 * 2)); + input2.input = g_list_append (input2.input, gst_event_new_eos ()); + + run_muxing_test (&input1, &input2); +} + +GST_END_TEST; + +GST_START_TEST (test_muxing_initial_gap) +{ + struct TestInputData input1, input2; + GstCaps *caps; + + test_input_data_init (&input1); + test_input_data_init (&input2); + + /* Create the inputs, after calling the run below, all this data is + * transfered to it and we have no need to clean up */ + input1.input = NULL; + input1.input = + g_list_append (input1.input, gst_event_new_stream_start ("test-1")); + caps = gst_caps_from_string + ("video/x-h264, width=(int)800, height=(int)600, " + "framerate=(fraction)1/1, stream-format=(string)avc, codec_data=(buffer)0000," + " alignment=(string)au, level=(int)2, profile=(string)high"); + input1.input = g_list_append (input1.input, gst_event_new_caps (caps)); + gst_caps_unref (caps); + gst_segment_init (&input1.segment, GST_FORMAT_TIME); + input1.input = + g_list_append (input1.input, gst_event_new_segment (&input1.segment)); + /* Duplicate the segment to please the harness */ + input1.input = + g_list_append (input1.input, gst_event_new_segment (&input1.segment)); + input1.input = + g_list_append (input1.input, create_buffer (1 * GST_SECOND, + 0, GST_SECOND, 4096)); + input1.input = + g_list_append (input1.input, create_buffer (2 * GST_SECOND, + 1 * GST_SECOND, GST_SECOND, 4096)); + input1.input = + g_list_append (input1.input, create_buffer (3 * GST_SECOND, + 2 * GST_SECOND, GST_SECOND, 4096)); + input1.input = g_list_append (input1.input, gst_event_new_eos ()); + + /* We expect a 1s gap at the start */ + input1.expected_gap_duration = GST_SECOND; + /* There will be two segments, first is 0, so leave it there, second should + * match the first CTTS (PTS - DTS) */ + test_input_push_segment_start (&input1, GST_SECOND); + + input2.input = NULL; + input2.input = + g_list_append (input2.input, gst_event_new_stream_start ("test-2")); + caps = gst_caps_from_string + ("audio/mpeg, rate=(int)44100, channels=(int)1, mpegversion=(int)4, " + "stream-format=(string)raw, framed=(boolean)true"); + input2.input = g_list_append (input2.input, gst_event_new_caps (caps)); + gst_caps_unref (caps); + gst_segment_init (&input2.segment, GST_FORMAT_TIME); + input2.input = + g_list_append (input2.input, gst_event_new_segment (&input2.segment)); + input2.input = + g_list_append (input2.input, create_buffer (0, 0, GST_SECOND, + 44100 * 4 * 2)); + input2.input = + g_list_append (input2.input, create_buffer (GST_SECOND, GST_SECOND, + GST_SECOND, 44100 * 4 * 2)); + input2.input = + g_list_append (input2.input, create_buffer (2 * GST_SECOND, + 2 * GST_SECOND, GST_SECOND, 44100 * 4 * 2)); + input2.input = g_list_append (input2.input, gst_event_new_eos ()); + + run_muxing_test (&input1, &input2); + + fail_unless (input1.gap_received); +} + +GST_END_TEST; + static Suite * qtmux_suite (void) { @@ -1420,6 +1620,8 @@ qtmux_suite (void) tcase_add_test (tc_chain, test_muxing); tcase_add_test (tc_chain, test_muxing_non_zero_segment); tcase_add_test (tc_chain, test_muxing_non_zero_segment_different); + tcase_add_test (tc_chain, test_muxing_dts_outside_segment); + tcase_add_test (tc_chain, test_muxing_initial_gap); return s; } diff --git a/win32/common/config.h b/win32/common/config.h index 76f5fa5af..4bc3be7f8 100644 --- a/win32/common/config.h +++ b/win32/common/config.h @@ -39,6 +39,9 @@ /* The GIO modules directory. */ #undef GIO_MODULE_DIR +/* The GIO install prefix. */ +#undef GIO_PREFIX + /* GStreamer API Version */ #define GST_API_VERSION "1.0" @@ -58,7 +61,7 @@ #define GST_PACKAGE_ORIGIN "Unknown package origin" /* GStreamer package release date/time for plugins as YYYY-MM-DD */ -#define GST_PACKAGE_RELEASE_DATETIME "2015-06-07" +#define GST_PACKAGE_RELEASE_DATETIME "2015-06-24" /* Define if static plugins should be built */ #undef GST_PLUGIN_BUILD_STATIC @@ -384,7 +387,7 @@ #define PACKAGE_NAME "GStreamer Good Plug-ins" /* Define to the full name and version of this package. */ -#define PACKAGE_STRING "GStreamer Good Plug-ins 1.5.1" +#define PACKAGE_STRING "GStreamer Good Plug-ins 1.5.2" /* Define to the one symbol short name of this package. */ #define PACKAGE_TARNAME "gst-plugins-good" @@ -393,7 +396,7 @@ #undef PACKAGE_URL /* Define to the version of this package. */ -#define PACKAGE_VERSION "1.5.1" +#define PACKAGE_VERSION "1.5.2" /* directory where plugins are located */ #ifdef _DEBUG @@ -424,7 +427,7 @@ #undef TARGET_CPU /* Version number of package */ -#define VERSION "1.5.1" +#define VERSION "1.5.2" /* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most significant byte first (like Motorola and SPARC, unlike Intel). */ -- GitLab