New upstream version 1.9.2
diff --git a/ChangeLog b/ChangeLog
index aaad5eb..24b8103 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,9 +1,2311 @@
-=== release 1.9.1 ===
+=== release 1.9.2 ===
-2016-07-06 Sebastian Dröge <slomo@coaxion.net>
+2016-09-01 Sebastian Dröge <slomo@coaxion.net>
* configure.ac:
- releasing 1.9.1
+ releasing 1.9.2
+
+2016-09-01 11:24:37 +0300 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/ky.po:
+ * po/lt.po:
+ * po/lv.po:
+ * po/mt.po:
+ * po/nb.po:
+ * po/nl.po:
+ * po/or.po:
+ * po/pl.po:
+ * po/pt_BR.po:
+ * po/ro.po:
+ * po/ru.po:
+ * po/sk.po:
+ * po/sl.po:
+ * po/sq.po:
+ * po/sr.po:
+ * po/sv.po:
+ * po/tr.po:
+ * po/uk.po:
+ * po/vi.po:
+ * po/zh_CN.po:
+ po: Update translations
+
+2016-08-30 16:21:25 +0300 Sebastian Dröge <sebastian@centricular.com>
+
+ * configure.ac:
+ * sys/applemedia/Makefile.am:
+ * sys/applemedia/plugin.m:
+ applemedia: Conditionally compile qtkitvideosrc
+ The API was deprecated in 10.9 and apparently does not exist in the SDK for
+ macOS Sierra anymore.
+ https://bugzilla.gnome.org/show_bug.cgi?id=770587
+
+2016-08-31 04:26:43 +1000 Jan Schmidt <jan@centricular.com>
+
+ * gst-libs/gst/gl/gstglframebuffer.h:
+ gl: Remove extra duplicate typedef of GstGLFramebuffer
+ It's triggering a warning building git master on OSX
+
+2016-08-29 16:57:42 +1000 Matthew Waters <matthew@centricular.com>
+
+ * tests/check/libs/gstglupload.c:
+ tests/glupload: support opengl3 properly instead of spewing GL errors
+
+2016-08-29 16:52:44 +1000 Matthew Waters <matthew@centricular.com>
+
+ * pkgconfig/gstreamer-gl.pc.in:
+ gl/pkgconfig: add the lib include dir to the list of includes
+ 714d8aa in core removed this include dir from it's pkgconfig file.
+ https://bugzilla.gnome.org/show_bug.cgi?id=770523
+
+2016-08-29 15:43:10 +1000 Alessandro Decina <alessandro.d@gmail.com>
+
+ * gst-libs/gst/gl/gstglupload.c:
+ * tests/check/libs/gstglupload.c:
+ glupload: fix tests and check for the new RECONFIGURE behaviour
+ The tests were broken since 91fea30, which changed glupload to return
+ GST_GL_UPLOAD_RECONFIGURE if the texture target in the input buffers doesn't
+ match the texture-target configured in the output caps.
+ This commit fixes that and adds more checks for the new behaviour.
+
+2016-08-19 11:12:10 -0700 Thibault Saunier <thibault.saunier@osg.samsung.com>
+
+ * ext/gme/gstgme.c:
+ * ext/sndfile/gstsfsink.c:
+ * ext/teletextdec/gstteletextdec.c:
+ * ext/timidity/gsttimidity.c:
+ * ext/timidity/gstwildmidi.c:
+ * gst-libs/gst/adaptivedemux/gstadaptivedemux.c:
+ * gst/aiff/aiffparse.c:
+ * gst/midi/midiparse.c:
+ * gst/mpegdemux/gstmpegdemux.c:
+ * gst/mpegtsdemux/mpegtsbase.c:
+ * gst/mxf/mxfdemux.c:
+ * gst/nuvdemux/gstnuvdemux.c:
+ * gst/tta/gstttaparse.c:
+ * sys/androidmedia/gstamcaudiodec.c:
+ * sys/androidmedia/gstamcvideodec.c:
+ * sys/androidmedia/gstamcvideoenc.c:
+ * sys/applemedia/avfassetsrc.m:
+ Use the new API to post flow ERROR messages on the bus
+ https://bugzilla.gnome.org/show_bug.cgi?id=770158
+
+2016-08-26 20:12:21 +0300 Sebastian Dröge <sebastian@centricular.com>
+
+ * tests/check/elements/dash_mpd.c:
+ dash: Fix build of unit test
+
+2016-08-25 20:50:11 +0300 Sebastian Dröge <sebastian@centricular.com>
+
+ * ext/dash/gstdashdemux.c:
+ * ext/dash/gstdashdemux.h:
+ * ext/dash/gstmpdparser.c:
+ * ext/dash/gstmpdparser.h:
+ dashdemux: Add properties to select maximum allowed width/height and framerate
+ https://bugzilla.gnome.org/show_bug.cgi?id=770408
+
+2016-08-26 16:04:27 +0300 Sebastian Dröge <sebastian@centricular.com>
+
+ * sys/decklink/gstdecklinkaudiosink.cpp:
+ decklinkaudiosink: Fix compiler warning on OS X
+ While gint64 and int64_t are always the same, clang does not agree with that.
+ /Applications/Xcode.app/Contents/Developer/usr/bin/make -C decklink
+ CXX libgstdecklink_la-gstdecklinkaudiosink.lo
+ gstdecklinkaudiosink.cpp:675:79: error: cannot initialize a parameter of type 'int64_t *' (aka 'long long *') with an rvalue of type 'gint64 *' (aka 'long *')
+ ret = buf->output->attributes->GetInt (BMDDeckLinkMaximumAudioChannels, &max_channels);
+ ^~~~~~~~~~~~~
+ ./linux/DeckLinkAPI.h:692:87: note: passing argument to parameter 'value' here
+ virtual HRESULT GetInt (/* in */ BMDDeckLinkAttributeID cfgID, /* out */ int64_t *value) = 0;
+ ^
+
+2016-08-26 22:51:48 +1000 Alessandro Decina <alessandro.d@gmail.com>
+
+ * sys/applemedia/corevideomemory.c:
+ applemedia: fix compiler warning
+
+2016-08-26 15:48:36 +0300 Sebastian Dröge <sebastian@centricular.com>
+
+ * sys/decklink/gstdecklinkvideosink.cpp:
+ decklinkvideosink: Scale down scheduled frame times to milliseconds
+ Scale down to milliseconds, otherwise at least some hardware has problems
+ scheduling the frames (or schedules them too slow) and we run out of available
+ frames.
+ https://bugzilla.gnome.org/show_bug.cgi?id=770282
+
+2016-08-26 14:08:11 +0300 Sebastian Dröge <sebastian@centricular.com>
+
+ * sys/decklink/gstdecklink.cpp:
+ * sys/decklink/gstdecklink.h:
+ * sys/decklink/gstdecklinkaudiosink.cpp:
+ decklinkaudiosink: Add support for 8 and 16 channels
+
+2016-08-26 17:37:54 +1000 Alessandro Decina <alessandro.d@gmail.com>
+
+ * sys/applemedia/Makefile.am:
+ * sys/applemedia/avfassetsrc.m:
+ * sys/applemedia/avfvideosrc.m:
+ * sys/applemedia/coremediabuffer.c:
+ * sys/applemedia/coremediabuffer.h:
+ * sys/applemedia/corevideobuffer.c:
+ * sys/applemedia/corevideobuffer.h:
+ * sys/applemedia/corevideomemory.c:
+ * sys/applemedia/corevideomemory.h:
+ * sys/applemedia/iosglmemory.c:
+ * sys/applemedia/iosglmemory.h:
+ * sys/applemedia/iosurfacememory.c:
+ * sys/applemedia/plugin.m:
+ * sys/applemedia/qtkitvideosrc.m:
+ * sys/applemedia/videotexturecache.h:
+ * sys/applemedia/videotexturecache.m:
+ * sys/applemedia/vtdec.c:
+ * sys/applemedia/vtenc.c:
+ applemedia: changes to make GL memory mappable on CPU on iOS
+ This commit introduces IOSGLMemory which is a GLMemory that falls back to
+ GstAppleCoreVideoMemory for CPU access. This is a temporary solution until
+ IOSurface gets exposed as a public framework on iOS and so we can use
+ IOSurfaceMemory on both MacOS and iOS.
+ https://bugzilla.gnome.org/show_bug.cgi?id=769210
+
+2016-08-22 17:18:27 +1000 Alessandro Decina <alessandro.d@gmail.com>
+
+ * ext/gl/gstgluploadelement.c:
+ * gst-libs/gst/gl/gstglupload.c:
+ * gst-libs/gst/gl/gstglupload.h:
+ gstglupload: make the GLMemoryUpload method output the correct texture-target
+ Now when used with video/x-raw as input, the GLMemoryUpload method checks for
+ ->tex_target in input GLMemory(es) and sets the output texture-target
+ accordingly.
+ Fixes video corruption with a pipeline like avfvideosrc ! video/x-raw !
+ glimagesink where on macos avfvideosrc pushes RECTANGLE textures but glupload
+ was configuring texture-target=2D as output.
+
+2016-08-24 09:41:08 -0300 Thibault Saunier <tsaunier@gnome.org>
+
+ * gst-libs/gst/mpegts/mpegts_enum.py:
+ * gst/mpegtsdemux/meson.build:
+ * meson.build:
+ meson: Make mpegts lib build when using subprojects
+ The headers passed as parametter are relative to the build dir
+ basically "../subproject/gst-plugins-bad/gst-libs/gst/mpegts/XXX.h"
+ but that does not match what is needed at build time when building as
+ subproject, also we always add current dir as include_dir so we are
+ safe including directly.
+ And link mpegtsdemux against the 'math' library as it is needed.
+
+2016-08-26 03:46:39 +1000 Jan Schmidt <jan@centricular.com>
+
+ * docs/plugins/gst-plugins-bad-plugins-docs.sgml:
+ docs: Expose the opengl plugin and element docs
+
+2016-08-26 02:20:11 +1000 Jan Schmidt <jan@centricular.com>
+
+ * gst-libs/gst/video/gstvideoaggregator.c:
+ videoaggregator: Handle if update_caps() returns EMPTY
+ Don't assume the returned caps from update_caps() is
+ non-empty.
+
+2016-08-26 02:07:27 +1000 Jan Schmidt <jan@centricular.com>
+
+ * ext/gl/gstglvideomixer.c:
+ gl: Update glvideomixer doc
+
+2016-08-26 02:06:00 +1000 Jan Schmidt <jan@centricular.com>
+
+ * ext/gl/gstglstereomix.c:
+ * ext/gl/gstglviewconvert.c:
+ gl: Add/update docs for glviewconvert, glstereomix
+ Add some example pipelines for glstereomix, and fix up
+ the example pipelines for glviewconvert
+
+2016-08-26 00:29:34 +1000 Jan Schmidt <jan@centricular.com>
+
+ * ext/gl/gstglstereomix.c:
+ * ext/gl/gstglstereomix.h:
+ glstereomix: Fix caps negotiation
+ The videoaggregator negotiation sequence changed some time
+ back and broke glstereomix. Instead of doing nego incorrectly
+ in the find_best_format() vfunc, do it directly in the
+ update_caps() method.
+
+2016-08-25 15:26:49 +1000 Jan Schmidt <jan@centricular.com>
+
+ * gst-libs/gst/gl/gstglviewconvert.c:
+ glviewconvert: Fix texture target fixation
+ Don't set the chosen texture-target into the wrong structure.
+ The input caps may not be writable, and in any case - the
+ intention was to configure the othercaps. Also, remove an
+ extra unref - the othercaps ref is consumed by
+ gst_caps_make_writable already.
+
+2016-08-25 19:35:13 +0300 Sebastian Dröge <sebastian@centricular.com>
+
+ * ext/dash/gstdashdemux.c:
+ * ext/hls/gsthlsdemux.c:
+ * ext/smoothstreaming/gstmssdemux.c:
+ * gst-libs/gst/adaptivedemux/gstadaptivedemux.c:
+ adaptivedemux: Enable bitrate selection for trick mode streaming again
+ And scale the bitrate with the absolute rate (if it's bigger than 1.0) to get
+ to the real bitrate due to faster playback.
+ This allowed in my tests to play a stream with 10x speed without buffering as
+ the lowest bitrate is chosen, instead of staying/selecting the highest bitrate
+ and then buffering all the time.
+ It was previously disabled for not very well specified reasons, which seem to
+ be not valid anymore nowadays.
+
+2016-08-25 16:33:17 +0200 Josep Torra <n770galaxy@gmail.com>
+
+ * tests/check/elements/.gitignore:
+ gitignore: add missing dash_isoff file
+
+2016-08-25 12:45:33 +0200 Josep Torra <n770galaxy@gmail.com>
+
+ * tests/check/Makefile.am:
+ build: fix gst-uninstalled build in osx
+ Fixes clang: error: argument unused during compilation: '-pthread'
+ when building the test programs.
+
+2016-08-25 14:35:59 +0200 Josep Torra <n770galaxy@gmail.com>
+
+ * configure.ac:
+ * tests/check/Makefile.am:
+ build: unconditionally check for video, audio and pbutils modules
+ Check for modules in configure and use GST_*_LIBS vars to link with
+ the libraries instead of hardcoding them.
+
+2016-07-26 19:55:13 +0200 Xabier Rodriguez Calvar <calvaris@igalia.com>
+
+ * ext/gl/gstglvideoflip.c:
+ * ext/gl/gstglvideoflip.h:
+ glvideoflip: implement GstVideoDirection interface
+ It implements now this interface with its video-direction
+ property. Values are changed to GstVideoOrientationMethod but they have
+ the same value than the originals.
+ https://bugzilla.gnome.org/show_bug.cgi?id=768687
+
+2016-08-24 19:43:55 +0300 Sebastian Dröge <sebastian@centricular.com>
+
+ * ext/fdkaac/gstfdkaacenc.c:
+ fdkaacenc: Implement some automatic bitrate selection
+ Based on sample rate and channel count, see
+ http://wiki.hydrogenaud.io/index.php?title=Fraunhofer_FDK_AAC#Recommended_Sampling_Rate_and_Bitrate_Combinations
+
+2016-08-24 14:15:09 +0300 Sebastian Dröge <sebastian@centricular.com>
+
+ * gst-libs/gst/player/gstplayer.c:
+ player: On redirects, remember the redirect URI separately and don't consider this an URI property change
+ The application does not know anything about the redirect, and changing its
+ URI internally will cause confusion.
+ Also don't reset the subtitle URI.
+
+2016-08-24 14:10:41 +0300 Sebastian Dröge <sebastian@centricular.com>
+
+ * gst-libs/gst/player/gstplayer.c:
+ player: Don't report spurious STOPPED state changes when doing transient changes there
+
+2016-08-24 13:01:46 +0300 Sebastian Dröge <sebastian@centricular.com>
+
+ * gst-libs/gst/player/gstplayer.c:
+ player: Ensure that rate is initialized to 1.0
+
+2016-08-24 10:16:00 +0000 Fredrik Fornwall <fredrik@fornwall.net>
+
+ * sys/opensles/Makefile.am:
+ opensles: Add opensles.h to noinst_HEADERS
+ https://bugzilla.gnome.org/show_bug.cgi?id=770326
+
+2016-08-23 14:37:17 +0300 Sebastian Dröge <sebastian@centricular.com>
+
+ * gst-libs/gst/player/gstplayer.c:
+ player: De-duplicate rate setting code and always use the property
+
+2016-08-23 14:33:11 +0300 Sebastian Dröge <sebastian@centricular.com>
+
+ * gst-libs/gst/player/gstplayer.c:
+ player: Protect setter/getter for the configuration with a mutex
+
+2016-08-23 14:32:24 +0300 Sebastian Dröge <sebastian@centricular.com>
+
+ * gst-libs/gst/player/gstplayer.c:
+ * gst-libs/gst/player/gstplayer.h:
+ player: Move subtitle URI setter next to the uri setter
+ It's confusing to have them a couple of hundred lines apart.
+
+2016-08-17 19:59:17 +0200 Matej Knopp <matej.knopp@gmail.com>
+
+ * sys/applemedia/vtdec.c:
+ vtdec: fix MPEG-2 video caps
+ Add systemstream=false to caps, otherwise the decoder
+ may be picked for MPEG-PS files. Also parsed=true,
+ as video toolbox expects entire frame in
+ VTDecompressionSessionDecodeFrame.
+ https://bugzilla.gnome.org/show_bug.cgi?id=770049
+
+2016-08-23 02:13:19 +1000 Jan Schmidt <jan@centricular.com>
+
+ * gst-libs/gst/adaptivedemux/gstadaptivedemux.c.rej:
+ * gst-libs/gst/adaptivedemux/set_state_keep.patch:
+ adaptivedemux: Fix the previous commit
+ Remove extra files that were not meant to be added to the commit
+
+2016-08-23 01:57:55 +1000 Jan Schmidt <jan@centricular.com>
+
+ * gst-libs/gst/adaptivedemux/gstadaptivedemux.c:
+ * gst-libs/gst/adaptivedemux/gstadaptivedemux.c.rej:
+ * gst-libs/gst/adaptivedemux/set_state_keep.patch:
+ adaptivedemux: Fix broken updates loop on live streams
+ Prevent the manifest update loop from looping endlessly
+ after a seek event, by clearing the variable that tells
+ the task function not to immediately exit.
+
+2016-08-18 10:06:27 +0200 Michael Olbrich <m.olbrich@pengutronix.de>
+
+ * gst-libs/gst/adaptivedemux/gstadaptivedemux.c:
+ adaptivedemux: fix stream exposure condition
+ The new streams should not be exposed until all streams are done with the
+ current fragment. The old code is incorrect and actually only checked the
+ current stream. Fix this by properly checking all streams.
+ Also, ignore the current stream. The code is only reached when the current
+ stream finished downloading and since
+ 07f49f15b1196cc9fa0d45af91149a35fce123b9 ("adaptivedemux: On EOS, handle it
+ before waking download loop") download_finished is set after
+ gst_adaptive_demux_stream_advance_fragment_unlocked() is called.
+ Without this HLS playback with multiple streams is broken, because the new
+ streams are never exposed.
+ https://bugzilla.gnome.org/show_bug.cgi?id=770075
+
+2016-08-21 16:21:07 +0100 Tim-Philipp Müller <tim@centricular.com>
+
+ * ext/mpg123/meson.build:
+ meson: remove unused mpg123 build file
+ mpg123 was moved to ugly.
+
+2016-08-12 21:21:45 +0530 Nirbheek Chauhan <nirbheek@centricular.com>
+
+ * .gitignore:
+ * config.h.meson:
+ * ext/assrender/meson.build:
+ * ext/bz2/meson.build:
+ * ext/chromaprint/meson.build:
+ * ext/curl/meson.build:
+ * ext/dash/meson.build:
+ * ext/directfb/meson.build:
+ * ext/dtls/meson.build:
+ * ext/dts/meson.build:
+ * ext/faac/meson.build:
+ * ext/faad/meson.build:
+ * ext/flite/meson.build:
+ * ext/fluidsynth/meson.build:
+ * ext/hls/meson.build:
+ * ext/kate/meson.build:
+ * ext/libde265/meson.build:
+ * ext/libmms/meson.build:
+ * ext/meson.build:
+ * ext/mpg123/meson.build:
+ * ext/openh264/meson.build:
+ * ext/openjpeg/meson.build:
+ * ext/opus/meson.build:
+ * ext/resindvd/meson.build:
+ * ext/rsvg/meson.build:
+ * ext/rtmp/meson.build:
+ * ext/sbc/meson.build:
+ * ext/schroedinger/meson.build:
+ * ext/smoothstreaming/meson.build:
+ * ext/soundtouch/meson.build:
+ * ext/spandsp/meson.build:
+ * ext/srtp/meson.build:
+ * ext/srtp/srtp_mkenum.py:
+ * ext/voaacenc/meson.build:
+ * ext/webp/meson.build:
+ * ext/x265/meson.build:
+ * ext/zbar/meson.build:
+ * gst-libs/gst/adaptivedemux/meson.build:
+ * gst-libs/gst/audio/meson.build:
+ * gst-libs/gst/base/meson.build:
+ * gst-libs/gst/basecamerabinsrc/meson.build:
+ * gst-libs/gst/codecparsers/meson.build:
+ * gst-libs/gst/gl/gstglconfig.h.meson:
+ * gst-libs/gst/gl/meson.build:
+ * gst-libs/gst/insertbin/meson.build:
+ * gst-libs/gst/interfaces/build_mkenum.py:
+ * gst-libs/gst/interfaces/meson.build:
+ * gst-libs/gst/meson.build:
+ * gst-libs/gst/mpegts/meson.build:
+ * gst-libs/gst/mpegts/mpegts_enum.py:
+ * gst-libs/gst/player/meson.build:
+ * gst-libs/gst/uridownloader/meson.build:
+ * gst-libs/gst/video/meson.build:
+ * gst-libs/meson.build:
+ * gst/accurip/meson.build:
+ * gst/adpcmdec/meson.build:
+ * gst/adpcmenc/meson.build:
+ * gst/aiff/meson.build:
+ * gst/asfmux/meson.build:
+ * gst/audiobuffer/meson.build:
+ * gst/audiofxbad/meson.build:
+ * gst/audiomixer/meson.build:
+ * gst/audiovisualizers/meson.build:
+ * gst/autoconvert/meson.build:
+ * gst/bayer/meson.build:
+ * gst/camerabin2/meson.build:
+ * gst/cdxaparse/meson.build:
+ * gst/coloreffects/meson.build:
+ * gst/compositor/meson.build:
+ * gst/dataurisrc/meson.build:
+ * gst/dccp/meson.build:
+ * gst/debugutils/meson.build:
+ * gst/dvbsuboverlay/meson.build:
+ * gst/dvdspu/meson.build:
+ * gst/faceoverlay/meson.build:
+ * gst/festival/meson.build:
+ * gst/fieldanalysis/meson.build:
+ * gst/freeverb/meson.build:
+ * gst/frei0r/meson.build:
+ * gst/games/meson.build:
+ * gst/gaudieffects/meson.build:
+ * gst/gdp/meson.build:
+ * gst/geometrictransform/meson.build:
+ * gst/hdvparse/meson.build:
+ * gst/id3tag/meson.build:
+ * gst/inter/meson.build:
+ * gst/interlace/meson.build:
+ * gst/ivfparse/meson.build:
+ * gst/ivtc/meson.build:
+ * gst/jp2kdecimator/meson.build:
+ * gst/jpegformat/meson.build:
+ * gst/librfb/meson.build:
+ * gst/meson.build:
+ * gst/midi/meson.build:
+ * gst/mixmatrix/meson.build:
+ * gst/mpeg1sys/meson.build:
+ * gst/mpegdemux/meson.build:
+ * gst/mpegpsmux/meson.build:
+ * gst/mpegtsdemux/meson.build:
+ * gst/mpegtsmux/meson.build:
+ * gst/mve/meson.build:
+ * gst/mxf/meson.build:
+ * gst/nuvdemux/meson.build:
+ * gst/onvif/meson.build:
+ * gst/overlay/meson.build:
+ * gst/patchdetect/meson.build:
+ * gst/pcapparse/meson.build:
+ * gst/pnm/meson.build:
+ * gst/rawparse/meson.build:
+ * gst/real/meson.build:
+ * gst/removesilence/meson.build:
+ * gst/rtjpeg/meson.build:
+ * gst/sdi/meson.build:
+ * gst/sdp/meson.build:
+ * gst/segmentclip/meson.build:
+ * gst/siren/meson.build:
+ * gst/smooth/meson.build:
+ * gst/speed/meson.build:
+ * gst/stereo/meson.build:
+ * gst/subenc/meson.build:
+ * gst/tta/meson.build:
+ * gst/vbidec/meson.build:
+ * gst/videofilters/meson.build:
+ * gst/videoframe_audiolevel/meson.build:
+ * gst/videomeasure/meson.build:
+ * gst/videoparsers/meson.build:
+ * gst/videosignal/meson.build:
+ * gst/vmnc/meson.build:
+ * gst/y4m/meson.build:
+ * gst/yadif/meson.build:
+ * meson.build:
+ * meson_options.txt:
+ * pkgconfig/meson.build:
+ * sys/bluez/meson.build:
+ * sys/d3dvideosink/meson.build:
+ * sys/directsound/meson.build:
+ * sys/dvb/meson.build:
+ * sys/meson.build:
+ * sys/wasapi/meson.build:
+ * sys/winks/meson.build:
+ * sys/winscreencap/meson.build:
+ Add support for Meson as alternative/parallel build system
+ https://github.com/mesonbuild/meson
+ With contributions from:
+ Tim-Philipp Müller <tim@centricular.com>
+ Matej Knopp <matej.knopp@gmail.com>
+ Jussi Pakkanen <jpakkane@gmail.com> (original port)
+ Highlights of the features provided are:
+ * Faster builds on Linux (~40-50% faster)
+ * The ability to build with MSVC on Windows
+ * Generate Visual Studio project files
+ * Generate XCode project files
+ * Much faster builds on Windows (on-par with Linux)
+ * Seriously fast configure and building on embedded
+ ... and many more. For more details see:
+ http://blog.nirbheek.in/2016/05/gstreamer-and-meson-new-hope.html
+ http://blog.nirbheek.in/2016/07/building-and-developing-gstreamer-using.html
+ Building with Meson should work on both Linux and Windows, but may
+ need a few more tweaks on other operating systems.
+
+2016-08-18 17:46:19 +0530 Nirbheek Chauhan <nirbheek@centricular.com>
+
+ * ext/dts/gstdtsdec.c:
+ * ext/resindvd/resindvdsrc.h:
+ * gst/bayer/gstbayer2rgb.c:
+ * gst/dccp/gstdccp_common.h:
+ * gst/librfb/d3des.c:
+ * sys/fbdev/gstfbdevsink.c:
+ plugins: Use stdint.h instead of _stdint.h
+ _stdint.h is generated by Autotools and we don't really need it. All
+ supported platforms now ship with stdint.h. The only stickler was MSVC,
+ and since Visual Studio 2015 it also ships stdint.h now.
+
+2016-08-12 21:51:17 +0530 Nirbheek Chauhan <nirbheek@centricular.com>
+
+ * win32/common/libgstgl.def:
+ win32: Update libgstgl.def
+
+2016-03-02 00:53:44 +0530 Nirbheek Chauhan <nirbheek.chauhan@gmail.com>
+
+ * gst-libs/gst/codecparsers/nalutils.c:
+ codecparsers: Explicitly export functions marked inline
+ On MSVC, inline functions are not available outside of a file unless
+ explicitly exported
+
+2016-08-19 12:24:58 +0100 Luis de Bethencourt <luisbg@osg.samsung.com>
+
+ * gst/rawparse/gstrawvideoparse.c:
+ rawvideoparse: fix typo in comment
+ Small typo in the comment explaining the code fixed by the previous commit.
+ Fixing it.
+
+2016-08-19 14:19:38 +0300 Sebastian Dröge <sebastian@centricular.com>
+
+ * gst/rawparse/gstrawvideoparse.c:
+ rawvideoparse: Revert last commit and actually remember the physically last plane
+ Instead of just always taking the last one as before.
+
+2016-08-19 11:57:33 +0100 Luis de Bethencourt <luisbg@osg.samsung.com>
+
+ * gst/rawparse/gstrawvideoparse.c:
+ rawvideoparse: remove unused assignment
+ Value in last_plane will be overwritten before used, remove unused
+ asignment.
+ Fixes commit 91cf5ac69f9c99fe41d60f42b4174915dd135e7b
+ CID 1371462
+
+2016-08-18 18:55:41 +0200 Philippe Renon <philippe_renon@yahoo.fr>
+
+ * ext/daala/gstdaaladec.c:
+ daala: fix typo related compilation error
+ https://bugzilla.gnome.org/show_bug.cgi?id=770102
+
+2016-08-19 11:02:46 +0100 Tim-Philipp Müller <tim@centricular.com>
+
+ * configure.ac:
+ * sys/Makefile.am:
+ * sys/applemedia-nonpublic/Makefile.am:
+ * sys/applemedia-nonpublic/bufferfactory.h:
+ * sys/applemedia-nonpublic/bufferfactory.m:
+ * sys/applemedia-nonpublic/celapi.c:
+ * sys/applemedia-nonpublic/celapi.h:
+ * sys/applemedia-nonpublic/celvideosrc.c:
+ * sys/applemedia-nonpublic/celvideosrc.h:
+ * sys/applemedia-nonpublic/cmapi.c:
+ * sys/applemedia-nonpublic/cmapi.h:
+ * sys/applemedia-nonpublic/coremediabuffer.c:
+ * sys/applemedia-nonpublic/coremediabuffer.h:
+ * sys/applemedia-nonpublic/coremediactx.c:
+ * sys/applemedia-nonpublic/coremediactx.h:
+ * sys/applemedia-nonpublic/corevideobuffer.c:
+ * sys/applemedia-nonpublic/corevideobuffer.h:
+ * sys/applemedia-nonpublic/cvapi.c:
+ * sys/applemedia-nonpublic/cvapi.h:
+ * sys/applemedia-nonpublic/dynapi-internal.h:
+ * sys/applemedia-nonpublic/dynapi.c:
+ * sys/applemedia-nonpublic/dynapi.h:
+ * sys/applemedia-nonpublic/mioapi.c:
+ * sys/applemedia-nonpublic/mioapi.h:
+ * sys/applemedia-nonpublic/miovideodevice.c:
+ * sys/applemedia-nonpublic/miovideodevice.h:
+ * sys/applemedia-nonpublic/miovideosrc.c:
+ * sys/applemedia-nonpublic/miovideosrc.h:
+ * sys/applemedia-nonpublic/mtapi.c:
+ * sys/applemedia-nonpublic/mtapi.h:
+ * sys/applemedia-nonpublic/plugin.m:
+ applemedia-nonpublic: remove bitrotten plugin that's no longer needed
+
+2016-08-19 19:46:24 +1000 Florian Zwoch <fzwoch@gmail.com>
+
+ * sys/applemedia/avfvideosrc.m:
+ avfvideosrc: account for retina displays when capturing screens
+ Fixes: https://bugzilla.gnome.org/show_bug.cgi?id=770030
+
+2016-08-19 17:11:13 +1000 Matthew Waters <matthew@centricular.com>
+
+ * configure.ac:
+ build: bump graphene requirement to 1.4
+
+2016-08-19 15:35:49 +1000 Matthew Waters <matthew@centricular.com>
+
+ * ext/gl/gstgltransformation.c:
+ * ext/gl/gstgltransformation.h:
+ gltransformation: rewrite the inverse transformation logic
+ It now returns the correct values for both orthographic and perspective
+ projections and takes into account the aspect ratio of the video, handles
+ the Y-flipping in GL and by us and uses some more helpers from graphene.
+
+2016-07-01 16:18:55 +1000 Matthew Waters <matthew@centricular.com>
+
+ * gst-libs/gst/gl/gstglwindow.c:
+ glwindow: marshal gst_gl_window_resize through the window loop
+ saves having every caller do it themselves.
+
+2016-06-30 23:06:43 +1000 Matthew Waters <matthew@centricular.com>
+
+ * gst-libs/gst/gl/wayland/wayland_event_source.c:
+ gl/wayland: use multi-threaded safe event wayland API
+ Multiple threads may be accessing the wayland fd at the same time which
+ requires the use of special wayland API to deal with to ensure nobody
+ will steal reads and cause a stall for anyone else.
+
+2016-07-01 00:15:55 +1000 Matthew Waters <matthew@centricular.com>
+
+ * tests/examples/gl/gtk/fxtest/fxtest.c:
+ gl/examples/fxtest: fix up for wayland support
+ - Pass the wayland display to gst
+ - Redrawing on resize is no longer needed.
+
+2016-08-17 16:21:34 -0700 Reynaldo H. Verdejo Pinochet <reynaldo@osg.samsung.com>
+
+ * sys/dvb/parsechannels.c:
+ dvb/parsechannels: warn on ignored key/value pairs
+ Otherwise at runtine, users get the misleading
+ parsing-OK message with no info on, for example,
+ properties that failed to map because of a typo.
+
+2016-08-16 15:35:39 -0700 Reynaldo H. Verdejo Pinochet <reynaldo@osg.samsung.com>
+
+ * sys/dvb/parsechannels.c:
+ dvb/parsechannels: handle problems parsing dvbv5 config keys
+
+2016-08-18 15:28:33 +0300 Sebastian Dröge <sebastian@centricular.com>
+
+ * ext/mplex/gstmplex.cc:
+ mplex: Don't start task (yet/again) on pad release if we're in READY or NULL
+ Fixes spurious segfault in unit test, where the task was started again during
+ shutdown when all pads were removed... and was then still running while the
+ element was finalized.
+
+2016-08-18 13:21:54 +0300 Sebastian Dröge <sebastian@centricular.com>
+
+ * ext/dash/gstdashdemux.c:
+ dashdemux: In KEY_UNITS trick mode, download all I-frames and not only IDR
+
+2016-08-08 17:54:46 +0200 Carlos Rafael Giani <dv@pseudoterminal.org>
+
+ * tests/check/elements/.gitignore:
+ * tests/check/elements/rawaudioparse.c:
+ * tests/check/elements/rawvideoparse.c:
+ rawparse: Fix and extend unit tests
+ * Add caps change test to unit tests
+ * Cleanup leftover buffers after each unit test
+ * Add missing rawvideoparse entry in .gitignore
+ https://bugzilla.gnome.org/show_bug.cgi?id=769637
+
+2016-08-16 09:31:40 +0200 Carlos Rafael Giani <dv@pseudoterminal.org>
+
+ * gst/rawparse/gstrawvideoparse.c:
+ * gst/rawparse/gstrawvideoparse.h:
+ * tests/check/elements/rawvideoparse.c:
+ rawvideoparse: Compute plane offsets & strides if no custom ones are set
+ This is useful to ensure that the offsets and strides are computed if
+ only width, height, format etc. in the property config are set.
+ https://bugzilla.gnome.org/show_bug.cgi?id=769797
+
+2016-08-16 18:46:49 +0300 Sergei Saveliev <saveliev.sergei@gmail.com>
+
+ * sys/applemedia/avfassetsrc.m:
+ avfassetsrc: Don't escape the URI another time in another location too
+ One location was forgotten in a913a0b9679dd58945ad105d240db45595fdaba6
+ https://bugzilla.gnome.org/show_bug.cgi?id=767492
+
+2016-08-16 20:33:21 +1000 Matthew Waters <matthew@centricular.com>
+
+ * gst-libs/gst/gl/egl/gstegl.h:
+ gl/egl: fix inverted typedef
+ 2b6841d had an inverted typedef defining ginptr and EGLAttrib. Fix that.
+
+2016-08-16 10:37:28 +0300 Sebastian Dröge <sebastian@centricular.com>
+
+ * ext/timidity/gstwildmidi.c:
+ wildmidi: Fix compilation with wildmidi 0.4
+ Old versions used char* for the data, new versions use int8_t*. They're often
+ not the same and differ in signedness.
+
+2016-08-16 16:51:02 +1000 Matthew Waters <matthew@centricular.com>
+
+ * configure.ac:
+ * gst-libs/gst/gl/egl/gstegl.h:
+ gl/build: add configure check for possibly missing EGLAttrib
+ Fixes the build on older android targets.
+
+2016-07-13 17:15:44 +0800 Song Bing <bing.song@nxp.com>
+
+ * gst-libs/gst/gl/egl/gsteglimage.c:
+ * gst-libs/gst/gl/egl/gstglcontext_egl.c:
+ * gst-libs/gst/gl/egl/gstglcontext_egl.h:
+ * gst-libs/gst/gl/egl/gstglmemoryegl.c:
+ gl/egl/dmabuf: Wrong attribute list type for EGL 1.5
+ For EGL 1.5 spec, the attribute list type should be EGLAttrib.
+ https://bugzilla.gnome.org/show_bug.cgi?id=768602
+
+2016-08-15 16:14:25 +0100 Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+ * gst-libs/gst/gl/gstglcontext.c:
+ glcontext: fix race joining thread on finalize
+ https://bugzilla.gnome.org/show_bug.cgi?id=769939
+
+2016-08-16 00:40:53 +1000 Jan Schmidt <jan@centricular.com>
+
+ * ext/qt/gstqtglutility.cc:
+ qt: Use wglShareLists() workaround unconditionally.
+ Sometimes wglCreateContextAttribsARB() exists, but
+ isn't functional (some Intel drivers), so it's
+ easiest to do the workaround unconditionally.
+
+2016-08-15 16:37:44 +1000 Jan Schmidt <jan@centricular.com>
+
+ * sys/winks/gstksvideodevice.c:
+ * sys/winks/gstksvideodevice.h:
+ * sys/winks/gstksvideosrc.c:
+ * sys/winks/ksvideohelpers.c:
+ * sys/winks/ksvideohelpers.h:
+ winks: Fix RGB frame flipping and postprocessing
+ Uncompressed RGB frames can be (usually are) bottom-up
+ layout in DirectShow, and the code to flip them wasn't
+ properly ported from 0.10. Fix it.
+ Fix post-processing of RGB buffers. We need a writable
+ buffer, but the requests pool is holding an extra ref.
+ This could use more fixing to use a buffer pool
+
+2016-08-12 22:17:25 +1000 Jan Schmidt <jan@centricular.com>
+
+ * sys/winks/gstksvideosrc.c:
+ winks: Give the ksvideosrc PRIMARY rank
+ It's the primary video source on Windows, so give it a
+ rank for autoplugging by camerabin and friends
+
+2016-08-12 22:16:33 +1000 Jan Schmidt <jan@centricular.com>
+
+ * sys/winks/ksvideohelpers.c:
+ winks: Fix swapped RGBx/RGB caps mapping, and endianness.
+ The RGBx and RGB format mappings were reversed.
+ What Windows calls RGB are laid out as BGR in our parlance, so
+ switch that too
+
+2016-08-08 13:41:14 +1000 Jan Schmidt <jan@centricular.com>
+
+ * ext/qt/gstqtglutility.cc:
+ qt: Move debug statement to after the category init
+ Don't output debug to an uninitialised debug category.
+
+2016-08-11 12:19:59 +0200 Sebastian Dröge <sebastian@centricular.com>
+
+ * tests/check/Makefile.am:
+ dashdemux: Disable unit test for the time being
+ It uses random data streams but dashdemux nowadays actually looks into the
+ streams and doesn't like randomness very much. The tests should probably just
+ become validate tests on real streams.
+ https://bugzilla.gnome.org/show_bug.cgi?id=769553
+
+2016-08-11 12:11:22 +0200 Sebastian Dröge <sebastian@centricular.com>
+
+ * ext/dash/gstdashdemux.c:
+ Revert "Revert "dashdemux: When doing SIDX seeking, return instead of overriding the timestamp with 0 from the MPD seeking method""
+ This reverts commit aea2c13fc1672a7260679d706d0a084a34ba7531.
+
+2016-08-04 14:47:41 +0300 Sebastian Dröge <sebastian@centricular.com>
+
+ * ext/dash/gstdashdemux.c:
+ dashdemux: When doing chunked downloading on SIDX, clip requests on the SIDX entry boundaries
+ https://bugzilla.gnome.org/show_bug.cgi?id=741104
+
+2016-08-02 08:47:55 +0300 Sebastian Dröge <sebastian@centricular.com>
+
+ * ext/dash/gstdashdemux.c:
+ * ext/dash/gstdashdemux.h:
+ dashdemux: Collect average moof and first sync sample sizes
+ And always request those in the beginning so that ideally we get the moof and
+ the first sync sample all together with the first HTTP request.
+ https://bugzilla.gnome.org/show_bug.cgi?id=741104
+
+2016-08-02 08:35:26 +0300 Sebastian Dröge <sebastian@centricular.com>
+
+ * ext/dash/gstdashdemux.c:
+ * ext/dash/gstdashdemux.h:
+ dashdemux: Download any sync-sample following the moof directly in key-units only mode
+ We don't have to do yet another additional request but can just download the
+ data directly.
+ Also unify the key-unit only mode buffer pushing and extract it into its own
+ function now that it became more complicated.
+ https://bugzilla.gnome.org/show_bug.cgi?id=741104
+
+2016-07-29 12:50:58 +0300 Sebastian Dröge <sebastian@centricular.com>
+
+ * ext/dash/gstdashdemux.c:
+ dashdemux: If a fragment contains no sync samples, disable key-unit mode
+ https://bugzilla.gnome.org/show_bug.cgi?id=741104
+
+2016-07-29 12:32:50 +0300 Sebastian Dröge <sebastian@centricular.com>
+
+ * ext/dash/gstdashdemux.c:
+ * ext/dash/gstdashdemux.h:
+ dashdemux: Remember if for a stream we could do key-units only mode
+ This makes sure we don't even try going into that mode if we previously saw
+ that the stream does not have the suitable metadata.
+ https://bugzilla.gnome.org/show_bug.cgi?id=741104
+
+2016-07-29 11:54:21 +0300 Sebastian Dröge <sebastian@centricular.com>
+
+ * ext/dash/gstdashdemux.c:
+ dashdemux: Also allow key-unit only mode if (some) sample flags are given by trex but we can still find sync frames
+ https://bugzilla.gnome.org/show_bug.cgi?id=741104
+
+2016-07-12 20:09:52 +0300 Sebastian Dröge <sebastian@centricular.com>
+
+ * ext/dash/gstdashdemux.c:
+ dashdemux: Use chunked downloading for the moof in KEY_UNITS mode
+ Allows us to reuse the HTTP connection and reduce latencies a lot.
+ https://bugzilla.gnome.org/show_bug.cgi?id=741104
+
+2016-07-12 10:22:43 +0300 Sebastian Dröge <sebastian@centricular.com>
+
+ * gst-libs/gst/adaptivedemux/gstadaptivedemux.c:
+ * gst-libs/gst/adaptivedemux/gstadaptivedemux.h:
+ adaptivedemux: Add API for allowing subclasses to download URLs in chunks
+ This allows to gradually download part of a fragment when the final size is
+ not known and only a part of it should be downloaded. For example when only
+ the moof should be parsed and/or a single keyframe should be downloaded.
+ https://bugzilla.gnome.org/show_bug.cgi?id=741104
+
+2016-06-01 14:02:11 +0300 Sebastian Dröge <sebastian@centricular.com>
+
+ * ext/dash/gstdashdemux.c:
+ dashdemux: Mark every first buffer of moov, sidx, moof and mdat as DISCONT in keyframe-only mode
+ We need to mark every first buffer of a key unit as discont, and also every
+ first buffer of a moov and moof. This ensures that qtdemux takes note of our
+ buffer offsets for each of those buffers instead of keeping track of them
+ itself from the first buffer. We need offsets to be consistent between moof
+ and mdat
+ https://bugzilla.gnome.org/show_bug.cgi?id=741104
+
+2016-07-28 10:53:49 +0300 Sebastian Dröge <sebastian@centricular.com>
+
+ * ext/dash/gstdashdemux.c:
+ dashdemux: Only enable key-unit trick mode for video streams
+ https://bugzilla.gnome.org/show_bug.cgi?id=741104
+
+2016-05-31 15:12:49 +0300 Sebastian Dröge <sebastian@centricular.com>
+
+ * ext/dash/gstdashdemux.c:
+ dashdemux: Only do keyframe-only playback if the corresponding seek flag is given
+ https://bugzilla.gnome.org/show_bug.cgi?id=741104
+
+2016-05-30 12:09:34 +0300 Sebastian Dröge <sebastian@centricular.com>
+
+ * ext/dash/gstdashdemux.c:
+ * ext/dash/gstdashdemux.h:
+ dashdemux: Implement downloading of only sync samples
+ https://bugzilla.gnome.org/show_bug.cgi?id=741104
+
+2016-05-30 11:15:03 +0300 Sebastian Dröge <sebastian@centricular.com>
+
+ * ext/dash/gstdashdemux.c:
+ * ext/dash/gstdashdemux.h:
+ dashdemux: Store parsed moof and extract offsets of sync samples in it
+ https://bugzilla.gnome.org/show_bug.cgi?id=741104
+
+2016-05-02 17:11:31 +0300 Sebastian Dröge <sebastian@centricular.com>
+
+ * tests/check/Makefile.am:
+ * tests/check/elements/dash_isoff.c:
+ * tests/check/elements/dash_isoff.h:
+ dash: Add test for parsing a moof box
+ https://bugzilla.gnome.org/show_bug.cgi?id=741104
+
+2016-05-02 16:03:56 +0300 Sebastian Dröge <sebastian@centricular.com>
+
+ * tests/check/Makefile.am:
+ * tests/check/elements/dash_isoff.c:
+ dash: Add unit test for ISOBFF box header parsing
+ https://bugzilla.gnome.org/show_bug.cgi?id=741104
+
+2016-04-07 21:33:51 +0300 Sebastian Dröge <sebastian@centricular.com>
+
+ * ext/dash/gstdashdemux.c:
+ * ext/dash/gstisoff.c:
+ * ext/dash/gstisoff.h:
+ dashdemux: Implement parsing of moof box
+ https://bugzilla.gnome.org/show_bug.cgi?id=741104
+
+2016-04-07 13:34:57 +0300 Sebastian Dröge <sebastian@centricular.com>
+
+ * ext/dash/gstisoff.c:
+ dashdemux: Move code around to keep all sidx related functions together
+ https://bugzilla.gnome.org/show_bug.cgi?id=741104
+
+2016-04-07 12:57:13 +0300 Sebastian Dröge <sebastian@centricular.com>
+
+ * ext/dash/gstdashdemux.c:
+ * ext/dash/gstisoff.c:
+ * ext/dash/gstisoff.h:
+ dashdemux: Store box fourccs in the header at a central place
+ https://bugzilla.gnome.org/show_bug.cgi?id=741104
+
+2016-03-28 13:45:36 +0300 Sebastian Dröge <sebastian@centricular.com>
+
+ * ext/dash/gstdashdemux.c:
+ * ext/dash/gstdashdemux.h:
+ dashdemux: Implement parsing of ISOBMFF boxes
+ https://bugzilla.gnome.org/show_bug.cgi?id=741104
+
+2016-03-16 13:48:09 +0200 Sebastian Dröge <sebastian@centricular.com>
+
+ * ext/dash/gstisoff.c:
+ * ext/dash/gstisoff.h:
+ dash: Add helper for parsing box headers
+ https://bugzilla.gnome.org/show_bug.cgi?id=741104
+
+2016-08-10 22:50:12 +0000 xlazom00 <xlazom00@gmail.com>
+
+ * ext/x265/gstx265enc.c:
+ x265enc: Enable aspect ratio
+ x265 encoder need aspectRatioIdc == X265_EXTENDED_SAR if we want to use
+ sarWidth/sarHeight
+ https://bugzilla.gnome.org/show_bug.cgi?id=769716
+
+2016-08-08 13:10:12 +0200 Josep Torra <n770galaxy@gmail.com>
+
+ * ext/openjpeg/gstopenjpegenc.c:
+ openjpegenc: use the corrent enumeration
+ Fixes the following error when building in osx.
+ error: implicit conversion from enumeration type
+ 'GstJPEG2000Colorspace' to different enumeration type
+ 'GstJPEG2000Sampling'
+
+2016-08-08 11:28:44 +0200 Sebastian Dröge <sebastian@centricular.com>
+
+ * sys/androidmedia/gstamc.c:
+ amc: Fix call to realloc() to allocate the correct size of items
+
+2016-08-07 20:53:30 +0100 Tim-Philipp Müller <tim@centricular.com>
+
+ * configure.ac:
+ * ext/Makefile.am:
+ fdkaac: actually build and dist
+
+2016-08-06 23:31:23 +0000 xlazom00 <xlazom00@gmail.com>
+
+ * ext/hls/Makefile.am:
+ * gst/timecode/Makefile.am:
+ hls, timecode: fix linking
+ https://bugzilla.gnome.org//show_bug.cgi?id=769587
+
+2016-08-07 12:20:16 +0300 Sebastian Dröge <sebastian@centricular.com>
+
+ * ext/fdkaac/Makefile.am:
+ * ext/fdkaac/gstfdkaacdec.c:
+ * ext/fdkaac/gstfdkaacdec.h:
+ * ext/fdkaac/plugin.c:
+ fdkaac: Add FDK AAC based decoder element
+ Missing is support for error concealment, etc.
+
+2016-08-07 11:39:07 +0300 Sebastian Dröge <sebastian@centricular.com>
+
+ * ext/fdkaac/Makefile.am:
+ * ext/fdkaac/gstfdkaacenc.c:
+ * ext/fdkaac/gstfdkaacenc.h:
+ * ext/fdkaac/plugin.c:
+ fdkaac: Add FDK AAC based encoder element
+ This currently only handles LC profile and exposes a bitrate property, but
+ handles up to 7.1 channels. See TODO list for missing features.
+
+2016-08-07 08:51:06 +0300 Sebastian Dröge <sebastian@centricular.com>
+
+ * configure.ac:
+ * ext/fdkaac/Makefile.am:
+ * ext/fdkaac/plugin.c:
+ fdkaac: Initial plugin skeleton
+
+2016-08-01 11:45:30 +0200 Bernhard Miller <bernhard.miller@streamunlimited.com>
+
+ * gst/aiff/aiffparse.c:
+ aiffparse: keep end_offset when seeking
+ After seeking in aiff files the information about the data end offset is
+ discarded, leading to audio artifacts with metadata chunks at the end of
+ a file.
+ This patch retains the end offset information after a seek event.
+ https://bugzilla.gnome.org//show_bug.cgi?id=769376
+
+2016-08-06 16:15:33 +0100 Tim-Philipp Müller <tim@centricular.com>
+
+ * gst/dvdspu/gstdvdspu.c:
+ dvdspu: don't crash if video frame could not be mapped
+ As might happen with e.g. vaapi and the test file from
+ https://bugzilla.gnome.org/show_bug.cgi?id=736227
+
+2016-08-05 09:16:58 +0200 Edward Hervey <bilboed@bilboed.com>
+
+ * ext/dash/gstdashdemux.c:
+ Revert "dashdemux: When doing SIDX seeking, return instead of overriding the timestamp with 0 from the MPD seeking method"
+ This reverts commit 947656cfd22b75f914d5abe0af82396787f67564.
+ This makes all dash seeking tests fail. Needs more testing to fully understand
+ what's going wrong. Revert ok'd by Sebastian
+
+2016-05-31 19:21:17 +0300 Vivia Nikolaidou <vivia@toolsonair.com>
+
+ * gst/timecode/Makefile.am:
+ * gst/timecode/gsttimecodewait.c:
+ * gst/timecode/gsttimecodewait.h:
+ * gst/timecode/plugin.c:
+ timecodewait: New element to wait for a specific timecode
+ timecodewait receives a timecode as an argument (either as string or as
+ GstVideoTimeCode - one is gst-launch-friendly and the other is code-friendly),
+ and it will drop all audio and video buffers until that timecode has been
+ reached.
+ https://bugzilla.gnome.org/show_bug.cgi?id=766419
+
+2016-05-20 18:17:52 +0300 Vivia Nikolaidou <vivia@toolsonair.com>
+
+ * configure.ac:
+ * gst/timecode/Makefile.am:
+ * gst/timecode/gsttimecodestamper.c:
+ * gst/timecode/gsttimecodestamper.h:
+ * gst/timecode/plugin.c:
+ timecodestamper: New element to attach SMPTE timecode to buffers
+ The timecodestamper element attaches a SMPTE timecode to each video buffer.
+ This timecode corresponds to the current stream time.
+ https://bugzilla.gnome.org/show_bug.cgi?id=766419
+
+2016-05-15 17:25:44 +0300 Vivia Nikolaidou <vivia@toolsonair.com>
+
+ * sys/decklink/gstdecklinkvideosink.cpp:
+ * sys/decklink/gstdecklinkvideosink.h:
+ decklinkvideosink: Add support for GstVideoTimeCode
+ The timecode will be fetched from the video buffer and outputted on the
+ decklink video sink.
+ https://bugzilla.gnome.org/show_bug.cgi?id=766419
+
+2016-05-15 16:04:14 +0300 Vivia Nikolaidou <vivia@toolsonair.com>
+
+ * sys/decklink/gstdecklink.cpp:
+ * sys/decklink/gstdecklink.h:
+ * sys/decklink/gstdecklinkvideosrc.cpp:
+ * sys/decklink/gstdecklinkvideosrc.h:
+ decklinkvideosrc: Add support for GstVideoTimeCode
+ The timecode will be fetched from the decklink source and attached to the
+ video buffer.
+ https://bugzilla.gnome.org/show_bug.cgi?id=766419
+
+2016-08-04 23:14:41 +1000 Matthew Waters <matthew@centricular.com>
+
+ * gst-libs/gst/gl/gstglcolorconvert.c:
+ glcolorconvert: add missing rgb16 and bgr16 video formats in switch
+ Fixes an assertion that code should not be reached
+ https://bugzilla.gnome.org/show_bug.cgi?id=769462
+
+2016-08-04 22:28:13 +1000 Jan Schmidt <jan@centricular.com>
+
+ * ext/hls/gsthlsdemux.c:
+ hls: Avoid potential NULL pointer dereference.
+ Fixes CID 1364753
+
+2016-08-04 22:21:16 +1000 Jan Schmidt <jan@centricular.com>
+
+ * ext/hls/m3u8.c:
+ hls: Avoid coverity warning about access off the end of an array.
+ Fixes CID 1364755
+
+2016-08-04 14:42:34 +0300 Sebastian Dröge <sebastian@centricular.com>
+
+ * ext/dash/gstdashdemux.c:
+ dashdemux: When doing SIDX seeking, return instead of overriding the timestamp with 0 from the MPD seeking method
+ We don't need to call the latter at all as we're definitely in this period and
+ the segment is selected via the SIDX.
+ This is especially important when doing SNAP seeks, as otherwise we would
+ always start from the beginning of the period (usually 0) again.
+
+2016-08-04 11:08:30 +0100 Luis de Bethencourt <luisbg@osg.samsung.com>
+
+ * ext/hls/m3u8.c:
+ hls: m3u8: remove impossible condition
+ After the check in line 1,111, media->uri can't be NULL. So the two checks
+ for GST_HLS_MEDIA_TYPE_CLOSED_CAPTIONS are the same, removing the redundant
+ one which goes to cc_unsupported.
+ CID 1364752
+
+2016-08-04 04:53:50 +1000 Jan Schmidt <jan@centricular.com>
+
+ * ext/hls/gsthlsdemux.c:
+ hlsdemux: Don't output pending data after error
+ If the last_ret status is not OK, skip output
+ of any pending PCR scan buffer, similarly to how
+ the pending decryption buffer is handled above.
+
+2016-08-04 04:29:38 +1000 Jan Schmidt <jan@centricular.com>
+
+ * gst-libs/gst/adaptivedemux/gstadaptivedemux.c:
+ adaptivedemux: On EOS, handle it before waking download loop
+ Otherwise, if the download loop wakes too quickly, it
+ might miss the last_ret value update from the processing
+ thread and loop again.
+
+2016-08-04 01:51:37 +1000 Jan Schmidt <jan@centricular.com>
+
+ * ext/hls/gsthlsdemux-util.c:
+ hlsdemux: Include config.h and add header in utils
+ In gsthlsdemux-util.c, include config.h before any
+ other headers, and add a copyright / license header.
+
+2016-07-13 11:02:23 +0200 Edward Hervey <edward@centricular.com>
+
+ * gst/mpegtsdemux/tsdemux.c:
+ tsdemux: Fix draining on wrong programs
+ When draining a program, we might send a newsegment event on the pads
+ that are going to be removed (and then the pending data).
+ In order to do that, calculate_and_push_newsegment() needs to know
+ what list of streams it should take into account (instead of blindly
+ using the current one).
+ All callers to calculate_and_push_newsegment() and push_pending_data()
+ can now specify the program on which to act (or NULL for the default
+ one).
+
+2016-07-12 15:58:40 +0200 Edward Hervey <edward@centricular.com>
+
+ * gst/mpegtsdemux/tsdemux.c:
+ tsdemux: Fix GAP synchronization without a valid PCR PID
+ For streams that don't have a valid PCR PID, we just use the latest
+ PTS from any given stream.
+ https://bugzilla.gnome.org/show_bug.cgi?id=608148
+
+2016-05-31 13:09:43 +0200 Michael Olbrich <m.olbrich@pengutronix.de>
+
+ * gst/mpegtsdemux/mpegtspacketizer.c:
+ tsdemux: handle pcr_pid == 0x1fff
+ Streams without PCR make senses in HLS, where the playlist timestamps
+ can be used to seek or calculate the duration.
+ https://bugzilla.gnome.org/show_bug.cgi?id=608148
+
+2015-05-10 20:10:49 +0200 Arnaud Vrac <avrac@freebox.fr>
+
+ * gst/mpegtsdemux/mpegtsbase.c:
+ mpegtsdemux: do not abort playback when no PCR were found during initial scan
+ Seeking will not be possible in those streams but at least the can be
+ played. Note scanning is only done when tsdemux is configured in pull mode.
+ https://bugzilla.gnome.org/show_bug.cgi?id=608148
+
+2015-05-09 15:52:22 +0200 Arnaud Vrac <avrac@freebox.fr>
+
+ * gst/mpegtsdemux/tsdemux.c:
+ mpegtsdemux: only wait for PCR when PCR pid is set
+ Streams without PCR make senses in HLS, where the playlist timestamps
+ can be used to seek or calculate the duration.
+ https://bugzilla.gnome.org/show_bug.cgi?id=608148
+
+2016-08-03 04:18:18 +1000 Jan Schmidt <jan@centricular.com>
+
+ * ext/hls/gsthlsdemux.c:
+ hls: Fix compiler warning for possibly uninit variable
+
+2016-07-28 14:22:02 +0200 Michael Olbrich <m.olbrich@pengutronix.de>
+
+ * ext/hls/gsthlsdemux.c:
+ hlsdemux: seek all streams
+
+2016-05-25 11:23:59 +0200 Michael Olbrich <m.olbrich@pengutronix.de>
+
+ * ext/hls/gsthlsdemux.c:
+ hlsdemux: simplify gst_hls_demux_seek()
+ Don't initialize current_sequence. It is always overwritten in the walk
+ loop.
+
+2016-05-24 15:23:12 +0200 Michael Olbrich <m.olbrich@pengutronix.de>
+
+ * ext/hls/gsthlsdemux.c:
+ hlsdemux: don't download the last fragment when seeking beyond the end of the track
+ It's not used anyways.
+
+2016-07-12 23:05:55 +1000 Jan Schmidt <jan@centricular.com>
+
+ * ext/hls/gsthlsdemux-util.c:
+ * ext/hls/gsthlsdemux.c:
+ * ext/hls/gsthlsdemux.h:
+ hlsdemux: Add support for ID3 tag parsing
+ Parse start PTS out of the ID3 tags in
+ audio fragments. Informational only for now.
+
+2016-02-24 16:57:16 +1100 Jan Schmidt <jan@centricular.com>
+
+ * ext/hls/Makefile.am:
+ * ext/hls/gsthlsdemux-util.c:
+ * ext/hls/gsthlsdemux.c:
+ * ext/hls/gsthlsdemux.h:
+ hlsdemux: Do some reading and dumping of PCRs
+ Read PCRs out of the MPEG-TS stream in a basic way
+ and (for now) just log them
+
+2016-03-05 03:08:55 +1100 Jan Schmidt <jan@centricular.com>
+
+ * ext/hls/gsthlsdemux.c:
+ * ext/hls/gsthlsdemux.h:
+ hlsdemux: Only use the primary stream for bitrate selection.
+ When playing alternate rendition auxilliary streams, ignore
+ them in bitrate measurement (for now).
+
+2016-07-15 16:24:17 +1000 Jan Schmidt <jan@centricular.com>
+
+ * ext/hls/gsthlsdemux.c:
+ hlsdemux: Only select video and audio streams by default
+ Ignore subtitle streams for now, because the
+ different fragment duration causes problems
+ switching bitrates w/ decodebin2 group draining.
+
+2016-02-25 01:58:25 +1100 Jan Schmidt <jan@centricular.com>
+
+ * ext/hls/gsthlsdemux.c:
+ * ext/hls/gsthlsdemux.h:
+ hlsdemux: Publish all media for alternate renditions.
+ Create an output stream for each media when alternate renditions
+ are present. Update the manifests for all those streams, and
+ make sure that typefinding is still done for files smaller than 2KB
+ such as small WebVTT files.
+
+2016-03-08 01:24:20 +1100 Jan Schmidt <jan@centricular.com>
+
+ * ext/hls/gsthlsdemux.c:
+ hlsdemux: Adjust downstream buffer offsets
+ When fetching a byte-region from a server resource,
+ adjust the downstream buffer offsets so that downstream
+ doesn't know. This is because id3demux insists on the
+ first offset being 0. Later we might strip ID3 headers
+ entirely and this will be unneeded.
+
+2016-03-09 03:07:22 +1100 Jan Schmidt <jan@centricular.com>
+
+ * ext/hls/gsthlsdemux.c:
+ * ext/hls/m3u8.c:
+ * ext/hls/m3u8.h:
+ hlsdemux: Choose the default variant and track it when updating
+ Modify playlist updating to track information across updates
+ better, although still hackish.
+ When connection_speed == 0, choose the default variant
+ not the first one in the (now sorted) variant list, as that
+ will have the lowest bitrate.
+
+2015-12-05 11:12:33 +0000 Tim-Philipp Müller <tim@centricular.com>
+
+ * ext/hls/gsthlsdemux.c:
+ * ext/hls/gsthlsdemux.h:
+ * ext/hls/m3u8.c:
+ * ext/hls/m3u8.h:
+ * tests/check/elements/hlsdemux_m3u8.c:
+ hlsdemux: move variant list handling over to new master playlist code
+ Adapt hlsdemux for the m3u8 playlist changes.
+
+2015-11-27 19:26:02 +0000 Tim-Philipp Müller <tim@centricular.com>
+
+ * ext/hls/gsthlsdemux.c:
+ * ext/hls/gsthlsdemux.h:
+ * ext/hls/m3u8.c:
+ * ext/hls/m3u8.h:
+ hls: m3u8: Rework m3u8 parsing and storage.
+ Make M3U8 and GstM3U8MediaFile refcounted. The contents
+ of it and GstM3U8MediaFile are pretty much immutable
+ already, but if we make it refcounted we can just
+ return a ref to the media file from _get_next_fragment()
+ instead of copying over all fields one-by-one, and then
+ copying them all into the adaptive stream structure fields again.
+ Move state from client into m3u8 structure. This will
+ be useful later when we'll have multiple media playlists
+ being streamed at the same time, as will be the case with
+ alternative renditions.
+ This has the downside that we need to copy over some
+ state when we switch between variant streams.
+ The GstM3U8Client structure is gone, and main/current
+ lists are not directly in hlsdemux. hlsdemux had as
+ many CLIENT_LOCK/UNLOCK as the m3u8 code anyway...
+
+2016-07-27 09:28:23 +0800 Haihua Hu <jared.hu@nxp.com>
+
+ * tests/examples/qt/qmlsink/.gitignore:
+ * tests/examples/qt/qmlsink/main.cpp:
+ * tests/examples/qt/qmlsink/main.qml:
+ * tests/examples/qt/qmlsink/play.pro:
+ * tests/examples/qt/qmlsink/qml.qrc:
+ * tests/examples/qt/qmlsrc/.gitignore:
+ * tests/examples/qt/qmlsrc/grabqml.pro:
+ * tests/examples/qt/qmlsrc/main.cpp:
+ * tests/examples/qt/qmlsrc/main.qml:
+ * tests/examples/qt/qmlsrc/qml.qrc:
+ qmlglsrc: Add qmlglsrc unit test example
+ https://bugzilla.gnome.org/show_bug.cgi?id=768160
+
+2016-07-27 08:16:47 +0800 Haihua Hu <jared.hu@nxp.com>
+
+ * ext/qt/Makefile.am:
+ * ext/qt/gstplugin.cc:
+ * ext/qt/gstqtglutility.cc:
+ * ext/qt/gstqtglutility.h:
+ * ext/qt/gstqtsrc.cc:
+ * ext/qt/gstqtsrc.h:
+ * ext/qt/qtitem.cc:
+ * ext/qt/qtwindow.cc:
+ * ext/qt/qtwindow.h:
+ qt: implement qmlglsrc for qml view grab
+ [Matthew Waters]: gst-indent sources
+ https://bugzilla.gnome.org/show_bug.cgi?id=768160
+
+2016-07-27 10:55:01 +0800 Haihua Hu <jared.hu@nxp.com>
+
+ * gst-libs/gst/gl/x11/gstglwindow_x11.c:
+ glwindow: Fix glimagesink cannot show frame when connect to qmlglsrc
+ When connect to qmlglsrc, x11 event loop will be replace by qt event loop
+ which will cause the window cannot receive event from xserver, such as resize
+ https://bugzilla.gnome.org/show_bug.cgi?id=768160
+
+2016-08-02 17:21:20 +0900 Hyunjun Ko <zzoon@igalia.com>
+
+ * gst-libs/gst/gl/gstglupload.c:
+ glupload: Use bufferpool to allocate new buffer in GLTextureUploadMeta
+ To improve performace of upload with GLTextureUploadMeta,
+ use bufferpool instead of allocating new buffer every time.
+ https://bugzilla.gnome.org/show_bug.cgi?id=769293
+
+2016-07-27 14:48:50 +1000 Matthew Waters <matthew@centricular.com>
+
+ * gst-libs/gst/gl/gstglwindow.c:
+ glwindow: move unsetting queue_resize to _resize() instead of _draw()
+ Makes infinitely more sense and implementation were expecting that behaviour
+ anyway and would enter a resize, draw, resize, draw, ... cycle instead of only
+ resizing once.
+
+2016-08-03 09:14:07 +0300 Sebastian Dröge <sebastian@centricular.com>
+
+ * gst-libs/gst/adaptivedemux/gstadaptivedemux.c:
+ adaptivedemux: Never ever hold the manifest lock while changing the source element state
+ Otherwise we will deadlock in various situations that take the manifest lock
+ from the streaming thread or when shutting down or ...
+
+2016-08-02 17:07:37 +0300 Sebastian Dröge <sebastian@centricular.com>
+
+ * tests/check/elements/aiffparse.c:
+ aiffparse: In PUSH mode we will never get the ID3 tags as they are at the end of the file
+ This previously did not fail as before we didn't get any tags at all in PUSH
+ mode, now we get the bitrates.
+
+2016-08-02 13:48:43 +0200 Carlos Rafael Giani <dv@pseudoterminal.org>
+
+ * gst/aiff/Makefile.am:
+ * gst/aiff/aiffparse.c:
+ aiffparse: Add tags for container format and bitrate
+ The bitrate is added to help downstream elements (like uridecodebin)
+ figure out a proper network buffer size
+ https://bugzilla.gnome.org/show_bug.cgi?id=769389
+
+2016-01-20 16:42:24 +0000 Alex Ashley <bugzilla@ashley-family.net>
+
+ * tests/check/elements/dash_mpd.c:
+ tests: dashdemux: add test for gst_mpd_client_get_maximum_segment_duration
+ Add a test of the gst_mpd_client_get_maximum_segment_duration() function
+ to check that it first checks the MPD@maxSegmentDuration and then falls
+ back to checking all of the segment durations.
+ https://bugzilla.gnome.org/show_bug.cgi?id=753751
+
+2016-02-24 15:54:54 +0000 Alex Ashley <bugzilla@ashley-family.net>
+
+ * ext/dash/gstdashdemux.c:
+ * ext/dash/gstmpdparser.c:
+ * ext/dash/gstmpdparser.h:
+ dashdemux: include segment duration when calculating seek range
+ The gst_dash_demux_get_live_seek_range () function returns a stop value
+ that is beyond the available range. The functions
+ gst_mpd_client_check_time_position() and
+ gst_mpd_client_get_next_segment_availability_end_time() in
+ gstmpdparser.c include the segment duration when checking if a segment
+ is available. The gst_dash_demux_get_live_seek_range() function
+ in gstdashdemux.c ignores the segment duration.
+ According to the DASH specification, if maxSegmentDuration is not present,
+ then the maximum Segment duration is the maximum duration of any Segment
+ documented in the MPD.
+ https://bugzilla.gnome.org/show_bug.cgi?id=753751
+
+2016-02-24 15:52:41 +0000 Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+ * gst-libs/gst/adaptivedemux/gstadaptivedemux.c:
+ * gst-libs/gst/adaptivedemux/gstadaptivedemux.h:
+ adaptivedemux: retry once on 4xx/5xx in certain conditions
+ This helps catch those 404 server errors in live streams when
+ seeking to the very beginning, as the server will handle a
+ request with some delay, which can cause it to drop the fragment
+ before sending it.
+ https://bugzilla.gnome.org/show_bug.cgi?id=753751
+
+2016-02-24 15:47:09 +0000 Alex Ashley <bugzilla@ashley-family.net>
+
+ * gst-libs/gst/adaptivedemux/gstadaptivedemux.c:
+ adaptivedemux: expose HTTP status
+ To allow adaptivedemux to make retry decisions, it needs to know what
+ sort of HTTP error has occurred. For example, the retry logic for a
+ 410 error is different from a 504 error.
+ https://bugzilla.gnome.org/show_bug.cgi?id=753751
+
+2016-03-07 17:04:33 +0000 Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+ * gst-libs/gst/adaptivedemux/gstadaptivedemux.c:
+ adaptivedemux: allow seeking before start in live streams
+ Some derived classes (at least dashdemux) expose a seeking range
+ based on wall clock. This means that a subsequent seek to the start
+ of this range will be before the allowed range.
+ To solve this, seeks without the ACCURATE flag are allowed to seek
+ before the start for live streams, in which case the segment is
+ shifted to start at the start of the new seek range. If there is
+ an end position, is is shifted too, to keep the duration constant.
+ https://bugzilla.gnome.org/show_bug.cgi?id=753751
+
+2016-08-01 14:12:35 +0800 Haihua Hu <jared.hu@nxp.com>
+
+ * ext/gl/gstglimagesink.c:
+ glimagesink: Fix horizontal/vertical flip matrizes
+ They were swapped.
+ https://bugzilla.gnome.org/show_bug.cgi?id=769371
+
+2016-07-29 16:32:22 +0300 Sreerenj Balachandran <sreerenj.balachandran@intel.com>
+
+ * gst/videoparsers/gsth264parse.c:
+ videoparsers: h264: Add more scalable profiles to the profile list
+ Adding Scalable Constrained High (G.10.1.2.1) and
+ Scalable High Intra(G.10.1.3) profiles to the profile list
+ https://bugzilla.gnome.org/show_bug.cgi?id=769303
+
+2016-08-01 10:30:29 +0300 Sebastian Dröge <sebastian@centricular.com>
+
+ * sys/androidmedia/gst-android-hardware-camera.c:
+ * sys/androidmedia/gst-android-hardware-sensor.c:
+ * sys/androidmedia/gstahssrc.c:
+ androidmedia: Run gst-indent over everything once again
+
+2016-08-01 10:28:26 +0300 Sebastian Dröge <sebastian@centricular.com>
+
+ * sys/androidmedia/gstamc.c:
+ amc: If we find multiple codecs with the same name, just merge them
+ On the ODroid C1+ the H265 and H264 have the same name but are listed as two
+ different codecs. We have to handle them as the same one that supports both,
+ as otherwise we will register the same GType name twice which fails and we
+ then only have H265 support and not H264 support.
+
+2016-08-01 10:15:04 +0300 Sebastian Dröge <sebastian@centricular.com>
+
+ * sys/androidmedia/gstamc.c:
+ amc: Use a GQueue for O(1) append instead of a GList
+
+2016-07-29 12:31:38 +0300 Sebastian Dröge <sebastian@centricular.com>
+
+ * gst-libs/gst/adaptivedemux/gstadaptivedemux.c:
+ adaptivedemux: Also call reset() in READY->PAUSED
+ This allows subclasses to have initialization code in a single place.
+
+2016-07-29 10:49:26 +0300 Sebastian Dröge <sebastian@centricular.com>
+
+ * gst/rawparse/gstrawaudioparse.c:
+ rawaudioparse: Use G_GINT64_MODIFIER for portability
+ https://bugzilla.gnome.org/show_bug.cgi?id=769295
+
+2016-07-29 10:07:23 +0300 Sebastian Dröge <sebastian@centricular.com>
+
+ * gst/rawparse/gstunalignedaudioparse.c:
+ unalignedaudioparse: Fix element factory name of inner parser
+
+2016-07-29 08:54:00 +0300 Sebastian Dröge <sebastian@centricular.com>
+
+ * sys/androidmedia/gstamc.c:
+ amc: Print generated raw/encoded caps in debug logs
+
+2016-07-28 11:27:29 +0300 Sebastian Dröge <sebastian@centricular.com>
+
+ * ext/dash/gstdashdemux.c:
+ * ext/dash/gstdashdemux.h:
+ dashdemux: Skip audio streams if TRICKMODE_NO_AUDIO is given in the seek event
+ We just don't expose pads for audio streams, or even download them.
+
+2016-07-28 11:16:24 +0300 Sebastian Dröge <sebastian@centricular.com>
+
+ * ext/dash/gstdashdemux.c:
+ dashdemux: Reset number of subtitle streams counter on reset() too
+ Otherwise we will continue increasing forever the number of subtitle streams
+ when reusing the element for another DASH manifest.
+
+2016-07-26 17:01:55 +0100 Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+ * tests/check/pipelines/simple-launch-lines.c:
+ tests: fix simple-launch-lines when jpeg lib isn't present
+ JPEG detection in configure.ac defines HAVE_JPEG to 0 if the
+ jpeg lib isn't found, rather then not defining it.
+ https://bugzilla.gnome.org/show_bug.cgi?id=769197
+
+2016-07-25 17:55:24 +0200 Carlos Rafael Giani <dv@pseudoterminal.org>
+
+ * docs/plugins/gst-plugins-bad-plugins-docs.sgml:
+ * docs/plugins/gst-plugins-bad-plugins-sections.txt:
+ * docs/plugins/inspect/plugin-rawparse.xml:
+ docs: Update rawparser documentation
+ Signed-off-by: Carlos Rafael Giani <dv@pseudoterminal.org>
+ https://bugzilla.gnome.org/show_bug.cgi?id=767011
+
+2016-07-25 17:54:09 +0200 Carlos Rafael Giani <dv@pseudoterminal.org>
+
+ * gst/rawparse/Makefile.am:
+ * gst/rawparse/gstaudioparse.c:
+ * gst/rawparse/gstaudioparse.h:
+ * gst/rawparse/gstrawparse.c:
+ * gst/rawparse/gstrawparse.h:
+ * gst/rawparse/gstvideoparse.c:
+ * gst/rawparse/gstvideoparse.h:
+ rawparse: Remove old parser code and wrap new parsers in old elements
+ https://bugzilla.gnome.org/show_bug.cgi?id=767011
+
+2016-07-25 13:45:40 +0200 Carlos Rafael Giani <dv@pseudoterminal.org>
+
+ * gst/rawparse/Makefile.am:
+ * gst/rawparse/gstrawaudioparse.c:
+ * gst/rawparse/gstrawaudioparse.h:
+ * gst/rawparse/gstrawbaseparse.c:
+ * gst/rawparse/gstrawbaseparse.h:
+ * gst/rawparse/gstrawvideoparse.c:
+ * gst/rawparse/gstrawvideoparse.h:
+ * gst/rawparse/gstunalignedaudioparse.c:
+ * gst/rawparse/gstunalignedvideoparse.c:
+ * gst/rawparse/gstunalignedvideoparse.h:
+ * gst/rawparse/plugin.c:
+ * gst/rawparse/unalignedvideo.h:
+ * tests/check/Makefile.am:
+ * tests/check/elements/.gitignore:
+ * tests/check/elements/rawaudioparse.c:
+ * tests/check/elements/rawvideoparse.c:
+ rawparse: Add new raw audio and video parser elements
+ The new rawaudioparse and rawvideoparse elements are based on GstBaseParse
+ and completely replace audioparse and videoparse
+ https://bugzilla.gnome.org/show_bug.cgi?id=767011
+
+2016-07-26 16:01:19 +1000 Matthew Waters <matthew@centricular.com>
+
+ * ext/gl/caopengllayersink.h:
+ * ext/gl/caopengllayersink.m:
+ caopengllayersink: remove unused to_quit variable
+ It was always 0 and never set to anything meaningful.
+
+2016-07-26 15:57:54 +1000 Matthew Waters <matthew@centricular.com>
+
+ * gst-libs/gst/gl/gstglframebuffer.c:
+ glframebuffer: add compatibility definition for GL_DEPTH_STENCIL_ATTACHMENT
+ GLES2 doesn't have it defined...
+
+2016-07-15 13:39:54 +1000 Matthew Waters <matthew@centricular.com>
+
+ * ext/gl/effects/gstgleffectblur.c:
+ * ext/gl/effects/gstgleffectbulge.c:
+ * ext/gl/effects/gstgleffectfisheye.c:
+ * ext/gl/effects/gstgleffectglow.c:
+ * ext/gl/effects/gstgleffectidentity.c:
+ * ext/gl/effects/gstgleffectlaplacian.c:
+ * ext/gl/effects/gstgleffectlumatocurve.c:
+ * ext/gl/effects/gstgleffectlumatocurve.h:
+ * ext/gl/effects/gstgleffectmirror.c:
+ * ext/gl/effects/gstgleffectrgbtocurve.c:
+ * ext/gl/effects/gstgleffectsin.c:
+ * ext/gl/effects/gstgleffectsobel.c:
+ * ext/gl/effects/gstgleffectsquare.c:
+ * ext/gl/effects/gstgleffectsqueeze.c:
+ * ext/gl/effects/gstgleffectstretch.c:
+ * ext/gl/effects/gstgleffecttunnel.c:
+ * ext/gl/effects/gstgleffecttwirl.c:
+ * ext/gl/effects/gstgleffectxray.c:
+ * ext/gl/gstglcolorbalance.c:
+ * ext/gl/gstglcolorscale.c:
+ * ext/gl/gstgldeinterlace.c:
+ * ext/gl/gstgldeinterlace.h:
+ * ext/gl/gstgldifferencematte.c:
+ * ext/gl/gstglfilterapp.c:
+ * ext/gl/gstglfiltershader.c:
+ * ext/gl/gstgloverlay.c:
+ * gst-libs/gst/gl/gstglfilter.c:
+ * gst-libs/gst/gl/gstglfilter.h:
+ * gst-libs/gst/gl/gstglpixelformat.c:
+ * gst-libs/gst/gl/gstglutils.h:
+ glfilter: rewrite subclasses for filter_texture() occuring on GL thread
+ There's no need for the jump to an extra thread in most cases, especially
+ when relying solely on a shader to render. We can use the provided
+ render_to_target() functions to simplify filter writing.
+
+2016-07-12 15:34:24 +1000 Matthew Waters <matthew@centricular.com>
+
+ * gst-libs/gst/gl/gstglutils.h:
+ glutils: remove unused GstGLDisplayProjection
+
+2016-07-12 15:29:29 +1000 Matthew Waters <matthew@centricular.com>
+
+ * ext/gl/gstglimagesink.c:
+ * gst-libs/gst/gl/gstglcolorconvert.c:
+ * gst-libs/gst/gl/gstglmemorypbo.c:
+ * gst-libs/gst/gl/gstglutils.c:
+ * gst-libs/gst/gl/gstglutils.h:
+ * gst-libs/gst/gl/gstglviewconvert.c:
+ * tests/check/libs/gstglmemory.c:
+ * tests/check/libs/gstglupload.c:
+ glcontext: remove not thread-safe get/set_error()
+ Use GError's instead if necessary.
+
+2016-07-12 12:59:57 +1000 Matthew Waters <matthew@centricular.com>
+
+ * ext/gl/gstglfilterapp.c:
+ * ext/gl/gstglfilterapp.h:
+ * ext/gl/gstglfiltercube.c:
+ * ext/gl/gstglfilterglass.c:
+ * ext/gl/gstglmixer.c:
+ * ext/gl/gstglmixer.h:
+ * ext/gl/gstglmosaic.c:
+ * ext/gl/gstgltestsrc.c:
+ * ext/gl/gstgltestsrc.h:
+ * ext/gl/gstgltransformation.c:
+ * ext/gl/gstglvideomixer.c:
+ * ext/gl/gstglvideomixer.h:
+ * gst-libs/gst/gl/gstgl_fwd.h:
+ * gst-libs/gst/gl/gstglcolorconvert.c:
+ * gst-libs/gst/gl/gstglcolorconvert.h:
+ * gst-libs/gst/gl/gstglfilter.c:
+ * gst-libs/gst/gl/gstglfilter.h:
+ * gst-libs/gst/gl/gstglframebuffer.c:
+ * gst-libs/gst/gl/gstglframebuffer.h:
+ * gst-libs/gst/gl/gstglutils.c:
+ * gst-libs/gst/gl/gstglutils.h:
+ * gst-libs/gst/gl/gstglviewconvert.c:
+ * gst-libs/gst/gl/gstglviewconvert.h:
+ * tests/check/libs/gstglcontext.c:
+ glframebuffer: rewrite for a more consistent API
+ Facilities are given to create fbo's and attach GL memory (renderbuffers
+ or textures). It also keeps track of the renderable size for use with
+ effective use with glViewport().
+
+2016-07-12 00:30:22 +1000 Matthew Waters <matthew@centricular.com>
+
+ * ext/gl/gstglcolorbalance.c:
+ * ext/gl/gstglcolorscale.c:
+ * ext/gl/gstgldeinterlace.c:
+ * ext/gl/gstgldifferencematte.c:
+ * ext/gl/gstgldifferencematte.h:
+ * ext/gl/gstgleffects.c:
+ * ext/gl/gstgleffects.h:
+ * ext/gl/gstglfilterapp.c:
+ * ext/gl/gstglfiltercube.c:
+ * ext/gl/gstglfiltercube.h:
+ * ext/gl/gstglfilterglass.c:
+ * ext/gl/gstglfilterglass.h:
+ * ext/gl/gstglfiltershader.c:
+ * ext/gl/gstglmixer.c:
+ * ext/gl/gstglmixer.h:
+ * ext/gl/gstglmosaic.c:
+ * ext/gl/gstglmosaic.h:
+ * ext/gl/gstgloverlay.c:
+ * ext/gl/gstgltransformation.c:
+ * ext/gl/gstgltransformation.h:
+ * ext/gl/gstglvideomixer.c:
+ * gst-libs/gst/gl/gstglfilter.c:
+ * gst-libs/gst/gl/gstglfilter.h:
+ gl: use GLMemory for accessing textures everywhere
+ This simplifies and consolidates a lot of duplicated code creating
+ and modifying textures.
+
+2016-07-11 22:44:16 +1000 Matthew Waters <matthew@centricular.com>
+
+ * ext/gl/effects/gstgleffectblur.c:
+ * ext/gl/effects/gstgleffectbulge.c:
+ * ext/gl/effects/gstgleffectfisheye.c:
+ * ext/gl/effects/gstgleffectglow.c:
+ * ext/gl/effects/gstgleffectidentity.c:
+ * ext/gl/effects/gstgleffectlaplacian.c:
+ * ext/gl/effects/gstgleffectlumatocurve.c:
+ * ext/gl/effects/gstgleffectmirror.c:
+ * ext/gl/effects/gstgleffectrgbtocurve.c:
+ * ext/gl/effects/gstgleffectsin.c:
+ * ext/gl/effects/gstgleffectsobel.c:
+ * ext/gl/effects/gstgleffectsquare.c:
+ * ext/gl/effects/gstgleffectsqueeze.c:
+ * ext/gl/effects/gstgleffectstretch.c:
+ * ext/gl/effects/gstgleffecttunnel.c:
+ * ext/gl/effects/gstgleffecttwirl.c:
+ * ext/gl/effects/gstgleffectxray.c:
+ * ext/gl/gstglcolorbalance.c:
+ * ext/gl/gstgldeinterlace.c:
+ * ext/gl/gstgldifferencematte.c:
+ * ext/gl/gstglfiltershader.c:
+ * gst-libs/gst/gl/gstglfilter.c:
+ * gst-libs/gst/gl/gstglfilter.h:
+ glfilter: rename draw_texture to draw_fullscreen_quad
+ And remove unused arguments.
+
+2016-07-11 22:31:04 +1000 Matthew Waters <matthew@centricular.com>
+
+ * gst-libs/gst/gl/Makefile.am:
+ * gst-libs/gst/gl/gl.h:
+ * gst-libs/gst/gl/gstgl_fwd.h:
+ * gst-libs/gst/gl/gstgldisplay.c:
+ * gst-libs/gst/gl/gstglrenderbuffer.c:
+ * gst-libs/gst/gl/gstglrenderbuffer.h:
+ gl: add memory type for renderbuffer's
+ Soon to be used for framebuffers for e.g. depth buffers or throwaway color
+ buffers.
+
+2016-07-11 22:28:42 +1000 Matthew Waters <matthew@centricular.com>
+
+ * gst-libs/gst/gl/gstglformat.c:
+ * gst-libs/gst/gl/gstglformat.h:
+ glformat: define our own set of formats from the GL defines
+ also add some depth/stencil formats
+
+2016-07-11 22:24:43 +1000 Matthew Waters <matthew@centricular.com>
+
+ * ext/gl/gstgleffects.c:
+ gleffects: fix xray to use the correct function
+ Instead of duplicating the sin effect
+
+2016-07-11 21:29:10 +1000 Matthew Waters <matthew@centricular.com>
+
+ * gst-libs/gst/gl/gstglbasememory.c:
+ * gst-libs/gst/gl/gstglbasememory.h:
+ glbasememory: assert for a valid allocator instead of segfaulting
+
+2016-04-29 14:42:34 +0200 Michael Olbrich <m.olbrich@pengutronix.de>
+
+ * gst/mpegtsdemux/gstmpegdefs.h:
+ * gst/mpegtsdemux/tsdemux.c:
+ tsdemux: add support for LPCM with stream_type = 0x83
+ https://bugzilla.gnome.org/show_bug.cgi?id=765807
+
+2016-07-25 13:06:46 +0300 Sebastian Dröge <sebastian@centricular.com>
+
+ * gst-libs/gst/player/gstplayer.c:
+ * gst-libs/gst/player/gstplayer.h:
+ player: Add some 'const' to config getters
+
+2016-07-25 13:06:36 +0300 Sebastian Dröge <sebastian@centricular.com>
+
+ * gst-libs/gst/player/gstplayer.c:
+ player: G-I annotation fixes
+
+2016-07-25 10:30:26 +0200 Guillaume Desmottes <guillaume.desmottes@collabora.co.uk>
+
+ * docs/libs/gst-plugins-bad-libs-sections.txt:
+ * gst-libs/gst/player/gstplayer.c:
+ * gst-libs/gst/player/gstplayer.h:
+ * tests/check/libs/player.c:
+ * win32/common/libgstplayer.def:
+ player: move 'position-update-interval' setting to the config struct
+ https://bugzilla.gnome.org/show_bug.cgi?id=769144
+
+2016-07-19 14:36:25 +0200 Guillaume Desmottes <guillaume.desmottes@collabora.co.uk>
+
+ * docs/libs/gst-plugins-bad-libs-sections.txt:
+ * gst-libs/gst/player/gstplayer.c:
+ * gst-libs/gst/player/gstplayer.h:
+ * tests/check/libs/player.c:
+ * win32/common/libgstplayer.def:
+ player: add API to change http user agent
+ Introducing a new 'config' API similar to GstBufferPoolConfig.
+ https://bugzilla.gnome.org/show_bug.cgi?id=765314
+
+2016-07-25 10:54:32 +0100 Tim-Philipp Müller <tim@centricular.com>
+
+ * common:
+ Update common submodule
+ For 'make update-exports' changes
+
+2016-07-22 17:00:14 +0300 Sebastian Dröge <sebastian@centricular.com>
+
+ * tests/examples/qt/qml/main.cpp:
+ qml: Don't forget to unref the actual sink element after setting it on glsinkbin
+
+2016-07-22 16:57:45 +0300 Sebastian Dröge <sebastian@centricular.com>
+
+ * tests/examples/qt/qml/main.cpp:
+ qml: Use glsinkbin instead of glupload directly
+
+2016-07-18 18:36:42 +0100 Tim-Philipp Müller <tim@centricular.com>
+
+ * ext/openh264/gstopenh264dec.cpp:
+ * ext/openh264/gstopenh264enc.cpp:
+ * ext/openh264/gstopenh264enc.h:
+ openh264: fix up for API changes in v1.6.0
+ Update for API changes in v1.6.0.
+ https://bugzilla.gnome.org/show_bug.cgi?id=768771
+
+2016-07-18 17:43:23 +0100 Tim-Philipp Müller <tim@centricular.com>
+
+ * gst-libs/gst/gl/wayland/gstgldisplay_wayland.c:
+ * gst-libs/gst/gl/wayland/gstglwindow_wayland_egl.h:
+ gl: wayland: improve debug message when connecting to display
+ And another copy'n'paste-o.
+ https://bugzilla.gnome.org/show_bug.cgi?id=768929
+
+2016-07-19 02:11:54 +1000 Jan Schmidt <jan@centricular.com>
+
+ * ext/hls/gsthlsdemux.c:
+ hlsdemux: Fix clearing of decryption state
+ Don't clear decryption state immediately after
+ initialising it in the start_fragment. Don't clear
+ the state of all streams when we want to only clear
+ the current stream.
+ https://bugzilla.gnome.org//show_bug.cgi?id=768757
+
+2016-07-15 10:31:35 +0200 Guillaume Desmottes <guillaume.desmottes@collabora.co.uk>
+
+ * tests/check/elements/adaptive_demux_common.c:
+ * tests/check/elements/adaptive_demux_engine.c:
+ * tests/check/elements/audiomixer.c:
+ * tests/check/elements/autovideoconvert.c:
+ * tests/check/elements/camerabin.c:
+ tests: fix bus leak
+ gst_bus_remove_signal_watch() has to be called to release the ref
+ taken by gst_bus_add_signal_watch().
+ https://bugzilla.gnome.org/show_bug.cgi?id=768843
+
+2016-07-15 11:48:25 +0200 Guillaume Desmottes <guillaume.desmottes@collabora.co.uk>
+
+ * gst-libs/gst/basecamerabinsrc/gstcamerabinpreview.c:
+ camerabinpreview: fix bus leak
+ We were never removing the watch introduced in
+ gst_camerabin_create_preview_pipeline() so its extra ref on the bus was
+ never released.
+ https://bugzilla.gnome.org/show_bug.cgi?id=768838
+
+2016-07-13 23:02:10 +1000 Tim-Philipp Müller <tim@centricular.com>
+
+ * ext/hls/gsthlsdemux.c:
+ * ext/hls/gsthlsdemux.h:
+ hlsdemux: make decryption key handling per-stream
+ Add demuxer instance-wide decryption key cache. The current and
+ last key url are per-stream, so make a shared cache. Move the
+ decryption handling into the stream object, and use the shared
+ cache for the keys.
+
+2016-07-13 23:02:10 +1000 Jan Schmidt <jan@centricular.com>
+
+ * ext/hls/gsthlsdemux.c:
+ * ext/hls/gsthlsdemux.h:
+ hlsdemux: add hlsdemux-specific AdaptiveDemuxStream subclass
+ Prepare hlsdemux for more than one single stream. Currently hlsdemux
+ assumes there'll only ever be one stream and most of the stream-specific
+ state is actually in the hlsdemux structure. Add a stream subclass
+ instead and move some stream-specific members there instead.
+
+2016-07-13 23:02:10 +1000 Jan Schmidt <jan@centricular.com>
+
+ * gst-libs/gst/adaptivedemux/gstadaptivedemux.c:
+ * gst-libs/gst/adaptivedemux/gstadaptivedemux.h:
+ adaptivedemux: Add more safeguards around state changes.
+ Make state changes of internal elements more reliable by locking
+ their state, and ensuring that they aren't blocked pushing data
+ downstream before trying to set their state.
+ Add a boolean to avoid starting tasks when the main
+ thread is busy trying to shut the element down.
+
+2016-07-13 23:02:10 +1000 Jan Schmidt <jan@centricular.com>
+
+ * gst-libs/gst/adaptivedemux/gstadaptivedemux.c:
+ adaptivedemux: Add debug code to change bitrate.
+ Add some disabled-by-default debugging code that forces
+ bitrate changes by modulating the measured bitrate every
+ few fragments
+
+2016-07-13 23:02:10 +1000 Jan Schmidt <jan@centricular.com>
+
+ * gst-libs/gst/adaptivedemux/gstadaptivedemux.c:
+ adaptivedemux: More locking/switching fixes
+ Try harder to make switching pads work better by
+ making sure concurrent downloads are finished before exposing
+ a new set of pads.
+ Release the manifest lock when signalling no-more-pads, as
+ that can call back into adaptivedemux again
+
+2016-07-13 23:02:10 +1000 Jan Schmidt <jan@centricular.com>
+
+ * gst-libs/gst/adaptivedemux/gstadaptivedemux.c:
+ adaptivedemux: Don't switch streams and expose pads while downloading.
+ If other stream fragments are still downloading but new streams
+ have been scheduled, don't expose them yet - wait until the last
+ one finishes. Otherwise, we can cancel a partially downloaded
+ auxilliary stream and cause a gap.
+
+2016-07-13 23:02:10 +1000 Jan Schmidt <jan@centricular.com>
+
+ * gst-libs/gst/adaptivedemux/gstadaptivedemux.c:
+ adaptivedemux: Drop the manifest lock during outbound actions
+ Drop the manifest lock when performing actions that might
+ call back into adaptivedemux and trigger deadlocks, such
+ as adding/removing pads or sending in-band events (EOS).
+ Unlock the manifest lock when changing the child bin state to
+ NULL, as it might call back to acquire the manifest lock when
+ shutting down pads.
+ Drop the manifest lock while pushing events.
+
+2016-07-12 14:51:47 -0700 Martin Kelly <martin@surround.io>
+
+ * sys/androidmedia/Makefile.am:
+ * sys/androidmedia/gst-android-hardware-sensor.c:
+ * sys/androidmedia/gst-android-hardware-sensor.h:
+ * sys/androidmedia/gstahssrc.c:
+ * sys/androidmedia/gstahssrc.h:
+ * sys/androidmedia/gstamc.c:
+ * sys/androidmedia/gstsensors.h:
+ * sys/androidmedia/org/freedesktop/gstreamer/androidmedia/GstAhsCallback.java:
+ new plugin: Android hardware sensor source
+ ahssrc is a new plugin that enables Gstreamer to read from the
+ android.hardware.Sensor Android sensors. These sensors are treated as
+ buffers and can be passed through and manipulated by the pipeline.
+ https://bugzilla.gnome.org/show_bug.cgi?id=768110
+
+2016-07-14 19:38:26 +0200 Stefan Sauer <ensonic@users.sf.net>
+
+ * ext/lv2/gstlv2utils.c:
+ lv2: make it build with older lilv
+ Implementing the removal of presets is unfortunately not feasibla with
+ versions < 0.22.
+ Fixes #768595
+
+2016-07-13 23:00:51 -0400 Nicolas Dufresne <nicolas.dufresne@collabora.com>
+
+ * ext/webrtcdsp/gstwebrtcdsp.cpp:
+ * ext/webrtcdsp/gstwebrtcechoprobe.cpp:
+ webrtcdsp: Add delay-agnostic property
+ In this mode, we let WebRTC Audio Processing figure-out the delay. This
+ is useful when the latency reported by the stack cannot be trusted. Note
+ that in this mode, the leaking of echo during packet lost is much worst.
+ It is recommanded to use PLC (e.g. spanplc, or opus built-in plc).
+ In this mode, we don't do any synchronization. Instead, we simply process all
+ the available reverse stream data as it comes.
+
+2016-07-12 00:02:53 +0300 Sebastian Dröge <sebastian@centricular.com>
+
+ * gst/videoparsers/gstjpeg2000parse.c:
+ jpeg2000parse: Use correct enum type
+ GST_JPEG2000_SAMPLING_RGB instead of GST_JPEG2000_COLORSPACE_RGB
+ https://bugzilla.gnome.org/show_bug.cgi?id=768696
+
+2016-07-11 21:13:58 +0200 Stefan Sauer <ensonic@users.sf.net>
+
+ * common:
+ Automatic update of common submodule
+ From f363b32 to f49c55e
+
+2016-07-11 11:58:12 -0400 Nicolas Dufresne <nicolas.dufresne@collabora.com>
+
+ * sys/kms/gstkmsallocator.c:
+ * sys/kms/gstkmsallocator.h:
+ * sys/kms/gstkmssink.c:
+ kmssink: Fix offsets handling
+ The calculation of the offset table was done base on a plane size
+ estimation. This does not always work. Instead, use memory offset the
+ same we as it's implement in GstVideoMeta map functions.
+
+2016-07-11 19:21:11 +0530 Nirbheek Chauhan <nirbheek@centricular.com>
+
+ * gst-libs/gst/video/gstvideoaggregator.c:
+ * gst/siren/gstsirendec.c:
+ Fix various gboolean vs GstFlowReturn problems
+ Caught by building with MSVC which gave warnings for these
+
+2016-07-08 19:03:06 +1000 Matthew Waters <matthew@centricular.com>
+
+ * configure.ac:
+ gl/build: fix configure when --enable-cocoa is passed on OS X
+ https://bugzilla.gnome.org/show_bug.cgi?id=768553
+
+2016-07-10 20:43:17 +0200 Stefan Sauer <ensonic@users.sf.net>
+
+ * ext/lv2/README:
+ lv2: planning update
+
+2016-07-10 20:42:42 +0200 Stefan Sauer <ensonic@users.sf.net>
+
+ * configure.ac:
+ * ext/lv2/gstlv2utils.c:
+ lv2: keep working with older versions
+ Provide a fallback impl. for the only new function we were using from 0.22.
+ Fixes #768595
+
+2016-07-08 14:42:18 +0100 Tim-Philipp Müller <tim@centricular.com>
+
+ * gst/camerabin2/gstcamerabin2.c:
+ camerabin: update docs section
+
+2016-07-07 13:22:02 -0400 Nicolas Dufresne <nicolas.dufresne@collabora.com>
+
+ * configure.ac:
+ configure.ac: Cleanup unused variable
+ We only check for a header, no need for overriding LDFLAGS.
+
+2016-07-07 17:24:32 +0100 Luis de Bethencourt <luisbg@osg.samsung.com>
+
+ * gst/gaudieffects/gstgaussblur.h:
+ gaudi: fix documentation warning in GstGaussianBlur
+ Fixing the following warning when generating documentation:
+ xml/element-gaussianblur.xml:72: element refsect2: validity error :
+ ID GstGaussianBlur already defined
+ <refsect2 id="GstGaussianBlur" role="typedef">
+ ^
+ Warning: multiple "IDs" for constraint linkend: GstGaussianBlur.
+ DOC Fixing cross-references
+
+2016-07-07 17:16:47 +0100 Luis de Bethencourt <luisbg@osg.samsung.com>
+
+ * gst/gaudieffects/gstchromium.h:
+ gaudi: fix documentation warning in GstChromium
+ Fixing the following warning when generating documentation:
+ xml/element-chromium.xml:74: element refsect2: validity error :
+ ID GstChromium already defined
+ <refsect2 id="GstChromium" role="typedef">
+ ^
+ Warning: multiple "IDs" for constraint linkend: GstChromium.
+ DOC Fixing cross-references
+
+2016-07-07 12:31:20 -0400 Nicolas Dufresne <nicolas.dufresne@collabora.com>
+
+ * configure.ac:
+ webrtcdsp: Relax C++11 check
+ The library does not require any STL C++11 specific headers.
+ This fixes our OSX build as we target a SDK version that does not
+ support C++11 STL.
+
+2016-07-07 12:31:03 -0400 Nicolas Dufresne <nicolas.dufresne@collabora.com>
+
+ * configure.ac:
+ webrtcdsp: Add Android GNUSTL support
+
+2016-07-07 12:20:45 -0400 Nicolas Dufresne <nicolas.dufresne@collabora.com>
+
+ * configure.ac:
+ webrtcdsp: Set USE_WEBRTCDSP when disabled
+
+2016-07-07 17:20:58 +0200 Edward Hervey <edward@centricular.com>
+
+ * gst-libs/gst/adaptivedemux/gstadaptivedemux.c:
+ adaptivedemux: Also consider more seek flags as "snap" seeks
+ In the case of KEY_UNIT and TRICKMODE_KEY_UNITS seeks, we want to
+ "snap" to the closest fragment.
+ Without this, we end up pushing out a segment which does not match
+ the first fragment timestamp being pushed out, resulting in one or
+ more buffers being eventually dropped because they are out of segment.
+
+2016-07-06 14:29:04 +0300 Sebastian Dröge <sebastian@centricular.com>
+
+ * configure.ac:
+ webrtcdsp: Also allow webrtc-audio-processing 0.3
+ It seems to work and is the version available in Debian.
+
+2016-07-06 12:12:41 +0100 Luis de Bethencourt <luisbg@osg.samsung.com>
+
+ * ext/musepack/gstmusepackdec.c:
+ musepackdeck: unsigned can't be less than zero
+ Less-than-zero comparison of an unsigned value, guint64, is never true
+ CID 1363334
+
+2016-07-06 13:51:06 +0300 Sebastian Dröge <sebastian@centricular.com>
+
+ * configure.ac:
+ Back to development
+
+=== release 1.9.1 ===
+
+2016-07-06 13:07:21 +0300 Sebastian Dröge <sebastian@centricular.com>
+
+ * ChangeLog:
+ * NEWS:
+ * RELEASE:
+ * configure.ac:
+ * docs/plugins/gst-plugins-bad-plugins.args:
+ * docs/plugins/gst-plugins-bad-plugins.hierarchy:
+ * docs/plugins/inspect/plugin-accurip.xml:
+ * docs/plugins/inspect/plugin-adpcmdec.xml:
+ * docs/plugins/inspect/plugin-adpcmenc.xml:
+ * docs/plugins/inspect/plugin-aiff.xml:
+ * docs/plugins/inspect/plugin-asfmux.xml:
+ * docs/plugins/inspect/plugin-assrender.xml:
+ * docs/plugins/inspect/plugin-audiofxbad.xml:
+ * docs/plugins/inspect/plugin-audiomixer.xml:
+ * docs/plugins/inspect/plugin-audiovisualizers.xml:
+ * docs/plugins/inspect/plugin-autoconvert.xml:
+ * docs/plugins/inspect/plugin-bayer.xml:
+ * docs/plugins/inspect/plugin-bluez.xml:
+ * docs/plugins/inspect/plugin-bs2b.xml:
+ * docs/plugins/inspect/plugin-bz2.xml:
+ * docs/plugins/inspect/plugin-camerabin.xml:
+ * docs/plugins/inspect/plugin-chromaprint.xml:
+ * docs/plugins/inspect/plugin-coloreffects.xml:
+ * docs/plugins/inspect/plugin-compositor.xml:
+ * docs/plugins/inspect/plugin-curl.xml:
+ * docs/plugins/inspect/plugin-dashdemux.xml:
+ * docs/plugins/inspect/plugin-dataurisrc.xml:
+ * docs/plugins/inspect/plugin-debugutilsbad.xml:
+ * docs/plugins/inspect/plugin-decklink.xml:
+ * docs/plugins/inspect/plugin-dtls.xml:
+ * docs/plugins/inspect/plugin-dtsdec.xml:
+ * docs/plugins/inspect/plugin-dvb.xml:
+ * docs/plugins/inspect/plugin-dvbsuboverlay.xml:
+ * docs/plugins/inspect/plugin-dvdspu.xml:
+ * docs/plugins/inspect/plugin-faac.xml:
+ * docs/plugins/inspect/plugin-faad.xml:
+ * docs/plugins/inspect/plugin-fbdevsink.xml:
+ * docs/plugins/inspect/plugin-festival.xml:
+ * docs/plugins/inspect/plugin-fieldanalysis.xml:
+ * docs/plugins/inspect/plugin-flite.xml:
+ * docs/plugins/inspect/plugin-fluidsynthmidi.xml:
+ * docs/plugins/inspect/plugin-freeverb.xml:
+ * docs/plugins/inspect/plugin-frei0r.xml:
+ * docs/plugins/inspect/plugin-gaudieffects.xml:
+ * docs/plugins/inspect/plugin-gdp.xml:
+ * docs/plugins/inspect/plugin-geometrictransform.xml:
+ * docs/plugins/inspect/plugin-gmedec.xml:
+ * docs/plugins/inspect/plugin-gsm.xml:
+ * docs/plugins/inspect/plugin-gstgtk.xml:
+ * docs/plugins/inspect/plugin-gstsiren.xml:
+ * docs/plugins/inspect/plugin-hls.xml:
+ * docs/plugins/inspect/plugin-id3tag.xml:
+ * docs/plugins/inspect/plugin-inter.xml:
+ * docs/plugins/inspect/plugin-interlace.xml:
+ * docs/plugins/inspect/plugin-ivfparse.xml:
+ * docs/plugins/inspect/plugin-ivtc.xml:
+ * docs/plugins/inspect/plugin-jp2kdecimator.xml:
+ * docs/plugins/inspect/plugin-jpegformat.xml:
+ * docs/plugins/inspect/plugin-kate.xml:
+ * docs/plugins/inspect/plugin-ladspa.xml:
+ * docs/plugins/inspect/plugin-midi.xml:
+ * docs/plugins/inspect/plugin-mimic.xml:
+ * docs/plugins/inspect/plugin-mms.xml:
+ * docs/plugins/inspect/plugin-modplug.xml:
+ * docs/plugins/inspect/plugin-mpeg2enc.xml:
+ * docs/plugins/inspect/plugin-mpegpsdemux.xml:
+ * docs/plugins/inspect/plugin-mpegpsmux.xml:
+ * docs/plugins/inspect/plugin-mpegtsdemux.xml:
+ * docs/plugins/inspect/plugin-mpegtsmux.xml:
+ * docs/plugins/inspect/plugin-mplex.xml:
+ * docs/plugins/inspect/plugin-mxf.xml:
+ * docs/plugins/inspect/plugin-netsim.xml:
+ * docs/plugins/inspect/plugin-ofa.xml:
+ * docs/plugins/inspect/plugin-openal.xml:
+ * docs/plugins/inspect/plugin-opencv.xml:
+ * docs/plugins/inspect/plugin-openexr.xml:
+ * docs/plugins/inspect/plugin-opengl.xml:
+ * docs/plugins/inspect/plugin-openjpeg.xml:
+ * docs/plugins/inspect/plugin-opusparse.xml:
+ * docs/plugins/inspect/plugin-pcapparse.xml:
+ * docs/plugins/inspect/plugin-pnm.xml:
+ * docs/plugins/inspect/plugin-qt.xml:
+ * docs/plugins/inspect/plugin-rawparse.xml:
+ * docs/plugins/inspect/plugin-removesilence.xml:
+ * docs/plugins/inspect/plugin-resindvd.xml:
+ * docs/plugins/inspect/plugin-rfbsrc.xml:
+ * docs/plugins/inspect/plugin-rsvg.xml:
+ * docs/plugins/inspect/plugin-rtmp.xml:
+ * docs/plugins/inspect/plugin-rtponvif.xml:
+ * docs/plugins/inspect/plugin-schro.xml:
+ * docs/plugins/inspect/plugin-sdp.xml:
+ * docs/plugins/inspect/plugin-segmentclip.xml:
+ * docs/plugins/inspect/plugin-shm.xml:
+ * docs/plugins/inspect/plugin-smooth.xml:
+ * docs/plugins/inspect/plugin-smoothstreaming.xml:
+ * docs/plugins/inspect/plugin-sndfile.xml:
+ * docs/plugins/inspect/plugin-soundtouch.xml:
+ * docs/plugins/inspect/plugin-spandsp.xml:
+ * docs/plugins/inspect/plugin-speed.xml:
+ * docs/plugins/inspect/plugin-srtp.xml:
+ * docs/plugins/inspect/plugin-stereo.xml:
+ * docs/plugins/inspect/plugin-subenc.xml:
+ * docs/plugins/inspect/plugin-teletext.xml:
+ * docs/plugins/inspect/plugin-uvch264.xml:
+ * docs/plugins/inspect/plugin-vcdsrc.xml:
+ * docs/plugins/inspect/plugin-videofiltersbad.xml:
+ * docs/plugins/inspect/plugin-videoframe_audiolevel.xml:
+ * docs/plugins/inspect/plugin-videoparsersbad.xml:
+ * docs/plugins/inspect/plugin-videosignal.xml:
+ * docs/plugins/inspect/plugin-vmnc.xml:
+ * docs/plugins/inspect/plugin-voaacenc.xml:
+ * docs/plugins/inspect/plugin-voamrwbenc.xml:
+ * docs/plugins/inspect/plugin-waylandsink.xml:
+ * docs/plugins/inspect/plugin-webp.xml:
+ * docs/plugins/inspect/plugin-wildmidi.xml:
+ * docs/plugins/inspect/plugin-x265.xml:
+ * docs/plugins/inspect/plugin-y4mdec.xml:
+ * docs/plugins/inspect/plugin-yadif.xml:
+ * docs/plugins/inspect/plugin-zbar.xml:
+ * gst-plugins-bad.doap:
+ * win32/common/config.h:
+ Release 1.9.1
+
+2016-07-06 11:52:11 +0300 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/ky.po:
+ * po/lt.po:
+ * po/lv.po:
+ * po/mt.po:
+ * po/nb.po:
+ * po/nl.po:
+ * po/or.po:
+ * po/pl.po:
+ * po/pt_BR.po:
+ * po/ro.po:
+ * po/ru.po:
+ * po/sk.po:
+ * po/sl.po:
+ * po/sq.po:
+ * po/sr.po:
+ * po/sv.po:
+ * po/tr.po:
+ * po/uk.po:
+ * po/vi.po:
+ * po/zh_CN.po:
+ Update .po files
2016-07-06 10:19:24 +0300 Sebastian Dröge <sebastian@centricular.com>
@@ -1168,8 +3470,6 @@
2016-06-07 15:50:50 +0200 Joan Pau Beltran <joanpau.beltran@socib.cat>
* ext/dc1394/Makefile.am:
- * ext/dc1394/gstdc1394.c:
- * ext/dc1394/gstdc1394.h:
* ext/dc1394/gstdc1394src.c:
* ext/dc1394/gstdc1394src.h:
dc1394src: prefix and file names according to Gstreamer conventions
@@ -8360,8 +10660,6 @@
* gst-libs/gst/audio/gstaudioaggregator.c:
* gst-libs/gst/audio/gstaudioaggregator.h:
* gst/audiomixer/Makefile.am:
- * gst/audiomixer/gstaudioaggregator.c:
- * gst/audiomixer/gstaudioaggregator.h:
* gst/audiomixer/gstaudiointerleave.h:
* gst/audiomixer/gstaudiomixer.h:
* pkgconfig/gstreamer-bad-audio-uninstalled.pc.in:
@@ -8443,16 +10741,7 @@
* pkgconfig/gstreamer-dvm.pc.in:
* sys/androidcamera/Makefile.am:
* sys/androidcamera/com/gstreamer/GstAhcCallback.java:
- * sys/androidcamera/gst-android-graphics-imageformat.c:
- * sys/androidcamera/gst-android-graphics-imageformat.h:
- * sys/androidcamera/gst-android-graphics-surfacetexture.c:
- * sys/androidcamera/gst-android-graphics-surfacetexture.h:
- * sys/androidcamera/gst-android-hardware-camera.c:
- * sys/androidcamera/gst-android-hardware-camera.h:
- * sys/androidcamera/gst-androidcamera.c:
* sys/androidcamera/gstahccallback.h:
- * sys/androidcamera/gstahcsrc.c:
- * sys/androidcamera/gstahcsrc.h:
* sys/androidmedia/gst-android-graphics-imageformat.c:
* sys/androidmedia/gst-android-graphics-imageformat.h:
* sys/androidmedia/gst-android-graphics-surfacetexture.c:
@@ -8506,8 +10795,6 @@
2012-12-13 17:56:01 +0000 Sebastian Dröge <sebastian.droege@collabora.co.uk>
* gst-libs/gst/dvm/Makefile.am:
- * gst-libs/gst/dvm/gst-dvm.c:
- * gst-libs/gst/dvm/gst-dvm.h:
* gst-libs/gst/dvm/gstdvm.c:
* gst-libs/gst/dvm/gstdvm.h:
* sys/androidcamera/Makefile.am:
@@ -8590,8 +10877,6 @@
* sys/androidcamera/gst-android-graphics-surfacetexture.c:
* sys/androidcamera/gst-android-hardware-camera.c:
* sys/androidcamera/gst-androidcamera.c:
- * sys/androidcamera/gst-dvm.c:
- * sys/androidcamera/gst-dvm.h:
* sys/androidcamera/gstahcsrc.c:
gst-dvm: Create a gst-dvm library using part of androidcamera
@@ -8868,7 +11153,6 @@
* sys/androidcamera/Makefile.am:
* sys/androidcamera/gst-androidcamera.c:
- * sys/androidcamera/gst-androidmedia.c:
Remove previous cruft and create androidcamera plugin
2012-10-17 19:42:59 -0400 Youness Alaoui <youness.alaoui@collabora.co.uk>
@@ -11018,8 +13302,6 @@
* sys/applemedia/Makefile.am:
* sys/applemedia/avfvideosrc.m:
- * sys/applemedia/corevideotexturecache.h:
- * sys/applemedia/corevideotexturecache.m:
* sys/applemedia/videotexturecache.h:
* sys/applemedia/videotexturecache.m:
* sys/applemedia/vtdec.c:
@@ -11991,11 +14273,9 @@
2015-11-01 13:21:45 +0000 Tim-Philipp Müller <tim@centricular.com>
* Makefile.am:
- * docs/plugins/inspect/plugin-fragmented.xml:
* docs/plugins/inspect/plugin-hls.xml:
* ext/hls/Makefile.am:
* ext/hls/gstfragmented.h:
- * ext/hls/gstfragmentedplugin.c:
* ext/hls/gsthls.h:
* ext/hls/gsthlsdemux.h:
* ext/hls/gsthlsplugin.c:
@@ -12945,7 +15225,6 @@
2015-10-13 14:21:47 +0200 Branko Subasic <branko@axis.com>
* tests/check/Makefile.am:
- * tests/check/elements/rtponvif.c:
* tests/check/elements/rtponvifparse.c:
* tests/check/elements/rtponviftimestamp.c:
rtponvif: split unit tests in several files
@@ -14545,11 +16824,8 @@
2015-10-14 15:30:05 +0100 Luis de Bethencourt <luisbg@osg.samsung.com>
* ext/opencv/Makefile.am:
- * ext/opencv/gstopencvutils.c:
* ext/opencv/gstopencvutils.cpp:
- * ext/opencv/gstopencvvideofilter.c:
* ext/opencv/gstopencvvideofilter.cpp:
- * ext/opencv/gsttemplatematch.c:
* ext/opencv/gsttemplatematch.cpp:
opencv: switch remaining to C++
Switch remaining C files to C++ for consistency with other OpeCV elements,
@@ -14574,7 +16850,6 @@
2015-10-14 14:34:32 +0100 Luis de Bethencourt <luisbg@osg.samsung.com>
* ext/opencv/Makefile.am:
- * ext/opencv/gstmotioncells.c:
* ext/opencv/gstmotioncells.cpp:
* ext/opencv/gstmotioncells.h:
* ext/opencv/motioncells_wrapper.cpp:
@@ -14689,7 +16964,6 @@
2015-10-11 23:44:25 +0100 Luis de Bethencourt <luisbg@osg.samsung.com>
* ext/opencv/Makefile.am:
- * ext/opencv/gsttextoverlay.c:
* ext/opencv/gsttextoverlay.cpp:
textoverlay: Switch to C++
Switch gsttextoverlay to C++ for consistency with other OpenCV elements,
@@ -14699,7 +16973,6 @@
2015-10-11 21:54:30 +0100 Luis de Bethencourt <luisbg@osg.samsung.com>
* ext/opencv/Makefile.am:
- * ext/opencv/gstpyramidsegment.c:
* ext/opencv/gstpyramidsegment.cpp:
opencv: pyramidsegment: Switch to C++
Switch gstpyramidsegment to C++ for consistency with other OpenCV elements,
@@ -14736,7 +17009,6 @@
2015-10-10 17:52:23 +0100 Luis de Bethencourt <luisbg@osg.samsung.com>
* ext/opencv/Makefile.am:
- * ext/opencv/gstcvsobel.c:
* ext/opencv/gstcvsobel.cpp:
cvsobel: Switch to C++
Switch gstcvlsobel to C++ for consistency with other OpenCV elements, and
@@ -14746,7 +17018,6 @@
2015-10-10 17:00:55 +0100 Luis de Bethencourt <luisbg@osg.samsung.com>
* ext/opencv/Makefile.am:
- * ext/opencv/gstcvlaplace.c:
* ext/opencv/gstcvlaplace.cpp:
cvlaplace: Switch to C++
Switch gstcvlaplace to C++ for consistency with other OpenCV elements, and
@@ -14756,7 +17027,6 @@
2015-10-10 16:57:36 +0100 Luis de Bethencourt <luisbg@osg.samsung.com>
* ext/opencv/Makefile.am:
- * ext/opencv/gstcvequalizehist.c:
* ext/opencv/gstcvequalizehist.cpp:
cvequalizehist: Switch to C++
Switch gstcvequalizehist to C++ for consistency with other OpenCV elements,
@@ -14766,9 +17036,7 @@
2015-10-10 14:10:32 +0100 Luis de Bethencourt <luisbg@osg.samsung.com>
* ext/opencv/Makefile.am:
- * ext/opencv/gstcvdilateerode.c:
* ext/opencv/gstcvdilateerode.cpp:
- * ext/opencv/gstcverode.c:
* ext/opencv/gstcverode.cpp:
cverode: Switch to C++
Switch gstcverode to C++ for consistency with other OpenCV elements, and
@@ -14837,7 +17105,6 @@
2015-10-02 19:02:26 +0100 Vanessa Chipirrás Navalón <vchipirras6@gmail.com>
* ext/opencv/Makefile.am:
- * ext/opencv/gstcvdilate.c:
* ext/opencv/gstcvdilate.cpp:
cvdilate: Change gstcvdilate to C++
Change the gstcvdilate.c file extension to cpp and add it into Makefile for
@@ -14848,7 +17115,6 @@
2015-10-02 18:50:45 +0100 Vanessa Chipirrás Navalón <vchipirras6@gmail.com>
* ext/opencv/Makefile.am:
- * ext/opencv/gstskindetect.c:
* ext/opencv/gstskindetect.cpp:
skindetect: Change gstskindetect to C++
Change the file extension to cpp and add it into Makefile for consistency
@@ -14874,7 +17140,6 @@
2015-10-02 18:10:32 +0100 Vanessa Chipirrás Navalón <vchipirras6@gmail.com>
* ext/opencv/Makefile.am:
- * ext/opencv/gstcvsmooth.c:
* ext/opencv/gstcvsmooth.cpp:
cvsmooth: port to C++
Change the file extension to cpp and add it into Makefile for consistency
@@ -14885,7 +17150,6 @@
2015-10-02 17:48:47 +0100 Vanessa Chipirrás Navalón <vchipirras6@gmail.com>
* ext/opencv/Makefile.am:
- * ext/opencv/gstretinex.c:
* ext/opencv/gstretinex.cpp:
retinex: Change retinex to C++
Change the gstretinex.c file to cpp and add it into Makefile.
@@ -14929,7 +17193,6 @@
2015-10-02 16:01:29 +0100 Luis de Bethencourt <luisbg@osg.samsung.com>
* ext/opencv/Makefile.am:
- * ext/opencv/gsthanddetect.c:
* ext/opencv/gsthanddetect.cpp:
handdetect: Change gsthanddetect to C++
Change the gsthanddetect.c file to cpp and add it into Makefile.
@@ -16778,7 +19041,6 @@
2015-08-28 13:42:29 +0200 Vanessa Chipirrás Navalón <vchipirras6@gmail.com>
* ext/opencv/Makefile.am:
- * ext/opencv/gstedgedetect.c:
* ext/opencv/gstedgedetect.cpp:
edgedetect: Rename gstedgedetect.c to gstedgedetect.cpp for consistency.
Change the file extension to cpp and add it into Makefile for consistency
@@ -16844,7 +19106,6 @@
2015-08-26 11:57:24 +0200 Vanessa Chipirrás Navalón <vchipirras6@gmail.com>
* ext/opencv/Makefile.am:
- * ext/opencv/gstfaceblur.c:
* ext/opencv/gstfaceblur.cpp:
faceblur: Change gstfaceblur to C++.
Change the gstfaceblur.c file to cpp and add it into Makefile.
@@ -18378,10 +20639,8 @@
2015-07-31 13:45:43 +0100 Vanessa Chipirrás <vchipirras6@gmail.com>
* ext/opencv/Makefile.am:
- * ext/opencv/gstfacedetect.c:
* ext/opencv/gstfacedetect.cpp:
* ext/opencv/gstfacedetect.h:
- * ext/opencv/gstopencv.c:
* ext/opencv/gstopencv.cpp:
facedetect: need to migrate to C++
The cascade classifier changes its structure on new version of OpenCV.
@@ -20551,7 +22810,6 @@
* tests/examples/codecparsers/parse-vp8.c:
* tests/icles/.gitignore:
* tests/icles/Makefile.am:
- * tests/icles/vp8parser-test.c:
examples: move vp8 parser test to codecparser example directory
2015-06-21 11:20:57 +0100 Tim-Philipp Müller <tim@centricular.com>
@@ -31769,7 +34027,6 @@
* sys/decklink/osx/DeckLinkAPIConfiguration.h:
* sys/decklink/osx/DeckLinkAPIDeckControl.h:
* sys/decklink/osx/DeckLinkAPIDiscovery.h:
- * sys/decklink/osx/DeckLinkAPIDispatch-osx.cpp:
* sys/decklink/osx/DeckLinkAPIDispatch.cpp:
* sys/decklink/osx/DeckLinkAPIModes.h:
* sys/decklink/osx/DeckLinkAPIStreaming.h:
@@ -35188,7 +37445,6 @@
* tests/examples/gl/qt/qglwtextureshare/qglwtextureshare.pro:
* tests/examples/gl/qt/videooverlay/Debug/videooverlay:
* tests/examples/gl/qt/videooverlay/videooverlay.pro:
- * tests/examples/gl/qt/videooverlay/videovideooverlay.pro:
examples: port GL/Qt examples to Qt5
Update the GL Qt integration examples for Qt5 changes and for GstGL
signal signature changes.
@@ -38165,9 +40421,6 @@
* ext/gl/gstglvideomixer.h:
* gst-libs/gst/gl/Makefile.am:
* gst-libs/gst/gl/gl.h:
- * gst-libs/gst/gl/gstglmixer.c:
- * gst-libs/gst/gl/gstglmixer.h:
- * gst-libs/gst/gl/gstglmixerpad.h:
gl: Move GstGLMixer to the plugin for now
It depends on GstAggregator and we don't want to install headers
for that yet.
@@ -39679,7 +41932,6 @@
* gst-libs/gst/gl/glprototypes/Makefile.am:
* gst-libs/gst/gl/glprototypes/gstgl_gles2compat.h:
* gst-libs/gst/gl/gstglapi.h:
- * gst-libs/gst/gl/gstgles2.h:
gl: move gles2 compat header to glprototypes
2014-06-22 09:36:34 +1000 Matthew Waters <ystreet00@gmail.com>
@@ -43718,7 +45970,6 @@
* tests/examples/gl/cocoa/cocoa-videooverlay.m:
* tests/examples/gl/cocoa/videooverlay/.gitignore:
* tests/examples/gl/cocoa/videooverlay/Makefile.am:
- * tests/examples/gl/cocoa/videooverlay/main.m:
gl: rename cocoa example and move it to its parent directory
2014-05-02 05:29:41 +0100 Julien Isorce <julien.isorce@gmail.com>
@@ -44062,9 +46313,6 @@
* configure.ac:
* tests/examples/Makefile.am:
- * tests/examples/clutter/clutteractor.c:
- * tests/examples/clutter/clutteractortee.c:
- * tests/examples/clutter/cluttershare.c:
* tests/examples/gl/Makefile.am:
* tests/examples/gl/clutter/.gitignore:
* tests/examples/gl/clutter/Makefile.am:
@@ -44177,10 +46425,6 @@
* tests/examples/gl/sdl/sdl.sln:
* tests/examples/gl/sdl/sdlshare.c:
* tests/examples/gl/sdl/sdlshare.vcproj:
- * tests/examples/gtk/fxtest/fxtest.c:
- * tests/examples/gtk/fxtest/pixbufdrop.c:
- * tests/examples/gtk/gstgtk.c:
- * tests/examples/sdl/sdlshare.c:
gl/examples: move to -bad
- fix all the compiler errors
- give them their own gl directory
@@ -44460,8 +46704,6 @@
* sys/applemedia/Makefile.am:
* sys/applemedia/avfassetsrc.h:
* sys/applemedia/avfassetsrc.m:
- * sys/applemedia/iosavassetsrc.h:
- * sys/applemedia/iosavassetsrc.m:
* sys/applemedia/plugin.m:
iosavassetsrc: rename element to avfassetsrc
https://bugzilla.gnome.org/show_bug.cgi?id=728249
@@ -46476,12 +48718,7 @@
* gst-libs/gst/gl/glprototypes/gles.h:
* gst-libs/gst/gl/glprototypes/gles1.h:
* gst-libs/gst/gl/glprototypes/gles1_functions.h:
- * gst-libs/gst/gl/glprototypes/gles1gles2.h:
- * gst-libs/gst/gl/glprototypes/gles1gles2opengl.h:
- * gst-libs/gst/gl/glprototypes/gles1opengl.h:
- * gst-libs/gst/gl/glprototypes/gles2.h:
* gst-libs/gst/gl/glprototypes/gles2_functions.h:
- * gst-libs/gst/gl/glprototypes/gles2opengl.h:
* gst-libs/gst/gl/glprototypes/gles3opengl.h:
* gst-libs/gst/gl/glprototypes/opengl.h:
* gst-libs/gst/gl/glprototypes/opengl_functions.h:
@@ -46809,65 +49046,6 @@
* ext/gl/gstglvideomixer.c:
* ext/gl/gstglvideomixer.h:
* ext/gl/gstopengl.c:
- * gst/gl/BUGS:
- * gst/gl/Makefile.am:
- * gst/gl/effects/gstgleffectbulge.c:
- * gst/gl/effects/gstgleffectfisheye.c:
- * gst/gl/effects/gstgleffectglow.c:
- * gst/gl/effects/gstgleffectidentity.c:
- * gst/gl/effects/gstgleffectlumatocurve.c:
- * gst/gl/effects/gstgleffectlumatocurve.h:
- * gst/gl/effects/gstgleffectmirror.c:
- * gst/gl/effects/gstgleffectrgbtocurve.c:
- * gst/gl/effects/gstgleffectscurves.h:
- * gst/gl/effects/gstgleffectsin.c:
- * gst/gl/effects/gstgleffectsquare.c:
- * gst/gl/effects/gstgleffectsqueeze.c:
- * gst/gl/effects/gstgleffectssources.c:
- * gst/gl/effects/gstgleffectssources.h:
- * gst/gl/effects/gstgleffectstretch.c:
- * gst/gl/effects/gstgleffecttunnel.c:
- * gst/gl/effects/gstgleffecttwirl.c:
- * gst/gl/effects/gstgleffectxray.c:
- * gst/gl/gltestsrc.c:
- * gst/gl/gltestsrc.h:
- * gst/gl/gstglbumper.c:
- * gst/gl/gstglbumper.h:
- * gst/gl/gstglcolorscale.c:
- * gst/gl/gstglcolorscale.h:
- * gst/gl/gstgldeinterlace.c:
- * gst/gl/gstgldeinterlace.h:
- * gst/gl/gstgldifferencematte.c:
- * gst/gl/gstgldifferencematte.h:
- * gst/gl/gstgleffects.c:
- * gst/gl/gstgleffects.h:
- * gst/gl/gstglfilterapp.c:
- * gst/gl/gstglfilterapp.h:
- * gst/gl/gstglfilterblur.c:
- * gst/gl/gstglfilterblur.h:
- * gst/gl/gstglfiltercube.c:
- * gst/gl/gstglfiltercube.h:
- * gst/gl/gstglfilterglass.c:
- * gst/gl/gstglfilterglass.h:
- * gst/gl/gstglfilterlaplacian.c:
- * gst/gl/gstglfilterlaplacian.h:
- * gst/gl/gstglfilterreflectedscreen.c:
- * gst/gl/gstglfilterreflectedscreen.h:
- * gst/gl/gstglfiltershader.c:
- * gst/gl/gstglfiltershader.h:
- * gst/gl/gstglfiltersobel.c:
- * gst/gl/gstglfiltersobel.h:
- * gst/gl/gstglimagesink.c:
- * gst/gl/gstglimagesink.h:
- * gst/gl/gstglmosaic.c:
- * gst/gl/gstglmosaic.h:
- * gst/gl/gstgloverlay.c:
- * gst/gl/gstgloverlay.h:
- * gst/gl/gstgltestsrc.c:
- * gst/gl/gstgltestsrc.h:
- * gst/gl/gstglvideomixer.c:
- * gst/gl/gstglvideomixer.h:
- * gst/gl/gstopengl.c:
move gl elements to ext subdirectory
2014-03-15 15:55:46 +0100 Matthew Waters <ystreet00@gmail.com>
@@ -47793,8 +49971,6 @@
* gst-libs/gst/gl/egl/gstglcontext_egl.c:
* gst-libs/gst/gl/egl/gstglcontext_egl.h:
* gst-libs/gst/gl/gstglcontext.c:
- * gst-libs/gst/gl/gstglegl.c:
- * gst-libs/gst/gl/gstglegl.h:
* gst-libs/gst/gl/wayland/gstglwindow_wayland_egl.h:
[796/906] move egl into its own directory
@@ -49368,21 +51544,7 @@
* gst-libs/gst/gl/cocoa/gstglwindow_cocoa.h:
* gst-libs/gst/gl/cocoa/gstglwindow_cocoa.m:
* gst-libs/gst/gl/gstglwindow.c:
- * gst-libs/gst/gl/gstglwindow_cocoa.h:
- * gst-libs/gst/gl/gstglwindow_cocoa.m:
- * gst-libs/gst/gl/gstglwindow_win32.c:
- * gst-libs/gst/gl/gstglwindow_win32.h:
- * gst-libs/gst/gl/gstglwindow_win32_egl.c:
- * gst-libs/gst/gl/gstglwindow_win32_egl.h:
- * gst-libs/gst/gl/gstglwindow_win32_wgl.c:
- * gst-libs/gst/gl/gstglwindow_win32_wgl.h:
* gst-libs/gst/gl/gstglwindow_winCE.c:
- * gst-libs/gst/gl/gstglwindow_x11.c:
- * gst-libs/gst/gl/gstglwindow_x11.h:
- * gst-libs/gst/gl/gstglwindow_x11_egl.c:
- * gst-libs/gst/gl/gstglwindow_x11_egl.h:
- * gst-libs/gst/gl/gstglwindow_x11_glx.c:
- * gst-libs/gst/gl/gstglwindow_x11_glx.h:
* gst-libs/gst/gl/win32/Makefile.am:
* gst-libs/gst/gl/win32/gstglwindow_win32.c:
* gst-libs/gst/gl/win32/gstglwindow_win32.h:
@@ -51957,11 +54119,8 @@
2009-02-26 17:45:21 -0500 Julien Isorce <julien.isorce@gmail.com>
- * gst-libs/gst/gl/GNUmakefile:
* gst-libs/gst/gl/GNUmakefile.gnustep:
- * gst/gl/GNUmakefile:
* gst/gl/GNUmakefile.gnustep:
- * gst/gl/effects/GNUmakefile:
* gst/gl/effects/GNUmakefile.gnustep:
[318/906] rename GNUmakefile(s) to GNUmakefile(s).gnustep
@@ -52088,7 +54247,6 @@
* gst/gl/CMakeLists.txt:
* gst/gl/Makefile.am:
* gst/gl/gstgloverlay.c:
- * gst/gl/gstglpixbufoverlay.c:
* gst/gl/gstopengl.c:
* tests/examples/gtk/fxtest/pixbufdrop.c:
[308/906] Rename glpixbufoverlay to gloverlay
@@ -53137,7 +55295,6 @@
* gst/gl/Makefile.am:
* gst/gl/effects/gstgleffectglow.c:
- * gst/gl/effects/gstgleffects.h:
* gst/gl/effects/gstgleffectssources.c:
* gst/gl/effects/gstgleffectssources.h:
* gst/gl/gstgleffects.c:
@@ -53589,12 +55746,8 @@
* gst/gl/Makefile.am:
* gst/gl/gstgldownload.c:
* gst/gl/gstgldownload.h:
- * gst/gl/gstglgraphicmaker.c:
- * gst/gl/gstglgraphicmaker.h:
* gst/gl/gstglupload.c:
* gst/gl/gstglupload.h:
- * gst/gl/gstglvideomaker.c:
- * gst/gl/gstglvideomaker.h:
* gst/gl/gstopengl.c:
[103/906] rename glgraphicmaker -> glupload and glvideomaker -> gldownload
@@ -53631,8 +55784,6 @@
2008-06-11 23:31:53 +0000 Julien Isorce <julien.isorce@gmail.com>
* gst-libs/gst/gl/Makefile.am:
- * gst-libs/gst/gl/gltestsrc.c:
- * gst-libs/gst/gl/gltestsrc.h:
* gst/gl/Makefile.am:
* gst/gl/gltestsrc.c:
* gst/gl/gltestsrc.h:
@@ -53669,8 +55820,6 @@
* gst-libs/gst/gl/gstglfilter.c:
* gst-libs/gst/gl/gstglfilter.h:
* gst/gl/Makefile.am:
- * gst/gl/gstglfilter.c:
- * gst/gl/gstglfilter.h:
* gst/gl/gstgltestsrc.c:
* gst/gl/gstgltestsrc.h:
* gst/gl/gstopengl.c:
@@ -53884,7 +56033,6 @@
2008-05-18 16:04:56 +0000 Julien Isorce <julien.isorce@gmail.com>
* gst/gl/Makefile.am:
- * gst/gl/gstgl.c:
* gst/gl/gstopengl.c:
[064/906] up
@@ -53967,8 +56115,6 @@
* gst-libs/gst/gl/gstglfilter.c:
* gst-libs/gst/gl/gstglfilter.h:
* gst/gl/glimagesink.c:
- * gst/gl/gstglfilter.c:
- * gst/gl/gstglfilter.h:
* gst/gl/gstopengl.c:
[056/906] * configure.ac: Readd pre-pkgconfig OpenGL detection, since pkgconfig requires Mesa from git master. * gst/gl/glimagesink.c: * gst/gl/gstopengl.c: Move debug category initialization to element. * gst-libs/gst/gl/Makefile.am: * gst-libs/gst/gl/gstglfilter.c: * gst-libs/gst/gl/gstglfilter.h: * gst/gl/gstglfilter.c: * gst/gl/gstglfilter.h: Move glfilter to library. * pkgconfig/gstreamer-plugins-gl.pc.in: Add gstreamer-base-0.10 as a requirement. * po/en.po: Update.
@@ -54098,8 +56244,6 @@
* gst-libs/gst/gl/gstgldisplay.h:
* gst/gl/Makefile.am:
* gst/gl/glimagesink.h:
- * gst/gl/glvideo.c:
- * gst/gl/glvideo.h:
[043/906] * sys/glsink/Makefile.am: * sys/glsink/glimagesink.h: * sys/glsink/glvideo.c: * sys/glsink/glvideo.h: * sys/glsink/gstglbuffer.c: * sys/glsink/gstglbuffer.h: * sys/glsink/gstgldisplay.c: * sys/glsink/gstgldisplay.h: Rename glvideo.[ch] to gstgldisplay.[ch].
2007-12-24 20:53:55 +0000 David Schleef <ds@schleef.org>
@@ -62521,18 +64665,8 @@
* sys/applemedia-nonpublic/mtapi.h:
* sys/applemedia-nonpublic/plugin.m:
* sys/applemedia/Makefile.am:
- * sys/applemedia/celapi.c:
- * sys/applemedia/celapi.h:
- * sys/applemedia/celvideosrc.c:
- * sys/applemedia/celvideosrc.h:
* sys/applemedia/coremediactx.c:
* sys/applemedia/coremediactx.h:
- * sys/applemedia/mioapi.c:
- * sys/applemedia/mioapi.h:
- * sys/applemedia/miovideodevice.c:
- * sys/applemedia/miovideodevice.h:
- * sys/applemedia/miovideosrc.c:
- * sys/applemedia/miovideosrc.h:
* sys/applemedia/plugin.m:
applemedia: move plugins using private frameworks to applemedia-nonpublic
@@ -62953,10 +65087,6 @@
* gst/videosignal/gstsimplevideomark.h:
* gst/videosignal/gstsimplevideomarkdetect.c:
* gst/videosignal/gstsimplevideomarkdetect.h:
- * gst/videosignal/gstvideodetect.c:
- * gst/videosignal/gstvideodetect.h:
- * gst/videosignal/gstvideomark.c:
- * gst/videosignal/gstvideomark.h:
* gst/videosignal/gstvideosignal.c:
videomark/detect: rename to simplevideomark[detect]
@@ -63996,7 +66126,6 @@
2012-09-28 12:55:27 +0200 David Corvoysier <david.corvoysier@orange.com>
* ext/dash/COPYING:
- * ext/dash/LICENSE:
* ext/dash/gstdashdemux.c:
* ext/dash/gstdashdemux.h:
Renamed LICENSE into COPYING
@@ -65640,18 +67769,9 @@
* sys/vdpau/gstvdp/gstvdpbuffer.h:
* sys/vdpau/gstvdp/gstvdpbufferpool.c:
* sys/vdpau/gstvdp/gstvdpbufferpool.h:
- * sys/vdpau/gstvdp/gstvdpdecoder.c:
- * sys/vdpau/gstvdp/gstvdpdecoder.h:
- * sys/vdpau/gstvdp/gstvdpdevice.c:
- * sys/vdpau/gstvdp/gstvdpdevice.h:
- * sys/vdpau/gstvdp/gstvdpoutputbuffer.c:
- * sys/vdpau/gstvdp/gstvdpoutputbuffer.h:
- * sys/vdpau/gstvdp/gstvdpoutputbufferpool.c:
- * sys/vdpau/gstvdp/gstvdpoutputbufferpool.h:
* sys/vdpau/gstvdp/gstvdpoutputsrcpad.c:
* sys/vdpau/gstvdp/gstvdpoutputsrcpad.h:
* sys/vdpau/gstvdp/gstvdputils.c:
- * sys/vdpau/gstvdp/gstvdputils.h:
* sys/vdpau/gstvdp/gstvdpvideobuffer.c:
* sys/vdpau/gstvdp/gstvdpvideobuffer.h:
* sys/vdpau/gstvdp/gstvdpvideobufferpool.c:
@@ -66497,8 +68617,6 @@
* ext/fluidsynth/Makefile.am:
* ext/fluidsynth/gstfluiddec.c:
* ext/fluidsynth/gstfluiddec.h:
- * ext/fluidsynth/gstfluidsynth.c:
- * ext/fluidsynth/gstfluidsynth.h:
fluidsynth: rename to fluiddec
Rename the fluidsynth plugin to fluidsynthmidi and the decoder
to fluiddec to avoid conflicts with buzztard.
@@ -66784,21 +68902,6 @@
* ext/hls/gsturidownloader.h:
* ext/hls/m3u8.c:
* ext/hls/m3u8.h:
- * gst/hls/Makefile.am:
- * gst/hls/gstfragment.c:
- * gst/hls/gstfragment.h:
- * gst/hls/gstfragmented.h:
- * gst/hls/gstfragmentedplugin.c:
- * gst/hls/gsthlsdemux.c:
- * gst/hls/gsthlsdemux.h:
- * gst/hls/gsthlssink.c:
- * gst/hls/gsthlssink.h:
- * gst/hls/gstm3u8playlist.c:
- * gst/hls/gstm3u8playlist.h:
- * gst/hls/gsturidownloader.c:
- * gst/hls/gsturidownloader.h:
- * gst/hls/m3u8.c:
- * gst/hls/m3u8.h:
Make the hls plugin depend on gnutls and move to ext/hls/
gnutls is used to implement AES decryption
@@ -68413,8 +70516,6 @@
* ext/spandsp/gstspandsp.c:
* gst/dtmf/Makefile.am:
* gst/dtmf/gstdtmf.c:
- * gst/dtmf/gstdtmfdetect.c:
- * gst/dtmf/gstdtmfdetect.h:
* gst/dtmf/tone_detect.c:
* gst/dtmf/tone_detect.h:
dtmf/spandsp: Move dtmfdetect to use libspandsp
@@ -73081,8 +75182,6 @@
* ext/eglgles/Makefile.am:
* ext/eglgles/gsteglglessink.c:
* ext/eglgles/gsteglglessink.h:
- * ext/eglgles/gstvidroidsink.c:
- * ext/eglgles/gstvidroidsink.h:
eglglessink: Move eglgles Sink to ext/ #2
2012-09-10 20:00:57 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com>
@@ -75067,7 +77166,6 @@
* docs/plugins/inspect/plugin-modplug.xml:
* docs/plugins/inspect/plugin-mpeg2enc.xml:
* docs/plugins/inspect/plugin-mpeg4videoparse.xml:
- * docs/plugins/inspect/plugin-mpegdemux2.xml:
* docs/plugins/inspect/plugin-mpegpsdemux.xml:
* docs/plugins/inspect/plugin-mpegpsmux.xml:
* docs/plugins/inspect/plugin-mpegtsdemux.xml:
@@ -79270,7 +81368,6 @@
* gst/audiovisualizers/Makefile.am:
* gst/audiovisualizers/gstaudiovisualizer.c:
* gst/audiovisualizers/gstaudiovisualizer.h:
- * gst/audiovisualizers/gstbaseaudiovisualizer.c:
* gst/audiovisualizers/gstbaseaudiovisualizer.h:
* gst/audiovisualizers/gstspacescope.c:
* gst/audiovisualizers/gstspacescope.h:
@@ -79866,7 +81963,6 @@
2012-06-16 16:49:10 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
* gst/mpegdemux/Makefile.am:
- * gst/mpegdemux/flumpegdemux.c:
* gst/mpegdemux/gstmpegdemux.c:
* gst/mpegdemux/gstmpegdemux.h:
* gst/mpegdemux/gstpesfilter.c:
@@ -79994,11 +82090,6 @@
* ext/jasper/gstjasperenc.c:
* ext/jasper/gstjasperenc.h:
* ext/jp2k/Makefile.am:
- * ext/jp2k/gstjasperdec.c:
- * ext/jp2k/gstjasperdec.h:
- * ext/jp2k/gstjasperenc.c:
- * ext/jp2k/gstjasperenc.h:
- * ext/jp2k/gstjp2k.c:
jasper: Rename from jp2k to jasper
Jasper is not the only JPEG2000 library out there and we
might want to add encoders/decoders based on OpenJPEG for example.
@@ -80970,8 +83061,6 @@
* sys/d3dvideosink/Makefile.am:
* sys/d3dvideosink/d3dvideosink.c:
* sys/d3dvideosink/d3dvideosink.h:
- * sys/d3dvideosink/directx/d3d.c:
- * sys/d3dvideosink/directx/d3d.h:
* sys/d3dvideosink/directx/directx.h:
* sys/d3dvideosink/directx/directx10/dx10_d3d.h:
* sys/d3dvideosink/directx/directx11/dx11_d3d.h:
@@ -81454,7 +83543,6 @@
* ext/curl/gstcurlbasesink.h:
* ext/curl/gstcurlhttpsink.c:
* ext/curl/gstcurlhttpsink.h:
- * ext/curl/gstcurlsink.c:
* ext/curl/gstcurlsink.h:
* ext/curl/gstcurltlssink.c:
* ext/curl/gstcurltlssink.h:
@@ -87908,10 +89996,6 @@
* configure.ac:
* gst/mpeg4videoparse/Makefile.am:
- * gst/mpeg4videoparse/mpeg4parse.c:
- * gst/mpeg4videoparse/mpeg4parse.h:
- * gst/mpeg4videoparse/mpeg4videoparse.c:
- * gst/mpeg4videoparse/mpeg4videoparse.h:
* gst/videoparsers/Makefile.am:
* gst/videoparsers/gstmpeg4videoparse.c:
* gst/videoparsers/gstmpeg4videoparse.h:
@@ -89870,7 +91954,6 @@
2011-11-04 11:24:53 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
* gst-libs/gst/video/Makefile.am:
- * gst-libs/gst/video/gstsurfacebuffer.c:
* gst-libs/gst/video/gstsurfacebuffer.h:
* gst-libs/gst/video/gstsurfaceconverter.c:
* gst-libs/gst/video/gstsurfaceconverter.h:
@@ -92196,9 +94279,6 @@
2011-07-07 16:44:31 -0400 Joshua M. Doe <oss@nvl.army.mil>
- * sys/decklink/DeckLinkAPI.h:
- * sys/decklink/DeckLinkAPIDispatch.cpp:
- * sys/decklink/LinuxCOM.h:
* sys/decklink/capture.cpp:
* sys/decklink/capture.h:
* sys/decklink/gstdecklink.h:
@@ -93851,7 +95931,6 @@
* docs/plugins/gst-plugins-bad-plugins-docs.sgml:
* docs/plugins/gst-plugins-bad-plugins-sections.txt:
* docs/plugins/inspect/plugin-rtmp.xml:
- * docs/plugins/inspect/plugin-rtmpsrc.xml:
* ext/rtmp/Makefile.am:
* ext/rtmp/gstrtmp.c:
* ext/rtmp/gstrtmpsink.c:
@@ -94133,8 +96212,6 @@
* gst/audiovisualizers/Makefile.am:
* gst/audiovisualizers/gstbaseaudiovisualizer.c:
* gst/audiovisualizers/gstbaseaudiovisualizer.h:
- * gst/audiovisualizers/gstbasescope.c:
- * gst/audiovisualizers/gstbasescope.h:
* gst/audiovisualizers/gstspectrascope.c:
* gst/audiovisualizers/gstspectrascope.h:
* gst/audiovisualizers/gstsynaescope.c:
@@ -94156,16 +96233,6 @@
* gst/audiovisualizers/gstwavescope.c:
* gst/audiovisualizers/gstwavescope.h:
* gst/audiovisualizers/plugin.c:
- * gst/scopes/Makefile.am:
- * gst/scopes/gstbasescope.c:
- * gst/scopes/gstbasescope.h:
- * gst/scopes/gstspectrascope.c:
- * gst/scopes/gstspectrascope.h:
- * gst/scopes/gstsynaescope.c:
- * gst/scopes/gstsynaescope.h:
- * gst/scopes/gstwavescope.c:
- * gst/scopes/gstwavescope.h:
- * gst/scopes/plugin.c:
audiovisualizers: rename scopes plugin to audiovisualizers
2011-05-31 14:42:55 +0300 Stefan Kost <ensonic@users.sf.net>
@@ -95823,12 +97890,8 @@
* docs/plugins/gst-plugins-bad-plugins-sections.txt:
* docs/plugins/inspect/plugin-amrwbenc.xml:
* ext/Makefile.am:
- * ext/amrwbenc/GstAmrwbEnc.prs:
* ext/amrwbenc/Makefile.am:
* ext/amrwbenc/README:
- * ext/amrwbenc/gstamrwb.c:
- * ext/amrwbenc/gstamrwbenc.c:
- * ext/amrwbenc/gstamrwbenc.h:
* ext/voamrwbenc/GstVoAmrwbEnc.prs:
* ext/voamrwbenc/Makefile.am:
* ext/voamrwbenc/gstvoamrwb.c:
@@ -96983,7 +99046,6 @@
* gst/dtmf/Makefile.am:
* gst/dtmf/gstdtmfcommon.h:
* gst/dtmf/gstdtmfsrc.c:
- * gst/dtmf/gstrtpdtmfcommon.h:
* gst/dtmf/gstrtpdtmfdepay.c:
* gst/dtmf/gstrtpdtmfdepay.h:
* gst/dtmf/gstrtpdtmfsrc.c:
@@ -97636,8 +99698,6 @@
* ext/opencv/gstopencv.c:
* ext/opencv/gsttextoverlay.c:
* ext/opencv/gsttextoverlay.h:
- * ext/opencv/gsttextwrite.c:
- * ext/opencv/gsttextwrite.h:
opencv text overlay: rename and docuemnt
Rename the element textwrite to opencvtextoverlay. Add proper structuring to
opencv textoverlay element.
@@ -99043,8 +101103,6 @@
* gst/audioparsers/gstaacparse.h:
* gst/audioparsers/gstac3parse.h:
* gst/audioparsers/gstamrparse.h:
- * gst/audioparsers/gstbaseparse.c:
- * gst/audioparsers/gstbaseparse.h:
* gst/audioparsers/gstdcaparse.h:
* gst/audioparsers/gstflacparse.h:
* gst/audioparsers/gstmpegaudioparse.h:
@@ -99467,13 +101525,6 @@
2011-01-27 18:16:14 +0100 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
* configure.ac:
- * gst/h263parse/Makefile.am:
- * gst/h263parse/gstbaseparse.c:
- * gst/h263parse/gstbaseparse.h:
- * gst/h263parse/gsth263parse.c:
- * gst/h263parse/gsth263parse.h:
- * gst/h263parse/h263parse.c:
- * gst/h263parse/h263parse.h:
* gst/videoparsers/Makefile.am:
* gst/videoparsers/gstbaseparse.c:
* gst/videoparsers/gstbaseparse.h:
@@ -101346,8 +103397,6 @@
* gst/camerabin2/Makefile.am:
* gst/camerabin2/gstcamerabin2.c:
* gst/camerabin2/gstplugin.c:
- * gst/camerabin2/gstv4l2camerasrc.c:
- * gst/camerabin2/gstv4l2camerasrc.h:
* gst/camerabin2/gstwrappercamerabinsrc.c:
* gst/camerabin2/gstwrappercamerabinsrc.h:
* tests/check/elements/camerabin2.c:
@@ -101408,10 +103457,6 @@
* gst-libs/gst/basecamerabinsrc/gstcamerabin-enum.c:
* gst-libs/gst/basecamerabinsrc/gstcamerabin-enum.h:
* gst/camerabin2/Makefile.am:
- * gst/camerabin2/gstbasecamerasrc.c:
- * gst/camerabin2/gstbasecamerasrc.h:
- * gst/camerabin2/gstcamerabin-enum.c:
- * gst/camerabin2/gstcamerabin-enum.h:
* gst/camerabin2/gstcamerabin2.c:
* gst/camerabin2/gstv4l2camerasrc.c:
* gst/camerabin2/gstv4l2camerasrc.h:
@@ -101677,7 +103722,6 @@
* Makefile.am:
* tests/check/Makefile.am:
* tests/check/elements/.gitignore:
- * tests/check/elements/autocolorspace.c:
* tests/check/elements/autovideoconvert.c:
autovideoconvert: Rename and adjust unit test too
@@ -101730,8 +103774,6 @@
2010-12-16 09:56:00 +0100 Sebastian Dröge <sebastian.droege@collabora.co.uk>
* gst/autoconvert/Makefile.am:
- * gst/autoconvert/gstautocolorspace.c:
- * gst/autoconvert/gstautocolorspace.h:
* gst/autoconvert/gstautovideoconvert.c:
* gst/autoconvert/gstautovideoconvert.h:
* gst/autoconvert/plugin.c:
@@ -101741,8 +103783,6 @@
2010-12-15 12:45:38 -0800 David Schleef <ds@schleef.org>
* tools/Makefile.am:
- * tools/base.c:
- * tools/element-maker:
* tools/element-templates/audiofilter:
* tools/element-templates/audiosink:
* tools/element-templates/audiosrc:
@@ -101764,27 +103804,7 @@
* tools/element-templates/srcpad-simple:
* tools/element-templates/tagdemux:
* tools/element-templates/videosink:
- * tools/gobject.c:
* tools/gst-element-maker:
- * tools/gstaudiofilter.c:
- * tools/gstaudiosink.c:
- * tools/gstaudiosrc.c:
- * tools/gstbaseaudiosink.c:
- * tools/gstbaseaudiosrc.c:
- * tools/gstbasertpdepayload.c:
- * tools/gstbasertppayload.c:
- * tools/gstbasesink.c:
- * tools/gstbasesrc.c:
- * tools/gstbasetransform.c:
- * tools/gstcddabasesrc.c:
- * tools/gstelement.c:
- * tools/gstpushsrc.c:
- * tools/gsttagdemux.c:
- * tools/gstvideosink.c:
- * tools/sinkpad-simple.c:
- * tools/sinkpad.c:
- * tools/srcpad-simple.c:
- * tools/srcpad.c:
element-maker: Clean up directory
2010-12-15 21:28:06 +0100 Benjamin Gaignard <benjamin.gaignard@stericsson.com>
@@ -103863,8 +105883,6 @@
* sys/applemedia/Makefile.am:
* sys/applemedia/celvideosrc.c:
* sys/applemedia/celvideosrc.h:
- * sys/applemedia/iphonecamerasrc.c:
- * sys/applemedia/iphonecamerasrc.h:
* sys/applemedia/plugin.m:
applemedia: rename iphonecamerasrc to celvideosrc
This is in order to improve consistency with the other three sources.
@@ -106156,29 +108174,9 @@
* ext/opencv/Makefile.am:
* ext/opencv/basicfilters/Makefile.am:
- * ext/opencv/basicfilters/gstcvdilate.c:
- * ext/opencv/basicfilters/gstcvdilate.h:
- * ext/opencv/basicfilters/gstcvdilateerode.c:
- * ext/opencv/basicfilters/gstcvdilateerode.h:
- * ext/opencv/basicfilters/gstcvequalizehist.c:
- * ext/opencv/basicfilters/gstcvequalizehist.h:
- * ext/opencv/basicfilters/gstcverode.c:
- * ext/opencv/basicfilters/gstcverode.h:
- * ext/opencv/basicfilters/gstcvlaplace.c:
- * ext/opencv/basicfilters/gstcvlaplace.h:
- * ext/opencv/basicfilters/gstcvsmooth.c:
- * ext/opencv/basicfilters/gstcvsmooth.h:
- * ext/opencv/basicfilters/gstcvsobel.c:
- * ext/opencv/basicfilters/gstcvsobel.h:
* ext/opencv/edgedetect/Makefile.am:
- * ext/opencv/edgedetect/gstedgedetect.c:
- * ext/opencv/edgedetect/gstedgedetect.h:
* ext/opencv/faceblur/Makefile.am:
- * ext/opencv/faceblur/gstfaceblur.c:
- * ext/opencv/faceblur/gstfaceblur.h:
* ext/opencv/facedetect/Makefile.am:
- * ext/opencv/facedetect/gstfacedetect.c:
- * ext/opencv/facedetect/gstfacedetect.h:
* ext/opencv/gstcvdilate.c:
* ext/opencv/gstcvdilate.h:
* ext/opencv/gstcvdilateerode.c:
@@ -106207,14 +108205,8 @@
* ext/opencv/gsttextwrite.c:
* ext/opencv/gsttextwrite.h:
* ext/opencv/pyramidsegment/Makefile.am:
- * ext/opencv/pyramidsegment/gstpyramidsegment.c:
- * ext/opencv/pyramidsegment/gstpyramidsegment.h:
* ext/opencv/templatematch/Makefile.am:
- * ext/opencv/templatematch/gsttemplatematch.c:
- * ext/opencv/templatematch/gsttemplatematch.h:
* ext/opencv/textwrite/Makefile.am:
- * ext/opencv/textwrite/gsttextwrite.c:
- * ext/opencv/textwrite/gsttextwrite.h:
opencv: Refactor files structure
Remove internal folders and put all code inside the main plugin
folder. Also fixes some building warnings.
@@ -106276,8 +108268,6 @@
* ext/opencv/basicfilters/gstcvsmooth.h:
* ext/opencv/basicfilters/gstcvsobel.c:
* ext/opencv/basicfilters/gstcvsobel.h:
- * ext/opencv/gstopencvbasetrans.c:
- * ext/opencv/gstopencvbasetrans.h:
* ext/opencv/gstopencvvideofilter.c:
* ext/opencv/gstopencvvideofilter.h:
opencvbasetrans: Use GstVideoFilter as the base class
@@ -109049,8 +111039,6 @@
* sys/vdpau/h264/gsth264frame.c:
* sys/vdpau/h264/gsth264frame.h:
* sys/vdpau/h264/gstvdph264dec.c:
- * sys/vdpau/h264/gstvdph264frame.c:
- * sys/vdpau/h264/gstvdph264frame.h:
vdpauh264dec: rename GstVdpH264Frame to GstH264Frame
2010-06-27 00:36:25 +0200 Carl-Anton Ingmarsson <ca.ingmarsson@gmail.com>
@@ -109244,10 +111232,7 @@
* sys/vdpau/basevideodecoder/gstbasevideoutils.h:
* sys/vdpau/basevideodecoder/gstvideoframe.c:
* sys/vdpau/basevideodecoder/gstvideoframe.h:
- * sys/vdpau/basevideodecoder/satbasevideodecoder.c:
* sys/vdpau/basevideodecoder/satbasevideodecoder.h:
- * sys/vdpau/basevideodecoder/satbasevideoutils.h:
- * sys/vdpau/basevideodecoder/satvideoframe.c:
* sys/vdpau/basevideodecoder/satvideoframe.h:
* sys/vdpau/h264/gsth264dpb.c:
* sys/vdpau/h264/gstvdph264dec.c:
@@ -109271,10 +111256,7 @@
* sys/vdpau/Makefile.am:
* sys/vdpau/basevideodecoder/Makefile.am:
- * sys/vdpau/basevideodecoder/gstbasevideodecoder.c:
* sys/vdpau/basevideodecoder/gstbasevideodecoder.h:
- * sys/vdpau/basevideodecoder/gstbasevideoutils.h:
- * sys/vdpau/basevideodecoder/gstvideoframe.c:
* sys/vdpau/basevideodecoder/gstvideoframe.h:
* sys/vdpau/basevideodecoder/satbasevideodecoder.c:
* sys/vdpau/basevideodecoder/satbasevideodecoder.h:
@@ -109400,8 +111382,6 @@
* sys/vdpau/basevideodecoder/gstbasevideoutils.h:
* sys/vdpau/basevideodecoder/gstvideoframe.c:
* sys/vdpau/basevideodecoder/gstvideoframe.h:
- * sys/vdpau/gstvdp.c:
- * sys/vdpau/gstvdp.h:
* sys/vdpau/gstvdp/Makefile.am:
* sys/vdpau/gstvdp/gstvdp.c:
* sys/vdpau/gstvdp/gstvdp.h:
@@ -109418,32 +111398,17 @@
* sys/vdpau/gstvdp/gstvdpvideosrcpad.c:
* sys/vdpau/gstvdp/gstvdpvideosrcpad.h:
* sys/vdpau/gstvdpau.c:
- * sys/vdpau/gstvdpdevice.c:
- * sys/vdpau/gstvdpdevice.h:
* sys/vdpau/gstvdpmpegdec.c:
- * sys/vdpau/gstvdpmpegdec.h:
- * sys/vdpau/gstvdpoutputbuffer.c:
- * sys/vdpau/gstvdpoutputbuffer.h:
- * sys/vdpau/gstvdpoutputsrcpad.c:
- * sys/vdpau/gstvdpoutputsrcpad.h:
* sys/vdpau/gstvdpsink.c:
* sys/vdpau/gstvdpsink.h:
- * sys/vdpau/gstvdputils.c:
- * sys/vdpau/gstvdputils.h:
- * sys/vdpau/gstvdpvideobuffer.c:
- * sys/vdpau/gstvdpvideobuffer.h:
* sys/vdpau/gstvdpvideopostprocess.c:
* sys/vdpau/gstvdpvideopostprocess.h:
- * sys/vdpau/gstvdpvideosrcpad.c:
- * sys/vdpau/gstvdpvideosrcpad.h:
* sys/vdpau/mpeg/gstvdpmpegdec.c:
* sys/vdpau/mpeg/gstvdpmpegdec.h:
* sys/vdpau/mpeg/gstvdpmpegframe.c:
* sys/vdpau/mpeg/gstvdpmpegframe.h:
* sys/vdpau/mpeg/mpegutil.c:
* sys/vdpau/mpeg/mpegutil.h:
- * sys/vdpau/mpegutil.c:
- * sys/vdpau/mpegutil.h:
vdpau: base vdpaumpegdec on GstBaseVideoDecoder
2010-06-08 13:36:53 +0200 Carl-Anton Ingmarsson <ca.ingmarsson@gmail.com>
@@ -110042,8 +112007,6 @@
* gst/rtmp/bytes.h:
* gst/rtmp/dh.h:
* gst/rtmp/dhgroups.h:
- * gst/rtmp/gstrtmpsrc.c:
- * gst/rtmp/gstrtmpsrc.h:
* gst/rtmp/handshake.h:
* gst/rtmp/hashswf.c:
* gst/rtmp/http.h:
@@ -110325,16 +112288,6 @@
2010-06-03 14:42:06 -0400 Olivier Crête <olivier.crete@collabora.co.uk>
* configure.ac:
- * gst/shm/Makefile.am:
- * gst/shm/gstshm.c:
- * gst/shm/gstshmsink.c:
- * gst/shm/gstshmsink.h:
- * gst/shm/gstshmsrc.c:
- * gst/shm/gstshmsrc.h:
- * gst/shm/shmalloc.c:
- * gst/shm/shmalloc.h:
- * gst/shm/shmpipe.c:
- * gst/shm/shmpipe.h:
* sys/Makefile.am:
* sys/shm/Makefile.am:
* sys/shm/gstshm.c:
@@ -110892,7 +112845,6 @@
* configure.ac:
* ext/cog/Makefile.am:
- * ext/cog/cog.orc:
* ext/cog/cogframe.c:
* ext/cog/cogvirtframe.c:
* ext/cog/gstcogorc-dist.c:
@@ -111308,8 +113260,6 @@
* docs/plugins/camerabin.dot:
* docs/plugins/camerabin.png:
* docs/plugins/figures/Makefile.am:
- * docs/plugins/figures/camerabin.dot:
- * docs/plugins/figures/camerabin.png:
docs: fix dist/distcheck issues with camerabin figures
Move figures into docs/plugins as well, to avoid issues with
make dist and make distcheck (make distdir will not first descend
@@ -114063,11 +116013,9 @@
* docs/plugins/gst-plugins-bad-plugins.args:
* docs/plugins/gst-plugins-bad-plugins.prerequisites:
- * docs/plugins/inspect/plugin-apex.xml:
* docs/plugins/inspect/plugin-apexsink.xml:
* docs/plugins/inspect/plugin-invtelecine.xml:
* docs/plugins/inspect/plugin-nsf.xml:
- * docs/plugins/inspect/plugin-nsfdec.xml:
* docs/plugins/inspect/plugin-nuvdemux.xml:
* docs/plugins/inspect/plugin-vmnc.xml:
docs: Update to match recent commits
@@ -115639,11 +117587,9 @@
* tests/examples/camerabin/gst-camera-perf.glade:
* tests/examples/camerabin/gst-camera-perf.ui:
* tests/examples/camerabin/gst-camera.c:
- * tests/examples/camerabin/gst-camera.glade:
* tests/examples/camerabin/gst-camera.ui:
* tests/icles/Makefile.am:
* tests/icles/metadata_editor.c:
- * tests/icles/metadata_editor.glade:
* tests/icles/metadata_editor.ui:
tests: Port from libglade to GtkBuilder
Fixes bug #601108.
@@ -116059,8 +118005,6 @@
* gst/flacparse/gstbaseparse.c:
* gst/flacparse/gstbaseparse.h:
* gst/flacparse/gstflac.c:
- * gst/flacparse/gstflacparse.c:
- * gst/flacparse/gstflacparse.h:
audioparsers: move 'flacparse' into it
2009-12-16 18:38:33 +0100 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
@@ -116412,8 +118356,6 @@
* docs/plugins/Makefile.am:
* docs/plugins/gst-plugins-bad-plugins-docs.sgml:
* gst/amrparse/Makefile.am:
- * gst/amrparse/gstamrparse.c:
- * gst/amrparse/gstamrparse.h:
* gst/amrparse/gstbaseparse.c:
* gst/amrparse/gstbaseparse.h:
* gst/audioparsers/Makefile.am:
@@ -116433,11 +118375,6 @@
* docs/plugins/Makefile.am:
* docs/plugins/gst-plugins-bad-plugins-docs.sgml:
* gst/aacparse/Makefile.am:
- * gst/aacparse/gstaacparse.c:
- * gst/aacparse/gstaacparse.h:
- * gst/aacparse/gstbaseparse.c:
- * gst/aacparse/gstbaseparse.h:
- * gst/aacparse/plugin.c:
* gst/audioparsers/Makefile.am:
* gst/audioparsers/gstaacparse.c:
* gst/audioparsers/gstaacparse.h:
@@ -118131,14 +120068,11 @@
* configure.ac:
* docs/plugins/inspect/plugin-aiff.xml:
- * docs/plugins/inspect/plugin-aiffparse.xml:
* gst-plugins-bad.spec.in:
* gst/aiff/Makefile.am:
* gst/aiff/aiffparse.c:
* gst/aiff/aiffparse.h:
* gst/aiffparse/Makefile.am:
- * gst/aiffparse/aiffparse.c:
- * gst/aiffparse/aiffparse.h:
* po/POTFILES.in:
aiff: rename 'aiffparse' plugin to 'aiff'
@@ -118168,7 +120102,6 @@
* sys/osxvideo/Makefile.am:
* sys/osxvideo/osxvideoplugin.c:
- * sys/osxvideo/osxvideoplugin.m:
osxvideosrc: change a .m file containing only C code to a .c file. Makes building this easier.
2009-10-27 22:08:42 +0000 Jan Schmidt <thaytan@noraisin.net>
@@ -119627,8 +121560,6 @@
* ext/resindvd/Makefile.am:
* ext/resindvd/resindvdbin.c:
- * ext/resindvd/rsnaudiodec.c:
- * ext/resindvd/rsnaudiodec.h:
* ext/resindvd/rsndec.c:
* ext/resindvd/rsndec.h:
resindvdbin: Rename files
@@ -120775,7 +122706,6 @@
2009-09-07 15:44:16 +0200 Julien Isorce <julien.isorce@gmail.com>
* win32/vs8/gst-plugins-bad.sln:
- * win32/vs8/libdshowsrcwrapper.vcproj:
* win32/vs9/gst-plugins-bad.sln:
* win32/vs9/libgstdshowsrcwrapper.vcproj:
dshowsrcwrapper: upgrade frozen build to vs9
@@ -122414,12 +124344,8 @@
* docs/plugins/inspect/plugin-amrwbenc.xml:
* ext/Makefile.am:
* ext/amrwb/Makefile.am:
- * ext/amrwb/README:
- * ext/amrwb/gstamrwb.c:
* ext/amrwb/gstamrwbdec.c:
* ext/amrwb/gstamrwbdec.h:
- * ext/amrwb/gstamrwbenc.c:
- * ext/amrwb/gstamrwbenc.h:
* ext/amrwb/gstamrwbparse.c:
* ext/amrwb/gstamrwbparse.h:
* ext/amrwbenc/GstAmrwbEnc.prs:
@@ -122744,14 +124670,12 @@
2009-07-22 12:24:46 +0200 Julien Isorce <julien.isorce@gmail.com>
- * sys/dshowsrcwrapper/gstdshowaudiosrc.c:
* sys/dshowsrcwrapper/gstdshowaudiosrc.cpp:
* win32/vs8/libdshowsrcwrapper.vcproj:
dshowaudiosrc: converts code to C++
2009-07-22 11:01:49 +0200 Julien Isorce <julien.isorce@gmail.com>
- * sys/dshowsrcwrapper/gstdshowvideosrc.c:
* sys/dshowsrcwrapper/gstdshowvideosrc.cpp:
* win32/vs8/libdshowsrcwrapper.vcproj:
dshowvideosrc: converts code to C++
@@ -122822,14 +124746,9 @@
* configure.ac:
* gst-libs/gst/Makefile.am:
* gst-libs/gst/dshow/Makefile.am:
- * gst-libs/gst/dshow/gstdshow.cpp:
- * gst-libs/gst/dshow/gstdshow.h:
- * gst-libs/gst/dshow/gstdshowfakesink.cpp:
- * gst-libs/gst/dshow/gstdshowfakesink.h:
* gst-libs/gst/dshow/gstdshowfakesrc.cpp:
* gst-libs/gst/dshow/gstdshowfakesrc.h:
* gst-libs/gst/dshow/gstdshowinterface.cpp:
- * gst-libs/gst/dshow/gstdshowinterface.h:
* sys/dshowsrcwrapper/Makefile.am:
* sys/dshowsrcwrapper/gstdshow.cpp:
* sys/dshowsrcwrapper/gstdshow.h:
@@ -122838,7 +124757,6 @@
* sys/dshowsrcwrapper/gstdshowfakesink.cpp:
* sys/dshowsrcwrapper/gstdshowfakesink.h:
* sys/dshowsrcwrapper/gstdshowinterface.h:
- * sys/dshowsrcwrapper/gstdshowsrcwrapper.c:
* sys/dshowsrcwrapper/gstdshowsrcwrapper.cpp:
* sys/dshowsrcwrapper/gstdshowsrcwrapper.h:
* sys/dshowsrcwrapper/gstdshowvideosrc.c:
@@ -123673,8 +125591,6 @@
* ext/Makefile.am:
* ext/ladspa/Makefile.am:
* ext/ladspa/gstladspa.h:
- * ext/ladspa/gstsignalprocessor.c:
- * ext/ladspa/gstsignalprocessor.h:
* ext/lv2/Makefile.am:
* ext/lv2/gstlv2.c:
* ext/lv2/gstlv2.h:
@@ -123861,8 +125777,6 @@
* sys/vdpau/gstvdp.c:
* sys/vdpau/gstvdpmpegdec.c:
* sys/vdpau/gstvdpmpegdec.h:
- * sys/vdpau/gstvdpmpegdecoder.c:
- * sys/vdpau/gstvdpmpegdecoder.h:
vdpaumpegdec: rename gstvdpmpegdecoder.[ch] to gstvdpmpegdec.[ch]
2009-06-05 21:46:08 +0200 Carl-Anton Ingmarsson <ca.ingmarsson@gmail.com>
@@ -124271,19 +126185,6 @@
* sys/vdpau/Makefile.am:
* sys/vdpau/gstvdp.c:
- * sys/vdpau/gstvdpau.c:
- * sys/vdpau/gstvdpaudecoder.c:
- * sys/vdpau/gstvdpaudecoder.h:
- * sys/vdpau/gstvdpaudevice.c:
- * sys/vdpau/gstvdpaudevice.h:
- * sys/vdpau/gstvdpaumpegdecoder.c:
- * sys/vdpau/gstvdpaumpegdecoder.h:
- * sys/vdpau/gstvdpauvideobuffer.c:
- * sys/vdpau/gstvdpauvideobuffer.h:
- * sys/vdpau/gstvdpauvideoyuv.c:
- * sys/vdpau/gstvdpauvideoyuv.h:
- * sys/vdpau/gstvdpauyuvvideo.c:
- * sys/vdpau/gstvdpauyuvvideo.h:
* sys/vdpau/gstvdpdecoder.c:
* sys/vdpau/gstvdpdecoder.h:
* sys/vdpau/gstvdpdevice.c:
@@ -124403,7 +126304,6 @@
2009-04-03 17:53:21 +0200 Carl-Anton Ingmarsson <ca.ingmarsson@gmail.com>
- * sys/vdpau/gst-vdpau-device.h:
* sys/vdpau/gstvdpaudevice.h:
vdpau: commit rename of gst-vdpau-device.h to gstvdpaudevice.h
@@ -125071,8 +126971,6 @@
* gst/id3tag/Makefile.am:
* gst/id3tag/gstid3mux.c:
* gst/id3tag/gstid3mux.h:
- * gst/id3tag/gstid3tag.c:
- * gst/id3tag/gstid3tag.h:
* gst/id3tag/gsttagmux.c:
* gst/id3tag/id3tag.c:
* gst/id3tag/id3tag.h:
@@ -127709,7 +129607,6 @@
2009-05-01 01:59:56 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
* docs/plugins/inspect/plugin-debugutilsbad.xml:
- * docs/plugins/inspect/plugin-fpsdisplaysink.xml:
* gst/debugutils/Makefile.am:
* gst/debugutils/debugutilsbad.c:
* gst/debugutils/fpsdisplaysink.c:
@@ -128785,7 +130682,6 @@
* gst/mxf/mxfmpeg.c:
* gst/mxf/mxfmpeg.h:
* gst/mxf/mxfmux.h:
- * gst/mxf/mxfparse.c:
* gst/mxf/mxfparse.h:
* gst/mxf/mxftypes.c:
* gst/mxf/mxftypes.h:
@@ -128796,7 +130692,6 @@
* gst/mxf/mxfvc3.c:
* gst/mxf/mxfvc3.h:
* gst/mxf/mxfwrite.c:
- * gst/mxf/mxfwrite.h:
mxf: Source files and #include cleanup
2009-03-26 12:10:05 +0100 Sebastian Dröge <sebastian.droege@collabora.co.uk>
@@ -130410,46 +132305,6 @@
* Makefile.am:
* configure.ac:
- * examples/Makefile.am:
- * examples/app/.gitignore:
- * examples/app/Makefile.am:
- * examples/app/appsink-src.c:
- * examples/app/appsrc-ra.c:
- * examples/app/appsrc-seekable.c:
- * examples/app/appsrc-stream.c:
- * examples/app/appsrc-stream2.c:
- * examples/app/appsrc_ex.c:
- * examples/capsfilter/Makefile.am:
- * examples/capsfilter/capsfilter1.c:
- * examples/directfb/.gitignore:
- * examples/directfb/Makefile.am:
- * examples/directfb/decker.ttf:
- * examples/directfb/dfblogo.png:
- * examples/directfb/gstdfb.c:
- * examples/gob/Makefile.am:
- * examples/gob/gst-identity2.gob:
- * examples/gstplay/.gitignore:
- * examples/gstplay/Makefile.am:
- * examples/gstplay/player.c:
- * examples/indexing/.gitignore:
- * examples/indexing/Makefile.am:
- * examples/indexing/indexmpeg.c:
- * examples/level/Makefile.am:
- * examples/level/README:
- * examples/level/demo.c:
- * examples/level/plot.c:
- * examples/scaletempo/.gitignore:
- * examples/scaletempo/Makefile.am:
- * examples/scaletempo/demo-gui.c:
- * examples/scaletempo/demo-gui.h:
- * examples/scaletempo/demo-main.c:
- * examples/scaletempo/demo-player.c:
- * examples/scaletempo/demo-player.h:
- * examples/stats/Makefile.am:
- * examples/stats/mp2ogg.c:
- * examples/switch/.gitignore:
- * examples/switch/Makefile.am:
- * examples/switch/switcher.c:
* tests/Makefile.am:
* tests/examples/Makefile.am:
* tests/examples/app/.gitignore:
@@ -131449,9 +133304,6 @@
* gst/dtmf/Makefile.am:
* gst/dtmf/gstrtpdtmfsrc.c:
* gst/dtmf/gstrtpdtmfsrc.h:
- * gst/rtpdtmf/Makefile.am:
- * gst/rtpdtmf/gstrtpdtmfsrc.c:
- * gst/rtpdtmf/gstrtpdtmfsrc.h:
[MOVED FROM GST-P-FARSIGHT] Moved rtpdtmf to dtmf directory
20070820184800-4f0f6-fa33ea974510161de8c9951c39087af3613b65a4.gz
@@ -132471,8 +134323,6 @@
2009-02-11 01:02:42 +0200 René Stadler <mail@renestadler.de>
- * gst-libs/gst/interfaces/photography-enumtypes.c:
- * gst-libs/gst/interfaces/photography-enumtypes.h:
* win32/common/photography-enumtypes.c:
* win32/common/photography-enumtypes.h:
photography interface: Move generated files to win32/common.
@@ -133240,9 +135090,6 @@
* ext/modplug/Makefile.am:
* ext/modplug/gstmodplug.cc:
* ext/modplug/gstmodplug.h:
- * gst/modplug/Makefile.am:
- * gst/modplug/gstmodplug.cc:
- * gst/modplug/gstmodplug.h:
* gst/modplug/libmodplug/Makefile.am:
* gst/modplug/libmodplug/README:
* gst/modplug/libmodplug/changes.txt:
@@ -133406,20 +135253,6 @@
* docs/plugins/inspect/plugin-x264.xml:
* docs/plugins/inspect/plugin-xvid.xml:
* docs/plugins/inspect/plugin-y4menc.xml:
- * gst/audioresample/Makefile.am:
- * gst/audioresample/buffer.c:
- * gst/audioresample/buffer.h:
- * gst/audioresample/debug.c:
- * gst/audioresample/debug.h:
- * gst/audioresample/functable.c:
- * gst/audioresample/functable.h:
- * gst/audioresample/gstaudioresample.c:
- * gst/audioresample/gstaudioresample.h:
- * gst/audioresample/resample.c:
- * gst/audioresample/resample.h:
- * gst/audioresample/resample_chunk.c:
- * gst/audioresample/resample_functable.c:
- * gst/audioresample/resample_ref.c:
* gst/legacyresample/Makefile.am:
* gst/legacyresample/buffer.c:
* gst/legacyresample/buffer.h:
@@ -133435,7 +135268,6 @@
* gst/legacyresample/resample_functable.c:
* gst/legacyresample/resample_ref.c:
* tests/check/Makefile.am:
- * tests/check/elements/audioresample.c:
* tests/check/elements/legacyresample.c:
Rename audioresample files and types to legacyresample
Finish the move/rename of audioresample to legacyresample
@@ -145481,8 +147313,6 @@
* ext/metadata/metadataxmp.c:
* ext/metadata/metadataxmp.h:
* ext/metadata/test/Makefile:
- * ext/metadata/test/MetadataEditorMain.glade:
- * ext/metadata/test/metadata_editor.c:
* tests/icles/Makefile.am:
* tests/icles/metadata_editor.c:
* tests/icles/metadata_editor.glade:
@@ -147036,8 +148866,6 @@
* ext/metadata/gstmetadatademux.h:
* ext/metadata/gstmetadatamux.c:
* ext/metadata/gstmetadatamux.h:
- * ext/metadata/gstmetadataparse.c:
- * ext/metadata/gstmetadataparse.h:
* ext/metadata/metadataexif.c:
* ext/metadata/metadatatags.c:
* ext/metadata/test/metadata_editor.c:
@@ -147641,14 +149469,6 @@
* ext/metadata/metadataexif.h:
* ext/metadata/metadataiptc.c:
* ext/metadata/metadataiptc.h:
- * ext/metadata/metadataparse.c:
- * ext/metadata/metadataparse.h:
- * ext/metadata/metadataparseexif.c:
- * ext/metadata/metadataparseexif.h:
- * ext/metadata/metadataparseiptc.c:
- * ext/metadata/metadataparseiptc.h:
- * ext/metadata/metadataparsexmp.c:
- * ext/metadata/metadataparsexmp.h:
* ext/metadata/metadatatags.c:
* ext/metadata/metadatatags.h:
* ext/metadata/metadataxmp.c:
@@ -147805,7 +149625,6 @@
* ext/metadata/metadataparsejpeg.h:
* ext/metadata/metadataparsepng.c:
* ext/metadata/metadataparsepng.h:
- * ext/metadata/metadataparsetypes.h:
* ext/metadata/metadatatypes.c:
* ext/metadata/metadatatypes.h:
Now parser is generic (just add/remove a list of chunks). And a template of muxer has been created.
@@ -162166,9 +163985,7 @@
2005-12-01 19:13:20 +0000 Thomas Vander Stichele <thomas@apestaart.org>
* ChangeLog:
- * LICENSE:
* NEWS:
- * PORTED_09:
* RELEASE:
* common:
* configure.ac:
diff --git a/Makefile.in b/Makefile.in
index 36aa059..dc9538f 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -337,6 +337,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -386,6 +388,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
@@ -1447,8 +1451,11 @@
update-exports:
make check-exports 2>&1 | patch -p1
- git add win32/common/libgst*.def
- git diff --cached -- win32/common/
+ if test -f "$(top_srcdir)/win32/common/libgstgl.def"; then \
+ git checkout "$(top_srcdir)/win32/common/libgstgl.def"; \
+ fi
+ git add $(top_srcdir)/win32/common/libgst*.def
+ git diff --cached -- $(top_srcdir)/win32/common/
echo '^^^--- updated and staged changes above'
# complain about nonportable printf format strings (%lld, %llu, %zu etc.)
diff --git a/NEWS b/NEWS
index 4c3baab..027c018 100644
--- a/NEWS
+++ b/NEWS
@@ -1 +1 @@
-This is GStreamer 1.9.1
+This is GStreamer 1.9.2
diff --git a/RELEASE b/RELEASE
index 7085e2c..d502188 100644
--- a/RELEASE
+++ b/RELEASE
@@ -1,12 +1,13 @@
-Release notes for GStreamer Bad Plugins 1.9.1
+Release notes for GStreamer Bad Plugins 1.9.2
-The GStreamer team is pleased to announce the first release of the unstable
-1.9 release series. The 1.9 release series is adding new features on top of
-the 1.0, 1.2, 1.4, 1.6 and 1.8 series and is part of the API and ABI-stable 1.x release
-series of the GStreamer multimedia framework. The unstable 1.9 release series
-will lead to the stable 1.10 release series in the next weeks. Any newly added
-API can still change until that point.
+The GStreamer team is pleased to announce the second release of the unstable
+1.9 release series, which marks the feature freeze for 1.10. The 1.9 release
+series is adding new features on top of the 1.0, 1.2, 1.4, 1.6 and 1.8 series
+and is part of the API and ABI-stable 1.x release series of the GStreamer
+multimedia framework. The unstable 1.9 release series will lead to the stable
+1.10 release series in the next weeks. Any newly added API can still change
+until that point.
Binaries for Android, iOS, Mac OS X and Windows will be provided in the next days.
@@ -60,97 +61,45 @@
Bugs fixed in this release
- * 765266 : gl: More GLES/GL 3 compatibility fixes
- * 767087 : ahcsrc: improve error message when camera open fails
- * 623860 : mpegpsdemux: sends segment and gap events with invalid time after seek
- * 678207 : lv2: port to GStreamer 1.0 and SLV2 to Lilv
- * 704222 : gldownload: Support for multi-planar format for GLES
- * 733233 : chromaprint: notify fingerprint also via property notify
- * 733872 : codecparsers: mpegvideo: Add more fields to the headers.
- * 739598 : rfbsrc: incorrectly calculates caps
- * 746933 : gldisplay: EAGL " Could not create display "
- * 748651 : DTLS: Use unique names for internal elements to ease debugging
- * 751540 : gltestsrc: implement missing patterns, port to GL3 / ES3, load shaders with GIO
- * 751792 : dashdemux: incorrect segment duration for a segment list
- * 753265 : osxaudio: Add device provider support
- * 754495 : videoaggregator: No protection from receiving interlaced and non-interlaced content
- * 756931 : gstglbasemixer: negotiated logic is partly broken
- * 757022 : pnm: Implementation of GRAY16 handling
- * 758064 : dashdemux: leading whitespaces in content protection element are not ignored
- * 759801 : gltestsrc outputs only black frames for pattern 0 and 11
- * 760916 : gl: implement GstGLMemoryEGL
- * 761260 : qml: add Windows support
- * 762142 : dashdemux: tests: use g_object_unref for test data
- * 762144 : dashdemux: tests: add new dashdemux tests
- * 762147 : adaptivedemux: use GstSystemClock to all real-time calculations
- * 763026 : dc1394: port to 1.X
- * 763044 : Enable qmlglsink on Rasperry PI
- * 763065 : androidmedia: assorted refactoring
- * 763081 : bad plugins: use new gst_element_class_add_static_pad_template()
- * 763099 : ahcsrc: replace with new surfacetexture
- * 763100 : ahcsrc: remove unused variable
- * 763126 : player: Add is_live flag to the GstPlayerMediaInfo
- * 763309 : ahcsrc: add finalize function
- * 763441 : rfbsrc: leads to - > invalid video buffer received
- * 763647 : mpegtsmux doesn't keep language code from the incoming audio stream
- * 763998 : ahc: use g_slice_new instead of g_slice_new0
- * 764018 : glcontext: try wglCreateContextAttribsARB first even not using GL3 core profile
- * 764036 : interlace: Allow interlaced sink caps, do passthrough
- * 764251 : rtmpsrc: Add timeout property
- * 764361 : gdpdepay: query for buffer allocator
- * 764370 : codecparser: vp9: Wrong default values in non-intraonly/non-keyframe header fields
- * 764549 : aggregator: remove duplicated test of flow_return in pad_chain_internal
- * 764684 : adaptivedemux: Forward upstream buffer offsets
- * 764873 : gldeinterlace: enable this plugin on OpenGL ES using a simple deinterlace fragment shader
- * 764957 : dvbsrc: support dvbv5 channels format
- * 764972 : dvbsrc: needlessly perform delivery system autodetection twice
- * 765250 : d3dvideosink includes deprecated and unused d3dx9tex.h header
- * 765292 : gl:cocoa:Fix incompatible type warning
- * 765315 : player: Add A/V offset property
- * 765425 : dshowsrcwrapper: Fix include path in CMakeLists.txt
- * 765426 : dshowsrcwrapper: Fix link error (SAFESEH)
- * 765427 : dshowsrcwrapper: add support for RGB32, RGB555, RGB565 and RGB8 formats
- * 765428 : dshowsrcwrapper: Work around bugs in IDS Imaging camera drivers
- * 765431 : aggregator: Check all pads for data when live
- * 765581 : pvrbufferpool: gst_meta_register() parameter wrong
- * 765728 : adaptivedemux: Segfault since " use realtime_clock for waiting for a condition " commit
- * 765795 : glimagesink: support video frame rotation
- * 765804 : GstPlayer build error due to not finding GstVideo-1.0.gir
- * 765989 : videodiff element has useless " FIXME " description
- * 766053 : uridownloader: should take ownership of its source element
- * 766062 : player: Provide signalling for when a new URI is started
- * 766163 : Some header files missing in sys/applemedia/ in gst-plugins-bad-1.8.1.tar.xz
- * 766343 : mpegtsbase: remove unused variables 'upstream_live' and 'queried_latency'
- * 766597 : kmssink: doesn't chain up finalize
- * 766607 : player: problems with unit tests
- * 766639 : examples: opencv: typo fix
- * 766650 : adaptivedemux: Set DISCONT on startup and after seeks
- * 766661 : gltestsrc,glmosaic: fix shader leaks
- * 766662 : adaptivedemux: fix tag list leak
- * 766663 : bad: fix leaks in tests
- * 766679 : ahc: fix typo
- * 766703 : glvideomixer: Using an invalid, already destroyed context
- * 766794 : eglimage: Fails to compile because of compiler warning caused by unused function
- * 766803 : h264parse: add support for config-interval=-1 to re-send SPS/PPS on I/IDR frames
- * 766818 : [gl] gltransformation's pivot-z property not writable
- * 766867 : gl: win32: no debug category set in gstglcontext_wgl.c
- * 766891 : h265parse: codec_data cap field could be mis-populated when vps/sps/pps id's are not used contiguously from zero.
- * 766973 : Various warningfixes for OSX (10.9.5) compiling with Apple LLVM version 6.0
- * 766993 : Android decodebin: zero copy between hardware decoder and glimagesink doesn't work (regression in 1.9)
- * 767104 : applemedia: vtenc: Register a hardware-only vtenc_h264_hw element on OSX
- * 767159 : templatematch: fix leak in test
- * 767161 : a2dpsink: unref avdtpsink if state transition failed
- * 767162 : bad: use MAY_BE_LEAKED flag
- * 767365 : adaptivedemux: Add custom flow return for allowing subclasses to specify when a fragment is finished
- * 767402 : OpenJPEG decoder: use new sampling field to determine channel order for j2c and jpc streams
- * 767501 : curlsmtpsink: Lock and don't send final boundary upon error
- * 767512 : jpeg2000parse: support j2c and jp2 file formats
- * 767553 : qmlglsink: Add Wayland support
- * 767800 : Introduce a WebRTC Audio Processing based echo canceller for GStreamer
- * 767908 : jpeg2000parse: use enums for colorspace and sampling, rather than strings
- * 768217 : gl: Raw uploader is broken
- * 768365 : shmsrc: gst_poll_remove_fd: assertion 'fd- > fd > = 0' failed
- * 733265 : srtpenc: remove get-rollover-counter signal and add stats property
+ * 737173 : h264parse wrongly insert DISCONT flags when converting into AVC
+ * 741104 : dashdemux: add support for I frame based trick play
+ * 753751 : Dashdemux: returned seekable range for live streams is not usable
+ * 765314 : player: Add way to override HTTP (+RTSP, etc) user agent
+ * 767011 : rawparse: new rawaudioparse and rawvideoparse element which deprecate audioparse, unalignedaudioparse, and videoparse
+ * 767169 : adaptivedemux: avoid possible deadlock while destroying old sources
+ * 767879 : Deadlock in WebKit when deleting the media player while HLS media was loaded
+ * 768160 : qtplugins: How to implement qmlglsrc.
+ * 768553 : Configure check for OpenGL is wrong on OS X.
+ * 768595 : lv2: Does not build with lilv 0.20
+ * 768602 : EGL_DMA_Buf: Wrong attribute list type for EGL 1.5
+ * 768696 : Mac OS X build warnings: -Werror gstjpeg2000parse.c
+ * 768771 : openh264: Fail to build with openh264 1.6.0
+ * 768838 : camerabinpreview: fix bus leak
+ * 768843 : bad: fix leaks in tests
+ * 769144 : player: move 'position-update-interval' setting to the config struct
+ * 769197 : fix simple-launch-lines test with no jpeg lib
+ * 769210 : GLMemory created by avfvideosrc and vtdec on iOS (EAGL/gles3) can't be mapped
+ * 769295 : Broken compilation on RPi with latest rawaudioparse changes
+ * 769371 : glimagesink: Horizontal/vertical flip matrizes are swapped
+ * 769389 : aiffparse: Add bitrate and container format tags
+ * 769462 : glcolorconvert: _get_n_textures: code should not be reached
+ * 769553 : dashdemux: Fix sidx snap/keyframe seeks
+ * 769587 : hls, timecode: can't build debian package from git master, need to fix linking
+ * 769637 : rawparse: Unit test fixes and additions
+ * 769716 : x265enc enable aspect ratio
+ * 769797 : videoparse: format i420, invalid buffer size (regression)
+ * 769939 : gl: hang on joining thread
+ * 770030 : avfvideosrc: account for retina displays when capturing screens
+ * 770049 : vtdec: missing systemstream=false in mpeg decoder caps
+ * 770075 : adaptivedemux: fix stream exposure condition
+ * 770102 : daala: typo related compilation error
+ * 770282 : decklinkvideosink: " Failed to schedule frame " and Decklink Duo 2
+ * 770326 : gst-plugins-bad tarball lacks opensles.h
+ * 770408 : dashdemux: Add properties to select maximum allowed width/height and framerate
+ * 770523 : Build failure: fatal error: gst/gl/gstglconfig.h: No such file or directory
+ * 770587 : qtkitvideosrc: 'QTKit/QTKit.h' file not found (macOS Sierra)
+ * 769116 : Build failure with -O3 in Ubuntu 16.04
+ * 769580 : Fail to decode media on OSX because it's not supported by vtdec_hw but vtdec can play it
==== Download ====
@@ -187,70 +136,37 @@
Contributors to this release
- * Aaron Boxer
- * Aleix Conchillo Flaqué
* Alessandro Decina
* Alex Ashley
- * Alex-P. Natsios
- * Arjen Veenhuizen
- * Arun Raghavan
- * Aurélien Zanelli
- * Barun Kumar Singh
- * Carlos Garcia Campos
+ * Arnaud Vrac
+ * Bernhard Miller
* Carlos Rafael Giani
- * Christoffer Stengren
- * Damian Ziobro
- * Dimitrios Katsaros
* Edward Hervey
- * Florin Apostol
+ * Florian Zwoch
+ * Fredrik Fornwall
* Guillaume Desmottes
- * Gwang Yoon Hwang
* Haihua Hu
- * Havard Graff
- * Heinrich Fink
* Hyunjun Ko
- * Jan Alexander Steffens (heftig)
* Jan Schmidt
- * Javier Martinez Canillas
- * Jerome Laheurte
- * Joan Pau Beltran
- * Jonathan Roy
- * Julien Isorce
- * Justin Kim
- * Kouhei Sutou
+ * Josep Torra
* Luis de Bethencourt
- * Marcin Kolny
- * Marcin Lewandowski
* Martin Kelly
- * Mats Lindestam
+ * Matej Knopp
* Matthew Waters
* Michael Olbrich
* Nicolas Dufresne
* Nirbheek Chauhan
- * Olivier Crête
- * Patricia Muscalu
- * Philipp Zabel
- * Philippe Normand
- * Raffaele Rossi
+ * Philippe Renon
* Reynaldo H. Verdejo Pinochet
- * Santiago Carot-Nemesio
- * Scott D Phillips
* Sebastian Dröge
- * Sebastian Rasmussen
- * Sergey Borovkov
+ * Sergei Saveliev
* Song Bing
* Sreerenj Balachandran
* Stefan Sauer
- * Thiago Santos
* Thibault Saunier
* Tim-Philipp Müller
- * Vanessa Chipirras Navalon
* Vincent Penquerc'h
- * Vineeth TM
* Vivia Nikolaidou
- * Víctor Manuel Jáquez Leal
- * Wang Xin-yu (王昕宇)
- * Wim Taymans
- * Xavier Claessens
- * Yann Jouanin
+ * Xabier Rodriguez Calvar
+ * xlazom00
\ No newline at end of file
diff --git a/common/Makefile.in b/common/Makefile.in
index 05d631e..4b37a35 100644
--- a/common/Makefile.in
+++ b/common/Makefile.in
@@ -299,6 +299,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -348,6 +350,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/common/gtk-doc.mak b/common/gtk-doc.mak
index 4beebcf..3f83491 100644
--- a/common/gtk-doc.mak
+++ b/common/gtk-doc.mak
@@ -125,7 +125,7 @@
for i in $(DOC_SOURCE_DIR) ; do \
_source_dir="$${_source_dir} --source-dir=$$i" ; \
done ; \
- gtkdoc-mkdb --module=$(DOC_MODULE) $$(_source_dir) --expand-content-files="$(expand_content_files)" --main-sgml-file=$(DOC_MAIN_SGML_FILE) --output-format=xml $(MKDB_OPTIONS)
+ gtkdoc-mkdb --module=$(DOC_MODULE) $${_source_dir} --expand-content-files="$(expand_content_files)" --main-sgml-file=$(DOC_MAIN_SGML_FILE) --output-format=xml $(MKDB_OPTIONS)
@cp ../version.entities xml
@touch sgml-build.stamp
diff --git a/common/m4/Makefile.in b/common/m4/Makefile.in
index b381e6e..157bdf9 100644
--- a/common/m4/Makefile.in
+++ b/common/m4/Makefile.in
@@ -239,6 +239,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -288,6 +290,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/common/win32.mak b/common/win32.mak
index 87cd346..6060532 100644
--- a/common/win32.mak
+++ b/common/win32.mak
@@ -61,8 +61,11 @@
update-exports:
make check-exports 2>&1 | patch -p1
- git add win32/common/libgst*.def
- git diff --cached -- win32/common/
+ if test -f "$(top_srcdir)/win32/common/libgstgl.def"; then \
+ git checkout "$(top_srcdir)/win32/common/libgstgl.def"; \
+ fi
+ git add $(top_srcdir)/win32/common/libgst*.def
+ git diff --cached -- $(top_srcdir)/win32/common/
echo '^^^--- updated and staged changes above'
# complain about nonportable printf format strings (%lld, %llu, %zu etc.)
diff --git a/config.h.in b/config.h.in
index aa6e37e..429459d 100644
--- a/config.h.in
+++ b/config.h.in
@@ -223,6 +223,9 @@
/* Define to enable DVB Source (used by dvb). */
#undef HAVE_DVB
+/* Define to 1 if the system has the type `EGLAttrib'. */
+#undef HAVE_EGLATTRIB
+
/* Define to enable building of experimental plug-ins. */
#undef HAVE_EXPERIMENTAL
@@ -241,6 +244,9 @@
/* Define to 1 if you have the <fcntl.h> header file. */
#undef HAVE_FCNTL_H
+/* Define to enable fdkaac plugin (used by fdkaac). */
+#undef HAVE_FDK_AAC
+
/* FIONREAD ioctl found in sys/filio.h */
#undef HAVE_FIONREAD_IN_SYS_FILIO
@@ -352,6 +358,9 @@
/* Define to enable libvisual visualization library (used by libvisual). */
#undef HAVE_LIBVISUAL
+/* Define if we have liblilv >= 0.22 */
+#undef HAVE_LILV_0_22
+
/* Define to enable Linear Systems SDI plugin (used by linsys). */
#undef HAVE_LINSYS
@@ -492,6 +501,9 @@
/* Define to enable Qt elements (used by qt). */
#undef HAVE_QT
+/* Define if building with QTKit */
+#undef HAVE_QTKIT
+
/* Define if Qt eglfs integration is installed */
#undef HAVE_QT_EGLFS
diff --git a/configure b/configure
index 77656ab..41f4662 100755
--- a/configure
+++ b/configure
@@ -1,6 +1,6 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for GStreamer Bad Plug-ins 1.9.1.
+# Generated by GNU Autoconf 2.69 for GStreamer Bad Plug-ins 1.9.2.
#
# Report bugs to <http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer>.
#
@@ -591,8 +591,8 @@
# Identity of this package.
PACKAGE_NAME='GStreamer Bad Plug-ins'
PACKAGE_TARNAME='gst-plugins-bad'
-PACKAGE_VERSION='1.9.1'
-PACKAGE_STRING='GStreamer Bad Plug-ins 1.9.1'
+PACKAGE_VERSION='1.9.2'
+PACKAGE_STRING='GStreamer Bad Plug-ins 1.9.2'
PACKAGE_BUGREPORT='http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer'
PACKAGE_URL=''
@@ -902,6 +902,10 @@
FLITE_LIBS
FLITE_CFLAGS
HAVE_FLITE
+USE_FDK_AAC_FALSE
+USE_FDK_AAC_TRUE
+FDK_AAC_LIBS
+FDK_AAC_CFLAGS
USE_FBDEV_FALSE
USE_FBDEV_TRUE
USE_FAAD_FALSE
@@ -992,10 +996,6 @@
NVENCODE_CFLAGS
CUDA_LIBS
CUDA_CFLAGS
-GST_PBUTILS_LIBS
-GST_PBUTILS_CFLAGS
-GST_VIDEO_LIBS
-GST_VIDEO_CFLAGS
LIBUDEV_LIBS
LIBUDEV_CFLAGS
USE_UVCH264_FALSE
@@ -1117,6 +1117,8 @@
X_CFLAGS
DCCP_LIBS
WINSOCK2_LIBS
+HAVE_QTKIT_FALSE
+HAVE_QTKIT_TRUE
HAVE_VIDEOTOOLBOX_FALSE
HAVE_VIDEOTOOLBOX_TRUE
HAVE_IOS_FALSE
@@ -1139,6 +1141,8 @@
USE_PLUGIN_VIDEOFILTERS_TRUE
USE_PLUGIN_TTA_FALSE
USE_PLUGIN_TTA_TRUE
+USE_PLUGIN_TIMECODE_FALSE
+USE_PLUGIN_TIMECODE_TRUE
USE_PLUGIN_STEREO_FALSE
USE_PLUGIN_STEREO_TRUE
USE_PLUGIN_SUBENC_FALSE
@@ -1360,6 +1364,12 @@
GST_PLUGINS_BASE_CFLAGS
HAVE_GST_CHECK_FALSE
HAVE_GST_CHECK_TRUE
+GST_PBUTILS_LIBS
+GST_PBUTILS_CFLAGS
+GST_AUDIO_LIBS
+GST_AUDIO_CFLAGS
+GST_VIDEO_LIBS
+GST_VIDEO_CFLAGS
GST_NET_LIBS
GST_NET_CFLAGS
GST_CONTROLLER_LIBS
@@ -1764,6 +1774,7 @@
enable_speed
enable_subenc
enable_stereo
+enable_timecode
enable_tta
enable_videofilters
enable_videomeasure
@@ -1820,6 +1831,7 @@
enable_faac
enable_faad
enable_fbdev
+enable_fdk_aac
enable_flite
enable_gsm
enable_fluidsynth
@@ -1920,6 +1932,12 @@
GST_CONTROLLER_LIBS
GST_NET_CFLAGS
GST_NET_LIBS
+GST_VIDEO_CFLAGS
+GST_VIDEO_LIBS
+GST_AUDIO_CFLAGS
+GST_AUDIO_LIBS
+GST_PBUTILS_CFLAGS
+GST_PBUTILS_LIBS
GST_PLUGINS_BASE_CFLAGS
GST_PLUGINS_BASE_LIBS
GST_PLUGINS_GOOD_CFLAGS
@@ -1980,10 +1998,6 @@
G_UDEV_LIBS
LIBUSB_CFLAGS
LIBUSB_LIBS
-GST_VIDEO_CFLAGS
-GST_VIDEO_LIBS
-GST_PBUTILS_CFLAGS
-GST_PBUTILS_LIBS
CUDA_CFLAGS
CUDA_LIBS
NVENCODE_CFLAGS
@@ -2016,6 +2030,8 @@
DAALA_LIBS
DVDNAV_CFLAGS
DVDNAV_LIBS
+FDK_AAC_CFLAGS
+FDK_AAC_LIBS
FLUIDSYNTH_CFLAGS
FLUIDSYNTH_LIBS
KATE_CFLAGS
@@ -2668,7 +2684,7 @@
# Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF
-\`configure' configures GStreamer Bad Plug-ins 1.9.1 to adapt to many kinds of systems.
+\`configure' configures GStreamer Bad Plug-ins 1.9.2 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -2740,7 +2756,7 @@
if test -n "$ac_init_help"; then
case $ac_init_help in
- short | recursive ) echo "Configuration of GStreamer Bad Plug-ins 1.9.1:";;
+ short | recursive ) echo "Configuration of GStreamer Bad Plug-ins 1.9.2:";;
esac
cat <<\_ACEOF
@@ -2850,6 +2866,7 @@
--disable-speed disable dependency-less speed plugin
--disable-subenc disable dependency-less subenc plugin
--disable-stereo disable dependency-less stereo plugin
+ --disable-timecode disable dependency-less timecode plugin
--disable-tta disable dependency-less tta plugin
--disable-videofilters disable dependency-less videofilters plugin
--disable-videomeasure disable dependency-less videomeasure plugin
@@ -2902,6 +2919,7 @@
--disable-faac disable AAC encoder plug-in: faac
--disable-faad disable FAAD2 AAC decoder plug-in: faad
--disable-fbdev disable linux framebuffer: fbdevsink
+ --disable-fdk_aac disable fdkaac plugin: fdkaac
--disable-flite disable Flite plugin: flite
--disable-gsm disable GSM library: gsmenc gsmdec
--disable-fluidsynth disable fluidsynth: fluidsynth
@@ -3069,6 +3087,18 @@
C compiler flags for GST_NET, overriding pkg-config
GST_NET_LIBS
linker flags for GST_NET, overriding pkg-config
+ GST_VIDEO_CFLAGS
+ C compiler flags for GST_VIDEO, overriding pkg-config
+ GST_VIDEO_LIBS
+ linker flags for GST_VIDEO, overriding pkg-config
+ GST_AUDIO_CFLAGS
+ C compiler flags for GST_AUDIO, overriding pkg-config
+ GST_AUDIO_LIBS
+ linker flags for GST_AUDIO, overriding pkg-config
+ GST_PBUTILS_CFLAGS
+ C compiler flags for GST_PBUTILS, overriding pkg-config
+ GST_PBUTILS_LIBS
+ linker flags for GST_PBUTILS, overriding pkg-config
GST_PLUGINS_BASE_CFLAGS
C compiler flags for GST_PLUGINS_BASE, overriding pkg-config
GST_PLUGINS_BASE_LIBS
@@ -3164,14 +3194,6 @@
LIBUSB_CFLAGS
C compiler flags for LIBUSB, overriding pkg-config
LIBUSB_LIBS linker flags for LIBUSB, overriding pkg-config
- GST_VIDEO_CFLAGS
- C compiler flags for GST_VIDEO, overriding pkg-config
- GST_VIDEO_LIBS
- linker flags for GST_VIDEO, overriding pkg-config
- GST_PBUTILS_CFLAGS
- C compiler flags for GST_PBUTILS, overriding pkg-config
- GST_PBUTILS_LIBS
- linker flags for GST_PBUTILS, overriding pkg-config
CUDA_CFLAGS C compiler flags for CUDA, overriding pkg-config
CUDA_LIBS linker flags for CUDA, overriding pkg-config
NVENCODE_CFLAGS
@@ -3224,6 +3246,10 @@
DVDNAV_CFLAGS
C compiler flags for DVDNAV, overriding pkg-config
DVDNAV_LIBS linker flags for DVDNAV, overriding pkg-config
+ FDK_AAC_CFLAGS
+ C compiler flags for FDK_AAC, overriding pkg-config
+ FDK_AAC_LIBS
+ linker flags for FDK_AAC, overriding pkg-config
FLUIDSYNTH_CFLAGS
C compiler flags for FLUIDSYNTH, overriding pkg-config
FLUIDSYNTH_LIBS
@@ -3450,7 +3476,7 @@
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
-GStreamer Bad Plug-ins configure 1.9.1
+GStreamer Bad Plug-ins configure 1.9.2
generated by GNU Autoconf 2.69
Copyright (C) 2012 Free Software Foundation, Inc.
@@ -4423,7 +4449,7 @@
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
-It was created by GStreamer Bad Plug-ins $as_me 1.9.1, which was
+It was created by GStreamer Bad Plug-ins $as_me 1.9.2, which was
generated by GNU Autoconf 2.69. Invocation command line was
$ $0 $@
@@ -5405,7 +5431,7 @@
# Define the identity of the package.
PACKAGE='gst-plugins-bad'
- VERSION='1.9.1'
+ VERSION='1.9.2'
cat >>confdefs.h <<_ACEOF
@@ -5616,9 +5642,9 @@
- PACKAGE_VERSION_MAJOR=$(echo 1.9.1 | cut -d'.' -f1)
- PACKAGE_VERSION_MINOR=$(echo 1.9.1 | cut -d'.' -f2)
- PACKAGE_VERSION_MICRO=$(echo 1.9.1 | cut -d'.' -f3)
+ PACKAGE_VERSION_MAJOR=$(echo 1.9.2 | cut -d'.' -f1)
+ PACKAGE_VERSION_MINOR=$(echo 1.9.2 | cut -d'.' -f2)
+ PACKAGE_VERSION_MICRO=$(echo 1.9.2 | cut -d'.' -f3)
@@ -5629,7 +5655,7 @@
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking nano version" >&5
$as_echo_n "checking nano version... " >&6; }
- NANO=$(echo 1.9.1 | cut -d'.' -f4)
+ NANO=$(echo 1.9.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
@@ -10473,10 +10499,10 @@
done
- GST_CURRENT=901
+ GST_CURRENT=902
GST_REVISION=0
- GST_AGE=901
- GST_LIBVERSION=901:0:901
+ GST_AGE=902
+ GST_LIBVERSION=902:0:902
@@ -15104,8 +15130,8 @@
-GST_REQ=1.9.1
-GSTPB_REQ=1.9.1
+GST_REQ=1.9.2
+GSTPB_REQ=1.9.2
@@ -27257,6 +27283,292 @@
+
+ which="gstreamer-video-$GST_API_VERSION"
+ required=$GST_REQ
+
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GST_VIDEO" >&5
+$as_echo_n "checking for GST_VIDEO... " >&6; }
+
+if test -n "$PKG_CONFIG"; then
+ if test -n "$GST_VIDEO_CFLAGS"; then
+ pkg_cv_GST_VIDEO_CFLAGS="$GST_VIDEO_CFLAGS"
+ else
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$which\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "$which") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_GST_VIDEO_CFLAGS=`$PKG_CONFIG --cflags "$which" 2>/dev/null`
+else
+ pkg_failed=yes
+fi
+ fi
+else
+ pkg_failed=untried
+fi
+if test -n "$PKG_CONFIG"; then
+ if test -n "$GST_VIDEO_LIBS"; then
+ pkg_cv_GST_VIDEO_LIBS="$GST_VIDEO_LIBS"
+ else
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$which\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "$which") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_GST_VIDEO_LIBS=`$PKG_CONFIG --libs "$which" 2>/dev/null`
+else
+ pkg_failed=yes
+fi
+ fi
+else
+ pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+ _pkg_short_errors_supported=yes
+else
+ _pkg_short_errors_supported=no
+fi
+ if test $_pkg_short_errors_supported = yes; then
+ GST_VIDEO_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "$which"`
+ else
+ GST_VIDEO_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "$which"`
+ fi
+ # Put the nasty error message in config.log where it belongs
+ echo "$GST_VIDEO_PKG_ERRORS" >&5
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+ HAVE_GST_VIDEO="no"
+ if test "x$required" = "xyes"; then
+ as_fn_error $? "$GST_VIDEO_PKG_ERRORS" "$LINENO" 5
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: $GST_VIDEO_PKG_ERRORS" >&5
+$as_echo "$as_me: $GST_VIDEO_PKG_ERRORS" >&6;}
+ fi
+
+elif test $pkg_failed = untried; then
+
+ HAVE_GST_VIDEO="no"
+ if test "x$required" = "xyes"; then
+ as_fn_error $? "$GST_VIDEO_PKG_ERRORS" "$LINENO" 5
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: $GST_VIDEO_PKG_ERRORS" >&5
+$as_echo "$as_me: $GST_VIDEO_PKG_ERRORS" >&6;}
+ fi
+
+else
+ GST_VIDEO_CFLAGS=$pkg_cv_GST_VIDEO_CFLAGS
+ GST_VIDEO_LIBS=$pkg_cv_GST_VIDEO_LIBS
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+ HAVE_GST_VIDEO="yes"
+
+fi
+
+
+
+ which="gstreamer-audio-$GST_API_VERSION"
+ required=$GST_REQ
+
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GST_AUDIO" >&5
+$as_echo_n "checking for GST_AUDIO... " >&6; }
+
+if test -n "$PKG_CONFIG"; then
+ if test -n "$GST_AUDIO_CFLAGS"; then
+ pkg_cv_GST_AUDIO_CFLAGS="$GST_AUDIO_CFLAGS"
+ else
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$which\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "$which") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_GST_AUDIO_CFLAGS=`$PKG_CONFIG --cflags "$which" 2>/dev/null`
+else
+ pkg_failed=yes
+fi
+ fi
+else
+ pkg_failed=untried
+fi
+if test -n "$PKG_CONFIG"; then
+ if test -n "$GST_AUDIO_LIBS"; then
+ pkg_cv_GST_AUDIO_LIBS="$GST_AUDIO_LIBS"
+ else
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$which\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "$which") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_GST_AUDIO_LIBS=`$PKG_CONFIG --libs "$which" 2>/dev/null`
+else
+ pkg_failed=yes
+fi
+ fi
+else
+ pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+ _pkg_short_errors_supported=yes
+else
+ _pkg_short_errors_supported=no
+fi
+ if test $_pkg_short_errors_supported = yes; then
+ GST_AUDIO_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "$which"`
+ else
+ GST_AUDIO_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "$which"`
+ fi
+ # Put the nasty error message in config.log where it belongs
+ echo "$GST_AUDIO_PKG_ERRORS" >&5
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+ HAVE_GST_AUDIO="no"
+ if test "x$required" = "xyes"; then
+ as_fn_error $? "$GST_AUDIO_PKG_ERRORS" "$LINENO" 5
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: $GST_AUDIO_PKG_ERRORS" >&5
+$as_echo "$as_me: $GST_AUDIO_PKG_ERRORS" >&6;}
+ fi
+
+elif test $pkg_failed = untried; then
+
+ HAVE_GST_AUDIO="no"
+ if test "x$required" = "xyes"; then
+ as_fn_error $? "$GST_AUDIO_PKG_ERRORS" "$LINENO" 5
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: $GST_AUDIO_PKG_ERRORS" >&5
+$as_echo "$as_me: $GST_AUDIO_PKG_ERRORS" >&6;}
+ fi
+
+else
+ GST_AUDIO_CFLAGS=$pkg_cv_GST_AUDIO_CFLAGS
+ GST_AUDIO_LIBS=$pkg_cv_GST_AUDIO_LIBS
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+ HAVE_GST_AUDIO="yes"
+
+fi
+
+
+
+ which="gstreamer-pbutils-$GST_API_VERSION"
+ required=$GST_REQ
+
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GST_PBUTILS" >&5
+$as_echo_n "checking for GST_PBUTILS... " >&6; }
+
+if test -n "$PKG_CONFIG"; then
+ if test -n "$GST_PBUTILS_CFLAGS"; then
+ pkg_cv_GST_PBUTILS_CFLAGS="$GST_PBUTILS_CFLAGS"
+ else
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$which\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "$which") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_GST_PBUTILS_CFLAGS=`$PKG_CONFIG --cflags "$which" 2>/dev/null`
+else
+ pkg_failed=yes
+fi
+ fi
+else
+ pkg_failed=untried
+fi
+if test -n "$PKG_CONFIG"; then
+ if test -n "$GST_PBUTILS_LIBS"; then
+ pkg_cv_GST_PBUTILS_LIBS="$GST_PBUTILS_LIBS"
+ else
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$which\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "$which") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_GST_PBUTILS_LIBS=`$PKG_CONFIG --libs "$which" 2>/dev/null`
+else
+ pkg_failed=yes
+fi
+ fi
+else
+ pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+ _pkg_short_errors_supported=yes
+else
+ _pkg_short_errors_supported=no
+fi
+ if test $_pkg_short_errors_supported = yes; then
+ GST_PBUTILS_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "$which"`
+ else
+ GST_PBUTILS_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "$which"`
+ fi
+ # Put the nasty error message in config.log where it belongs
+ echo "$GST_PBUTILS_PKG_ERRORS" >&5
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+ HAVE_GST_PBUTILS="no"
+ if test "x$required" = "xyes"; then
+ as_fn_error $? "$GST_PBUTILS_PKG_ERRORS" "$LINENO" 5
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: $GST_PBUTILS_PKG_ERRORS" >&5
+$as_echo "$as_me: $GST_PBUTILS_PKG_ERRORS" >&6;}
+ fi
+
+elif test $pkg_failed = untried; then
+
+ HAVE_GST_PBUTILS="no"
+ if test "x$required" = "xyes"; then
+ as_fn_error $? "$GST_PBUTILS_PKG_ERRORS" "$LINENO" 5
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: $GST_PBUTILS_PKG_ERRORS" >&5
+$as_echo "$as_me: $GST_PBUTILS_PKG_ERRORS" >&6;}
+ fi
+
+else
+ GST_PBUTILS_CFLAGS=$pkg_cv_GST_PBUTILS_CFLAGS
+ GST_PBUTILS_LIBS=$pkg_cv_GST_PBUTILS_LIBS
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+ HAVE_GST_PBUTILS="yes"
+
+fi
+
+
+
if test "x$HAVE_GST_CHECK" = "xyes"; then
HAVE_GST_CHECK_TRUE=
HAVE_GST_CHECK_FALSE='#'
@@ -28348,12 +28660,12 @@
pkg_cv_GRAPHENE_CFLAGS="$GRAPHENE_CFLAGS"
else
if test -n "$PKG_CONFIG" && \
- { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"graphene-1.0 >= 1.0.0\""; } >&5
- ($PKG_CONFIG --exists --print-errors "graphene-1.0 >= 1.0.0") 2>&5
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"graphene-1.0 >= 1.4.0\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "graphene-1.0 >= 1.4.0") 2>&5
ac_status=$?
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then
- pkg_cv_GRAPHENE_CFLAGS=`$PKG_CONFIG --cflags "graphene-1.0 >= 1.0.0" 2>/dev/null`
+ pkg_cv_GRAPHENE_CFLAGS=`$PKG_CONFIG --cflags "graphene-1.0 >= 1.4.0" 2>/dev/null`
else
pkg_failed=yes
fi
@@ -28366,12 +28678,12 @@
pkg_cv_GRAPHENE_LIBS="$GRAPHENE_LIBS"
else
if test -n "$PKG_CONFIG" && \
- { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"graphene-1.0 >= 1.0.0\""; } >&5
- ($PKG_CONFIG --exists --print-errors "graphene-1.0 >= 1.0.0") 2>&5
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"graphene-1.0 >= 1.4.0\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "graphene-1.0 >= 1.4.0") 2>&5
ac_status=$?
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then
- pkg_cv_GRAPHENE_LIBS=`$PKG_CONFIG --libs "graphene-1.0 >= 1.0.0" 2>/dev/null`
+ pkg_cv_GRAPHENE_LIBS=`$PKG_CONFIG --libs "graphene-1.0 >= 1.4.0" 2>/dev/null`
else
pkg_failed=yes
fi
@@ -28390,9 +28702,9 @@
_pkg_short_errors_supported=no
fi
if test $_pkg_short_errors_supported = yes; then
- GRAPHENE_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "graphene-1.0 >= 1.0.0"`
+ GRAPHENE_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "graphene-1.0 >= 1.4.0"`
else
- GRAPHENE_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "graphene-1.0 >= 1.0.0"`
+ GRAPHENE_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "graphene-1.0 >= 1.4.0"`
fi
# Put the nasty error message in config.log where it belongs
echo "$GRAPHENE_PKG_ERRORS" >&5
@@ -33023,6 +33335,49 @@
+ GST_PLUGINS_ALL="$GST_PLUGINS_ALL timecode"
+
+
+
+ # Check whether --enable-timecode was given.
+if test "${enable_timecode+set}" = set; then :
+ enableval=$enable_timecode;
+ case "${enableval}" in
+ yes) gst_use_timecode=yes ;;
+ no) gst_use_timecode=no ;;
+ *) as_fn_error $? "bad value ${enableval} for --enable-timecode" "$LINENO" 5 ;;
+ esac
+
+else
+ gst_use_timecode=yes
+fi
+
+ if test x$gst_use_timecode = xno; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: disabling dependency-less plugin timecode" >&5
+$as_echo "$as_me: disabling dependency-less plugin timecode" >&6;}
+ WITHOUT_PLUGINS="$WITHOUT_PLUGINS timecode"
+ fi
+
+
+ if [ -z "$WITH_PLUGINS" ] || echo " $WITH_PLUGINS " | tr , ' ' | grep -i " timecode " > /dev/null; then
+ GST_PLUGINS_SELECTED="$GST_PLUGINS_SELECTED timecode"
+ fi
+ if echo " $WITHOUT_PLUGINS " | tr , ' ' | grep -i " timecode " > /dev/null; then
+ GST_PLUGINS_SELECTED=`echo " $GST_PLUGINS_SELECTED " | $SED -e 's/ timecode / /'`
+ fi
+ if echo " $GST_PLUGINS_NONPORTED " | tr , ' ' | grep -i " timecode " > /dev/null; then
+ GST_PLUGINS_SELECTED=`echo " $GST_PLUGINS_SELECTED " | $SED -e 's/ timecode / /'`
+ fi
+ if echo " $GST_PLUGINS_SELECTED " | grep -i " timecode " > /dev/null; then
+ USE_PLUGIN_TIMECODE_TRUE=
+ USE_PLUGIN_TIMECODE_FALSE='#'
+else
+ USE_PLUGIN_TIMECODE_TRUE='#'
+ USE_PLUGIN_TIMECODE_FALSE=
+fi
+
+
+
GST_PLUGINS_ALL="$GST_PLUGINS_ALL tta"
@@ -33392,6 +33747,14 @@
fi
+ac_fn_c_check_header_preproc "$LINENO" "QTKit/QTKit.h" "ac_cv_header_QTKit_QTKit_h"
+if test "x$ac_cv_header_QTKit_QTKit_h" = xyes; then :
+ HAVE_QTKIT="yes"
+else
+ HAVE_QTKIT="no"
+fi
+
+
if test "x$HAVE_VIDEOTOOLBOX" = "xyes"; then
old_LIBS=$LIBS
@@ -33450,6 +33813,19 @@
fi
+ if test "x$HAVE_QTKIT" = "xyes"; then
+ HAVE_QTKIT_TRUE=
+ HAVE_QTKIT_FALSE='#'
+else
+ HAVE_QTKIT_TRUE='#'
+ HAVE_QTKIT_FALSE=
+fi
+
+if test "x$HAVE_QTKIT" = "xyes"; then
+
+$as_echo "#define HAVE_QTKIT 1" >>confdefs.h
+
+fi
for ac_header in sys/socket.h
do :
ac_fn_c_check_header_mongrel "$LINENO" "sys/socket.h" "ac_cv_header_sys_socket_h" "$ac_includes_default"
@@ -34723,6 +35099,17 @@
$as_echo "yes" >&6; }
HAVE_WAYLAND_EGL=yes
fi
+
+ # OS X and iOS always have GL available
+ case $host in
+ *-darwin*)
+ if test "x$HAVE_IOS" = "xyes"; then
+ HAVE_GLES2=yes
+ else
+ HAVE_GL=yes
+ fi
+ ;;
+ esac
;;
esac
@@ -35517,6 +35904,7 @@
GST_GL_HAVE_GLSYNC=0
GST_GL_HAVE_GLUINT64=0
GST_GL_HAVE_GLINT64=0
+GST_GL_HAVE_EGLATTRIB=0
old_CFLAGS=$CFLAGS
CFLAGS="$GL_CFLAGS $CFLAGS"
@@ -35626,6 +36014,27 @@
GST_GL_HAVE_GLINT64=1
fi
+if test "x$USE_EGL" = "xyes"; then
+ EGL_INCLUDES="$GL_INCLUDES
+ #include <EGL/egl.h>
+ #include <EGL/eglext.h>
+ "
+ ac_fn_c_check_type "$LINENO" "EGLAttrib" "ac_cv_type_EGLAttrib" "$EGL_INCLUDES
+"
+if test "x$ac_cv_type_EGLAttrib" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_EGLATTRIB 1
+_ACEOF
+
+
+fi
+
+ if test "x$ac_cv_type_EGLAttrib" = "xyes"; then
+ GST_GL_HAVE_EGLATTRIB=1
+ fi
+fi
+
CFLAGS=$old_CFLAGS
GL_CONFIG_DEFINES="$GL_CONFIG_DEFINES
@@ -35636,6 +36045,7 @@
#define GST_GL_HAVE_GLSYNC $GST_GL_HAVE_GLSYNC
#define GST_GL_HAVE_GLUINT64 $GST_GL_HAVE_GLUINT64
#define GST_GL_HAVE_GLINT64 $GST_GL_HAVE_GLINT64
+#define GST_GL_HAVE_EGLATTRIB $GST_GL_HAVE_EGLATTRIB
"
ac_config_commands="$ac_config_commands gst-libs/gst/gl/gstglconfig.h"
@@ -37991,196 +38401,6 @@
HAVE_NVENC=no
- which="gstreamer-video-1.0"
- required="no"
-
-
-pkg_failed=no
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GST_VIDEO" >&5
-$as_echo_n "checking for GST_VIDEO... " >&6; }
-
-if test -n "$PKG_CONFIG"; then
- if test -n "$GST_VIDEO_CFLAGS"; then
- pkg_cv_GST_VIDEO_CFLAGS="$GST_VIDEO_CFLAGS"
- else
- if test -n "$PKG_CONFIG" && \
- { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$which\""; } >&5
- ($PKG_CONFIG --exists --print-errors "$which") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; then
- pkg_cv_GST_VIDEO_CFLAGS=`$PKG_CONFIG --cflags "$which" 2>/dev/null`
-else
- pkg_failed=yes
-fi
- fi
-else
- pkg_failed=untried
-fi
-if test -n "$PKG_CONFIG"; then
- if test -n "$GST_VIDEO_LIBS"; then
- pkg_cv_GST_VIDEO_LIBS="$GST_VIDEO_LIBS"
- else
- if test -n "$PKG_CONFIG" && \
- { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$which\""; } >&5
- ($PKG_CONFIG --exists --print-errors "$which") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; then
- pkg_cv_GST_VIDEO_LIBS=`$PKG_CONFIG --libs "$which" 2>/dev/null`
-else
- pkg_failed=yes
-fi
- fi
-else
- pkg_failed=untried
-fi
-
-
-
-if test $pkg_failed = yes; then
-
-if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
- _pkg_short_errors_supported=yes
-else
- _pkg_short_errors_supported=no
-fi
- if test $_pkg_short_errors_supported = yes; then
- GST_VIDEO_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "$which"`
- else
- GST_VIDEO_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "$which"`
- fi
- # Put the nasty error message in config.log where it belongs
- echo "$GST_VIDEO_PKG_ERRORS" >&5
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-
- HAVE_GST_VIDEO="no"
- if test "x$required" = "xyes"; then
- as_fn_error $? "$GST_VIDEO_PKG_ERRORS" "$LINENO" 5
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: $GST_VIDEO_PKG_ERRORS" >&5
-$as_echo "$as_me: $GST_VIDEO_PKG_ERRORS" >&6;}
- fi
-
-elif test $pkg_failed = untried; then
-
- HAVE_GST_VIDEO="no"
- if test "x$required" = "xyes"; then
- as_fn_error $? "$GST_VIDEO_PKG_ERRORS" "$LINENO" 5
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: $GST_VIDEO_PKG_ERRORS" >&5
-$as_echo "$as_me: $GST_VIDEO_PKG_ERRORS" >&6;}
- fi
-
-else
- GST_VIDEO_CFLAGS=$pkg_cv_GST_VIDEO_CFLAGS
- GST_VIDEO_LIBS=$pkg_cv_GST_VIDEO_LIBS
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-
- HAVE_GST_VIDEO="yes"
-
-fi
-
-
-
- which="gstreamer-pbutils-1.0"
- required="no"
-
-
-pkg_failed=no
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GST_PBUTILS" >&5
-$as_echo_n "checking for GST_PBUTILS... " >&6; }
-
-if test -n "$PKG_CONFIG"; then
- if test -n "$GST_PBUTILS_CFLAGS"; then
- pkg_cv_GST_PBUTILS_CFLAGS="$GST_PBUTILS_CFLAGS"
- else
- if test -n "$PKG_CONFIG" && \
- { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$which\""; } >&5
- ($PKG_CONFIG --exists --print-errors "$which") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; then
- pkg_cv_GST_PBUTILS_CFLAGS=`$PKG_CONFIG --cflags "$which" 2>/dev/null`
-else
- pkg_failed=yes
-fi
- fi
-else
- pkg_failed=untried
-fi
-if test -n "$PKG_CONFIG"; then
- if test -n "$GST_PBUTILS_LIBS"; then
- pkg_cv_GST_PBUTILS_LIBS="$GST_PBUTILS_LIBS"
- else
- if test -n "$PKG_CONFIG" && \
- { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$which\""; } >&5
- ($PKG_CONFIG --exists --print-errors "$which") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; then
- pkg_cv_GST_PBUTILS_LIBS=`$PKG_CONFIG --libs "$which" 2>/dev/null`
-else
- pkg_failed=yes
-fi
- fi
-else
- pkg_failed=untried
-fi
-
-
-
-if test $pkg_failed = yes; then
-
-if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
- _pkg_short_errors_supported=yes
-else
- _pkg_short_errors_supported=no
-fi
- if test $_pkg_short_errors_supported = yes; then
- GST_PBUTILS_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "$which"`
- else
- GST_PBUTILS_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "$which"`
- fi
- # Put the nasty error message in config.log where it belongs
- echo "$GST_PBUTILS_PKG_ERRORS" >&5
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-
- HAVE_GST_PBUTILS="no"
- if test "x$required" = "xyes"; then
- as_fn_error $? "$GST_PBUTILS_PKG_ERRORS" "$LINENO" 5
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: $GST_PBUTILS_PKG_ERRORS" >&5
-$as_echo "$as_me: $GST_PBUTILS_PKG_ERRORS" >&6;}
- fi
-
-elif test $pkg_failed = untried; then
-
- HAVE_GST_PBUTILS="no"
- if test "x$required" = "xyes"; then
- as_fn_error $? "$GST_PBUTILS_PKG_ERRORS" "$LINENO" 5
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: $GST_PBUTILS_PKG_ERRORS" >&5
-$as_echo "$as_me: $GST_PBUTILS_PKG_ERRORS" >&6;}
- fi
-
-else
- GST_PBUTILS_CFLAGS=$pkg_cv_GST_PBUTILS_CFLAGS
- GST_PBUTILS_LIBS=$pkg_cv_GST_PBUTILS_LIBS
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-
- HAVE_GST_PBUTILS="yes"
-
-fi
-
-
-
# Check whether --with-cuda-prefix was given.
if test "${with_cuda_prefix+set}" = set; then :
withval=$with_cuda_prefix; if test "x$with_cuda_prefix" != "x"; then :
@@ -42762,6 +42982,169 @@
echo
+{ $as_echo "$as_me:${as_lineno-$LINENO}: *** checking feature: fdkaac plugin ***" >&5
+$as_echo "$as_me: *** checking feature: fdkaac plugin ***" >&6;}
+if test "xfdkaac" != "x"
+then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: *** for plug-ins: fdkaac ***" >&5
+$as_echo "$as_me: *** for plug-ins: fdkaac ***" >&6;}
+fi
+NOUSE=
+if test "x$USE_FDK_AAC" = "xno"; then
+ NOUSE="yes"
+fi
+# Check whether --enable-fdk_aac was given.
+if test "${enable_fdk_aac+set}" = set; then :
+ enableval=$enable_fdk_aac; case "${enableval}" in
+ yes) USE_FDK_AAC=yes;;
+ no) USE_FDK_AAC=no;;
+ *) as_fn_error $? "bad value ${enableval} for --enable-fdk_aac" "$LINENO" 5 ;;
+ esac
+else
+ USE_FDK_AAC=yes
+fi
+
+if test "x$NOUSE" = "xyes"; then
+ USE_FDK_AAC="no"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** fdkaac pre-configured not to be built" >&5
+$as_echo "$as_me: WARNING: *** fdkaac pre-configured not to be built" >&2;}
+fi
+NOUSE=
+
+if echo " $GST_PLUGINS_NONPORTED " | tr , ' ' | grep -i " FDK_AAC " > /dev/null; then
+ USE_FDK_AAC="no"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** fdkaac not ported" >&5
+$as_echo "$as_me: WARNING: *** fdkaac not ported" >&2;}
+fi
+
+
+if test x$USE_FDK_AAC = xyes; then
+
+ gst_check_save_LIBS=$LIBS
+ gst_check_save_LDFLAGS=$LDFLAGS
+ gst_check_save_CFLAGS=$CFLAGS
+ gst_check_save_CPPFLAGS=$CPPFLAGS
+ gst_check_save_CXXFLAGS=$CXXFLAGS
+
+ HAVE_FDK_AAC=no
+
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for FDK_AAC" >&5
+$as_echo_n "checking for FDK_AAC... " >&6; }
+
+if test -n "$PKG_CONFIG"; then
+ if test -n "$FDK_AAC_CFLAGS"; then
+ pkg_cv_FDK_AAC_CFLAGS="$FDK_AAC_CFLAGS"
+ else
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"fdk-aac\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "fdk-aac") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_FDK_AAC_CFLAGS=`$PKG_CONFIG --cflags "fdk-aac" 2>/dev/null`
+else
+ pkg_failed=yes
+fi
+ fi
+else
+ pkg_failed=untried
+fi
+if test -n "$PKG_CONFIG"; then
+ if test -n "$FDK_AAC_LIBS"; then
+ pkg_cv_FDK_AAC_LIBS="$FDK_AAC_LIBS"
+ else
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"fdk-aac\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "fdk-aac") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_FDK_AAC_LIBS=`$PKG_CONFIG --libs "fdk-aac" 2>/dev/null`
+else
+ pkg_failed=yes
+fi
+ fi
+else
+ pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+ _pkg_short_errors_supported=yes
+else
+ _pkg_short_errors_supported=no
+fi
+ if test $_pkg_short_errors_supported = yes; then
+ FDK_AAC_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "fdk-aac"`
+ else
+ FDK_AAC_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "fdk-aac"`
+ fi
+ # Put the nasty error message in config.log where it belongs
+ echo "$FDK_AAC_PKG_ERRORS" >&5
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+ HAVE_FDK_AAC="no"
+
+elif test $pkg_failed = untried; then
+
+ HAVE_FDK_AAC="no"
+
+else
+ FDK_AAC_CFLAGS=$pkg_cv_FDK_AAC_CFLAGS
+ FDK_AAC_LIBS=$pkg_cv_FDK_AAC_LIBS
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ HAVE_FDK_AAC="yes"
+fi
+
+
+ LIBS=$gst_check_save_LIBS
+ LDFLAGS=$gst_check_save_LDFLAGS
+ CFLAGS=$gst_check_save_CFLAGS
+ CPPFLAGS=$gst_check_save_CPPFLAGS
+ CXXFLAGS=$gst_check_save_CXXFLAGS
+
+ if test x$HAVE_FDK_AAC = xno; then
+ USE_FDK_AAC=no
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: *** These plugins will be built: fdkaac" >&5
+$as_echo "$as_me: *** These plugins will be built: fdkaac" >&6;}
+ fi
+fi
+if test x$USE_FDK_AAC = xyes; then
+ :
+ if test "xfdkaac" != "x"; then
+ GST_PLUGINS_YES="\tfdkaac\n$GST_PLUGINS_YES"
+ fi
+
+$as_echo "#define HAVE_FDK_AAC /**/" >>confdefs.h
+
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: *** These plugins will not be built: fdkaac" >&5
+$as_echo "$as_me: *** These plugins will not be built: fdkaac" >&6;}
+ if test "xfdkaac" != "x"; then
+ GST_PLUGINS_NO="\tfdkaac\n$GST_PLUGINS_NO"
+ fi
+ :
+fi
+ if test x$USE_FDK_AAC = xyes; then
+ USE_FDK_AAC_TRUE=
+ USE_FDK_AAC_FALSE='#'
+else
+ USE_FDK_AAC_TRUE='#'
+ USE_FDK_AAC_FALSE=
+fi
+
+
+
+echo
{ $as_echo "$as_me:${as_lineno-$LINENO}: *** checking feature: Flite plugin ***" >&5
$as_echo "$as_me: *** checking feature: Flite plugin ***" >&6;}
if test "xflite" != "x"
@@ -43612,101 +43995,6 @@
HAVE_KMS=no
- which="gstreamer-video-1.0"
- required="no"
-
-
-pkg_failed=no
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GST_VIDEO" >&5
-$as_echo_n "checking for GST_VIDEO... " >&6; }
-
-if test -n "$PKG_CONFIG"; then
- if test -n "$GST_VIDEO_CFLAGS"; then
- pkg_cv_GST_VIDEO_CFLAGS="$GST_VIDEO_CFLAGS"
- else
- if test -n "$PKG_CONFIG" && \
- { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$which\""; } >&5
- ($PKG_CONFIG --exists --print-errors "$which") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; then
- pkg_cv_GST_VIDEO_CFLAGS=`$PKG_CONFIG --cflags "$which" 2>/dev/null`
-else
- pkg_failed=yes
-fi
- fi
-else
- pkg_failed=untried
-fi
-if test -n "$PKG_CONFIG"; then
- if test -n "$GST_VIDEO_LIBS"; then
- pkg_cv_GST_VIDEO_LIBS="$GST_VIDEO_LIBS"
- else
- if test -n "$PKG_CONFIG" && \
- { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$which\""; } >&5
- ($PKG_CONFIG --exists --print-errors "$which") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; then
- pkg_cv_GST_VIDEO_LIBS=`$PKG_CONFIG --libs "$which" 2>/dev/null`
-else
- pkg_failed=yes
-fi
- fi
-else
- pkg_failed=untried
-fi
-
-
-
-if test $pkg_failed = yes; then
-
-if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
- _pkg_short_errors_supported=yes
-else
- _pkg_short_errors_supported=no
-fi
- if test $_pkg_short_errors_supported = yes; then
- GST_VIDEO_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "$which"`
- else
- GST_VIDEO_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "$which"`
- fi
- # Put the nasty error message in config.log where it belongs
- echo "$GST_VIDEO_PKG_ERRORS" >&5
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-
- HAVE_GST_VIDEO="no"
- if test "x$required" = "xyes"; then
- as_fn_error $? "$GST_VIDEO_PKG_ERRORS" "$LINENO" 5
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: $GST_VIDEO_PKG_ERRORS" >&5
-$as_echo "$as_me: $GST_VIDEO_PKG_ERRORS" >&6;}
- fi
-
-elif test $pkg_failed = untried; then
-
- HAVE_GST_VIDEO="no"
- if test "x$required" = "xyes"; then
- as_fn_error $? "$GST_VIDEO_PKG_ERRORS" "$LINENO" 5
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: $GST_VIDEO_PKG_ERRORS" >&5
-$as_echo "$as_me: $GST_VIDEO_PKG_ERRORS" >&6;}
- fi
-
-else
- GST_VIDEO_CFLAGS=$pkg_cv_GST_VIDEO_CFLAGS
- GST_VIDEO_LIBS=$pkg_cv_GST_VIDEO_LIBS
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-
- HAVE_GST_VIDEO="yes"
-
-fi
-
-
-
which="gstreamer-allocators-1.0"
required="no"
@@ -44145,12 +44433,12 @@
pkg_cv_LILV_CFLAGS="$LILV_CFLAGS"
else
if test -n "$PKG_CONFIG" && \
- { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"lilv-0 >= 0.6.6\""; } >&5
- ($PKG_CONFIG --exists --print-errors "lilv-0 >= 0.6.6") 2>&5
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"lilv-0 >= 0.22\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "lilv-0 >= 0.22") 2>&5
ac_status=$?
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then
- pkg_cv_LILV_CFLAGS=`$PKG_CONFIG --cflags "lilv-0 >= 0.6.6" 2>/dev/null`
+ pkg_cv_LILV_CFLAGS=`$PKG_CONFIG --cflags "lilv-0 >= 0.22" 2>/dev/null`
else
pkg_failed=yes
fi
@@ -44163,12 +44451,12 @@
pkg_cv_LILV_LIBS="$LILV_LIBS"
else
if test -n "$PKG_CONFIG" && \
- { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"lilv-0 >= 0.6.6\""; } >&5
- ($PKG_CONFIG --exists --print-errors "lilv-0 >= 0.6.6") 2>&5
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"lilv-0 >= 0.22\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "lilv-0 >= 0.22") 2>&5
ac_status=$?
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then
- pkg_cv_LILV_LIBS=`$PKG_CONFIG --libs "lilv-0 >= 0.6.6" 2>/dev/null`
+ pkg_cv_LILV_LIBS=`$PKG_CONFIG --libs "lilv-0 >= 0.22" 2>/dev/null`
else
pkg_failed=yes
fi
@@ -44187,9 +44475,71 @@
_pkg_short_errors_supported=no
fi
if test $_pkg_short_errors_supported = yes; then
- LILV_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "lilv-0 >= 0.6.6"`
+ LILV_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "lilv-0 >= 0.22"`
else
- LILV_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "lilv-0 >= 0.6.6"`
+ LILV_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "lilv-0 >= 0.22"`
+ fi
+ # Put the nasty error message in config.log where it belongs
+ echo "$LILV_PKG_ERRORS" >&5
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for LILV" >&5
+$as_echo_n "checking for LILV... " >&6; }
+
+if test -n "$PKG_CONFIG"; then
+ if test -n "$LILV_CFLAGS"; then
+ pkg_cv_LILV_CFLAGS="$LILV_CFLAGS"
+ else
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"lilv-0 >= 0.16\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "lilv-0 >= 0.16") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_LILV_CFLAGS=`$PKG_CONFIG --cflags "lilv-0 >= 0.16" 2>/dev/null`
+else
+ pkg_failed=yes
+fi
+ fi
+else
+ pkg_failed=untried
+fi
+if test -n "$PKG_CONFIG"; then
+ if test -n "$LILV_LIBS"; then
+ pkg_cv_LILV_LIBS="$LILV_LIBS"
+ else
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"lilv-0 >= 0.16\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "lilv-0 >= 0.16") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_LILV_LIBS=`$PKG_CONFIG --libs "lilv-0 >= 0.16" 2>/dev/null`
+else
+ pkg_failed=yes
+fi
+ fi
+else
+ pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+ _pkg_short_errors_supported=yes
+else
+ _pkg_short_errors_supported=no
+fi
+ if test $_pkg_short_errors_supported = yes; then
+ LILV_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "lilv-0 >= 0.16"`
+ else
+ LILV_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "lilv-0 >= 0.16"`
fi
# Put the nasty error message in config.log where it belongs
echo "$LILV_PKG_ERRORS" >&5
@@ -44207,6 +44557,94 @@
HAVE_LV2="yes"
fi
+elif test $pkg_failed = untried; then
+
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for LILV" >&5
+$as_echo_n "checking for LILV... " >&6; }
+
+if test -n "$PKG_CONFIG"; then
+ if test -n "$LILV_CFLAGS"; then
+ pkg_cv_LILV_CFLAGS="$LILV_CFLAGS"
+ else
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"lilv-0 >= 0.16\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "lilv-0 >= 0.16") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_LILV_CFLAGS=`$PKG_CONFIG --cflags "lilv-0 >= 0.16" 2>/dev/null`
+else
+ pkg_failed=yes
+fi
+ fi
+else
+ pkg_failed=untried
+fi
+if test -n "$PKG_CONFIG"; then
+ if test -n "$LILV_LIBS"; then
+ pkg_cv_LILV_LIBS="$LILV_LIBS"
+ else
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"lilv-0 >= 0.16\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "lilv-0 >= 0.16") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_LILV_LIBS=`$PKG_CONFIG --libs "lilv-0 >= 0.16" 2>/dev/null`
+else
+ pkg_failed=yes
+fi
+ fi
+else
+ pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+ _pkg_short_errors_supported=yes
+else
+ _pkg_short_errors_supported=no
+fi
+ if test $_pkg_short_errors_supported = yes; then
+ LILV_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "lilv-0 >= 0.16"`
+ else
+ LILV_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "lilv-0 >= 0.16"`
+ fi
+ # Put the nasty error message in config.log where it belongs
+ echo "$LILV_PKG_ERRORS" >&5
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ HAVE_LV2="no"
+elif test $pkg_failed = untried; then
+ HAVE_LV2="no"
+else
+ LILV_CFLAGS=$pkg_cv_LILV_CFLAGS
+ LILV_LIBS=$pkg_cv_LILV_LIBS
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ HAVE_LV2="yes"
+fi
+
+else
+ LILV_CFLAGS=$pkg_cv_LILV_CFLAGS
+ LILV_LIBS=$pkg_cv_LILV_LIBS
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+ HAVE_LV2="yes",
+ HAVE_LILV_0_22="yes"
+
+$as_echo "#define HAVE_LILV_0_22 1" >>confdefs.h
+
+
+fi
+
@@ -57907,16 +58345,9 @@
HAVE_WEBRTCDSP=no
- ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
- old_CPPFLAGS=$CPPFLAGS
- CPPFLAGS="-std=c++11 $CPPFLAGS"
- which="webrtc-audio-processing = 0.2"
+ which="webrtc-audio-processing >= 0.2 webrtc-audio-processing < 0.4"
required="no"
@@ -58010,8 +58441,120 @@
fi
- ac_fn_cxx_check_header_mongrel "$LINENO" "typeindex" "ac_cv_header_typeindex" "$ac_includes_default"
-if test "x$ac_cv_header_typeindex" = xyes; then :
+
+ # On Android, C++ headers comes with the STL implementation
+ case "${host}" in #(
+ *android*) :
+
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNUSTL" >&5
+$as_echo_n "checking for GNUSTL... " >&6; }
+
+if test -n "$PKG_CONFIG"; then
+ if test -n "$GNUSTL_CFLAGS"; then
+ pkg_cv_GNUSTL_CFLAGS="$GNUSTL_CFLAGS"
+ else
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gnustl\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "gnustl") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_GNUSTL_CFLAGS=`$PKG_CONFIG --cflags "gnustl" 2>/dev/null`
+else
+ pkg_failed=yes
+fi
+ fi
+else
+ pkg_failed=untried
+fi
+if test -n "$PKG_CONFIG"; then
+ if test -n "$GNUSTL_LIBS"; then
+ pkg_cv_GNUSTL_LIBS="$GNUSTL_LIBS"
+ else
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gnustl\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "gnustl") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_GNUSTL_LIBS=`$PKG_CONFIG --libs "gnustl" 2>/dev/null`
+else
+ pkg_failed=yes
+fi
+ fi
+else
+ pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+ _pkg_short_errors_supported=yes
+else
+ _pkg_short_errors_supported=no
+fi
+ if test $_pkg_short_errors_supported = yes; then
+ GNUSTL_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "gnustl"`
+ else
+ GNUSTL_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "gnustl"`
+ fi
+ # Put the nasty error message in config.log where it belongs
+ echo "$GNUSTL_PKG_ERRORS" >&5
+
+ as_fn_error $? "Package requirements (gnustl) were not met:
+
+$GNUSTL_PKG_ERRORS
+
+Consider adjusting the PKG_CONFIG_PATH environment variable if you
+installed software in a non-standard prefix.
+
+Alternatively, you may set the environment variables GNUSTL_CFLAGS
+and GNUSTL_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.
+" "$LINENO" 5
+elif test $pkg_failed = untried; then
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it
+is in your PATH or set the PKG_CONFIG environment variable to the full
+path to pkg-config.
+
+Alternatively, you may set the environment variables GNUSTL_CFLAGS
+and GNUSTL_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.
+
+To get pkg-config, see <http://pkg-config.freedesktop.org/>.
+See \`config.log' for more details" "$LINENO" 5; }
+else
+ GNUSTL_CFLAGS=$pkg_cv_GNUSTL_CFLAGS
+ GNUSTL_LIBS=$pkg_cv_GNUSTL_LIBS
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+ WEBRTCDSP_CFLAGS="$WEBRTCDSP_CFLAGS $GNUSTL_CFLAGS"
+ WEBRTCDSP_LIBS="$WEBRTCDSP_LIBS $GNUSTL_LIBS"
+fi
+ ;; #(
+ *) :
+ ;;
+esac
+
+
+
+ ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+ old_CPPFLAGS=$CPPFLAGS
+ CPPFLAGS="-std=c++11 $CPPFLAGS $GNUSTL_CFLAGS"
+ ac_fn_cxx_check_header_mongrel "$LINENO" "vector" "ac_cv_header_vector" "$ac_includes_default"
+if test "x$ac_cv_header_vector" = xyes; then :
else
HAVE_WEBRTCDSP=no
@@ -58246,6 +58789,14 @@
fi
if false; then
+ USE_FDK_AAC_TRUE=
+ USE_FDK_AAC_FALSE='#'
+else
+ USE_FDK_AAC_TRUE='#'
+ USE_FDK_AAC_FALSE=
+fi
+
+ if false; then
USE_FLITE_TRUE=
USE_FLITE_FALSE='#'
else
@@ -58694,6 +59245,14 @@
fi
if false; then
+ USE_WEBRTCDSP_TRUE=
+ USE_WEBRTCDSP_FALSE='#'
+else
+ USE_WEBRTCDSP_TRUE='#'
+ USE_WEBRTCDSP_FALSE=
+fi
+
+ if false; then
USE_OPENH264_TRUE=
USE_OPENH264_FALSE='#'
else
@@ -58771,7 +59330,7 @@
$MKDIR_P tests/check/orc
-ac_config_files="$ac_config_files Makefile common/Makefile common/m4/Makefile gst-plugins-bad.spec gst/Makefile gst/accurip/Makefile gst/adpcmdec/Makefile gst/adpcmenc/Makefile gst/aiff/Makefile gst/videoframe_audiolevel/Makefile gst/asfmux/Makefile gst/audiofxbad/Makefile gst/audiomixer/Makefile gst/audiovisualizers/Makefile gst/autoconvert/Makefile gst/bayer/Makefile gst/camerabin2/Makefile gst/cdxaparse/Makefile gst/coloreffects/Makefile gst/dataurisrc/Makefile gst/dccp/Makefile gst/debugutils/Makefile gst/dvbsuboverlay/Makefile gst/dvdspu/Makefile gst/faceoverlay/Makefile gst/festival/Makefile gst/fieldanalysis/Makefile gst/freeverb/Makefile gst/frei0r/Makefile gst/gaudieffects/Makefile gst/geometrictransform/Makefile gst/gdp/Makefile gst/hdvparse/Makefile gst/id3tag/Makefile gst/inter/Makefile gst/interlace/Makefile gst/ivfparse/Makefile gst/ivtc/Makefile gst/jp2kdecimator/Makefile gst/jpegformat/Makefile gst/librfb/Makefile gst/midi/Makefile gst/mpegdemux/Makefile gst/mpegtsdemux/Makefile gst/mpegtsmux/Makefile gst/mpegtsmux/tsmux/Makefile gst/mpegpsmux/Makefile gst/mve/Makefile gst/mxf/Makefile gst/netsim/Makefile gst/nuvdemux/Makefile gst/onvif/Makefile gst/patchdetect/Makefile gst/pcapparse/Makefile gst/pnm/Makefile gst/rawparse/Makefile gst/removesilence/Makefile gst/sdi/Makefile gst/sdp/Makefile gst/segmentclip/Makefile gst/siren/Makefile gst/smooth/Makefile gst/speed/Makefile gst/subenc/Makefile gst/stereo/Makefile gst/tta/Makefile gst/videofilters/Makefile gst/videomeasure/Makefile gst/videoparsers/Makefile gst/videosignal/Makefile gst/vmnc/Makefile gst/y4m/Makefile gst/yadif/Makefile gst/compositor/Makefile gst-libs/Makefile gst-libs/gst/Makefile gst-libs/gst/adaptivedemux/Makefile gst-libs/gst/basecamerabinsrc/Makefile gst-libs/gst/gl/Makefile gst-libs/gst/gl/android/Makefile gst-libs/gst/gl/cocoa/Makefile gst-libs/gst/gl/dispmanx/Makefile gst-libs/gst/gl/glprototypes/Makefile gst-libs/gst/gl/eagl/Makefile gst-libs/gst/gl/egl/Makefile gst-libs/gst/gl/wayland/Makefile gst-libs/gst/gl/win32/Makefile gst-libs/gst/gl/x11/Makefile gst-libs/gst/insertbin/Makefile gst-libs/gst/interfaces/Makefile gst-libs/gst/codecparsers/Makefile gst-libs/gst/mpegts/Makefile gst-libs/gst/uridownloader/Makefile gst-libs/gst/wayland/Makefile gst-libs/gst/base/Makefile gst-libs/gst/player/Makefile gst-libs/gst/video/Makefile gst-libs/gst/audio/Makefile sys/Makefile sys/dshowdecwrapper/Makefile sys/acmenc/Makefile sys/acmmp3dec/Makefile sys/androidmedia/Makefile sys/applemedia/Makefile sys/applemedia-nonpublic/Makefile sys/avc/Makefile sys/bluez/Makefile sys/d3dvideosink/Makefile sys/decklink/Makefile sys/directsound/Makefile sys/dshowsrcwrapper/Makefile sys/dshowvideosink/Makefile sys/dvb/Makefile sys/fbdev/Makefile sys/kms/Makefile sys/linsys/Makefile sys/nvenc/Makefile sys/opensles/Makefile sys/shm/Makefile sys/tinyalsa/Makefile sys/uvch264/Makefile sys/vcd/Makefile sys/vdpau/Makefile sys/pvr2d/Makefile sys/wasapi/Makefile sys/wininet/Makefile sys/winks/Makefile sys/winscreencap/Makefile tests/Makefile tests/check/Makefile tests/files/Makefile tests/examples/Makefile tests/examples/avsamplesink/Makefile tests/examples/camerabin2/Makefile tests/examples/codecparsers/Makefile tests/examples/directfb/Makefile tests/examples/gl/Makefile tests/examples/gl/cocoa/Makefile tests/examples/gl/clutter/Makefile tests/examples/gl/generic/Makefile tests/examples/gl/generic/cube/Makefile tests/examples/gl/generic/cubeyuv/Makefile tests/examples/gl/generic/doublecube/Makefile tests/examples/gl/generic/recordgraphic/Makefile tests/examples/gl/gtk/Makefile tests/examples/gl/gtk/3dvideo/Makefile tests/examples/gl/gtk/filternovideooverlay/Makefile tests/examples/gl/gtk/filtervideooverlay/Makefile tests/examples/gl/gtk/fxtest/Makefile tests/examples/gl/gtk/switchvideooverlay/Makefile tests/examples/gl/qt/Makefile tests/examples/gl/sdl/Makefile tests/examples/gtk/Makefile tests/examples/mpegts/Makefile tests/examples/mxf/Makefile tests/examples/opencv/Makefile tests/examples/uvch264/Makefile tests/examples/waylandsink/Makefile tests/icles/Makefile ext/voamrwbenc/Makefile ext/voaacenc/Makefile ext/assrender/Makefile ext/apexsink/Makefile ext/bs2b/Makefile ext/bz2/Makefile ext/chromaprint/Makefile ext/curl/Makefile ext/dash/Makefile ext/dc1394/Makefile ext/directfb/Makefile ext/wayland/Makefile ext/daala/Makefile ext/dts/Makefile ext/gl/Makefile ext/gtk/Makefile ext/faac/Makefile ext/faad/Makefile ext/flite/Makefile ext/fluidsynth/Makefile ext/gsm/Makefile ext/hls/Makefile ext/kate/Makefile ext/ladspa/Makefile ext/lv2/Makefile ext/libde265/Makefile ext/libmms/Makefile ext/libvisual/Makefile ext/Makefile ext/modplug/Makefile ext/mpeg2enc/Makefile ext/mimic/Makefile ext/mplex/Makefile ext/musepack/Makefile ext/nas/Makefile ext/neon/Makefile ext/ofa/Makefile ext/openal/Makefile ext/opencv/Makefile ext/openexr/Makefile ext/openh264/Makefile ext/openjpeg/Makefile ext/openni2/Makefile ext/opus/Makefile ext/qt/Makefile ext/rsvg/Makefile ext/resindvd/Makefile ext/rtmp/Makefile ext/sbc/Makefile ext/schroedinger/Makefile ext/sdl/Makefile ext/smoothstreaming/Makefile ext/sndfile/Makefile ext/soundtouch/Makefile ext/spandsp/Makefile ext/sndio/Makefile ext/srtp/Makefile ext/teletextdec/Makefile ext/gme/Makefile ext/spc/Makefile ext/timidity/Makefile ext/vulkan/Makefile ext/vulkan/xcb/Makefile ext/vulkan/wayland/Makefile ext/webp/Makefile ext/x265/Makefile ext/xvid/Makefile ext/zbar/Makefile ext/dtls/Makefile ext/webrtcdsp/Makefile po/Makefile.in docs/Makefile docs/plugins/Makefile docs/libs/Makefile docs/version.entities pkgconfig/Makefile pkgconfig/gstreamer-plugins-bad.pc pkgconfig/gstreamer-plugins-bad-uninstalled.pc pkgconfig/gstreamer-codecparsers.pc pkgconfig/gstreamer-codecparsers-uninstalled.pc pkgconfig/gstreamer-insertbin.pc pkgconfig/gstreamer-insertbin-uninstalled.pc pkgconfig/gstreamer-gl.pc pkgconfig/gstreamer-gl-uninstalled.pc pkgconfig/gstreamer-mpegts.pc pkgconfig/gstreamer-mpegts-uninstalled.pc pkgconfig/gstreamer-player.pc pkgconfig/gstreamer-player-uninstalled.pc pkgconfig/gstreamer-wayland.pc pkgconfig/gstreamer-wayland-uninstalled.pc pkgconfig/gstreamer-bad-base.pc pkgconfig/gstreamer-bad-base-uninstalled.pc pkgconfig/gstreamer-bad-video.pc pkgconfig/gstreamer-bad-video-uninstalled.pc pkgconfig/gstreamer-bad-audio.pc pkgconfig/gstreamer-bad-audio-uninstalled.pc tools/Makefile m4/Makefile"
+ac_config_files="$ac_config_files Makefile common/Makefile common/m4/Makefile gst-plugins-bad.spec gst/Makefile gst/accurip/Makefile gst/adpcmdec/Makefile gst/adpcmenc/Makefile gst/aiff/Makefile gst/videoframe_audiolevel/Makefile gst/asfmux/Makefile gst/audiofxbad/Makefile gst/audiomixer/Makefile gst/audiovisualizers/Makefile gst/autoconvert/Makefile gst/bayer/Makefile gst/camerabin2/Makefile gst/cdxaparse/Makefile gst/coloreffects/Makefile gst/dataurisrc/Makefile gst/dccp/Makefile gst/debugutils/Makefile gst/dvbsuboverlay/Makefile gst/dvdspu/Makefile gst/faceoverlay/Makefile gst/festival/Makefile gst/fieldanalysis/Makefile gst/freeverb/Makefile gst/frei0r/Makefile gst/gaudieffects/Makefile gst/geometrictransform/Makefile gst/gdp/Makefile gst/hdvparse/Makefile gst/id3tag/Makefile gst/inter/Makefile gst/interlace/Makefile gst/ivfparse/Makefile gst/ivtc/Makefile gst/jp2kdecimator/Makefile gst/jpegformat/Makefile gst/librfb/Makefile gst/midi/Makefile gst/mpegdemux/Makefile gst/mpegtsdemux/Makefile gst/mpegtsmux/Makefile gst/mpegtsmux/tsmux/Makefile gst/mpegpsmux/Makefile gst/mve/Makefile gst/mxf/Makefile gst/netsim/Makefile gst/nuvdemux/Makefile gst/onvif/Makefile gst/patchdetect/Makefile gst/pcapparse/Makefile gst/pnm/Makefile gst/rawparse/Makefile gst/removesilence/Makefile gst/sdi/Makefile gst/sdp/Makefile gst/segmentclip/Makefile gst/siren/Makefile gst/smooth/Makefile gst/speed/Makefile gst/subenc/Makefile gst/stereo/Makefile gst/tta/Makefile gst/timecode/Makefile gst/videofilters/Makefile gst/videomeasure/Makefile gst/videoparsers/Makefile gst/videosignal/Makefile gst/vmnc/Makefile gst/y4m/Makefile gst/yadif/Makefile gst/compositor/Makefile gst-libs/Makefile gst-libs/gst/Makefile gst-libs/gst/adaptivedemux/Makefile gst-libs/gst/basecamerabinsrc/Makefile gst-libs/gst/gl/Makefile gst-libs/gst/gl/android/Makefile gst-libs/gst/gl/cocoa/Makefile gst-libs/gst/gl/dispmanx/Makefile gst-libs/gst/gl/glprototypes/Makefile gst-libs/gst/gl/eagl/Makefile gst-libs/gst/gl/egl/Makefile gst-libs/gst/gl/wayland/Makefile gst-libs/gst/gl/win32/Makefile gst-libs/gst/gl/x11/Makefile gst-libs/gst/insertbin/Makefile gst-libs/gst/interfaces/Makefile gst-libs/gst/codecparsers/Makefile gst-libs/gst/mpegts/Makefile gst-libs/gst/uridownloader/Makefile gst-libs/gst/wayland/Makefile gst-libs/gst/base/Makefile gst-libs/gst/player/Makefile gst-libs/gst/video/Makefile gst-libs/gst/audio/Makefile sys/Makefile sys/dshowdecwrapper/Makefile sys/acmenc/Makefile sys/acmmp3dec/Makefile sys/androidmedia/Makefile sys/applemedia/Makefile sys/avc/Makefile sys/bluez/Makefile sys/d3dvideosink/Makefile sys/decklink/Makefile sys/directsound/Makefile sys/dshowsrcwrapper/Makefile sys/dshowvideosink/Makefile sys/dvb/Makefile sys/fbdev/Makefile sys/kms/Makefile sys/linsys/Makefile sys/nvenc/Makefile sys/opensles/Makefile sys/shm/Makefile sys/tinyalsa/Makefile sys/uvch264/Makefile sys/vcd/Makefile sys/vdpau/Makefile sys/pvr2d/Makefile sys/wasapi/Makefile sys/wininet/Makefile sys/winks/Makefile sys/winscreencap/Makefile tests/Makefile tests/check/Makefile tests/files/Makefile tests/examples/Makefile tests/examples/avsamplesink/Makefile tests/examples/camerabin2/Makefile tests/examples/codecparsers/Makefile tests/examples/directfb/Makefile tests/examples/gl/Makefile tests/examples/gl/cocoa/Makefile tests/examples/gl/clutter/Makefile tests/examples/gl/generic/Makefile tests/examples/gl/generic/cube/Makefile tests/examples/gl/generic/cubeyuv/Makefile tests/examples/gl/generic/doublecube/Makefile tests/examples/gl/generic/recordgraphic/Makefile tests/examples/gl/gtk/Makefile tests/examples/gl/gtk/3dvideo/Makefile tests/examples/gl/gtk/filternovideooverlay/Makefile tests/examples/gl/gtk/filtervideooverlay/Makefile tests/examples/gl/gtk/fxtest/Makefile tests/examples/gl/gtk/switchvideooverlay/Makefile tests/examples/gl/qt/Makefile tests/examples/gl/sdl/Makefile tests/examples/gtk/Makefile tests/examples/mpegts/Makefile tests/examples/mxf/Makefile tests/examples/opencv/Makefile tests/examples/uvch264/Makefile tests/examples/waylandsink/Makefile tests/icles/Makefile ext/voamrwbenc/Makefile ext/voaacenc/Makefile ext/assrender/Makefile ext/apexsink/Makefile ext/bs2b/Makefile ext/bz2/Makefile ext/chromaprint/Makefile ext/curl/Makefile ext/dash/Makefile ext/dc1394/Makefile ext/directfb/Makefile ext/wayland/Makefile ext/daala/Makefile ext/dts/Makefile ext/gl/Makefile ext/gtk/Makefile ext/faac/Makefile ext/faad/Makefile ext/fdkaac/Makefile ext/flite/Makefile ext/fluidsynth/Makefile ext/gsm/Makefile ext/hls/Makefile ext/kate/Makefile ext/ladspa/Makefile ext/lv2/Makefile ext/libde265/Makefile ext/libmms/Makefile ext/libvisual/Makefile ext/Makefile ext/modplug/Makefile ext/mpeg2enc/Makefile ext/mimic/Makefile ext/mplex/Makefile ext/musepack/Makefile ext/nas/Makefile ext/neon/Makefile ext/ofa/Makefile ext/openal/Makefile ext/opencv/Makefile ext/openexr/Makefile ext/openh264/Makefile ext/openjpeg/Makefile ext/openni2/Makefile ext/opus/Makefile ext/qt/Makefile ext/rsvg/Makefile ext/resindvd/Makefile ext/rtmp/Makefile ext/sbc/Makefile ext/schroedinger/Makefile ext/sdl/Makefile ext/smoothstreaming/Makefile ext/sndfile/Makefile ext/soundtouch/Makefile ext/spandsp/Makefile ext/sndio/Makefile ext/srtp/Makefile ext/teletextdec/Makefile ext/gme/Makefile ext/spc/Makefile ext/timidity/Makefile ext/vulkan/Makefile ext/vulkan/xcb/Makefile ext/vulkan/wayland/Makefile ext/webp/Makefile ext/x265/Makefile ext/xvid/Makefile ext/zbar/Makefile ext/dtls/Makefile ext/webrtcdsp/Makefile po/Makefile.in docs/Makefile docs/plugins/Makefile docs/libs/Makefile docs/version.entities pkgconfig/Makefile pkgconfig/gstreamer-plugins-bad.pc pkgconfig/gstreamer-plugins-bad-uninstalled.pc pkgconfig/gstreamer-codecparsers.pc pkgconfig/gstreamer-codecparsers-uninstalled.pc pkgconfig/gstreamer-insertbin.pc pkgconfig/gstreamer-insertbin-uninstalled.pc pkgconfig/gstreamer-gl.pc pkgconfig/gstreamer-gl-uninstalled.pc pkgconfig/gstreamer-mpegts.pc pkgconfig/gstreamer-mpegts-uninstalled.pc pkgconfig/gstreamer-player.pc pkgconfig/gstreamer-player-uninstalled.pc pkgconfig/gstreamer-wayland.pc pkgconfig/gstreamer-wayland-uninstalled.pc pkgconfig/gstreamer-bad-base.pc pkgconfig/gstreamer-bad-base-uninstalled.pc pkgconfig/gstreamer-bad-video.pc pkgconfig/gstreamer-bad-video-uninstalled.pc pkgconfig/gstreamer-bad-audio.pc pkgconfig/gstreamer-bad-audio-uninstalled.pc tools/Makefile m4/Makefile"
sed \
@@ -59382,6 +59941,10 @@
as_fn_error $? "conditional \"USE_PLUGIN_STEREO\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
fi
+if test -z "${USE_PLUGIN_TIMECODE_TRUE}" && test -z "${USE_PLUGIN_TIMECODE_FALSE}"; then
+ as_fn_error $? "conditional \"USE_PLUGIN_TIMECODE\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
if test -z "${USE_PLUGIN_TTA_TRUE}" && test -z "${USE_PLUGIN_TTA_FALSE}"; then
as_fn_error $? "conditional \"USE_PLUGIN_TTA\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
@@ -59426,6 +59989,10 @@
as_fn_error $? "conditional \"HAVE_VIDEOTOOLBOX\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
fi
+if test -z "${HAVE_QTKIT_TRUE}" && test -z "${HAVE_QTKIT_FALSE}"; then
+ as_fn_error $? "conditional \"HAVE_QTKIT\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
if test -z "${USE_PLUGIN_DCCP_TRUE}" && test -z "${USE_PLUGIN_DCCP_FALSE}"; then
as_fn_error $? "conditional \"USE_PLUGIN_DCCP\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
@@ -59670,6 +60237,10 @@
as_fn_error $? "conditional \"USE_FBDEV\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
fi
+if test -z "${USE_FDK_AAC_TRUE}" && test -z "${USE_FDK_AAC_FALSE}"; then
+ as_fn_error $? "conditional \"USE_FDK_AAC\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
if test -z "${USE_FLITE_TRUE}" && test -z "${USE_FLITE_FALSE}"; then
as_fn_error $? "conditional \"USE_FLITE\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
@@ -60002,6 +60573,10 @@
as_fn_error $? "conditional \"USE_FBDEV\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
fi
+if test -z "${USE_FDK_AAC_TRUE}" && test -z "${USE_FDK_AAC_FALSE}"; then
+ as_fn_error $? "conditional \"USE_FDK_AAC\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
if test -z "${USE_FLITE_TRUE}" && test -z "${USE_FLITE_FALSE}"; then
as_fn_error $? "conditional \"USE_FLITE\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
@@ -60226,6 +60801,10 @@
as_fn_error $? "conditional \"USE_WEBP\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
fi
+if test -z "${USE_WEBRTCDSP_TRUE}" && test -z "${USE_WEBRTCDSP_FALSE}"; then
+ as_fn_error $? "conditional \"USE_WEBRTCDSP\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
if test -z "${USE_OPENH264_TRUE}" && test -z "${USE_OPENH264_FALSE}"; then
as_fn_error $? "conditional \"USE_OPENH264\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
@@ -60635,7 +61214,7 @@
# report actual input values of CONFIG_FILES etc. instead of their
# values after options handling.
ac_log="
-This file was extended by GStreamer Bad Plug-ins $as_me 1.9.1, which was
+This file was extended by GStreamer Bad Plug-ins $as_me 1.9.2, which was
generated by GNU Autoconf 2.69. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@@ -60701,7 +61280,7 @@
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
ac_cs_version="\\
-GStreamer Bad Plug-ins config.status 1.9.1
+GStreamer Bad Plug-ins config.status 1.9.2
configured by $0, generated by GNU Autoconf 2.69,
with options \\"\$ac_cs_config\\"
@@ -61317,6 +61896,7 @@
"gst/subenc/Makefile") CONFIG_FILES="$CONFIG_FILES gst/subenc/Makefile" ;;
"gst/stereo/Makefile") CONFIG_FILES="$CONFIG_FILES gst/stereo/Makefile" ;;
"gst/tta/Makefile") CONFIG_FILES="$CONFIG_FILES gst/tta/Makefile" ;;
+ "gst/timecode/Makefile") CONFIG_FILES="$CONFIG_FILES gst/timecode/Makefile" ;;
"gst/videofilters/Makefile") CONFIG_FILES="$CONFIG_FILES gst/videofilters/Makefile" ;;
"gst/videomeasure/Makefile") CONFIG_FILES="$CONFIG_FILES gst/videomeasure/Makefile" ;;
"gst/videoparsers/Makefile") CONFIG_FILES="$CONFIG_FILES gst/videoparsers/Makefile" ;;
@@ -61355,7 +61935,6 @@
"sys/acmmp3dec/Makefile") CONFIG_FILES="$CONFIG_FILES sys/acmmp3dec/Makefile" ;;
"sys/androidmedia/Makefile") CONFIG_FILES="$CONFIG_FILES sys/androidmedia/Makefile" ;;
"sys/applemedia/Makefile") CONFIG_FILES="$CONFIG_FILES sys/applemedia/Makefile" ;;
- "sys/applemedia-nonpublic/Makefile") CONFIG_FILES="$CONFIG_FILES sys/applemedia-nonpublic/Makefile" ;;
"sys/avc/Makefile") CONFIG_FILES="$CONFIG_FILES sys/avc/Makefile" ;;
"sys/bluez/Makefile") CONFIG_FILES="$CONFIG_FILES sys/bluez/Makefile" ;;
"sys/d3dvideosink/Makefile") CONFIG_FILES="$CONFIG_FILES sys/d3dvideosink/Makefile" ;;
@@ -61428,6 +62007,7 @@
"ext/gtk/Makefile") CONFIG_FILES="$CONFIG_FILES ext/gtk/Makefile" ;;
"ext/faac/Makefile") CONFIG_FILES="$CONFIG_FILES ext/faac/Makefile" ;;
"ext/faad/Makefile") CONFIG_FILES="$CONFIG_FILES ext/faad/Makefile" ;;
+ "ext/fdkaac/Makefile") CONFIG_FILES="$CONFIG_FILES ext/fdkaac/Makefile" ;;
"ext/flite/Makefile") CONFIG_FILES="$CONFIG_FILES ext/flite/Makefile" ;;
"ext/fluidsynth/Makefile") CONFIG_FILES="$CONFIG_FILES ext/fluidsynth/Makefile" ;;
"ext/gsm/Makefile") CONFIG_FILES="$CONFIG_FILES ext/gsm/Makefile" ;;
@@ -62211,7 +62791,6 @@
cat <<_LT_EOF >> "$cfgfile"
#! $SHELL
# Generated automatically by $as_me ($PACKAGE) $VERSION
-# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
# NOTE: Changes made to this file will be lost: look at ltmain.sh.
# Provide generalized library-building support services.
diff --git a/configure.ac b/configure.ac
index cac9954..5fcf370 100644
--- a/configure.ac
+++ b/configure.ac
@@ -3,7 +3,7 @@
dnl initialize autoconf
dnl when going to/from release please set the nano (fourth number) right !
dnl releases only do Wall, git and prerelease does Werror too
-AC_INIT([GStreamer Bad Plug-ins],[1.9.1],[http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer],[gst-plugins-bad])
+AC_INIT([GStreamer Bad Plug-ins],[1.9.2],[http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer],[gst-plugins-bad])
AG_GST_INIT
@@ -51,11 +51,11 @@
dnl - interfaces added -> increment AGE
dnl - interfaces removed -> AGE = 0
dnl sets GST_LT_LDFLAGS
-AS_LIBTOOL(GST, 901, 0, 901)
+AS_LIBTOOL(GST, 902, 0, 902)
dnl *** required versions of GStreamer stuff ***
-GST_REQ=1.9.1
-GSTPB_REQ=1.9.1
+GST_REQ=1.9.2
+GSTPB_REQ=1.9.2
dnl *** autotools stuff ****
@@ -201,6 +201,10 @@
AG_GST_CHECK_GST_CHECK($GST_API_VERSION, [$GST_REQ], no)
AG_GST_CHECK_GST_CONTROLLER($GST_API_VERSION, [$GST_REQ], yes)
AG_GST_CHECK_GST_NET($GST_API_VERSION, [$GST_REQ], yes)
+AG_GST_PKG_CHECK_MODULES(GST_VIDEO, gstreamer-video-[$GST_API_VERSION], [$GST_REQ], yes)
+AG_GST_PKG_CHECK_MODULES(GST_AUDIO, gstreamer-audio-[$GST_API_VERSION], [$GST_REQ], yes)
+AG_GST_PKG_CHECK_MODULES(GST_PBUTILS, gstreamer-pbutils-[$GST_API_VERSION], [$GST_REQ], yes)
+
AM_CONDITIONAL(HAVE_GST_CHECK, test "x$HAVE_GST_CHECK" = "xyes")
AG_GST_CHECK_GST_PLUGINS_BASE($GST_API_VERSION, [$GSTPB_REQ], yes)
@@ -310,7 +314,7 @@
dnl graphene-1.0 is optional and used in gltransformation
HAVE_GRAPHENE=NO
-PKG_CHECK_MODULES(GRAPHENE, graphene-1.0 >= 1.0.0, HAVE_GRAPHENE=yes, HAVE_GRAPHENE=no)
+PKG_CHECK_MODULES(GRAPHENE, graphene-1.0 >= 1.4.0, HAVE_GRAPHENE=yes, HAVE_GRAPHENE=no)
if test "x$HAVE_GRAPHENE" = "xyes"; then
AC_DEFINE(HAVE_GRAPHENE, [1] , [Use graphene])
fi
@@ -524,6 +528,7 @@
AG_GST_CHECK_PLUGIN(speed)
AG_GST_CHECK_PLUGIN(subenc)
AG_GST_CHECK_PLUGIN(stereo)
+AG_GST_CHECK_PLUGIN(timecode)
AG_GST_CHECK_PLUGIN(tta)
AG_GST_CHECK_PLUGIN(videofilters)
AG_GST_CHECK_PLUGIN(videomeasure)
@@ -538,6 +543,7 @@
AC_CHECK_HEADER(AVFoundation/AVFoundation.h, HAVE_AVFOUNDATION="yes", HAVE_AVFOUNDATION="no", [-])
AC_CHECK_HEADER(MobileCoreServices/MobileCoreServices.h, HAVE_IOS="yes", HAVE_IOS="no", [-])
AC_CHECK_HEADER(VideoToolbox/VideoToolbox.h, HAVE_VIDEOTOOLBOX="yes", HAVE_VIDEOTOOLBOX="no", [-])
+AC_CHECK_HEADER(QTKit/QTKit.h, HAVE_QTKIT="yes", HAVE_QTKIT="no", [-])
if test "x$HAVE_VIDEOTOOLBOX" = "xyes"; then
old_LIBS=$LIBS
@@ -564,6 +570,10 @@
AC_DEFINE(HAVE_VIDEOTOOLBOX, 1, [Define if building with VideoToolbox])
fi
+AM_CONDITIONAL(HAVE_QTKIT, test "x$HAVE_QTKIT" = "xyes")
+if test "x$HAVE_QTKIT" = "xyes"; then
+ AC_DEFINE(HAVE_QTKIT, 1, [Define if building with QTKit])
+fi
dnl disable gst plugins we might not be able to build on this
dnl platform: (ugly but minimally invasive)
dnl FIXME: maybe move to sys, or make work with winsock2
@@ -789,6 +799,17 @@
CFLAGS=$old_CFLAGS
PKG_CHECK_MODULES(WAYLAND_EGL, wayland-client >= 1.0 wayland-cursor >= 1.0 wayland-egl >= 9.0, HAVE_WAYLAND_EGL=yes, HAVE_WAYLAND_EGL=no)
+
+ # OS X and iOS always have GL available
+ case $host in
+ *-darwin*)
+ if test "x$HAVE_IOS" = "xyes"; then
+ HAVE_GLES2=yes
+ else
+ HAVE_GL=yes
+ fi
+ ;;
+ esac
;;
esac
@@ -1372,6 +1393,7 @@
GST_GL_HAVE_GLSYNC=0
GST_GL_HAVE_GLUINT64=0
GST_GL_HAVE_GLINT64=0
+GST_GL_HAVE_EGLATTRIB=0
old_CFLAGS=$CFLAGS
CFLAGS="$GL_CFLAGS $CFLAGS"
@@ -1411,6 +1433,17 @@
GST_GL_HAVE_GLINT64=1
fi
+if test "x$USE_EGL" = "xyes"; then
+ EGL_INCLUDES="$GL_INCLUDES
+ #include <EGL/egl.h>
+ #include <EGL/eglext.h>
+ "
+ AC_CHECK_TYPES(EGLAttrib, [], [], [[$EGL_INCLUDES]])
+ if test "x$ac_cv_type_EGLAttrib" = "xyes"; then
+ GST_GL_HAVE_EGLATTRIB=1
+ fi
+fi
+
CFLAGS=$old_CFLAGS
GL_CONFIG_DEFINES="$GL_CONFIG_DEFINES
@@ -1421,6 +1454,7 @@
#define GST_GL_HAVE_GLSYNC $GST_GL_HAVE_GLSYNC
#define GST_GL_HAVE_GLUINT64 $GST_GL_HAVE_GLUINT64
#define GST_GL_HAVE_GLINT64 $GST_GL_HAVE_GLINT64
+#define GST_GL_HAVE_EGLATTRIB $GST_GL_HAVE_EGLATTRIB
"
AC_CONFIG_COMMANDS([gst-libs/gst/gl/gstglconfig.h], [
@@ -1876,8 +1910,6 @@
dnl *** NVENC ***
translit(dnm, m, l) AM_CONDITIONAL(USE_NVENC, true)
AG_GST_CHECK_FEATURE(NVENC, [NVIDIA Encode API], nvenc, [
- AG_GST_PKG_CHECK_MODULES(GST_VIDEO, gstreamer-video-1.0)
- AG_GST_PKG_CHECK_MODULES(GST_PBUTILS, gstreamer-pbutils-1.0)
AC_ARG_WITH([cuda-prefix],
AS_HELP_STRING([--with-cuda-prefix],
[Use the provided prefix for detecting the cuda installation]),
@@ -2284,6 +2316,14 @@
fi
])
+dnl *** fdkaac ***
+translit(dnm, m, l) AM_CONDITIONAL(USE_FDK_AAC, true)
+AG_GST_CHECK_FEATURE(FDK_AAC, [fdkaac plugin], fdkaac, [
+ PKG_CHECK_MODULES(FDK_AAC, fdk-aac, HAVE_FDK_AAC="yes", [
+ HAVE_FDK_AAC="no"
+ ])
+])
+
dnl *** flite ***
translit(dnm, m, l) AM_CONDITIONAL(USE_FLITE, true)
AG_GST_CHECK_FEATURE(FLITE, [Flite plugin], flite, [
@@ -2340,7 +2380,6 @@
dnl *** kms ***
translit(dnm, m, l) AM_CONDITIONAL(USE_KMS, true)
AG_GST_CHECK_FEATURE(KMS, [drm/kms libraries], kms, [
- AG_GST_PKG_CHECK_MODULES(GST_VIDEO, gstreamer-video-1.0)
AG_GST_PKG_CHECK_MODULES(GST_ALLOCATORS, gstreamer-allocators-1.0)
PKG_CHECK_MODULES([DRM], [libdrm libkms], HAVE_KMS=yes, HAVE_KMS=no)
])
@@ -2361,7 +2400,13 @@
dnl *** LV2 ***
translit(dnm, m, l) AM_CONDITIONAL(USE_LV2, true)
AG_GST_CHECK_FEATURE(LV2, [lv2], lv2, [
- PKG_CHECK_MODULES(LILV, lilv-0 >= 0.6.6, HAVE_LV2="yes", HAVE_LV2="no")
+ PKG_CHECK_MODULES(LILV, lilv-0 >= 0.22, [
+ HAVE_LV2="yes",
+ HAVE_LILV_0_22="yes"
+ AC_DEFINE(HAVE_LILV_0_22, 1, [Define if we have liblilv >= 0.22])
+ ],[
+ PKG_CHECK_MODULES(LILV, lilv-0 >= 0.16, HAVE_LV2="yes", HAVE_LV2="no")
+ ])
AC_SUBST(LILV_CFLAGS)
AC_SUBST(LILV_LIBS)
])
@@ -3368,11 +3413,24 @@
dnl Note: We test for a specific version as there is no API stability
translit(dnm, m, l) AM_CONDITIONAL(USE_WEBRTCDSP, true)
AG_GST_CHECK_FEATURE(WEBRTCDSP, [WebRTC Audio Processing], webrtcdsp, [
+
+ AG_GST_PKG_CHECK_MODULES(WEBRTCDSP, webrtc-audio-processing >= 0.2 webrtc-audio-processing < 0.4)
+
+ # On Android, C++ headers comes with the STL implementation
+ AS_CASE(["${host}"],
+ [*android*],
+ [
+ PKG_CHECK_MODULES(GNUSTL, gnustl, [
+ WEBRTCDSP_CFLAGS="$WEBRTCDSP_CFLAGS $GNUSTL_CFLAGS"
+ WEBRTCDSP_LIBS="$WEBRTCDSP_LIBS $GNUSTL_LIBS"])
+ ])
+ AC_SUBST([WEBRTCDSP_CFLAGS])
+ AC_SUBST([WEBRTCDSP_LIBS])
+
AC_LANG_PUSH([C++])
old_CPPFLAGS=$CPPFLAGS
- CPPFLAGS="-std=c++11 $CPPFLAGS"
- AG_GST_PKG_CHECK_MODULES(WEBRTCDSP, webrtc-audio-processing = 0.2)
- AC_CHECK_HEADER([typeindex],[],[HAVE_WEBRTCDSP=no])
+ CPPFLAGS="-std=c++11 $CPPFLAGS $GNUSTL_CFLAGS"
+ AC_CHECK_HEADER([vector],[],[HAVE_WEBRTCDSP=no])
CPPFLAGS=$old_CPPFLAGS
AC_LANG_POP([C++])
])
@@ -3404,6 +3462,7 @@
AM_CONDITIONAL(USE_FAAC, false)
AM_CONDITIONAL(USE_FAAD, false)
AM_CONDITIONAL(USE_FBDEV, false)
+AM_CONDITIONAL(USE_FDK_AAC, false)
AM_CONDITIONAL(USE_FLITE, false)
AM_CONDITIONAL(USE_FLUIDSYNTH, false)
AM_CONDITIONAL(USE_GL, false)
@@ -3460,6 +3519,7 @@
AM_CONDITIONAL(USE_SNDIO, false)
AM_CONDITIONAL(USE_UVCH264, false)
AM_CONDITIONAL(USE_WEBP, false)
+AM_CONDITIONAL(USE_WEBRTCDSP, false)
AM_CONDITIONAL(USE_OPENH264, false)
AM_CONDITIONAL(USE_X265, false)
AM_CONDITIONAL(USE_DTLS, false)
@@ -3611,6 +3671,7 @@
gst/subenc/Makefile
gst/stereo/Makefile
gst/tta/Makefile
+gst/timecode/Makefile
gst/videofilters/Makefile
gst/videomeasure/Makefile
gst/videoparsers/Makefile
@@ -3649,7 +3710,6 @@
sys/acmmp3dec/Makefile
sys/androidmedia/Makefile
sys/applemedia/Makefile
-sys/applemedia-nonpublic/Makefile
sys/avc/Makefile
sys/bluez/Makefile
sys/d3dvideosink/Makefile
@@ -3722,6 +3782,7 @@
ext/gtk/Makefile
ext/faac/Makefile
ext/faad/Makefile
+ext/fdkaac/Makefile
ext/flite/Makefile
ext/fluidsynth/Makefile
ext/gsm/Makefile
diff --git a/docs/Makefile.in b/docs/Makefile.in
index df8e4f1..428a033 100644
--- a/docs/Makefile.in
+++ b/docs/Makefile.in
@@ -298,6 +298,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -347,6 +349,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/docs/libs/Makefile.in b/docs/libs/Makefile.in
index d97c7d2..1f05209 100644
--- a/docs/libs/Makefile.in
+++ b/docs/libs/Makefile.in
@@ -260,6 +260,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -309,6 +311,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
@@ -1151,7 +1155,7 @@
@ENABLE_GTK_DOC_TRUE@ for i in $(DOC_SOURCE_DIR) ; do \
@ENABLE_GTK_DOC_TRUE@ _source_dir="$${_source_dir} --source-dir=$$i" ; \
@ENABLE_GTK_DOC_TRUE@ done ; \
-@ENABLE_GTK_DOC_TRUE@ gtkdoc-mkdb --module=$(DOC_MODULE) $$(_source_dir) --expand-content-files="$(expand_content_files)" --main-sgml-file=$(DOC_MAIN_SGML_FILE) --output-format=xml $(MKDB_OPTIONS)
+@ENABLE_GTK_DOC_TRUE@ gtkdoc-mkdb --module=$(DOC_MODULE) $${_source_dir} --expand-content-files="$(expand_content_files)" --main-sgml-file=$(DOC_MAIN_SGML_FILE) --output-format=xml $(MKDB_OPTIONS)
@ENABLE_GTK_DOC_TRUE@ @cp ../version.entities xml
@ENABLE_GTK_DOC_TRUE@ @touch sgml-build.stamp
diff --git a/docs/libs/gst-plugins-bad-libs-sections.txt b/docs/libs/gst-plugins-bad-libs-sections.txt
index fdcdf2e..a14bfc2 100644
--- a/docs/libs/gst-plugins-bad-libs-sections.txt
+++ b/docs/libs/gst-plugins-bad-libs-sections.txt
@@ -1705,8 +1705,8 @@
gst_player_get_pipeline
-gst_player_set_position_update_interval
-gst_player_get_position_update_interval
+gst_player_set_config
+gst_player_get_config
GstPlayerState
gst_player_state_get_name
@@ -1763,6 +1763,13 @@
GstPlayerVideoRenderer
GstPlayerVideoRendererInterface
+<SUBSECTION config>
+gst_player_config_set_position_update_interval
+gst_player_config_get_position_update_interval
+
+gst_player_config_set_user_agent
+gst_player_config_get_user_agent
+
<SUBSECTION Standard>
GST_IS_PLAYER
GST_IS_PLAYER_CLASS
diff --git a/docs/libs/html/GstGLBaseFilter.html b/docs/libs/html/GstGLBaseFilter.html
index c5f480e..ad644db 100644
--- a/docs/libs/html/GstGLBaseFilter.html
+++ b/docs/libs/html/GstGLBaseFilter.html
@@ -29,7 +29,7 @@
<div class="refnamediv"><table width="100%"><tr>
<td valign="top">
<h2><span class="refentrytitle"><a name="GstGLBaseFilter.top_of_page"></a>GstGLBaseFilter</span></h2>
-<p>GstGLBaseFilter</p>
+<p>GstGLBaseFilter — <a href="/usr/share/gtk-doc/html/gstreamer-libs-1.0GstBaseTransform.html#GstBaseTransform-struct"><span class="type">GstBaseTransform</span></a> subclass for transformin OpenGL resources</p>
</td>
<td class="gallery_image" valign="top" align="right"></td>
</tr></table></div>
@@ -81,6 +81,10 @@
</div>
<div class="refsect1">
<a name="GstGLBaseFilter.description"></a><h2>Description</h2>
+<p><a class="link" href="GstGLBaseFilter.html" title="GstGLBaseFilter"><span class="type">GstGLBaseFilter</span></a> handles the nitty gritty details of retrieving an OpenGL
+context. It also provided some wrappers around <a href="/usr/share/gtk-doc/html/gstreamer-libs-1.0GstBaseTransform.html#GstBaseTransform-struct"><span class="type">GstBaseTransform</span></a>'s
+<code class="function">start()</code>, <code class="function">stop()</code> and <code class="function">set_caps()</code> virtual methods that ensure an OpenGL context
+is available and current in the calling thread.</p>
</div>
<div class="refsect1">
<a name="GstGLBaseFilter.functions_details"></a><h2>Functions</h2>
@@ -91,6 +95,17 @@
<div class="refsect2">
<a name="GstGLBaseFilter-struct"></a><h3>GstGLBaseFilter</h3>
<pre class="programlisting">typedef struct _GstGLBaseFilter GstGLBaseFilter;</pre>
+<div class="refsect3">
+<a name="GstGLBaseFilter.members"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="300px" class="struct_members_name">
+<col class="struct_members_description">
+<col width="200px" class="struct_members_annotations">
+</colgroup>
+<tbody></tbody>
+</table></div>
+</div>
</div>
<hr>
<div class="refsect2">
@@ -104,6 +119,39 @@
gboolean (*gl_set_caps) (GstGLBaseFilter *filter, GstCaps * incaps, GstCaps * outcaps);
} GstGLBaseFilterClass;
</pre>
+<div class="refsect3">
+<a name="GstGLBaseFilterClass.members"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="300px" class="struct_members_name">
+<col class="struct_members_description">
+<col width="200px" class="struct_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="struct_member_name"><p><a class="link" href="gst-plugins-bad-libs-GstGLAPI.html#GstGLAPI" title="enum GstGLAPI"><span class="type">GstGLAPI</span></a> <em class="structfield"><code><a name="GstGLBaseFilterClass.supported-gl-api"></a>supported_gl_api</code></em>;</p></td>
+<td class="struct_member_description"><p>the logical-OR of <a class="link" href="gst-plugins-bad-libs-GstGLAPI.html#GstGLAPI" title="enum GstGLAPI"><span class="type">GstGLAPI</span></a>'s supported by this element</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><em class="structfield"><code><a name="GstGLBaseFilterClass.gl-start"></a>gl_start</code></em> ()</p></td>
+<td class="struct_member_description"><p>called in the GL thread to setup the element GL state.</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><em class="structfield"><code><a name="GstGLBaseFilterClass.gl-stop"></a>gl_stop</code></em> ()</p></td>
+<td class="struct_member_description"><p>called in the GL thread to setup the element GL state.</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><em class="structfield"><code><a name="GstGLBaseFilterClass.gl-set-caps"></a>gl_set_caps</code></em> ()</p></td>
+<td class="struct_member_description"><p>called in the GL thread when caps are set on <em class="parameter"><code>filter</code></em>
+.</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
</div>
</div>
<div class="refsect1">
@@ -115,6 +163,10 @@
<p>Flags: Read</p>
</div>
</div>
+<div class="refsect1">
+<a name="GstGLBaseFilter.see-also"></a><h2>See Also</h2>
+<p><a href="/usr/share/gtk-doc/html/gstreamer-libs-1.0GstBaseTransform.html#GstBaseTransform-struct"><span class="type">GstBaseTransform</span></a></p>
+</div>
</div>
<div class="footer">
<hr>Generated by GTK-Doc V1.25</div>
diff --git a/docs/libs/html/GstGLBufferPool.html b/docs/libs/html/GstGLBufferPool.html
index 9142729..7ada86d 100644
--- a/docs/libs/html/GstGLBufferPool.html
+++ b/docs/libs/html/GstGLBufferPool.html
@@ -28,7 +28,7 @@
<div class="refnamediv"><table width="100%"><tr>
<td valign="top">
<h2><span class="refentrytitle"><a name="GstGLBufferPool.top_of_page"></a>GstGLBufferPool</span></h2>
-<p>GstGLBufferPool</p>
+<p>GstGLBufferPool — buffer pool for <a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#GstGLMemory" title="GstGLMemory"><span class="type">GstGLMemory</span></a> objects</p>
</td>
<td class="gallery_image" valign="top" align="right"></td>
</tr></table></div>
@@ -97,6 +97,10 @@
</div>
<div class="refsect1">
<a name="GstGLBufferPool.description"></a><h2>Description</h2>
+<p>a <a class="link" href="GstGLBufferPool.html" title="GstGLBufferPool"><span class="type">GstGLBufferPool</span></a> is an object that allocates buffers with <a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#GstGLMemory" title="GstGLMemory"><span class="type">GstGLMemory</span></a></p>
+<p>A <a class="link" href="GstGLBufferPool.html" title="GstGLBufferPool"><span class="type">GstGLBufferPool</span></a> is created with <a class="link" href="GstGLBufferPool.html#gst-gl-buffer-pool-new" title="gst_gl_buffer_pool_new ()"><code class="function">gst_gl_buffer_pool_new()</code></a></p>
+<p><a class="link" href="GstGLBufferPool.html" title="GstGLBufferPool"><span class="type">GstGLBufferPool</span></a> implements the VideoMeta buffer pool option
+<a href="/usr/share/gtk-doc/html/gst-plugins-base-libs-1.0gst-plugins-base-libs-GstVideoPool.html#GST-BUFFER-POOL-OPTION-VIDEO-META:CAPS"><span class="type">GST_BUFFER_POOL_OPTION_VIDEO_META</span></a></p>
</div>
<div class="refsect1">
<a name="GstGLBufferPool.functions_details"></a><h2>Functions</h2>
@@ -104,6 +108,25 @@
<a name="gst-gl-buffer-pool-new"></a><h3>gst_gl_buffer_pool_new ()</h3>
<pre class="programlisting"><a href="/usr/share/gtk-doc/html/gstreamer-1.0GstBufferPool.html#GstBufferPool-struct"><span class="returnvalue">GstBufferPool</span></a> *
gst_gl_buffer_pool_new (<em class="parameter"><code><a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a> *context</code></em>);</pre>
+<div class="refsect3">
+<a name="gst-gl-buffer-pool-new.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>context</p></td>
+<td class="parameter_description"><p>the <a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a> to use</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-gl-buffer-pool-new.returns"></a><h4>Returns</h4>
+<p> a <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstBufferPool.html#GstBufferPool-struct"><span class="type">GstBufferPool</span></a> that allocates buffers with <a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#GstGLMemory" title="GstGLMemory"><span class="type">GstGLMemory</span></a></p>
+</div>
</div>
<hr>
<div class="refsect2">
@@ -111,6 +134,26 @@
<pre class="programlisting"><a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLAllocationParams" title="struct GstGLAllocationParams"><span class="returnvalue">GstGLAllocationParams</span></a> *
gst_buffer_pool_config_get_gl_allocation_params
(<em class="parameter"><code><a href="/usr/share/gtk-doc/html/gstreamer-1.0GstStructure.html#GstStructure-struct"><span class="type">GstStructure</span></a> *config</code></em>);</pre>
+<div class="refsect3">
+<a name="gst-buffer-pool-config-get-gl-allocation-params.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>config</p></td>
+<td class="parameter_description"><p>a buffer pool config</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-buffer-pool-config-get-gl-allocation-params.returns"></a><h4>Returns</h4>
+<p> the currently set <a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLAllocationParams" title="struct GstGLAllocationParams"><span class="type">GstGLAllocationParams</span></a> or <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. </p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
+</div>
</div>
<hr>
<div class="refsect2">
@@ -119,6 +162,31 @@
gst_buffer_pool_config_set_gl_allocation_params
(<em class="parameter"><code><a href="/usr/share/gtk-doc/html/gstreamer-1.0GstStructure.html#GstStructure-struct"><span class="type">GstStructure</span></a> *config</code></em>,
<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLAllocationParams" title="struct GstGLAllocationParams"><span class="type">GstGLAllocationParams</span></a> *params</code></em>);</pre>
+<p>Sets <em class="parameter"><code>params</code></em>
+ on <em class="parameter"><code>config</code></em>
+</p>
+<div class="refsect3">
+<a name="gst-buffer-pool-config-set-gl-allocation-params.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>config</p></td>
+<td class="parameter_description"><p>a buffer pool config</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>params</p></td>
+<td class="parameter_description"><p> a <a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLAllocationParams" title="struct GstGLAllocationParams"><span class="type">GstGLAllocationParams</span></a>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
</div>
</div>
<div class="refsect1">
@@ -126,6 +194,7 @@
<div class="refsect2">
<a name="GstGLBufferPool-struct"></a><h3>GstGLBufferPool</h3>
<pre class="programlisting">typedef struct _GstGLBufferPool GstGLBufferPool;</pre>
+<p>Opaque GstGLBufferPool struct</p>
</div>
<hr>
<div class="refsect2">
@@ -134,8 +203,13 @@
GstBufferPoolClass parent_class;
} GstGLBufferPoolClass;
</pre>
+<p>The <a class="link" href="GstGLBufferPool.html#GstGLBufferPoolClass" title="GstGLBufferPoolClass"><span class="type">GstGLBufferPoolClass</span></a> structure contains only private data</p>
</div>
</div>
+<div class="refsect1">
+<a name="GstGLBufferPool.see-also"></a><h2>See Also</h2>
+<p><a href="/usr/share/gtk-doc/html/gstreamer-1.0GstBufferPool.html#GstBufferPool-struct"><span class="type">GstBufferPool</span></a>, <a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#GstGLMemory" title="GstGLMemory"><span class="type">GstGLMemory</span></a></p>
+</div>
</div>
<div class="footer">
<hr>Generated by GTK-Doc V1.25</div>
diff --git a/docs/libs/html/GstGLColorConvert.html b/docs/libs/html/GstGLColorConvert.html
index 03f84cf..6f32eab 100644
--- a/docs/libs/html/GstGLColorConvert.html
+++ b/docs/libs/html/GstGLColorConvert.html
@@ -28,7 +28,7 @@
<div class="refnamediv"><table width="100%"><tr>
<td valign="top">
<h2><span class="refentrytitle"><a name="GstGLColorConvert.top_of_page"></a>GstGLColorConvert</span></h2>
-<p>GstGLColorConvert</p>
+<p>GstGLColorConvert — an object that converts between color spaces/formats</p>
</td>
<td class="gallery_image" valign="top" align="right"></td>
</tr></table></div>
@@ -128,6 +128,9 @@
</div>
<div class="refsect1">
<a name="GstGLColorConvert.description"></a><h2>Description</h2>
+<p><a class="link" href="GstGLColorConvert.html" title="GstGLColorConvert"><span class="type">GstGLColorConvert</span></a> is an object that converts between color spaces and/or
+formats using OpenGL Shaders.</p>
+<p>A <a class="link" href="GstGLColorConvert.html" title="GstGLColorConvert"><span class="type">GstGLColorConvert</span></a> can be created with <a class="link" href="GstGLColorConvert.html#gst-gl-color-convert-new" title="gst_gl_color_convert_new ()"><code class="function">gst_gl_color_convert_new()</code></a>.</p>
</div>
<div class="refsect1">
<a name="GstGLColorConvert.functions_details"></a><h2>Functions</h2>
@@ -135,6 +138,25 @@
<a name="gst-gl-color-convert-new"></a><h3>gst_gl_color_convert_new ()</h3>
<pre class="programlisting"><a class="link" href="GstGLColorConvert.html" title="GstGLColorConvert"><span class="returnvalue">GstGLColorConvert</span></a> *
gst_gl_color_convert_new (<em class="parameter"><code><a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a> *context</code></em>);</pre>
+<div class="refsect3">
+<a name="gst-gl-color-convert-new.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>context</p></td>
+<td class="parameter_description"><p>a <a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-gl-color-convert-new.returns"></a><h4>Returns</h4>
+<p> a new <a class="link" href="GstGLColorConvert.html" title="GstGLColorConvert"><span class="type">GstGLColorConvert</span></a> object</p>
+</div>
</div>
<hr>
<div class="refsect2">
@@ -143,6 +165,35 @@
gst_gl_color_convert_set_caps (<em class="parameter"><code><a class="link" href="GstGLColorConvert.html" title="GstGLColorConvert"><span class="type">GstGLColorConvert</span></a> *convert</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/gstreamer-1.0GstCaps.html#GstCaps-struct"><span class="type">GstCaps</span></a> *in_caps</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/gstreamer-1.0GstCaps.html#GstCaps-struct"><span class="type">GstCaps</span></a> *out_caps</code></em>);</pre>
+<p>Initializes <em class="parameter"><code>convert</code></em>
+ with the information required for conversion.</p>
+<div class="refsect3">
+<a name="gst-gl-color-convert-set-caps.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>convert</p></td>
+<td class="parameter_description"><p>a <a class="link" href="GstGLColorConvert.html" title="GstGLColorConvert"><span class="type">GstGLColorConvert</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>in_caps</p></td>
+<td class="parameter_description"><p>input <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstCaps.html#GstCaps-struct"><span class="type">GstCaps</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>out_caps</p></td>
+<td class="parameter_description"><p>output <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstCaps.html#GstCaps-struct"><span class="type">GstCaps</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
</div>
<hr>
<div class="refsect2">
@@ -176,6 +227,35 @@
<pre class="programlisting"><a href="/usr/share/gtk-doc/html/gstreamer-1.0GstBuffer.html#GstBuffer-struct"><span class="returnvalue">GstBuffer</span></a> *
gst_gl_color_convert_perform (<em class="parameter"><code><a class="link" href="GstGLColorConvert.html" title="GstGLColorConvert"><span class="type">GstGLColorConvert</span></a> *convert</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/gstreamer-1.0GstBuffer.html#GstBuffer-struct"><span class="type">GstBuffer</span></a> *inbuf</code></em>);</pre>
+<p>Converts the data contained by <em class="parameter"><code>inbuf</code></em>
+ using the formats specified by the
+<a href="/usr/share/gtk-doc/html/gst-plugins-base-libs-1.0gst-plugins-base-libs-gstvideo.html#GstVideoInfo"><span class="type">GstVideoInfo</span></a>s passed to <a class="link" href="GstGLColorConvert.html#gst-gl-color-convert-set-caps" title="gst_gl_color_convert_set_caps ()"><code class="function">gst_gl_color_convert_set_caps()</code></a></p>
+<div class="refsect3">
+<a name="gst-gl-color-convert-perform.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>convert</p></td>
+<td class="parameter_description"><p>a <a class="link" href="GstGLColorConvert.html" title="GstGLColorConvert"><span class="type">GstGLColorConvert</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>inbuf</p></td>
+<td class="parameter_description"><p>the texture ids for input formatted according to in_info</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-gl-color-convert-perform.returns"></a><h4>Returns</h4>
+<p> a converted <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstBuffer.html#GstBuffer-struct"><span class="type">GstBuffer</span></a> or <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>%</p>
+</div>
</div>
</div>
<div class="refsect1">
@@ -183,16 +263,19 @@
<div class="refsect2">
<a name="GST-GL-COLOR-CONVERT-FORMATS:CAPS"></a><h3>GST_GL_COLOR_CONVERT_FORMATS</h3>
<pre class="programlisting">#define GST_GL_COLOR_CONVERT_FORMATS</pre>
+<p>The currently supported formats that can be converted</p>
</div>
<hr>
<div class="refsect2">
<a name="GST-GL-COLOR-CONVERT-VIDEO-CAPS"></a><h3>GST_GL_COLOR_CONVERT_VIDEO_CAPS</h3>
<pre class="programlisting">#define GST_GL_COLOR_CONVERT_VIDEO_CAPS</pre>
+<p>The currently supported <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstCaps.html#GstCaps-struct"><span class="type">GstCaps</span></a> that can be converted</p>
</div>
<hr>
<div class="refsect2">
<a name="GstGLColorConvert-struct"></a><h3>GstGLColorConvert</h3>
<pre class="programlisting">typedef struct _GstGLColorConvert GstGLColorConvert;</pre>
+<p>Opaque <a class="link" href="GstGLColorConvert.html" title="GstGLColorConvert"><span class="type">GstGLColorConvert</span></a> object</p>
</div>
<hr>
<div class="refsect2">
@@ -201,8 +284,13 @@
GstObjectClass object_class;
} GstGLColorConvertClass;
</pre>
+<p>The <a class="link" href="GstGLColorConvert.html#GstGLColorConvertClass" title="GstGLColorConvertClass"><span class="type">GstGLColorConvertClass</span></a> struct only contains private data</p>
</div>
</div>
+<div class="refsect1">
+<a name="GstGLColorConvert.see-also"></a><h2>See Also</h2>
+<p><a class="link" href="GstGLUpload.html" title="GstGLUpload"><span class="type">GstGLUpload</span></a>, <a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#GstGLMemory" title="GstGLMemory"><span class="type">GstGLMemory</span></a>, <a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemory" title="GstGLBaseMemory"><span class="type">GstGLBaseMemory</span></a></p>
+</div>
</div>
<div class="footer">
<hr>Generated by GTK-Doc V1.25</div>
diff --git a/docs/libs/html/GstGLContext.html b/docs/libs/html/GstGLContext.html
index 3b4c25a..4bf6a87 100644
--- a/docs/libs/html/GstGLContext.html
+++ b/docs/libs/html/GstGLContext.html
@@ -28,7 +28,7 @@
<div class="refnamediv"><table width="100%"><tr>
<td valign="top">
<h2><span class="refentrytitle"><a name="GstGLContext.top_of_page"></a>GstGLContext</span></h2>
-<p>GstGLContext</p>
+<p>GstGLContext — OpenGL context abstraction</p>
</td>
<td class="gallery_image" valign="top" align="right"></td>
</tr></table></div>
@@ -300,6 +300,9 @@
</div>
<div class="refsect1">
<a name="GstGLContext.description"></a><h2>Description</h2>
+<p><a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a> wraps an OpenGL context object in a uniform API. As a result
+of the limitation on OpenGL context, this object is not thread safe unless
+specified and must only be activated in a single thread.</p>
</div>
<div class="refsect1">
<a name="GstGLContext.functions_details"></a><h2>Functions</h2>
@@ -314,12 +317,59 @@
<pre class="programlisting"><span class="returnvalue">void</span>
<span class="c_punctuation">(</span>*GstGLContextThreadFunc<span class="c_punctuation">)</span> (<em class="parameter"><code><a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a> *context</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> data</code></em>);</pre>
+<p>Represents a function to run in the GL thread with <em class="parameter"><code>context</code></em>
+ and <em class="parameter"><code>data</code></em>
+</p>
+<div class="refsect3">
+<a name="GstGLContextThreadFunc.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>context</p></td>
+<td class="parameter_description"><p>a <a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>data</p></td>
+<td class="parameter_description"><p>user data</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
</div>
<hr>
<div class="refsect2">
<a name="gst-gl-context-new"></a><h3>gst_gl_context_new ()</h3>
<pre class="programlisting"><a class="link" href="GstGLContext.html" title="GstGLContext"><span class="returnvalue">GstGLContext</span></a> *
gst_gl_context_new (<em class="parameter"><code><a class="link" href="GstGLDisplay.html" title="GstGLDisplay"><span class="type">GstGLDisplay</span></a> *display</code></em>);</pre>
+<p>Create a new <a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a> with the specified <em class="parameter"><code>display</code></em>
+</p>
+<div class="refsect3">
+<a name="gst-gl-context-new.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>display</p></td>
+<td class="parameter_description"><p>a <a class="link" href="GstGLDisplay.html" title="GstGLDisplay"><span class="type">GstGLDisplay</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-gl-context-new.returns"></a><h4>Returns</h4>
+<p> a new <a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a></p>
+</div>
+<p class="since">Since: 1.4</p>
</div>
<hr>
<div class="refsect2">
@@ -329,6 +379,47 @@
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guintptr"><span class="type">guintptr</span></a> handle</code></em>,
<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-GstGLAPI.html#GstGLPlatform" title="enum GstGLPlatform"><span class="type">GstGLPlatform</span></a> context_type</code></em>,
<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-GstGLAPI.html#GstGLAPI" title="enum GstGLAPI"><span class="type">GstGLAPI</span></a> available_apis</code></em>);</pre>
+<p>Wraps an existing OpenGL context into a <a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a>.</p>
+<div class="refsect3">
+<a name="gst-gl-context-new-wrapped.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>display</p></td>
+<td class="parameter_description"><p>a <a class="link" href="GstGLDisplay.html" title="GstGLDisplay"><span class="type">GstGLDisplay</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>handle</p></td>
+<td class="parameter_description"><p>the OpenGL context to wrap</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>context_type</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-GstGLAPI.html#GstGLPlatform" title="enum GstGLPlatform"><span class="type">GstGLPlatform</span></a> specifying the type of context in <em class="parameter"><code>handle</code></em>
+</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>available_apis</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-GstGLAPI.html#GstGLAPI" title="enum GstGLAPI"><span class="type">GstGLAPI</span></a> containing the available OpenGL apis in <em class="parameter"><code>handle</code></em>
+</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-gl-context-new-wrapped.returns"></a><h4>Returns</h4>
+<p> a <a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a> wrapping <em class="parameter"><code>handle</code></em>
+</p>
+</div>
+<p class="since">Since: 1.4</p>
</div>
<hr>
<div class="refsect2">
@@ -337,12 +428,71 @@
gst_gl_context_create (<em class="parameter"><code><a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a> *context</code></em>,
<em class="parameter"><code><a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a> *other_context</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);</pre>
+<p>Creates an OpenGL context in the current thread with the specified
+<em class="parameter"><code>other_context</code></em>
+ as a context to share shareable OpenGL objects with. See the
+OpenGL specification for what is shared between contexts.</p>
+<p>If an error occurs, and <em class="parameter"><code>error</code></em>
+ is not <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>, then error will contain details
+of the error and <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> will be returned.</p>
+<p>Should only be called once.</p>
+<div class="refsect3">
+<a name="gst-gl-context-create.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>context</p></td>
+<td class="parameter_description"><p>a <a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a>:</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>other_context</p></td>
+<td class="parameter_description"><p> a <a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a> to share OpenGL objects with. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p> a <a href="/usr/share/gtk-doc/html/glibglib-Error-Reporting.html#GError"><span class="type">GError</span></a>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-gl-context-create.returns"></a><h4>Returns</h4>
+<p> whether the context could successfully be created</p>
+</div>
+<p class="since">Since: 1.4</p>
</div>
<hr>
<div class="refsect2">
<a name="gst-gl-context-destroy"></a><h3>gst_gl_context_destroy ()</h3>
<pre class="programlisting"><span class="returnvalue">void</span>
gst_gl_context_destroy (<em class="parameter"><code><a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a> *context</code></em>);</pre>
+<p>Destroys an OpenGL context.</p>
+<p>Should only be called after <a class="link" href="GstGLContext.html#gst-gl-context-create" title="gst_gl_context_create ()"><code class="function">gst_gl_context_create()</code></a> has been successfully
+called for this context.</p>
+<div class="refsect3">
+<a name="gst-gl-context-destroy.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>context</p></td>
+<td class="parameter_description"><p>a <a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a>:</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<p class="since">Since: 1.6</p>
</div>
<hr>
<div class="refsect2">
@@ -350,6 +500,37 @@
<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
gst_gl_context_activate (<em class="parameter"><code><a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a> *context</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> activate</code></em>);</pre>
+<p>(De)activate the OpenGL context represented by this <em class="parameter"><code>context</code></em>
+.</p>
+<p>In OpenGL terms, calls eglMakeCurrent or similar with this context and the
+currently set window. See <a class="link" href="GstGLContext.html#gst-gl-context-set-window" title="gst_gl_context_set_window ()"><code class="function">gst_gl_context_set_window()</code></a> for details.</p>
+<div class="refsect3">
+<a name="gst-gl-context-activate.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>context</p></td>
+<td class="parameter_description"><p>a <a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>activate</p></td>
+<td class="parameter_description"><p><a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> to activate, <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> to deactivate</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-gl-context-activate.returns"></a><h4>Returns</h4>
+<p> Whether the activation succeeded</p>
+</div>
+<p class="since">Since: 1.4</p>
</div>
<hr>
<div class="refsect2">
@@ -365,6 +546,38 @@
<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gpointer"><span class="returnvalue">gpointer</span></a>
gst_gl_context_get_proc_address (<em class="parameter"><code><a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a> *context</code></em>,
<em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *name</code></em>);</pre>
+<p>Get a function pointer to a specified opengl function, <em class="parameter"><code>name</code></em>
+. If the the
+specific function does not exist, NULL is returned instead.</p>
+<p>Platform specfic functions (names starting 'egl', 'glX', 'wgl', etc) can also
+be retrieved using this method.</p>
+<div class="refsect3">
+<a name="gst-gl-context-get-proc-address.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>context</p></td>
+<td class="parameter_description"><p>a <a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>name</p></td>
+<td class="parameter_description"><p>an opengl function name</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-gl-context-get-proc-address.returns"></a><h4>Returns</h4>
+<p> a function pointer or NULL</p>
+</div>
+<p class="since">Since: 1.4</p>
</div>
<hr>
<div class="refsect2">
@@ -380,6 +593,26 @@
<a name="gst-gl-context-get-window"></a><h3>gst_gl_context_get_window ()</h3>
<pre class="programlisting"><a class="link" href="GstGLWindow.html" title="GstGLWindow"><span class="returnvalue">GstGLWindow</span></a> *
gst_gl_context_get_window (<em class="parameter"><code><a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a> *context</code></em>);</pre>
+<div class="refsect3">
+<a name="gst-gl-context-get-window.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>context</p></td>
+<td class="parameter_description"><p>a <a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-gl-context-get-window.returns"></a><h4>Returns</h4>
+<p> the currently set window</p>
+</div>
+<p class="since">Since: 1.4</p>
</div>
<hr>
<div class="refsect2">
@@ -387,6 +620,39 @@
<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
gst_gl_context_set_window (<em class="parameter"><code><a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a> *context</code></em>,
<em class="parameter"><code><a class="link" href="GstGLWindow.html" title="GstGLWindow"><span class="type">GstGLWindow</span></a> *window</code></em>);</pre>
+<p>Set's the current window on <em class="parameter"><code>context</code></em>
+ to <em class="parameter"><code>window</code></em>
+. The window can only be
+changed before <a class="link" href="GstGLContext.html#gst-gl-context-create" title="gst_gl_context_create ()"><code class="function">gst_gl_context_create()</code></a> has been called and the <em class="parameter"><code>window</code></em>
+ is not
+already running.</p>
+<div class="refsect3">
+<a name="gst-gl-context-set-window.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>context</p></td>
+<td class="parameter_description"><p>a <a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>window</p></td>
+<td class="parameter_description"><p> a <a class="link" href="GstGLWindow.html" title="GstGLWindow"><span class="type">GstGLWindow</span></a>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-gl-context-set-window.returns"></a><h4>Returns</h4>
+<p> Whether the window was successfully updated</p>
+</div>
+<p class="since">Since: 1.4</p>
</div>
<hr>
<div class="refsect2">
@@ -395,36 +661,178 @@
gst_gl_context_thread_add (<em class="parameter"><code><a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a> *context</code></em>,
<em class="parameter"><code><a class="link" href="GstGLContext.html#GstGLContextThreadFunc" title="GstGLContextThreadFunc ()"><span class="type">GstGLContextThreadFunc</span></a> func</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> data</code></em>);</pre>
+<p>Execute <em class="parameter"><code>func</code></em>
+ in the OpenGL thread of <em class="parameter"><code>context</code></em>
+ with <em class="parameter"><code>data</code></em>
+</p>
+<p>MT-safe</p>
+<div class="refsect3">
+<a name="gst-gl-context-thread-add.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>context</p></td>
+<td class="parameter_description"><p>a <a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>func</p></td>
+<td class="parameter_description"><p>a <a class="link" href="GstGLContext.html#GstGLContextThreadFunc" title="GstGLContextThreadFunc ()"><span class="type">GstGLContextThreadFunc</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>data</p></td>
+<td class="parameter_description"><p> user data to call <em class="parameter"><code>func</code></em>
+with. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="This parameter is a 'user_data', for callbacks; many bindings can pass NULL here."><span class="acronym">closure</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 1.4</p>
</div>
<hr>
<div class="refsect2">
<a name="gst-gl-context-get-display"></a><h3>gst_gl_context_get_display ()</h3>
<pre class="programlisting"><a class="link" href="GstGLDisplay.html" title="GstGLDisplay"><span class="returnvalue">GstGLDisplay</span></a> *
gst_gl_context_get_display (<em class="parameter"><code><a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a> *context</code></em>);</pre>
+<div class="refsect3">
+<a name="gst-gl-context-get-display.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>context</p></td>
+<td class="parameter_description"><p>a <a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a>:</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-gl-context-get-display.returns"></a><h4>Returns</h4>
+<p> the <a class="link" href="GstGLDisplay.html" title="GstGLDisplay"><span class="type">GstGLDisplay</span></a> associated with this <em class="parameter"><code>context</code></em>
+</p>
+</div>
+<p class="since">Since: 1.4</p>
</div>
<hr>
<div class="refsect2">
<a name="gst-gl-context-get-gl-api"></a><h3>gst_gl_context_get_gl_api ()</h3>
<pre class="programlisting"><a class="link" href="gst-plugins-bad-libs-GstGLAPI.html#GstGLAPI" title="enum GstGLAPI"><span class="returnvalue">GstGLAPI</span></a>
gst_gl_context_get_gl_api (<em class="parameter"><code><a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a> *context</code></em>);</pre>
+<p>Get the currently enabled OpenGL api.</p>
+<p>The currently available API may be limited by the <a class="link" href="GstGLDisplay.html" title="GstGLDisplay"><span class="type">GstGLDisplay</span></a> in use and/or
+the <a class="link" href="GstGLWindow.html" title="GstGLWindow"><span class="type">GstGLWindow</span></a> chosen.</p>
+<div class="refsect3">
+<a name="gst-gl-context-get-gl-api.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>context</p></td>
+<td class="parameter_description"><p>a <a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-gl-context-get-gl-api.returns"></a><h4>Returns</h4>
+<p> the available OpenGL api</p>
+</div>
+<p class="since">Since: 1.4</p>
</div>
<hr>
<div class="refsect2">
<a name="gst-gl-context-get-gl-context"></a><h3>gst_gl_context_get_gl_context ()</h3>
<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guintptr"><span class="returnvalue">guintptr</span></a>
gst_gl_context_get_gl_context (<em class="parameter"><code><a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a> *context</code></em>);</pre>
+<p>Gets the backing OpenGL context used by <em class="parameter"><code>context</code></em>
+.</p>
+<div class="refsect3">
+<a name="gst-gl-context-get-gl-context.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>context</p></td>
+<td class="parameter_description"><p>a <a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a>:</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-gl-context-get-gl-context.returns"></a><h4>Returns</h4>
+<p> The platform specific backing OpenGL context</p>
+</div>
+<p class="since">Since: 1.4</p>
</div>
<hr>
<div class="refsect2">
<a name="gst-gl-context-get-gl-platform"></a><h3>gst_gl_context_get_gl_platform ()</h3>
<pre class="programlisting"><a class="link" href="gst-plugins-bad-libs-GstGLAPI.html#GstGLPlatform" title="enum GstGLPlatform"><span class="returnvalue">GstGLPlatform</span></a>
gst_gl_context_get_gl_platform (<em class="parameter"><code><a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a> *context</code></em>);</pre>
+<p>Gets the OpenGL platform that used by <em class="parameter"><code>context</code></em>
+.</p>
+<div class="refsect3">
+<a name="gst-gl-context-get-gl-platform.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>context</p></td>
+<td class="parameter_description"><p>a <a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a>:</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-gl-context-get-gl-platform.returns"></a><h4>Returns</h4>
+<p> The platform specific backing OpenGL context</p>
+</div>
+<p class="since">Since: 1.4</p>
</div>
<hr>
<div class="refsect2">
<a name="gst-gl-context-get-current-gl-context"></a><h3>gst_gl_context_get_current_gl_context ()</h3>
<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guintptr"><span class="returnvalue">guintptr</span></a>
gst_gl_context_get_current_gl_context (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-GstGLAPI.html#GstGLPlatform" title="enum GstGLPlatform"><span class="type">GstGLPlatform</span></a> context_type</code></em>);</pre>
+<div class="refsect3">
+<a name="gst-gl-context-get-current-gl-context.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>context_type</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-GstGLAPI.html#GstGLPlatform" title="enum GstGLPlatform"><span class="type">GstGLPlatform</span></a> specifying the type of context to retrieve</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-gl-context-get-current-gl-context.returns"></a><h4>Returns</h4>
+<p> The OpenGL context handle current in the calling thread or <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a></p>
+</div>
+<p class="since">Since: 1.6</p>
</div>
<hr>
<div class="refsect2">
@@ -433,12 +841,71 @@
gst_gl_context_get_current_gl_api (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-GstGLAPI.html#GstGLPlatform" title="enum GstGLPlatform"><span class="type">GstGLPlatform</span></a> platform</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="type">guint</span></a> *major</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="type">guint</span></a> *minor</code></em>);</pre>
+<p>If an error occurs, <em class="parameter"><code>major</code></em>
+ and <em class="parameter"><code>minor</code></em>
+ aren't modified and <a class="link" href="gst-plugins-bad-libs-GstGLAPI.html#GST-GL-API-NONE:CAPS"><code class="literal">GST_GL_API_NONE</code></a> is
+returned.</p>
+<div class="refsect3">
+<a name="gst-gl-context-get-current-gl-api.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>platform</p></td>
+<td class="parameter_description"><p>the <a class="link" href="gst-plugins-bad-libs-GstGLAPI.html#GstGLPlatform" title="enum GstGLPlatform"><span class="type">GstGLPlatform</span></a> to retrieve the API for</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>major</p></td>
+<td class="parameter_description"><p> (allow-none): the major version. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>minor</p></td>
+<td class="parameter_description"><p> (allow-none): the minor version. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-gl-context-get-current-gl-api.returns"></a><h4>Returns</h4>
+<p> The version supported by the OpenGL context current in the calling
+thread or <a class="link" href="gst-plugins-bad-libs-GstGLAPI.html#GST-GL-API-NONE:CAPS"><code class="literal">GST_GL_API_NONE</code></a></p>
+</div>
+<p class="since">Since: 1.6</p>
</div>
<hr>
<div class="refsect2">
<a name="gst-gl-context-get-thread"></a><h3>gst_gl_context_get_thread ()</h3>
<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Threads.html#GThread"><span class="returnvalue">GThread</span></a> *
gst_gl_context_get_thread (<em class="parameter"><code><a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a> *context</code></em>);</pre>
+<div class="refsect3">
+<a name="gst-gl-context-get-thread.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>context</p></td>
+<td class="parameter_description"><p>a <a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-gl-context-get-thread.returns"></a><h4>Returns</h4>
+<p> The <a href="/usr/share/gtk-doc/html/glibglib-Threads.html#GThread"><span class="type">GThread</span></a>, <em class="parameter"><code>context</code></em>
+is current in or NULL. </p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
+</div>
+<p class="since">Since: 1.6</p>
</div>
<hr>
<div class="refsect2">
@@ -446,12 +913,63 @@
<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
gst_gl_context_can_share (<em class="parameter"><code><a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a> *context</code></em>,
<em class="parameter"><code><a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a> *other_context</code></em>);</pre>
+<p>Note: This will always fail for two wrapped <a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a>'s</p>
+<div class="refsect3">
+<a name="gst-gl-context-can-share.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>context</p></td>
+<td class="parameter_description"><p>a <a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>other_context</p></td>
+<td class="parameter_description"><p>another <a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-gl-context-can-share.returns"></a><h4>Returns</h4>
+<p> whether <em class="parameter"><code>context</code></em>
+and <em class="parameter"><code>other_context</code></em>
+are able to share OpenGL
+resources.</p>
+</div>
+<p class="since">Since: 1.6</p>
</div>
<hr>
<div class="refsect2">
<a name="gst-gl-context-is-shared"></a><h3>gst_gl_context_is_shared ()</h3>
<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
gst_gl_context_is_shared (<em class="parameter"><code><a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a> *context</code></em>);</pre>
+<div class="refsect3">
+<a name="gst-gl-context-is-shared.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>context</p></td>
+<td class="parameter_description"><p>a <a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-gl-context-is-shared.returns"></a><h4>Returns</h4>
+<p> Whether the <a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a> has been shared with another <a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a></p>
+</div>
+<p class="since">Since: 1.8</p>
</div>
<hr>
<div class="refsect2">
@@ -459,6 +977,32 @@
<pre class="programlisting"><span class="returnvalue">void</span>
gst_gl_context_set_shared_with (<em class="parameter"><code><a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a> *context</code></em>,
<em class="parameter"><code><a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a> *share</code></em>);</pre>
+<p>Will internally set <em class="parameter"><code>context</code></em>
+ as shared with <em class="parameter"><code>share</code></em>
+</p>
+<div class="refsect3">
+<a name="gst-gl-context-set-shared-with.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>context</p></td>
+<td class="parameter_description"><p>a wrapped <a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>share</p></td>
+<td class="parameter_description"><p>another <a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 1.8</p>
</div>
<hr>
<div class="refsect2">
@@ -466,6 +1010,37 @@
<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
gst_gl_context_check_feature (<em class="parameter"><code><a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a> *context</code></em>,
<em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *feature</code></em>);</pre>
+<p>Some features require that the context be created before it is possible to
+determine their existence and so will fail if that is not the case.</p>
+<div class="refsect3">
+<a name="gst-gl-context-check-feature.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>context</p></td>
+<td class="parameter_description"><p>a <a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>feature</p></td>
+<td class="parameter_description"><p>a platform specific feature</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-gl-context-check-feature.returns"></a><h4>Returns</h4>
+<p> Whether <em class="parameter"><code>feature</code></em>
+is supported by <em class="parameter"><code>context</code></em>
+</p>
+</div>
+<p class="since">Since: 1.4</p>
</div>
<hr>
<div class="refsect2">
@@ -475,6 +1050,44 @@
<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-GstGLAPI.html#GstGLAPI" title="enum GstGLAPI"><span class="type">GstGLAPI</span></a> api</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint"><span class="type">gint</span></a> maj</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint"><span class="type">gint</span></a> min</code></em>);</pre>
+<div class="refsect3">
+<a name="gst-gl-context-check-gl-version.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>context</p></td>
+<td class="parameter_description"><p>a <a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>api</p></td>
+<td class="parameter_description"><p>api type required</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>maj</p></td>
+<td class="parameter_description"><p>major version required</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>min</p></td>
+<td class="parameter_description"><p>minor version required</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-gl-context-check-gl-version.returns"></a><h4>Returns</h4>
+<p> whether OpenGL context implements the required api and specified
+version.</p>
+</div>
+<p class="since">Since: 1.4</p>
</div>
<hr>
<div class="refsect2">
@@ -483,6 +1096,39 @@
gst_gl_context_get_gl_version (<em class="parameter"><code><a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a> *context</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint"><span class="type">gint</span></a> *maj</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint"><span class="type">gint</span></a> *min</code></em>);</pre>
+<p>Returns the OpenGL version implemented by <em class="parameter"><code>context</code></em>
+. See
+<a class="link" href="GstGLContext.html#gst-gl-context-get-gl-api" title="gst_gl_context_get_gl_api ()"><code class="function">gst_gl_context_get_gl_api()</code></a> for retreiving the OpenGL api implemented by
+<em class="parameter"><code>context</code></em>
+.</p>
+<div class="refsect3">
+<a name="gst-gl-context-get-gl-version.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>context</p></td>
+<td class="parameter_description"><p>a <a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>maj</p></td>
+<td class="parameter_description"><p> resulting major version. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>min</p></td>
+<td class="parameter_description"><p> resulting minor version. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 1.4</p>
</div>
<hr>
<div class="refsect2">
@@ -490,12 +1136,38 @@
<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
gst_gl_context_fill_info (<em class="parameter"><code><a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a> *context</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);</pre>
+<p>Fills <em class="parameter"><code>context</code></em>
+'s info (version, extensions, vtable, etc) from the GL
+context in the current thread. Typically used with wrapped contexts to
+allow wrapped contexts to be used as regular <a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a>'s.</p>
+<div class="refsect3">
+<a name="gst-gl-context-fill-info.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>context</p></td>
+<td class="parameter_description"><p>a <a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a>:</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<p class="since">Since: 1.6</p>
</div>
<hr>
<div class="refsect2">
<a name="gst-gl-context-get-current"></a><h3>gst_gl_context_get_current ()</h3>
<pre class="programlisting"><a class="link" href="GstGLContext.html" title="GstGLContext"><span class="returnvalue">GstGLContext</span></a> *
gst_gl_context_get_current (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<p>See also <a class="link" href="GstGLContext.html#gst-gl-context-activate" title="gst_gl_context_activate ()"><code class="function">gst_gl_context_activate()</code></a>.</p>
+<div class="refsect3">
+<a name="gst-gl-context-get-current.returns"></a><h4>Returns</h4>
+<p> the <a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a> active in the current thread or <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a></p>
+</div>
+<p class="since">Since: 1.6</p>
</div>
</div>
<div class="refsect1">
@@ -555,8 +1227,13 @@
<div class="refsect2">
<a name="GstGLContext-struct"></a><h3>GstGLContext</h3>
<pre class="programlisting">typedef struct _GstGLContext GstGLContext;</pre>
+<p>Opaque <a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a> object</p>
</div>
</div>
+<div class="refsect1">
+<a name="GstGLContext.see-also"></a><h2>See Also</h2>
+<p><a class="link" href="GstGLDisplay.html" title="GstGLDisplay"><span class="type">GstGLDisplay</span></a>, <a class="link" href="GstGLWindow.html" title="GstGLWindow"><span class="type">GstGLWindow</span></a></p>
+</div>
</div>
<div class="footer">
<hr>Generated by GTK-Doc V1.25</div>
diff --git a/docs/libs/html/GstGLDisplay.html b/docs/libs/html/GstGLDisplay.html
index c567285..77eb76b 100644
--- a/docs/libs/html/GstGLDisplay.html
+++ b/docs/libs/html/GstGLDisplay.html
@@ -29,7 +29,7 @@
<div class="refnamediv"><table width="100%"><tr>
<td valign="top">
<h2><span class="refentrytitle"><a name="GstGLDisplay.top_of_page"></a>GstGLDisplay</span></h2>
-<p>GstGLDisplay</p>
+<p>GstGLDisplay — window system display connection abstraction</p>
</td>
<td class="gallery_image" valign="top" align="right"></td>
</tr></table></div>
@@ -173,6 +173,26 @@
</div>
<div class="refsect1">
<a name="GstGLDisplay.description"></a><h2>Description</h2>
+<p><a class="link" href="GstGLDisplay.html" title="GstGLDisplay"><span class="type">GstGLDisplay</span></a> represents a connection to the underlying windowing system.
+Elements are required to make use of <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstContext.html#GstContext-struct"><span class="type">GstContext</span></a> to share and propogate
+a <a class="link" href="GstGLDisplay.html" title="GstGLDisplay"><span class="type">GstGLDisplay</span></a>.</p>
+<p>There are a number of environment variables that influence the choice of
+platform and window system specific functionality.</p>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
+<li class="listitem"><p>GST_GL_WINDOW influences the window system to use. Common values are
+'x11', 'wayland', 'win32' or 'cocoa'.</p></li>
+<li class="listitem"><p>GST_GL_PLATFORM influences the OpenGL platform to use. Common values are
+'egl', 'glx', 'wgl' or 'cgl'.</p></li>
+<li class="listitem"><p>GST_GL_API influences the OpenGL API requested by the OpenGL platform.
+Common values are 'opengl' and 'gles2'.</p></li>
+</ul></div>
+<div class="note">Certain window systems require a special function to be called to
+initialize threading support. As this GStreamer GL library does not preclude
+concurrent access to the windowing system, it is strongly advised that
+applications ensure that threading support has been initialized before any
+other toolkit/library functionality is accessed. Failure to do so could
+result in sudden application abortion during execution. The most notably
+example of such a function is X11's <code class="function">XInitThreads()</code>.</div>
</div>
<div class="refsect1">
<a name="GstGLDisplay.functions_details"></a><h2>Functions</h2>
@@ -180,12 +200,39 @@
<a name="gst-gl-display-new"></a><h3>gst_gl_display_new ()</h3>
<pre class="programlisting"><a class="link" href="GstGLDisplay.html" title="GstGLDisplay"><span class="returnvalue">GstGLDisplay</span></a> *
gst_gl_display_new (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<div class="refsect3">
+<a name="gst-gl-display-new.returns"></a><h4>Returns</h4>
+<p> a new <a class="link" href="GstGLDisplay.html" title="GstGLDisplay"><span class="type">GstGLDisplay</span></a>. </p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
+</div>
+<p class="since">Since: 1.4</p>
</div>
<hr>
<div class="refsect2">
<a name="gst-gl-display-get-handle-type"></a><h3>gst_gl_display_get_handle_type ()</h3>
<pre class="programlisting"><a class="link" href="GstGLDisplay.html#GstGLDisplayType" title="enum GstGLDisplayType"><span class="returnvalue">GstGLDisplayType</span></a>
gst_gl_display_get_handle_type (<em class="parameter"><code><a class="link" href="GstGLDisplay.html" title="GstGLDisplay"><span class="type">GstGLDisplay</span></a> *display</code></em>);</pre>
+<div class="refsect3">
+<a name="gst-gl-display-get-handle-type.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>display</p></td>
+<td class="parameter_description"><p>a <a class="link" href="GstGLDisplay.html" title="GstGLDisplay"><span class="type">GstGLDisplay</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-gl-display-get-handle-type.returns"></a><h4>Returns</h4>
+<p> the <a class="link" href="GstGLDisplay.html#GstGLDisplayType" title="enum GstGLDisplayType"><span class="type">GstGLDisplayType</span></a> of <em class="parameter"><code>display</code></em>
+</p>
+</div>
+<p class="since">Since: 1.4</p>
</div>
<hr>
<div class="refsect2">
@@ -193,12 +240,60 @@
<pre class="programlisting"><span class="returnvalue">void</span>
gst_gl_display_filter_gl_api (<em class="parameter"><code><a class="link" href="GstGLDisplay.html" title="GstGLDisplay"><span class="type">GstGLDisplay</span></a> *display</code></em>,
<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-GstGLAPI.html#GstGLAPI" title="enum GstGLAPI"><span class="type">GstGLAPI</span></a> gl_api</code></em>);</pre>
+<p>limit the use of OpenGL to the requested <em class="parameter"><code>gl_api</code></em>
+. This is intended to allow
+application and elements to request a specific set of OpenGL API's based on
+what they support. See <a class="link" href="GstGLContext.html#gst-gl-context-get-gl-api" title="gst_gl_context_get_gl_api ()"><code class="function">gst_gl_context_get_gl_api()</code></a> for the retreiving the
+API supported by a <a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a>.</p>
+<div class="refsect3">
+<a name="gst-gl-display-filter-gl-api.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>display</p></td>
+<td class="parameter_description"><p>a <a class="link" href="GstGLDisplay.html" title="GstGLDisplay"><span class="type">GstGLDisplay</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>gl_api</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-GstGLAPI.html#GstGLAPI" title="enum GstGLAPI"><span class="type">GstGLAPI</span></a> to filter with</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
</div>
<hr>
<div class="refsect2">
<a name="gst-gl-display-get-gl-api"></a><h3>gst_gl_display_get_gl_api ()</h3>
<pre class="programlisting"><a class="link" href="gst-plugins-bad-libs-GstGLAPI.html#GstGLAPI" title="enum GstGLAPI"><span class="returnvalue">GstGLAPI</span></a>
gst_gl_display_get_gl_api (<em class="parameter"><code><a class="link" href="GstGLDisplay.html" title="GstGLDisplay"><span class="type">GstGLDisplay</span></a> *display</code></em>);</pre>
+<p>see <a class="link" href="GstGLDisplay.html#gst-gl-display-filter-gl-api" title="gst_gl_display_filter_gl_api ()"><code class="function">gst_gl_display_filter_gl_api()</code></a> for what the returned value represents</p>
+<div class="refsect3">
+<a name="gst-gl-display-get-gl-api.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>display</p></td>
+<td class="parameter_description"><p>a <a class="link" href="GstGLDisplay.html" title="GstGLDisplay"><span class="type">GstGLDisplay</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-gl-display-get-gl-api.returns"></a><h4>Returns</h4>
+<p> the <a class="link" href="gst-plugins-bad-libs-GstGLAPI.html#GstGLAPI" title="enum GstGLAPI"><span class="type">GstGLAPI</span></a> configured for <em class="parameter"><code>display</code></em>
+</p>
+</div>
</div>
<hr>
<div class="refsect2">
@@ -206,6 +301,37 @@
<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
gst_gl_display_add_context (<em class="parameter"><code><a class="link" href="GstGLDisplay.html" title="GstGLDisplay"><span class="type">GstGLDisplay</span></a> *display</code></em>,
<em class="parameter"><code><a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a> *context</code></em>);</pre>
+<div class="refsect3">
+<a name="gst-gl-display-add-context.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>display</p></td>
+<td class="parameter_description"><p>a <a class="link" href="GstGLDisplay.html" title="GstGLDisplay"><span class="type">GstGLDisplay</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>context</p></td>
+<td class="parameter_description"><p> a <a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-gl-display-add-context.returns"></a><h4>Returns</h4>
+<p> whether <em class="parameter"><code>context</code></em>
+was successfully added. <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> may be returned
+if there already exists another context for <em class="parameter"><code>context</code></em>
+'s active thread.</p>
+<p>Must be called with the object lock held.</p>
+</div>
+<p class="since">Since: 1.6</p>
</div>
<hr>
<div class="refsect2">
@@ -214,6 +340,36 @@
gst_gl_display_get_gl_context_for_thread
(<em class="parameter"><code><a class="link" href="GstGLDisplay.html" title="GstGLDisplay"><span class="type">GstGLDisplay</span></a> *display</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Threads.html#GThread"><span class="type">GThread</span></a> *thread</code></em>);</pre>
+<div class="refsect3">
+<a name="gst-gl-display-get-gl-context-for-thread.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>display</p></td>
+<td class="parameter_description"><p>a <a class="link" href="GstGLDisplay.html" title="GstGLDisplay"><span class="type">GstGLDisplay</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>thread</p></td>
+<td class="parameter_description"><p>a <a href="/usr/share/gtk-doc/html/glibglib-Threads.html#GThread"><span class="type">GThread</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-gl-display-get-gl-context-for-thread.returns"></a><h4>Returns</h4>
+<p> the <a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a> current on <em class="parameter"><code>thread</code></em>
+or <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a></p>
+<p>Must be called with the object lock held. </p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
+</div>
+<p class="since">Since: 1.6</p>
</div>
<hr>
<div class="refsect2">
@@ -229,6 +385,44 @@
<em class="parameter"><code><a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a> *other_context</code></em>,
<em class="parameter"><code><a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a> **p_context</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);</pre>
+<p>It requires the display's object lock to be held.</p>
+<div class="refsect3">
+<a name="gst-gl-display-create-context.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>display</p></td>
+<td class="parameter_description"><p>a <a class="link" href="GstGLDisplay.html" title="GstGLDisplay"><span class="type">GstGLDisplay</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>other_context</p></td>
+<td class="parameter_description"><p>other <a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a> to share resources with.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>p_context</p></td>
+<td class="parameter_description"><p>resulting <a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>resulting <a href="/usr/share/gtk-doc/html/glibglib-Error-Reporting.html#GError"><span class="type">GError</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-gl-display-create-context.returns"></a><h4>Returns</h4>
+<p> whether a new context could be created.</p>
+</div>
+<p class="since">Since: 1.6</p>
</div>
<hr>
<div class="refsect2">
@@ -236,6 +430,35 @@
<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
gst_context_get_gl_display (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/gstreamer-1.0GstContext.html#GstContext-struct"><span class="type">GstContext</span></a> *context</code></em>,
<em class="parameter"><code><a class="link" href="GstGLDisplay.html" title="GstGLDisplay"><span class="type">GstGLDisplay</span></a> **display</code></em>);</pre>
+<div class="refsect3">
+<a name="gst-context-get-gl-display.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>context</p></td>
+<td class="parameter_description"><p>a <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstContext.html#GstContext-struct"><span class="type">GstContext</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>display</p></td>
+<td class="parameter_description"><p>resulting <a class="link" href="GstGLDisplay.html" title="GstGLDisplay"><span class="type">GstGLDisplay</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-context-get-gl-display.returns"></a><h4>Returns</h4>
+<p> Whether <em class="parameter"><code>display</code></em>
+was in <em class="parameter"><code>context</code></em>
+</p>
+</div>
+<p class="since">Since: 1.4</p>
</div>
<hr>
<div class="refsect2">
@@ -243,6 +466,32 @@
<pre class="programlisting"><span class="returnvalue">void</span>
gst_context_set_gl_display (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/gstreamer-1.0GstContext.html#GstContext-struct"><span class="type">GstContext</span></a> *context</code></em>,
<em class="parameter"><code><a class="link" href="GstGLDisplay.html" title="GstGLDisplay"><span class="type">GstGLDisplay</span></a> *display</code></em>);</pre>
+<p>Sets <em class="parameter"><code>display</code></em>
+ on <em class="parameter"><code>context</code></em>
+</p>
+<div class="refsect3">
+<a name="gst-context-set-gl-display.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>context</p></td>
+<td class="parameter_description"><p>a <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstContext.html#GstContext-struct"><span class="type">GstContext</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>display</p></td>
+<td class="parameter_description"><p>resulting <a class="link" href="GstGLDisplay.html" title="GstGLDisplay"><span class="type">GstGLDisplay</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 1.4</p>
</div>
</div>
<div class="refsect1">
@@ -266,43 +515,59 @@
<tbody>
<tr>
<td class="enum_member_name"><p><a name="GST-GL-DISPLAY-TYPE-NONE:CAPS"></a>GST_GL_DISPLAY_TYPE_NONE</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>no display type</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-GL-DISPLAY-TYPE-X11:CAPS"></a>GST_GL_DISPLAY_TYPE_X11</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>X11 display</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-GL-DISPLAY-TYPE-WAYLAND:CAPS"></a>GST_GL_DISPLAY_TYPE_WAYLAND</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>Wayland display</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-GL-DISPLAY-TYPE-COCOA:CAPS"></a>GST_GL_DISPLAY_TYPE_COCOA</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>Cocoa display</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-GL-DISPLAY-TYPE-WIN32:CAPS"></a>GST_GL_DISPLAY_TYPE_WIN32</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>Win32 display</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-GL-DISPLAY-TYPE-DISPMANX:CAPS"></a>GST_GL_DISPLAY_TYPE_DISPMANX</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>Dispmanx display</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-GL-DISPLAY-TYPE-EGL:CAPS"></a>GST_GL_DISPLAY_TYPE_EGL</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>EGL display</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-GL-DISPLAY-TYPE-ANY:CAPS"></a>GST_GL_DISPLAY_TYPE_ANY</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>any display type</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
</tbody>
</table></div>
@@ -312,6 +577,8 @@
<div class="refsect2">
<a name="GstGLDisplay-struct"></a><h3>GstGLDisplay</h3>
<pre class="programlisting">typedef struct _GstGLDisplay GstGLDisplay;</pre>
+<p>The contents of a <a class="link" href="GstGLDisplay.html" title="GstGLDisplay"><span class="type">GstGLDisplay</span></a> are private and should only be accessed
+through the provided API</p>
</div>
</div>
<div class="refsect1">
@@ -319,12 +586,51 @@
<div class="refsect2">
<a name="GstGLDisplay-create-context"></a><h3>The <code class="literal">“create-context”</code> signal</h3>
<pre class="programlisting"><a class="link" href="GstGLContext.html" title="GstGLContext"><span class="returnvalue">GstGLContext</span></a>*
-user_function (<a class="link" href="GstGLDisplay.html" title="GstGLDisplay"><span class="type">GstGLDisplay</span></a> *gstgldisplay,
- <a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a> *arg1,
+user_function (<a class="link" href="GstGLDisplay.html" title="GstGLDisplay"><span class="type">GstGLDisplay</span></a> *object,
+ <a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a> *context,
<a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data)</pre>
+<p>Overrides the <em class="parameter"><code>GstGLContext</code></em>
+ creation mechanism.
+It can be called in any thread and it is emitted with
+display's object lock held.</p>
+<div class="refsect3">
+<a name="GstGLDisplay-create-context.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>object</p></td>
+<td class="parameter_description"><p>the <a class="link" href="GstGLDisplay.html" title="GstGLDisplay"><span class="type">GstGLDisplay</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>context</p></td>
+<td class="parameter_description"><p>other context to share resources with.</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 class="refsect3">
+<a name="GstGLDisplay-create-context.returns"></a><h4>Returns</h4>
+<p> the new context.</p>
+</div>
<p>Flags: <a href="/usr/share/gtk-doc/html/gobjectgobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></p>
</div>
</div>
+<div class="refsect1">
+<a name="GstGLDisplay.see-also"></a><h2>See Also</h2>
+<p><a href="/usr/share/gtk-doc/html/gstreamer-1.0GstContext.html#GstContext-struct"><span class="type">GstContext</span></a>, <a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a>, <a class="link" href="GstGLWindow.html" title="GstGLWindow"><span class="type">GstGLWindow</span></a></p>
+</div>
</div>
<div class="footer">
<hr>Generated by GTK-Doc V1.25</div>
diff --git a/docs/libs/html/GstGLFilter.html b/docs/libs/html/GstGLFilter.html
index 8d88e45..b36f8bd 100644
--- a/docs/libs/html/GstGLFilter.html
+++ b/docs/libs/html/GstGLFilter.html
@@ -42,15 +42,7 @@
<tbody>
<tr>
<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="GstGLFilter.html#gst-gl-filter-draw-texture" title="gst_gl_filter_draw_texture ()">gst_gl_filter_draw_texture</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
+<a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
</td>
<td class="function_name">
<a class="link" href="GstGLFilter.html#gst-gl-filter-render-to-target" title="gst_gl_filter_render_to_target ()">gst_gl_filter_render_to_target</a> <span class="c_punctuation">()</span>
@@ -111,23 +103,63 @@
<div class="refsect1">
<a name="GstGLFilter.functions_details"></a><h2>Functions</h2>
<div class="refsect2">
-<a name="gst-gl-filter-draw-texture"></a><h3>gst_gl_filter_draw_texture ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-gst_gl_filter_draw_texture (<em class="parameter"><code><a class="link" href="GstGLFilter.html" title="GstGLFilter"><span class="type">GstGLFilter</span></a> *filter</code></em>,
- <em class="parameter"><code><span class="type">GLuint</span> texture</code></em>,
- <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="type">guint</span></a> width</code></em>,
- <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="type">guint</span></a> height</code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
<a name="gst-gl-filter-render-to-target"></a><h3>gst_gl_filter_render_to_target ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
+<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
gst_gl_filter_render_to_target (<em class="parameter"><code><a class="link" href="GstGLFilter.html" title="GstGLFilter"><span class="type">GstGLFilter</span></a> *filter</code></em>,
- <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> resize</code></em>,
- <em class="parameter"><code><span class="type">GLuint</span> input</code></em>,
- <em class="parameter"><code><span class="type">GLuint</span> target</code></em>,
- <em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#GLCB:CAPS" title="GLCB ()"><span class="type">GLCB</span></a> func</code></em>,
+ <em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#GstGLMemory" title="GstGLMemory"><span class="type">GstGLMemory</span></a> *input</code></em>,
+ <em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#GstGLMemory" title="GstGLMemory"><span class="type">GstGLMemory</span></a> *output</code></em>,
+ <em class="parameter"><code><span class="type">GstGLFilterRenderFunc</span> func</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> data</code></em>);</pre>
+<p>Transforms <em class="parameter"><code>input</code></em>
+ into <em class="parameter"><code>output</code></em>
+ using <em class="parameter"><code>func</code></em>
+ on through FBO.</p>
+<div class="refsect3">
+<a name="gst-gl-filter-render-to-target.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>filter</p></td>
+<td class="parameter_description"><p>a <a class="link" href="GstGLFilter.html" title="GstGLFilter"><span class="type">GstGLFilter</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>input</p></td>
+<td class="parameter_description"><p>the input texture</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>output</p></td>
+<td class="parameter_description"><p>the output texture</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>func</p></td>
+<td class="parameter_description"><p>the function to transform <em class="parameter"><code>input</code></em>
+into <em class="parameter"><code>output</code></em>
+. called with <em class="parameter"><code>data</code></em>
+</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>data</p></td>
+<td class="parameter_description"><p>the data associated with <em class="parameter"><code>func</code></em>
+</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-gl-filter-render-to-target.returns"></a><h4>Returns</h4>
+<p> the return value of <em class="parameter"><code>func</code></em>
+</p>
+</div>
</div>
<hr>
<div class="refsect2">
@@ -135,10 +167,46 @@
<pre class="programlisting"><span class="returnvalue">void</span>
gst_gl_filter_render_to_target_with_shader
(<em class="parameter"><code><a class="link" href="GstGLFilter.html" title="GstGLFilter"><span class="type">GstGLFilter</span></a> *filter</code></em>,
- <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> resize</code></em>,
- <em class="parameter"><code><span class="type">GLuint</span> input</code></em>,
- <em class="parameter"><code><span class="type">GLuint</span> target</code></em>,
+ <em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#GstGLMemory" title="GstGLMemory"><span class="type">GstGLMemory</span></a> *input</code></em>,
+ <em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#GstGLMemory" title="GstGLMemory"><span class="type">GstGLMemory</span></a> *output</code></em>,
<em class="parameter"><code><a class="link" href="GstGLShader.html" title="GstGLShader"><span class="type">GstGLShader</span></a> *shader</code></em>);</pre>
+<p>Transforms <em class="parameter"><code>input</code></em>
+ into <em class="parameter"><code>output</code></em>
+ using <em class="parameter"><code>shader</code></em>
+ with a FBO.</p>
+<p>See also: <a class="link" href="GstGLFilter.html#gst-gl-filter-render-to-target" title="gst_gl_filter_render_to_target ()"><code class="function">gst_gl_filter_render_to_target()</code></a></p>
+<div class="refsect3">
+<a name="gst-gl-filter-render-to-target-with-shader.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>filter</p></td>
+<td class="parameter_description"><p>a <a class="link" href="GstGLFilter.html" title="GstGLFilter"><span class="type">GstGLFilter</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>input</p></td>
+<td class="parameter_description"><p>the input texture</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>output</p></td>
+<td class="parameter_description"><p>the output texture</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>shader</p></td>
+<td class="parameter_description"><p>the shader to use.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
</div>
<hr>
<div class="refsect2">
@@ -147,6 +215,39 @@
gst_gl_filter_filter_texture (<em class="parameter"><code><a class="link" href="GstGLFilter.html" title="GstGLFilter"><span class="type">GstGLFilter</span></a> *filter</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/gstreamer-1.0GstBuffer.html#GstBuffer-struct"><span class="type">GstBuffer</span></a> *inbuf</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/gstreamer-1.0GstBuffer.html#GstBuffer-struct"><span class="type">GstBuffer</span></a> *outbuf</code></em>);</pre>
+<p>Perform automatic upload if needed, call filter_texture vfunc and then an
+automatic download if needed.</p>
+<div class="refsect3">
+<a name="gst-gl-filter-filter-texture.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>filter</p></td>
+<td class="parameter_description"><p>a <a class="link" href="GstGLFilter.html" title="GstGLFilter"><span class="type">GstGLFilter</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>inbuf</p></td>
+<td class="parameter_description"><p>an input buffer</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>outbuf</p></td>
+<td class="parameter_description"><p>an output buffer</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-gl-filter-filter-texture.returns"></a><h4>Returns</h4>
+<p> whether the transformation succeeded</p>
+</div>
</div>
</div>
<div class="refsect1">
@@ -154,6 +255,20 @@
<div class="refsect2">
<a name="GstGLFilter-struct"></a><h3>GstGLFilter</h3>
<pre class="programlisting">typedef struct _GstGLFilter GstGLFilter;</pre>
+<p><a class="link" href="GstGLFilter.html" title="GstGLFilter"><span class="type">GstGLFilter</span></a> is a base class that provides the logic of getting the GL context
+from downstream and automatic upload/download for non-<a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#GstGLMemory" title="GstGLMemory"><span class="type">GstGLMemory</span></a>
+<a href="/usr/share/gtk-doc/html/gstreamer-1.0GstBuffer.html#GstBuffer-struct"><span class="type">GstBuffer</span></a>s.</p>
+<div class="refsect3">
+<a name="GstGLFilter.members"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="300px" class="struct_members_name">
+<col class="struct_members_description">
+<col width="200px" class="struct_members_annotations">
+</colgroup>
+<tbody></tbody>
+</table></div>
+</div>
</div>
<hr>
<div class="refsect2">
@@ -163,7 +278,7 @@
gboolean (*set_caps) (GstGLFilter* filter, GstCaps* incaps, GstCaps* outcaps);
gboolean (*filter) (GstGLFilter *filter, GstBuffer *inbuf, GstBuffer *outbuf);
- gboolean (*filter_texture) (GstGLFilter *filter, guint in_tex, guint out_tex);
+ gboolean (*filter_texture) (GstGLFilter *filter, GstGLMemory *in_tex, GstGLMemory *out_tex);
gboolean (*init_fbo) (GstGLFilter *filter);
GstCaps *(*transform_internal_caps) (GstGLFilter *filter,
@@ -174,6 +289,63 @@
void (*display_reset_cb) (GstGLFilter *filter);
} GstGLFilterClass;
</pre>
+<div class="refsect3">
+<a name="GstGLFilterClass.members"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="300px" class="struct_members_name">
+<col class="struct_members_description">
+<col width="200px" class="struct_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="struct_member_name"><p><em class="structfield"><code><a name="GstGLFilterClass.set-caps"></a>set_caps</code></em> ()</p></td>
+<td class="struct_member_description"><p>mirror from <a href="/usr/share/gtk-doc/html/gstreamer-libs-1.0GstBaseTransform.html#GstBaseTransform-struct"><span class="type">GstBaseTransform</span></a></p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><em class="structfield"><code><a name="GstGLFilterClass.filter"></a>filter</code></em> ()</p></td>
+<td class="struct_member_description"><p>perform operations on the input and output buffers. In general,
+you should avoid using this method if at all possible. One valid
+use-case for using this is keeping previous buffers for future calculations.
+Note: If <em class="parameter"><code>filter</code></em>
+exists, then <em class="parameter"><code>filter_texture</code></em>
+is not run</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><em class="structfield"><code><a name="GstGLFilterClass.filter-texture"></a>filter_texture</code></em> ()</p></td>
+<td class="struct_member_description"><p>given <em class="parameter"><code>in_tex</code></em>
+, transform it into <em class="parameter"><code>out_tex</code></em>
+. Not used
+if <em class="parameter"><code>filter</code></em>
+exists</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><em class="structfield"><code><a name="GstGLFilterClass.init-fbo"></a>init_fbo</code></em> ()</p></td>
+<td class="struct_member_description"><p>perform initialization when the Framebuffer object is created</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><em class="structfield"><code><a name="GstGLFilterClass.transform-internal-caps"></a>transform_internal_caps</code></em> ()</p></td>
+<td class="struct_member_description"><p>Perform sub-class specific modifications of the
+caps to be processed between upload on input and before download for output.</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><em class="structfield"><code><a name="GstGLFilterClass.display-init-cb"></a>display_init_cb</code></em> ()</p></td>
+<td class="struct_member_description"><p>execute arbitrary gl code on start</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><em class="structfield"><code><a name="GstGLFilterClass.display-reset-cb"></a>display_reset_cb</code></em> ()</p></td>
+<td class="struct_member_description"><p>execute arbitrary gl code at stop</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
</div>
</div>
</div>
diff --git a/docs/libs/html/GstGLFramebuffer.html b/docs/libs/html/GstGLFramebuffer.html
index 3cdd4be..f0c7a42 100644
--- a/docs/libs/html/GstGLFramebuffer.html
+++ b/docs/libs/html/GstGLFramebuffer.html
@@ -39,40 +39,14 @@
<col width="150px" class="functions_return">
<col class="functions_name">
</colgroup>
-<tbody>
-<tr>
+<tbody><tr>
<td class="function_type">
<a class="link" href="GstGLFramebuffer.html" title="GstGLFramebuffer"><span class="returnvalue">GstGLFramebuffer</span></a> *
</td>
<td class="function_name">
<a class="link" href="GstGLFramebuffer.html#gst-gl-framebuffer-new" title="gst_gl_framebuffer_new ()">gst_gl_framebuffer_new</a> <span class="c_punctuation">()</span>
</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="GstGLFramebuffer.html#gst-gl-framebuffer-generate" title="gst_gl_framebuffer_generate ()">gst_gl_framebuffer_generate</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="GstGLFramebuffer.html#gst-gl-framebuffer-delete" title="gst_gl_framebuffer_delete ()">gst_gl_framebuffer_delete</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="GstGLFramebuffer.html#gst-gl-framebuffer-use-v2" title="gst_gl_framebuffer_use_v2 ()">gst_gl_framebuffer_use_v2</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-</tbody>
+</tr></tbody>
</table></div>
</div>
<div class="refsect1">
@@ -84,8 +58,8 @@
</colgroup>
<tbody>
<tr>
-<td class="datatype_keyword">struct</td>
-<td class="function_name"><a class="link" href="GstGLFramebuffer.html#GstGLFramebuffer-struct" title="struct GstGLFramebuffer">GstGLFramebuffer</a></td>
+<td class="datatype_keyword"> </td>
+<td class="function_name"><a class="link" href="GstGLFramebuffer.html#GstGLFramebuffer-struct" title="GstGLFramebuffer">GstGLFramebuffer</a></td>
</tr>
<tr>
<td class="datatype_keyword">struct</td>
@@ -97,7 +71,9 @@
<div class="refsect1">
<a name="GstGLFramebuffer.object-hierarchy"></a><h2>Object Hierarchy</h2>
<pre class="screen"> <a href="/usr/share/gtk-doc/html/gobjectgobject-The-Base-Object-Type.html#GObject-struct">GObject</a>
- <span class="lineart">╰──</span> GstGLFramebuffer
+ <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gobjectgobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
+ <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstObject.html#GstObject-struct">GstObject</a>
+ <span class="lineart">╰──</span> GstGLFramebuffer
</pre>
</div>
<div class="refsect1">
@@ -110,49 +86,18 @@
<pre class="programlisting"><a class="link" href="GstGLFramebuffer.html" title="GstGLFramebuffer"><span class="returnvalue">GstGLFramebuffer</span></a> *
gst_gl_framebuffer_new (<em class="parameter"><code><a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a> *context</code></em>);</pre>
</div>
-<hr>
-<div class="refsect2">
-<a name="gst-gl-framebuffer-generate"></a><h3>gst_gl_framebuffer_generate ()</h3>
-<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-gst_gl_framebuffer_generate (<em class="parameter"><code><a class="link" href="GstGLFramebuffer.html" title="GstGLFramebuffer"><span class="type">GstGLFramebuffer</span></a> *frame</code></em>,
- <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint"><span class="type">gint</span></a> width</code></em>,
- <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint"><span class="type">gint</span></a> height</code></em>,
- <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="type">guint</span></a> *fbo</code></em>,
- <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="type">guint</span></a> *depthbuffer</code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-gl-framebuffer-delete"></a><h3>gst_gl_framebuffer_delete ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-gst_gl_framebuffer_delete (<em class="parameter"><code><a class="link" href="GstGLFramebuffer.html" title="GstGLFramebuffer"><span class="type">GstGLFramebuffer</span></a> *frame</code></em>,
- <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="type">guint</span></a> fbo</code></em>,
- <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="type">guint</span></a> depth</code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-gl-framebuffer-use-v2"></a><h3>gst_gl_framebuffer_use_v2 ()</h3>
-<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-gst_gl_framebuffer_use_v2 (<em class="parameter"><code><a class="link" href="GstGLFramebuffer.html" title="GstGLFramebuffer"><span class="type">GstGLFramebuffer</span></a> *frame</code></em>,
- <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint"><span class="type">gint</span></a> texture_fbo_width</code></em>,
- <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint"><span class="type">gint</span></a> texture_fbo_height</code></em>,
- <em class="parameter"><code><span class="type">GLuint</span> fbo</code></em>,
- <em class="parameter"><code><span class="type">GLuint</span> depth_buffer</code></em>,
- <em class="parameter"><code><span class="type">GLuint</span> texture_fbo</code></em>,
- <em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#GLCB-V2:CAPS" title="GLCB_V2 ()"><span class="type">GLCB_V2</span></a> cb</code></em>,
- <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> stuff</code></em>);</pre>
-</div>
</div>
<div class="refsect1">
<a name="GstGLFramebuffer.other_details"></a><h2>Types and Values</h2>
<div class="refsect2">
-<a name="GstGLFramebuffer-struct"></a><h3>struct GstGLFramebuffer</h3>
-<pre class="programlisting">struct GstGLFramebuffer;</pre>
+<a name="GstGLFramebuffer-struct"></a><h3>GstGLFramebuffer</h3>
+<pre class="programlisting">typedef struct _GstGLFramebuffer GstGLFramebuffer;</pre>
</div>
<hr>
<div class="refsect2">
<a name="GstGLFramebufferClass"></a><h3>struct GstGLFramebufferClass</h3>
<pre class="programlisting">struct GstGLFramebufferClass {
- GObjectClass object_class;
+ GstObjectClass object_class;
};
</pre>
</div>
diff --git a/docs/libs/html/GstGLShader.html b/docs/libs/html/GstGLShader.html
index 44388c9..e7152fa 100644
--- a/docs/libs/html/GstGLShader.html
+++ b/docs/libs/html/GstGLShader.html
@@ -29,7 +29,7 @@
<div class="refnamediv"><table width="100%"><tr>
<td valign="top">
<h2><span class="refentrytitle"><a name="GstGLShader.top_of_page"></a>GstGLShader</span></h2>
-<p>GstGLShader</p>
+<p>GstGLShader — object representing an OpenGL shader program</p>
</td>
<td class="gallery_image" valign="top" align="right"></td>
</tr></table></div>
@@ -425,6 +425,28 @@
<a name="gst-gl-shader-new"></a><h3>gst_gl_shader_new ()</h3>
<pre class="programlisting"><a class="link" href="GstGLShader.html" title="GstGLShader"><span class="returnvalue">GstGLShader</span></a> *
gst_gl_shader_new (<em class="parameter"><code><a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a> *context</code></em>);</pre>
+<p>Note: must be called in the GL thread</p>
+<div class="refsect3">
+<a name="gst-gl-shader-new.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>context</p></td>
+<td class="parameter_description"><p>a <a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-gl-shader-new.returns"></a><h4>Returns</h4>
+<p> a new empty <em class="parameter"><code>shader</code></em>
+. </p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
+</div>
</div>
<hr>
<div class="refsect2">
@@ -432,6 +454,36 @@
<pre class="programlisting"><a class="link" href="GstGLShader.html" title="GstGLShader"><span class="returnvalue">GstGLShader</span></a> *
gst_gl_shader_new_default (<em class="parameter"><code><a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a> *context</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);</pre>
+<p>Note: must be called in the GL thread</p>
+<div class="refsect3">
+<a name="gst-gl-shader-new-default.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>context</p></td>
+<td class="parameter_description"><p>a <a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>a <a href="/usr/share/gtk-doc/html/glibglib-Error-Reporting.html#GError"><span class="type">GError</span></a> that is filled on failure</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-gl-shader-new-default.returns"></a><h4>Returns</h4>
+<p> a default <em class="parameter"><code>shader</code></em>
+or <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> on failure. </p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
+</div>
+<p class="since">Since: 1.8</p>
</div>
<hr>
<div class="refsect2">
@@ -440,6 +492,46 @@
gst_gl_shader_new_link_with_stages (<em class="parameter"><code><a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a> *context</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>,
<em class="parameter"><code>...</code></em>);</pre>
+<p>Each stage will attempt to be compiled and attached to <em class="parameter"><code>shader</code></em>
+. Then
+the shader will be linked. On error, <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> will be returned and <em class="parameter"><code>error</code></em>
+ will
+contain the details of the error.</p>
+<p>Note: must be called in the GL thread</p>
+<div class="refsect3">
+<a name="gst-gl-shader-new-link-with-stages.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>context</p></td>
+<td class="parameter_description"><p>a <a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>a <a href="/usr/share/gtk-doc/html/glibglib-Error-Reporting.html#GError"><span class="type">GError</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>...</p></td>
+<td class="parameter_description"><p>a NULL terminated list of <a class="link" href=".html#GstGLSLStage"><span class="type">GstGLSLStage</span></a>'s</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-gl-shader-new-link-with-stages.returns"></a><h4>Returns</h4>
+<p> a new <em class="parameter"><code>shader</code></em>
+with the specified stages. </p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
+</div>
+<p class="since">Since: 1.8</p>
</div>
<hr>
<div class="refsect2">
@@ -448,30 +540,144 @@
gst_gl_shader_new_with_stages (<em class="parameter"><code><a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a> *context</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>,
<em class="parameter"><code>...</code></em>);</pre>
+<p>Each stage will attempt to be compiled and attached to <em class="parameter"><code>shader</code></em>
+. On error,
+<a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> will be returned and <em class="parameter"><code>error</code></em>
+ will contain the details of the error.</p>
+<p>Note: must be called in the GL thread</p>
+<div class="refsect3">
+<a name="gst-gl-shader-new-with-stages.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>context</p></td>
+<td class="parameter_description"><p>a <a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>a <a href="/usr/share/gtk-doc/html/glibglib-Error-Reporting.html#GError"><span class="type">GError</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>...</p></td>
+<td class="parameter_description"><p>a NULL terminated list of <a class="link" href=".html#GstGLSLStage"><span class="type">GstGLSLStage</span></a>'s</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-gl-shader-new-with-stages.returns"></a><h4>Returns</h4>
+<p> a new <em class="parameter"><code>shader</code></em>
+with the specified stages. </p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
+</div>
+<p class="since">Since: 1.8</p>
</div>
<hr>
<div class="refsect2">
<a name="gst-gl-shader-use"></a><h3>gst_gl_shader_use ()</h3>
<pre class="programlisting"><span class="returnvalue">void</span>
gst_gl_shader_use (<em class="parameter"><code><a class="link" href="GstGLShader.html" title="GstGLShader"><span class="type">GstGLShader</span></a> *shader</code></em>);</pre>
+<p>Mark's <em class="parameter"><code>shader</code></em>
+ as being used for the next GL draw command.</p>
+<p>Note: must be called in the GL thread and <em class="parameter"><code>shader</code></em>
+ must have been linked.</p>
+<div class="refsect3">
+<a name="gst-gl-shader-use.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>shader</p></td>
+<td class="parameter_description"><p>a <a class="link" href="GstGLShader.html" title="GstGLShader"><span class="type">GstGLShader</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
</div>
<hr>
<div class="refsect2">
<a name="gst-gl-shader-get-program-handle"></a><h3>gst_gl_shader_get_program_handle ()</h3>
<pre class="programlisting"><span class="returnvalue">int</span>
gst_gl_shader_get_program_handle (<em class="parameter"><code><a class="link" href="GstGLShader.html" title="GstGLShader"><span class="type">GstGLShader</span></a> *shader</code></em>);</pre>
+<div class="refsect3">
+<a name="gst-gl-shader-get-program-handle.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>shader</p></td>
+<td class="parameter_description"><p>a <a class="link" href="GstGLShader.html" title="GstGLShader"><span class="type">GstGLShader</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-gl-shader-get-program-handle.returns"></a><h4>Returns</h4>
+<p> the GL program handle for this shader</p>
+</div>
+<p class="since">Since: 1.8</p>
</div>
<hr>
<div class="refsect2">
<a name="gst-gl-shader-release"></a><h3>gst_gl_shader_release ()</h3>
<pre class="programlisting"><span class="returnvalue">void</span>
gst_gl_shader_release (<em class="parameter"><code><a class="link" href="GstGLShader.html" title="GstGLShader"><span class="type">GstGLShader</span></a> *shader</code></em>);</pre>
+<p>Releases the shader and stages.</p>
+<p>Note: must be called in the GL thread</p>
+<div class="refsect3">
+<a name="gst-gl-shader-release.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>shader</p></td>
+<td class="parameter_description"><p>a <a class="link" href="GstGLShader.html" title="GstGLShader"><span class="type">GstGLShader</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<p class="since">Since: 1.8</p>
</div>
<hr>
<div class="refsect2">
<a name="gst-gl-shader-release-unlocked"></a><h3>gst_gl_shader_release_unlocked ()</h3>
<pre class="programlisting"><span class="returnvalue">void</span>
gst_gl_shader_release_unlocked (<em class="parameter"><code><a class="link" href="GstGLShader.html" title="GstGLShader"><span class="type">GstGLShader</span></a> *shader</code></em>);</pre>
+<p>Releases the shader and stages.</p>
+<p>Note: must be called in the GL thread</p>
+<div class="refsect3">
+<a name="gst-gl-shader-release-unlocked.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>shader</p></td>
+<td class="parameter_description"><p>a <a class="link" href="GstGLShader.html" title="GstGLShader"><span class="type">GstGLShader</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<p class="since">Since: 1.8</p>
</div>
<hr>
<div class="refsect2">
@@ -479,6 +685,41 @@
<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
gst_gl_shader_attach (<em class="parameter"><code><a class="link" href="GstGLShader.html" title="GstGLShader"><span class="type">GstGLShader</span></a> *shader</code></em>,
<em class="parameter"><code><a class="link" href=".html#GstGLSLStage"><span class="type">GstGLSLStage</span></a> *stage</code></em>);</pre>
+<p>Attaches <em class="parameter"><code>stage</code></em>
+ to <em class="parameter"><code>shader</code></em>
+. <em class="parameter"><code>stage</code></em>
+ must have been successfully compiled
+with <code class="function">gst_glsl_stage_compile()</code>.</p>
+<p>Note: must be called in the GL thread</p>
+<div class="refsect3">
+<a name="gst-gl-shader-attach.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>shader</p></td>
+<td class="parameter_description"><p>a <a class="link" href="GstGLShader.html" title="GstGLShader"><span class="type">GstGLShader</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>stage</p></td>
+<td class="parameter_description"><p>a <a class="link" href=".html#GstGLSLStage"><span class="type">GstGLSLStage</span></a> to attach</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-gl-shader-attach.returns"></a><h4>Returns</h4>
+<p> whether <em class="parameter"><code>stage</code></em>
+could be attached to <em class="parameter"><code>shader</code></em>
+</p>
+</div>
+<p class="since">Since: 1.8</p>
</div>
<hr>
<div class="refsect2">
@@ -486,6 +727,41 @@
<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
gst_gl_shader_attach_unlocked (<em class="parameter"><code><a class="link" href="GstGLShader.html" title="GstGLShader"><span class="type">GstGLShader</span></a> *shader</code></em>,
<em class="parameter"><code><a class="link" href=".html#GstGLSLStage"><span class="type">GstGLSLStage</span></a> *stage</code></em>);</pre>
+<p>Attaches <em class="parameter"><code>stage</code></em>
+ to <em class="parameter"><code>shader</code></em>
+. <em class="parameter"><code>stage</code></em>
+ must have been successfully compiled
+with <code class="function">gst_glsl_stage_compile()</code>.</p>
+<p>Note: must be called in the GL thread</p>
+<div class="refsect3">
+<a name="gst-gl-shader-attach-unlocked.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>shader</p></td>
+<td class="parameter_description"><p>a <a class="link" href="GstGLShader.html" title="GstGLShader"><span class="type">GstGLShader</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>stage</p></td>
+<td class="parameter_description"><p>a <a class="link" href=".html#GstGLSLStage"><span class="type">GstGLSLStage</span></a> to attach</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-gl-shader-attach-unlocked.returns"></a><h4>Returns</h4>
+<p> whether <em class="parameter"><code>stage</code></em>
+could be attached to <em class="parameter"><code>shader</code></em>
+</p>
+</div>
+<p class="since">Since: 1.8</p>
</div>
<hr>
<div class="refsect2">
@@ -494,6 +770,44 @@
gst_gl_shader_compile_attach_stage (<em class="parameter"><code><a class="link" href="GstGLShader.html" title="GstGLShader"><span class="type">GstGLShader</span></a> *shader</code></em>,
<em class="parameter"><code><a class="link" href=".html#GstGLSLStage"><span class="type">GstGLSLStage</span></a> *stage</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);</pre>
+<p>Compiles <em class="parameter"><code>stage</code></em>
+ and attaches it to <em class="parameter"><code>shader</code></em>
+.</p>
+<p>Note: must be called in the GL thread</p>
+<div class="refsect3">
+<a name="gst-gl-shader-compile-attach-stage.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>shader</p></td>
+<td class="parameter_description"><p>a <a class="link" href="GstGLShader.html" title="GstGLShader"><span class="type">GstGLShader</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>stage</p></td>
+<td class="parameter_description"><p>a <a class="link" href=".html#GstGLSLStage"><span class="type">GstGLSLStage</span></a> to attach</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>a <a href="/usr/share/gtk-doc/html/glibglib-Error-Reporting.html#GError"><span class="type">GError</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-gl-shader-compile-attach-stage.returns"></a><h4>Returns</h4>
+<p> whether <em class="parameter"><code>stage</code></em>
+could be compiled and attached to <em class="parameter"><code>shader</code></em>
+</p>
+</div>
+<p class="since">Since: 1.8</p>
</div>
<hr>
<div class="refsect2">
@@ -501,6 +815,36 @@
<pre class="programlisting"><span class="returnvalue">void</span>
gst_gl_shader_detach (<em class="parameter"><code><a class="link" href="GstGLShader.html" title="GstGLShader"><span class="type">GstGLShader</span></a> *shader</code></em>,
<em class="parameter"><code><a class="link" href=".html#GstGLSLStage"><span class="type">GstGLSLStage</span></a> *stage</code></em>);</pre>
+<p>Detaches <em class="parameter"><code>stage</code></em>
+ from <em class="parameter"><code>shader</code></em>
+. <em class="parameter"><code>stage</code></em>
+ must have been successfully attached
+to <em class="parameter"><code>shader</code></em>
+ with <a class="link" href="GstGLShader.html#gst-gl-shader-attach" title="gst_gl_shader_attach ()"><code class="function">gst_gl_shader_attach()</code></a> or <a class="link" href="GstGLShader.html#gst-gl-shader-attach-unlocked" title="gst_gl_shader_attach_unlocked ()"><code class="function">gst_gl_shader_attach_unlocked()</code></a>.</p>
+<p>Note: must be called in the GL thread</p>
+<div class="refsect3">
+<a name="gst-gl-shader-detach.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>shader</p></td>
+<td class="parameter_description"><p>a <a class="link" href="GstGLShader.html" title="GstGLShader"><span class="type">GstGLShader</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>stage</p></td>
+<td class="parameter_description"><p>a <a class="link" href=".html#GstGLSLStage"><span class="type">GstGLSLStage</span></a> to attach</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 1.8</p>
</div>
<hr>
<div class="refsect2">
@@ -508,12 +852,64 @@
<pre class="programlisting"><span class="returnvalue">void</span>
gst_gl_shader_detach_unlocked (<em class="parameter"><code><a class="link" href="GstGLShader.html" title="GstGLShader"><span class="type">GstGLShader</span></a> *shader</code></em>,
<em class="parameter"><code><a class="link" href=".html#GstGLSLStage"><span class="type">GstGLSLStage</span></a> *stage</code></em>);</pre>
+<p>Detaches <em class="parameter"><code>stage</code></em>
+ from <em class="parameter"><code>shader</code></em>
+. <em class="parameter"><code>stage</code></em>
+ must have been successfully attached
+to <em class="parameter"><code>shader</code></em>
+ with <a class="link" href="GstGLShader.html#gst-gl-shader-attach" title="gst_gl_shader_attach ()"><code class="function">gst_gl_shader_attach()</code></a> or <a class="link" href="GstGLShader.html#gst-gl-shader-attach-unlocked" title="gst_gl_shader_attach_unlocked ()"><code class="function">gst_gl_shader_attach_unlocked()</code></a>.</p>
+<p>Note: must be called in the GL thread</p>
+<div class="refsect3">
+<a name="gst-gl-shader-detach-unlocked.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>shader</p></td>
+<td class="parameter_description"><p>a <a class="link" href="GstGLShader.html" title="GstGLShader"><span class="type">GstGLShader</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>stage</p></td>
+<td class="parameter_description"><p>a <a class="link" href=".html#GstGLSLStage"><span class="type">GstGLSLStage</span></a> to attach</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 1.8</p>
</div>
<hr>
<div class="refsect2">
<a name="gst-gl-shader-is-linked"></a><h3>gst_gl_shader_is_linked ()</h3>
<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
gst_gl_shader_is_linked (<em class="parameter"><code><a class="link" href="GstGLShader.html" title="GstGLShader"><span class="type">GstGLShader</span></a> *shader</code></em>);</pre>
+<p>Note: must be called in the GL thread</p>
+<div class="refsect3">
+<a name="gst-gl-shader-is-linked.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>shader</p></td>
+<td class="parameter_description"><p>a <a class="link" href="GstGLShader.html" title="GstGLShader"><span class="type">GstGLShader</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-gl-shader-is-linked.returns"></a><h4>Returns</h4>
+<p> whether <em class="parameter"><code>shader</code></em>
+has been successfully linked</p>
+</div>
+<p class="since">Since: 1.8</p>
</div>
<hr>
<div class="refsect2">
@@ -521,6 +917,37 @@
<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
gst_gl_shader_link (<em class="parameter"><code><a class="link" href="GstGLShader.html" title="GstGLShader"><span class="type">GstGLShader</span></a> *shader</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);</pre>
+<p>Links the current list of <a class="link" href=".html#GstGLSLStage"><span class="type">GstGLSLStage</span></a>'s in <em class="parameter"><code>shader</code></em>
+.</p>
+<p>Note: must be called in the GL thread</p>
+<div class="refsect3">
+<a name="gst-gl-shader-link.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>shader</p></td>
+<td class="parameter_description"><p>a <a class="link" href="GstGLShader.html" title="GstGLShader"><span class="type">GstGLShader</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>a <a href="/usr/share/gtk-doc/html/glibglib-Error-Reporting.html#GError"><span class="type">GError</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-gl-shader-link.returns"></a><h4>Returns</h4>
+<p> whether <em class="parameter"><code>shader</code></em>
+could be linked together.</p>
+</div>
+<p class="since">Since: 1.8</p>
</div>
<hr>
<div class="refsect2">
@@ -799,6 +1226,10 @@
<p>Default value: FALSE</p>
</div>
</div>
+<div class="refsect1">
+<a name="GstGLShader.see-also"></a><h2>See Also</h2>
+<p><a class="link" href=".html#GstGLSLStage"><span class="type">GstGLSLStage</span></a></p>
+</div>
</div>
<div class="footer">
<hr>Generated by GTK-Doc V1.25</div>
diff --git a/docs/libs/html/GstGLUpload.html b/docs/libs/html/GstGLUpload.html
index 80e21a8..5f73454 100644
--- a/docs/libs/html/GstGLUpload.html
+++ b/docs/libs/html/GstGLUpload.html
@@ -28,7 +28,7 @@
<div class="refnamediv"><table width="100%"><tr>
<td valign="top">
<h2><span class="refentrytitle"><a name="GstGLUpload.top_of_page"></a>GstGLUpload</span></h2>
-<p>GstGLUpload</p>
+<p>GstGLUpload — an object that uploads to GL textures</p>
</td>
<td class="gallery_image" valign="top" align="right"></td>
</tr></table></div>
@@ -122,6 +122,8 @@
</div>
<div class="refsect1">
<a name="GstGLUpload.description"></a><h2>Description</h2>
+<p><a class="link" href="GstGLUpload.html" title="GstGLUpload"><span class="type">GstGLUpload</span></a> is an object that uploads data from system memory into GL textures.</p>
+<p>A <a class="link" href="GstGLUpload.html" title="GstGLUpload"><span class="type">GstGLUpload</span></a> can be created with <a class="link" href="GstGLUpload.html#gst-gl-upload-new" title="gst_gl_upload_new ()"><code class="function">gst_gl_upload_new()</code></a></p>
</div>
<div class="refsect1">
<a name="GstGLUpload.functions_details"></a><h2>Functions</h2>
@@ -129,6 +131,25 @@
<a name="gst-gl-upload-new"></a><h3>gst_gl_upload_new ()</h3>
<pre class="programlisting"><a class="link" href="GstGLUpload.html" title="GstGLUpload"><span class="returnvalue">GstGLUpload</span></a> *
gst_gl_upload_new (<em class="parameter"><code><a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a> *context</code></em>);</pre>
+<div class="refsect3">
+<a name="gst-gl-upload-new.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>context</p></td>
+<td class="parameter_description"><p>a <a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-gl-upload-new.returns"></a><h4>Returns</h4>
+<p> a new <a class="link" href="GstGLUpload.html" title="GstGLUpload"><span class="type">GstGLUpload</span></a> object</p>
+</div>
</div>
<hr>
<div class="refsect2">
@@ -137,6 +158,38 @@
gst_gl_upload_get_caps (<em class="parameter"><code><a class="link" href="GstGLUpload.html" title="GstGLUpload"><span class="type">GstGLUpload</span></a> *upload</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/gstreamer-1.0GstCaps.html#GstCaps-struct"><span class="type">GstCaps</span></a> **in_caps</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/gstreamer-1.0GstCaps.html#GstCaps-struct"><span class="type">GstCaps</span></a> **out_caps</code></em>);</pre>
+<div class="refsect3">
+<a name="gst-gl-upload-get-caps.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>upload</p></td>
+<td class="parameter_description"><p>a <a class="link" href="GstGLUpload.html" title="GstGLUpload"><span class="type">GstGLUpload</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>in_caps</p></td>
+<td class="parameter_description"><p> the input <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstCaps.html#GstCaps-struct"><span class="type">GstCaps</span></a>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>][<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>out_caps</p></td>
+<td class="parameter_description"><p> the output <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstCaps.html#GstCaps-struct"><span class="type">GstCaps</span></a>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>][<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-gl-upload-get-caps.returns"></a><h4>Returns</h4>
+<p> The <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstCaps.html#GstCaps-struct"><span class="type">GstCaps</span></a> set by <a class="link" href="GstGLUpload.html#gst-gl-upload-set-caps" title="gst_gl_upload_set_caps ()"><code class="function">gst_gl_upload_set_caps()</code></a>. </p>
+<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p>
+</div>
</div>
<hr>
<div class="refsect2">
@@ -145,6 +198,42 @@
gst_gl_upload_set_caps (<em class="parameter"><code><a class="link" href="GstGLUpload.html" title="GstGLUpload"><span class="type">GstGLUpload</span></a> *upload</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/gstreamer-1.0GstCaps.html#GstCaps-struct"><span class="type">GstCaps</span></a> *in_caps</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/gstreamer-1.0GstCaps.html#GstCaps-struct"><span class="type">GstCaps</span></a> *out_caps</code></em>);</pre>
+<p>Initializes <em class="parameter"><code>upload</code></em>
+ with the information required for upload.</p>
+<div class="refsect3">
+<a name="gst-gl-upload-set-caps.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>upload</p></td>
+<td class="parameter_description"><p>a <a class="link" href="GstGLUpload.html" title="GstGLUpload"><span class="type">GstGLUpload</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>in_caps</p></td>
+<td class="parameter_description"><p>input <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstCaps.html#GstCaps-struct"><span class="type">GstCaps</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>out_caps</p></td>
+<td class="parameter_description"><p>output <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstCaps.html#GstCaps-struct"><span class="type">GstCaps</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-gl-upload-set-caps.returns"></a><h4>Returns</h4>
+<p> whether <em class="parameter"><code>in_caps</code></em>
+and <em class="parameter"><code>out_caps</code></em>
+could be set on <em class="parameter"><code>upload</code></em>
+</p>
+</div>
</div>
<hr>
<div class="refsect2">
@@ -153,12 +242,41 @@
gst_gl_upload_propose_allocation (<em class="parameter"><code><a class="link" href="GstGLUpload.html" title="GstGLUpload"><span class="type">GstGLUpload</span></a> *upload</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/gstreamer-1.0GstQuery.html#GstQuery-struct"><span class="type">GstQuery</span></a> *decide_query</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/gstreamer-1.0GstQuery.html#GstQuery-struct"><span class="type">GstQuery</span></a> *query</code></em>);</pre>
+<p>Adds the required allocation parameters to support uploading.</p>
+<div class="refsect3">
+<a name="gst-gl-upload-propose-allocation.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>upload</p></td>
+<td class="parameter_description"><p>a <a class="link" href="GstGLUpload.html" title="GstGLUpload"><span class="type">GstGLUpload</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>decide_query</p></td>
+<td class="parameter_description"><p> a <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstQuery.html#GstQuery-struct"><span class="type">GstQuery</span></a> from a decide allocation. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>query</p></td>
+<td class="parameter_description"><p>the proposed allocation query</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
</div>
<hr>
<div class="refsect2">
<a name="gst-gl-upload-transform-caps"></a><h3>gst_gl_upload_transform_caps ()</h3>
<pre class="programlisting"><a href="/usr/share/gtk-doc/html/gstreamer-1.0GstCaps.html#GstCaps-struct"><span class="returnvalue">GstCaps</span></a> *
-gst_gl_upload_transform_caps (<em class="parameter"><code><a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a> *context</code></em>,
+gst_gl_upload_transform_caps (<em class="parameter"><code><a class="link" href="GstGLUpload.html" title="GstGLUpload"><span class="type">GstGLUpload</span></a> *upload</code></em>,
+ <em class="parameter"><code><a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a> *context</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/gstreamer-1.0GstPad.html#GstPadDirection"><span class="type">GstPadDirection</span></a> direction</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/gstreamer-1.0GstCaps.html#GstCaps-struct"><span class="type">GstCaps</span></a> *caps</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/gstreamer-1.0GstCaps.html#GstCaps-struct"><span class="type">GstCaps</span></a> *filter</code></em>);</pre>
@@ -170,6 +288,41 @@
gst_gl_upload_perform_with_buffer (<em class="parameter"><code><a class="link" href="GstGLUpload.html" title="GstGLUpload"><span class="type">GstGLUpload</span></a> *upload</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/gstreamer-1.0GstBuffer.html#GstBuffer-struct"><span class="type">GstBuffer</span></a> *buffer</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/gstreamer-1.0GstBuffer.html#GstBuffer-struct"><span class="type">GstBuffer</span></a> **outbuf_ptr</code></em>);</pre>
+<p>Uploads <em class="parameter"><code>buffer</code></em>
+ using the transformation specified by
+<a class="link" href="GstGLUpload.html#gst-gl-upload-set-caps" title="gst_gl_upload_set_caps ()"><code class="function">gst_gl_upload_set_caps()</code></a> creating a new <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstBuffer.html#GstBuffer-struct"><span class="type">GstBuffer</span></a> in <em class="parameter"><code>outbuf_ptr</code></em>
+.</p>
+<div class="refsect3">
+<a name="gst-gl-upload-perform-with-buffer.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>upload</p></td>
+<td class="parameter_description"><p>a <a class="link" href="GstGLUpload.html" title="GstGLUpload"><span class="type">GstGLUpload</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>buffer</p></td>
+<td class="parameter_description"><p>input <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstBuffer.html#GstBuffer-struct"><span class="type">GstBuffer</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>outbuf_ptr</p></td>
+<td class="parameter_description"><p>resulting <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstBuffer.html#GstBuffer-struct"><span class="type">GstBuffer</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-gl-upload-perform-with-buffer.returns"></a><h4>Returns</h4>
+<p> whether the upload was successful</p>
+</div>
</div>
<hr>
<div class="refsect2">
@@ -183,8 +336,13 @@
<div class="refsect2">
<a name="GstGLUpload-struct"></a><h3>GstGLUpload</h3>
<pre class="programlisting">typedef struct _GstGLUpload GstGLUpload;</pre>
+<p>Opaque <a class="link" href="GstGLUpload.html" title="GstGLUpload"><span class="type">GstGLUpload</span></a> object</p>
</div>
</div>
+<div class="refsect1">
+<a name="GstGLUpload.see-also"></a><h2>See Also</h2>
+<p><span class="type">GstGLDownload</span>, <a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#GstGLMemory" title="GstGLMemory"><span class="type">GstGLMemory</span></a></p>
+</div>
</div>
<div class="footer">
<hr>Generated by GTK-Doc V1.25</div>
diff --git a/docs/libs/html/GstGLWindow.html b/docs/libs/html/GstGLWindow.html
index 3845f6a..4ce4cb6 100644
--- a/docs/libs/html/GstGLWindow.html
+++ b/docs/libs/html/GstGLWindow.html
@@ -29,7 +29,7 @@
<div class="refnamediv"><table width="100%"><tr>
<td valign="top">
<h2><span class="refentrytitle"><a name="GstGLWindow.top_of_page"></a>GstGLWindow</span></h2>
-<p>GstGLWindow</p>
+<p>GstGLWindow — window/surface abstraction</p>
</td>
<td class="gallery_image" valign="top" align="right"></td>
</tr></table></div>
@@ -283,6 +283,8 @@
</div>
<div class="refsect1">
<a name="GstGLWindow.description"></a><h2>Description</h2>
+<p>GstGLWindow represents a window that elements can render into. A window can
+either be a user visible window (onscreen) or hidden (offscreen).</p>
</div>
<div class="refsect1">
<a name="GstGLWindow.functions_details"></a><h2>Functions</h2>
@@ -322,42 +324,175 @@
<a name="gst-gl-window-new"></a><h3>gst_gl_window_new ()</h3>
<pre class="programlisting"><a class="link" href="GstGLWindow.html" title="GstGLWindow"><span class="returnvalue">GstGLWindow</span></a> *
gst_gl_window_new (<em class="parameter"><code><a class="link" href="GstGLDisplay.html" title="GstGLDisplay"><span class="type">GstGLDisplay</span></a> *display</code></em>);</pre>
+<div class="refsect3">
+<a name="gst-gl-window-new.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>display</p></td>
+<td class="parameter_description"><p>a <a class="link" href="GstGLDisplay.html" title="GstGLDisplay"><span class="type">GstGLDisplay</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-gl-window-new.returns"></a><h4>Returns</h4>
+<p> a new <a class="link" href="GstGLWindow.html" title="GstGLWindow"><span class="type">GstGLWindow</span></a> using <em class="parameter"><code>display</code></em>
+'s connection. </p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
+</div>
+<p class="since">Since: 1.4</p>
</div>
<hr>
<div class="refsect2">
<a name="gst-gl-window-draw"></a><h3>gst_gl_window_draw ()</h3>
<pre class="programlisting"><span class="returnvalue">void</span>
gst_gl_window_draw (<em class="parameter"><code><a class="link" href="GstGLWindow.html" title="GstGLWindow"><span class="type">GstGLWindow</span></a> *window</code></em>);</pre>
+<p>Redraw the window contents. Implementations should invoke the draw callback.</p>
+<div class="refsect3">
+<a name="gst-gl-window-draw.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>window</p></td>
+<td class="parameter_description"><p>a <a class="link" href="GstGLWindow.html" title="GstGLWindow"><span class="type">GstGLWindow</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<p class="since">Since: 1.4</p>
</div>
<hr>
<div class="refsect2">
<a name="gst-gl-window-is-running"></a><h3>gst_gl_window_is_running ()</h3>
<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
gst_gl_window_is_running (<em class="parameter"><code><a class="link" href="GstGLWindow.html" title="GstGLWindow"><span class="type">GstGLWindow</span></a> *window</code></em>);</pre>
+<p>Whether the runloop is running</p>
+<div class="refsect3">
+<a name="gst-gl-window-is-running.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>window</p></td>
+<td class="parameter_description"><p>a <a class="link" href="GstGLWindow.html" title="GstGLWindow"><span class="type">GstGLWindow</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<p class="since">Since: 1.4</p>
</div>
<hr>
<div class="refsect2">
<a name="gst-gl-window-quit"></a><h3>gst_gl_window_quit ()</h3>
<pre class="programlisting"><span class="returnvalue">void</span>
gst_gl_window_quit (<em class="parameter"><code><a class="link" href="GstGLWindow.html" title="GstGLWindow"><span class="type">GstGLWindow</span></a> *window</code></em>);</pre>
+<p>Quit the runloop's execution.</p>
+<div class="refsect3">
+<a name="gst-gl-window-quit.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>window</p></td>
+<td class="parameter_description"><p>a <a class="link" href="GstGLWindow.html" title="GstGLWindow"><span class="type">GstGLWindow</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<p class="since">Since: 1.4</p>
</div>
<hr>
<div class="refsect2">
<a name="gst-gl-window-run"></a><h3>gst_gl_window_run ()</h3>
<pre class="programlisting"><span class="returnvalue">void</span>
gst_gl_window_run (<em class="parameter"><code><a class="link" href="GstGLWindow.html" title="GstGLWindow"><span class="type">GstGLWindow</span></a> *window</code></em>);</pre>
+<p>Start the execution of the runloop.</p>
+<div class="refsect3">
+<a name="gst-gl-window-run.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>window</p></td>
+<td class="parameter_description"><p>a <a class="link" href="GstGLWindow.html" title="GstGLWindow"><span class="type">GstGLWindow</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<p class="since">Since: 1.4</p>
</div>
<hr>
<div class="refsect2">
<a name="gst-gl-window-get-context"></a><h3>gst_gl_window_get_context ()</h3>
<pre class="programlisting"><a class="link" href="GstGLContext.html" title="GstGLContext"><span class="returnvalue">GstGLContext</span></a> *
gst_gl_window_get_context (<em class="parameter"><code><a class="link" href="GstGLWindow.html" title="GstGLWindow"><span class="type">GstGLWindow</span></a> *window</code></em>);</pre>
+<div class="refsect3">
+<a name="gst-gl-window-get-context.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>window</p></td>
+<td class="parameter_description"><p>a <a class="link" href="GstGLWindow.html" title="GstGLWindow"><span class="type">GstGLWindow</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-gl-window-get-context.returns"></a><h4>Returns</h4>
+<p> the <a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a> associated with this <em class="parameter"><code>window</code></em>
+. </p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
+</div>
+<p class="since">Since: 1.4</p>
</div>
<hr>
<div class="refsect2">
<a name="gst-gl-window-get-display"></a><h3>gst_gl_window_get_display ()</h3>
<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guintptr"><span class="returnvalue">guintptr</span></a>
gst_gl_window_get_display (<em class="parameter"><code><a class="link" href="GstGLWindow.html" title="GstGLWindow"><span class="type">GstGLWindow</span></a> *window</code></em>);</pre>
+<div class="refsect3">
+<a name="gst-gl-window-get-display.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>window</p></td>
+<td class="parameter_description"><p>a <a class="link" href="GstGLWindow.html" title="GstGLWindow"><span class="type">GstGLWindow</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-gl-window-get-display.returns"></a><h4>Returns</h4>
+<p> the windowing system display handle for this <em class="parameter"><code>window</code></em>
+</p>
+</div>
+<p class="since">Since: 1.4</p>
</div>
<hr>
<div class="refsect2">
@@ -366,6 +501,39 @@
gst_gl_window_send_message (<em class="parameter"><code><a class="link" href="GstGLWindow.html" title="GstGLWindow"><span class="type">GstGLWindow</span></a> *window</code></em>,
<em class="parameter"><code><a class="link" href="GstGLWindow.html#GstGLWindowCB" title="GstGLWindowCB ()"><span class="type">GstGLWindowCB</span></a> callback</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> data</code></em>);</pre>
+<p>Invoke <em class="parameter"><code>callback</code></em>
+ with data on the window thread. <em class="parameter"><code>callback</code></em>
+ is guarenteed to
+have executed when this function returns.</p>
+<div class="refsect3">
+<a name="gst-gl-window-send-message.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>window</p></td>
+<td class="parameter_description"><p>a <a class="link" href="GstGLWindow.html" title="GstGLWindow"><span class="type">GstGLWindow</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>callback</p></td>
+<td class="parameter_description"><p> function to invoke. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="The callback is valid until first called."><span class="acronym">scope async</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>data</p></td>
+<td class="parameter_description"><p> data to invoke <em class="parameter"><code>callback</code></em>
+with. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="This parameter is a 'user_data', for callbacks; many bindings can pass NULL here."><span class="acronym">closure</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 1.4</p>
</div>
<hr>
<div class="refsect2">
@@ -375,6 +543,45 @@
<em class="parameter"><code><a class="link" href="GstGLWindow.html#GstGLWindowCB" title="GstGLWindowCB ()"><span class="type">GstGLWindowCB</span></a> callback</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> data</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Datasets.html#GDestroyNotify"><span class="type">GDestroyNotify</span></a> destroy</code></em>);</pre>
+<p>Invoke <em class="parameter"><code>callback</code></em>
+ with <em class="parameter"><code>data</code></em>
+ on the window thread. The callback may not
+have been executed when this function returns.</p>
+<div class="refsect3">
+<a name="gst-gl-window-send-message-async.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>window</p></td>
+<td class="parameter_description"><p>a <a class="link" href="GstGLWindow.html" title="GstGLWindow"><span class="type">GstGLWindow</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>callback</p></td>
+<td class="parameter_description"><p> function to invoke. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="The callback is valid until first called."><span class="acronym">scope async</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>data</p></td>
+<td class="parameter_description"><p> data to invoke <em class="parameter"><code>callback</code></em>
+with. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="This parameter is a 'user_data', for callbacks; many bindings can pass NULL here."><span class="acronym">closure</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>destroy</p></td>
+<td class="parameter_description"><p> called when <em class="parameter"><code>data</code></em>
+is not needed anymore. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="This parameter is a 'destroy_data', for callbacks."><span class="acronym">destroy</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 1.4</p>
</div>
<hr>
<div class="refsect2">
@@ -384,6 +591,42 @@
<em class="parameter"><code><a class="link" href="GstGLWindow.html#GstGLWindowCB" title="GstGLWindowCB ()"><span class="type">GstGLWindowCB</span></a> callback</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> data</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Datasets.html#GDestroyNotify"><span class="type">GDestroyNotify</span></a> destroy_notify</code></em>);</pre>
+<p>Sets the callback called when the window is about to close.</p>
+<div class="refsect3">
+<a name="gst-gl-window-set-close-callback.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>window</p></td>
+<td class="parameter_description"><p>a <a class="link" href="GstGLWindow.html" title="GstGLWindow"><span class="type">GstGLWindow</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>callback</p></td>
+<td class="parameter_description"><p> function to invoke. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="The callback is valid until the GDestroyNotify argument is called."><span class="acronym">scope notified</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>data</p></td>
+<td class="parameter_description"><p> data to invoke <em class="parameter"><code>callback</code></em>
+with. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="This parameter is a 'user_data', for callbacks; many bindings can pass NULL here."><span class="acronym">closure</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>destroy_notify</p></td>
+<td class="parameter_description"><p> called when <em class="parameter"><code>data</code></em>
+is not needed any more. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="This parameter is a 'destroy_data', for callbacks."><span class="acronym">destroy</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 1.4</p>
</div>
<hr>
<div class="refsect2">
@@ -393,6 +636,42 @@
<em class="parameter"><code><a class="link" href="GstGLWindow.html#GstGLWindowCB" title="GstGLWindowCB ()"><span class="type">GstGLWindowCB</span></a> callback</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> data</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Datasets.html#GDestroyNotify"><span class="type">GDestroyNotify</span></a> destroy_notify</code></em>);</pre>
+<p>Sets the draw callback called everytime <a class="link" href="GstGLWindow.html#gst-gl-window-draw" title="gst_gl_window_draw ()"><code class="function">gst_gl_window_draw()</code></a> is called</p>
+<div class="refsect3">
+<a name="gst-gl-window-set-draw-callback.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>window</p></td>
+<td class="parameter_description"><p>a <a class="link" href="GstGLWindow.html" title="GstGLWindow"><span class="type">GstGLWindow</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>callback</p></td>
+<td class="parameter_description"><p> function to invoke. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="The callback is valid until the GDestroyNotify argument is called."><span class="acronym">scope notified</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>data</p></td>
+<td class="parameter_description"><p> data to invoke <em class="parameter"><code>callback</code></em>
+with. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="This parameter is a 'user_data', for callbacks; many bindings can pass NULL here."><span class="acronym">closure</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>destroy_notify</p></td>
+<td class="parameter_description"><p> called when <em class="parameter"><code>data</code></em>
+is not needed any more. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="This parameter is a 'destroy_data', for callbacks."><span class="acronym">destroy</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 1.4</p>
</div>
<hr>
<div class="refsect2">
@@ -402,6 +681,42 @@
<em class="parameter"><code><a class="link" href="GstGLWindow.html#GstGLWindowResizeCB" title="GstGLWindowResizeCB ()"><span class="type">GstGLWindowResizeCB</span></a> callback</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> data</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Datasets.html#GDestroyNotify"><span class="type">GDestroyNotify</span></a> destroy_notify</code></em>);</pre>
+<p>Sets the resize callback called everytime a resize of the window occurs.</p>
+<div class="refsect3">
+<a name="gst-gl-window-set-resize-callback.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>window</p></td>
+<td class="parameter_description"><p>a <a class="link" href="GstGLWindow.html" title="GstGLWindow"><span class="type">GstGLWindow</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>callback</p></td>
+<td class="parameter_description"><p> function to invoke. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="The callback is valid until the GDestroyNotify argument is called."><span class="acronym">scope notified</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>data</p></td>
+<td class="parameter_description"><p> data to invoke <em class="parameter"><code>callback</code></em>
+with. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="This parameter is a 'user_data', for callbacks; many bindings can pass NULL here."><span class="acronym">closure</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>destroy_notify</p></td>
+<td class="parameter_description"><p> called when <em class="parameter"><code>data</code></em>
+is not needed any more. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="This parameter is a 'destroy_data', for callbacks."><span class="acronym">destroy</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 1.4</p>
</div>
<hr>
<div class="refsect2">
@@ -409,12 +724,58 @@
<pre class="programlisting"><span class="returnvalue">void</span>
gst_gl_window_set_window_handle (<em class="parameter"><code><a class="link" href="GstGLWindow.html" title="GstGLWindow"><span class="type">GstGLWindow</span></a> *window</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guintptr"><span class="type">guintptr</span></a> handle</code></em>);</pre>
+<p>Sets the window that this <em class="parameter"><code>window</code></em>
+ should render into. Some implementations
+require this to be called with a valid handle before drawing can commence.</p>
+<div class="refsect3">
+<a name="gst-gl-window-set-window-handle.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>window</p></td>
+<td class="parameter_description"><p>a <a class="link" href="GstGLWindow.html" title="GstGLWindow"><span class="type">GstGLWindow</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>handle</p></td>
+<td class="parameter_description"><p>handle to the window</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 1.4</p>
</div>
<hr>
<div class="refsect2">
<a name="gst-gl-window-get-window-handle"></a><h3>gst_gl_window_get_window_handle ()</h3>
<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guintptr"><span class="returnvalue">guintptr</span></a>
gst_gl_window_get_window_handle (<em class="parameter"><code><a class="link" href="GstGLWindow.html" title="GstGLWindow"><span class="type">GstGLWindow</span></a> *window</code></em>);</pre>
+<div class="refsect3">
+<a name="gst-gl-window-get-window-handle.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>window</p></td>
+<td class="parameter_description"><p>a <a class="link" href="GstGLWindow.html" title="GstGLWindow"><span class="type">GstGLWindow</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-gl-window-get-window-handle.returns"></a><h4>Returns</h4>
+<p> the window handle we are currently rendering into</p>
+</div>
+<p class="since">Since: 1.4</p>
</div>
<hr>
<div class="refsect2">
@@ -423,12 +784,59 @@
gst_gl_window_set_preferred_size (<em class="parameter"><code><a class="link" href="GstGLWindow.html" title="GstGLWindow"><span class="type">GstGLWindow</span></a> *window</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint"><span class="type">gint</span></a> width</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint"><span class="type">gint</span></a> height</code></em>);</pre>
+<p>Set the preferred width and height of the window. Implementations are free
+to ignore this information.</p>
+<div class="refsect3">
+<a name="gst-gl-window-set-preferred-size.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>window</p></td>
+<td class="parameter_description"><p>a <a class="link" href="GstGLWindow.html" title="GstGLWindow"><span class="type">GstGLWindow</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>width</p></td>
+<td class="parameter_description"><p>new preferred width</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>height</p></td>
+<td class="parameter_description"><p>new preferred height</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 1.6</p>
</div>
<hr>
<div class="refsect2">
<a name="gst-gl-window-show"></a><h3>gst_gl_window_show ()</h3>
<pre class="programlisting"><span class="returnvalue">void</span>
gst_gl_window_show (<em class="parameter"><code><a class="link" href="GstGLWindow.html" title="GstGLWindow"><span class="type">GstGLWindow</span></a> *window</code></em>);</pre>
+<p>Present the window to the screen.</p>
+<div class="refsect3">
+<a name="gst-gl-window-show.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>window</p></td>
+<td class="parameter_description"><p>a <a class="link" href="GstGLWindow.html" title="GstGLWindow"><span class="type">GstGLWindow</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<p class="since">Since: 1.6</p>
</div>
<hr>
<div class="refsect2">
@@ -437,6 +845,34 @@
gst_gl_window_get_surface_dimensions (<em class="parameter"><code><a class="link" href="GstGLWindow.html" title="GstGLWindow"><span class="type">GstGLWindow</span></a> *window</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="type">guint</span></a> *width</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="type">guint</span></a> *height</code></em>);</pre>
+<div class="refsect3">
+<a name="gst-gl-window-get-surface-dimensions.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>window</p></td>
+<td class="parameter_description"><p>a <a class="link" href="GstGLWindow.html" title="GstGLWindow"><span class="type">GstGLWindow</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>width</p></td>
+<td class="parameter_description"><p> resulting surface width. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>height</p></td>
+<td class="parameter_description"><p> resulting surface height. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 1.6</p>
</div>
<hr>
<div class="refsect2">
@@ -444,6 +880,35 @@
<pre class="programlisting"><span class="returnvalue">void</span>
gst_gl_window_handle_events (<em class="parameter"><code><a class="link" href="GstGLWindow.html" title="GstGLWindow"><span class="type">GstGLWindow</span></a> *window</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> handle_events</code></em>);</pre>
+<p>Tell a <em class="parameter"><code>window</code></em>
+ that it should handle events from the window system. These
+events are forwarded upstream as navigation events. In some window systems
+events are not propagated in the window hierarchy if a client is listening
+for them. This method allows you to disable events handling completely
+from the <em class="parameter"><code>window</code></em>
+.</p>
+<div class="refsect3">
+<a name="gst-gl-window-handle-events.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>window</p></td>
+<td class="parameter_description"><p>a <a class="link" href="GstGLWindow.html" title="GstGLWindow"><span class="type">GstGLWindow</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>handle_events</p></td>
+<td class="parameter_description"><p>a <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> indicating if events should be handled or not.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
</div>
</div>
<div class="refsect1">
@@ -488,6 +953,8 @@
<div class="refsect2">
<a name="GstGLWindow-struct"></a><h3>GstGLWindow</h3>
<pre class="programlisting">typedef struct _GstGLWindow GstGLWindow;</pre>
+<p><a class="link" href="GstGLWindow.html" title="GstGLWindow"><span class="type">GstGLWindow</span></a> is an opaque struct and should only be accessed through the
+provided api.</p>
</div>
<hr>
<div class="refsect2">
@@ -513,6 +980,99 @@
void (*queue_resize) (GstGLWindow *window);
} GstGLWindowClass;
</pre>
+<div class="refsect3">
+<a name="GstGLWindowClass.members"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="300px" class="struct_members_name">
+<col class="struct_members_description">
+<col width="200px" class="struct_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="struct_member_name"><p><em class="structfield"><code><a name="GstGLWindowClass.get-display"></a>get_display</code></em> ()</p></td>
+<td class="struct_member_description"><p>Gets the current windowing system display connection</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><em class="structfield"><code><a name="GstGLWindowClass.set-window-handle"></a>set_window_handle</code></em> ()</p></td>
+<td class="struct_member_description"><p>Set a window to render into</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><em class="structfield"><code><a name="GstGLWindowClass.get-window-handle"></a>get_window_handle</code></em> ()</p></td>
+<td class="struct_member_description"><p>Gets the current window that this <a class="link" href="GstGLWindow.html" title="GstGLWindow"><span class="type">GstGLWindow</span></a> is
+rendering into</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><em class="structfield"><code><a name="GstGLWindowClass.draw"></a>draw</code></em> ()</p></td>
+<td class="struct_member_description"><p>redraw the window with the specified dimensions</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><em class="structfield"><code><a name="GstGLWindowClass.run"></a>run</code></em> ()</p></td>
+<td class="struct_member_description"><p>run the mainloop</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><em class="structfield"><code><a name="GstGLWindowClass.quit"></a>quit</code></em> ()</p></td>
+<td class="struct_member_description"><p>send a quit to the mainloop</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><em class="structfield"><code><a name="GstGLWindowClass.send-message"></a>send_message</code></em> ()</p></td>
+<td class="struct_member_description"><p>invoke a function on the window thread. Required to be reentrant.</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><em class="structfield"><code><a name="GstGLWindowClass.send-message-async"></a>send_message_async</code></em> ()</p></td>
+<td class="struct_member_description"><p>invoke a function on the window thread. <em class="parameter"><code>run</code></em>
+may or may
+not have been called. Required to be reentrant.</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><em class="structfield"><code><a name="GstGLWindowClass.open"></a>open</code></em> ()</p></td>
+<td class="struct_member_description"><p>open the connection to the display</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><em class="structfield"><code><a name="GstGLWindowClass.close"></a>close</code></em> ()</p></td>
+<td class="struct_member_description"><p>close the connection to the display</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><em class="structfield"><code><a name="GstGLWindowClass.handle-events"></a>handle_events</code></em> ()</p></td>
+<td class="struct_member_description"><p>whether to handle 'extra' events from the windowing system.
+Basic events like surface moves and resizes are still valid
+things to listen for.</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><em class="structfield"><code><a name="GstGLWindowClass.set-preferred-size"></a>set_preferred_size</code></em> ()</p></td>
+<td class="struct_member_description"><p>request that the window change surface size. The
+implementation is free to ignore this information.</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><em class="structfield"><code><a name="GstGLWindowClass.show"></a>show</code></em> ()</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><em class="structfield"><code><a name="GstGLWindowClass.set-render-rectangle"></a>set_render_rectangle</code></em> ()</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><em class="structfield"><code><a name="GstGLWindowClass.queue-resize"></a>queue_resize</code></em> ()</p></td>
+<td> </td>
+<td> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
</div>
</div>
<div class="refsect1">
@@ -520,24 +1080,106 @@
<div class="refsect2">
<a name="GstGLWindow-key-event"></a><h3>The <code class="literal">“key-event”</code> signal</h3>
<pre class="programlisting"><span class="returnvalue">void</span>
-user_function (<a class="link" href="GstGLWindow.html" title="GstGLWindow"><span class="type">GstGLWindow</span></a> *gstglwindow,
- <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *arg1,
- <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *arg2,
+user_function (<a class="link" href="GstGLWindow.html" title="GstGLWindow"><span class="type">GstGLWindow</span></a> *object,
+ <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *id,
+ <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *key,
<a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data)</pre>
+<p>Will be emitted when a key event is received by the GstGLwindow.</p>
+<div class="refsect3">
+<a name="GstGLWindow-key-event.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>object</p></td>
+<td class="parameter_description"><p>the <a class="link" href="GstGLWindow.html" title="GstGLWindow"><span class="type">GstGLWindow</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>id</p></td>
+<td class="parameter_description"><p>the name of the event</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>key</p></td>
+<td class="parameter_description"><p>the id of the key pressed</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: <a href="/usr/share/gtk-doc/html/gobjectgobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></p>
+<p class="since">Since: 1.6</p>
</div>
<hr>
<div class="refsect2">
<a name="GstGLWindow-mouse-event"></a><h3>The <code class="literal">“mouse-event”</code> signal</h3>
<pre class="programlisting"><span class="returnvalue">void</span>
-user_function (<a class="link" href="GstGLWindow.html" title="GstGLWindow"><span class="type">GstGLWindow</span></a> *gstglwindow,
- <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *arg1,
- <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint"><span class="type">gint</span></a> arg2,
- <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a> arg3,
- <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a> arg4,
+user_function (<a class="link" href="GstGLWindow.html" title="GstGLWindow"><span class="type">GstGLWindow</span></a> *object,
+ <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *id,
+ <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint"><span class="type">gint</span></a> button,
+ <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a> x,
+ <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a> y,
<a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data)</pre>
-<p>Flags: <a href="/usr/share/gtk-doc/html/gobjectgobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></p>
+<p>Will be emitted when a mouse event is received by the GstGLwindow.</p>
+<div class="refsect3">
+<a name="GstGLWindow-mouse-event.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>object</p></td>
+<td class="parameter_description"><p>the <a class="link" href="GstGLWindow.html" title="GstGLWindow"><span class="type">GstGLWindow</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>id</p></td>
+<td class="parameter_description"><p>the name of the event</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>button</p></td>
+<td class="parameter_description"><p>the id of the button</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>x</p></td>
+<td class="parameter_description"><p>the x coordinate of the mouse event</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>y</p></td>
+<td class="parameter_description"><p>the y coordinate of the mouse event</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: <a href="/usr/share/gtk-doc/html/gobjectgobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></p>
+<p class="since">Since: 1.6</p>
+</div>
+</div>
+<div class="refsect1">
+<a name="GstGLWindow.see-also"></a><h2>See Also</h2>
+<p><a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a>, <a class="link" href="GstGLDisplay.html" title="GstGLDisplay"><span class="type">GstGLDisplay</span></a></p>
</div>
</div>
<div class="footer">
diff --git a/docs/libs/html/annotation-glossary.html b/docs/libs/html/annotation-glossary.html
new file mode 100644
index 0000000..8780676
--- /dev/null
+++ b/docs/libs/html/annotation-glossary.html
@@ -0,0 +1,89 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Annotation Glossary: GStreamer Bad Plugins 1.0 Library Reference Manual</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
+<link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Library Reference Manual">
+<link rel="up" href="index.html" title="GStreamer Bad Plugins 1.0 Library Reference Manual">
+<link rel="prev" href="api-index-deprecated.html" title="Index of deprecated API">
+<meta name="generator" content="GTK-Doc V1.25 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
+<td width="100%" align="left" class="shortcuts"><span id="nav_glossary"><a class="shortcut" href="#glsA">A</a>
+ <span class="dim">|</span>
+ <a class="shortcut" href="#glsC">C</a>
+ <span class="dim">|</span>
+ <a class="shortcut" href="#glsD">D</a>
+ <span class="dim">|</span>
+ <a class="shortcut" href="#glsE">E</a>
+ <span class="dim">|</span>
+ <a class="shortcut" href="#glsO">O</a>
+ <span class="dim">|</span>
+ <a class="shortcut" href="#glsS">S</a>
+ <span class="dim">|</span>
+ <a class="shortcut" href="#glsT">T</a>
+ <span class="dim">|</span>
+ <a class="shortcut" href="#glsU">U</a></span></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
+<td><img src="up-insensitive.png" width="16" height="16" border="0"></td>
+<td><a accesskey="p" href="api-index-deprecated.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><img src="right-insensitive.png" width="16" height="16" border="0"></td>
+</tr></table>
+<div class="glossary">
+<div class="titlepage"><div><div><h1 class="title">
+<a name="annotation-glossary"></a>Annotation Glossary</h1></div></div></div>
+<a name="glsA"></a><h3 class="title">A</h3>
+<dt><span class="glossterm"><a name="annotation-glossterm-allow-none"></a>allow-none</span></dt>
+<dd class="glossdef"><p>NULL is OK, both for passing and for returning.</p></dd>
+<dt><span class="glossterm"><a name="annotation-glossterm-array"></a>array</span></dt>
+<dd class="glossdef"><p>Parameter points to an array of items.</p></dd>
+<a name="glsC"></a><h3 class="title">C</h3>
+<dt><span class="glossterm"><a name="annotation-glossterm-closure"></a>closure</span></dt>
+<dd class="glossdef"><p>This parameter is a 'user_data', for callbacks; many bindings can pass NULL here.</p></dd>
+<a name="glsD"></a><h3 class="title">D</h3>
+<dt><span class="glossterm"><a name="annotation-glossterm-destroy"></a>destroy</span></dt>
+<dd class="glossdef"><p>This parameter is a 'destroy_data', for callbacks.</p></dd>
+<a name="glsE"></a><h3 class="title">E</h3>
+<dt><span class="glossterm"><a name="annotation-glossterm-element-type"></a>element-type</span></dt>
+<dd class="glossdef"><p>Generics and defining elements of containers and arrays.</p></dd>
+<a name="glsO"></a><h3 class="title">O</h3>
+<dt><span class="glossterm"><a name="annotation-glossterm-out"></a>out</span></dt>
+<dd class="glossdef"><p>Parameter for returning results. Default is <acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>.</p></dd>
+<a name="glsS"></a><h3 class="title">S</h3>
+<dt><span class="glossterm"><a name="annotation-glossterm-scope%20async"></a>scope async</span></dt>
+<dd class="glossdef"><p>The callback is valid until first called.</p></dd>
+<dt><span class="glossterm"><a name="annotation-glossterm-scope%20call"></a>scope call</span></dt>
+<dd class="glossdef"><p>The callback is valid only during the call to the method.</p></dd>
+<dt><span class="glossterm"><a name="annotation-glossterm-scope%20notified"></a>scope notified</span></dt>
+<dd class="glossdef"><p>The callback is valid until the GDestroyNotify argument is called.</p></dd>
+<a name="glsT"></a><h3 class="title">T</h3>
+<dt><span class="glossterm"><a name="annotation-glossterm-transfer%20container"></a>transfer container</span></dt>
+<dd class="glossdef"><p>Free data container after the code is done.</p></dd>
+<dt><span class="glossterm"><a name="annotation-glossterm-transfer%20full"></a>transfer full</span></dt>
+<dd class="glossdef"><p>Free data after the code is done.</p></dd>
+<dt><span class="glossterm"><a name="annotation-glossterm-transfer%20none"></a>transfer none</span></dt>
+<dd class="glossdef"><p>Don't free data after the code is done.</p></dd>
+<a name="glsU"></a><h3 class="title">U</h3>
+<dt><span class="glossterm"><a name="annotation-glossterm-Unstable"></a>Unstable</span></dt>
+<dd class="glossdef"><p>Unstable interfaces are experimental or transitional. They are typically used to
+give outside developers early access to new or rapidly changing technology, or
+to provide an interim solution to a problem where a more general solution is
+anticipated. No claims are made about either source or binary compatibility from
+one minor release to the next.
+
+The Unstable interface level is a warning that these interfaces are subject to
+change without warning and should not be used in unbundled products.
+
+Given such caveats, customer impact need not be a factor when considering
+incompatible changes to an Unstable interface in a major or minor release.
+Nonetheless, when such changes are introduced, the changes should still be
+mentioned in the release notes for the affected release.
+</p></dd>
+</div>
+<div class="footer">
+<hr>Generated by GTK-Doc V1.25</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/libs/html/api-index-deprecated.html b/docs/libs/html/api-index-deprecated.html
index 8361576..fbcd723 100644
--- a/docs/libs/html/api-index-deprecated.html
+++ b/docs/libs/html/api-index-deprecated.html
@@ -7,6 +7,7 @@
<link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Library Reference Manual">
<link rel="up" href="index.html" title="GStreamer Bad Plugins 1.0 Library Reference Manual">
<link rel="prev" href="api-index-full.html" title="Index">
+<link rel="next" href="annotation-glossary.html" title="Annotation Glossary">
<meta name="generator" content="GTK-Doc V1.25 (XML mode)">
<link rel="stylesheet" href="style.css" type="text/css">
</head>
@@ -16,7 +17,7 @@
<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
<td><img src="up-insensitive.png" width="16" height="16" border="0"></td>
<td><a accesskey="p" href="api-index-full.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><img src="right-insensitive.png" width="16" height="16" border="0"></td>
+<td><a accesskey="n" href="annotation-glossary.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
</tr></table>
<div class="index">
<div class="titlepage"><div><div><h1 class="title">
diff --git a/docs/libs/html/api-index-full.html b/docs/libs/html/api-index-full.html
index 89ed096..621b26f 100644
--- a/docs/libs/html/api-index-full.html
+++ b/docs/libs/html/api-index-full.html
@@ -220,10 +220,6 @@
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#CDCB:CAPS" title="CDCB ()">CDCB</a>, user_function in <a class="link" href="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html" title="OpenGL Miscellaneous Utilities">OpenGL Miscellaneous Utilities</a>
-</dt>
-<dd></dd>
-<dt>
<a class="link" href="GstGLDisplay.html#gst-context-get-gl-display" title="gst_context_get_gl_display ()">gst_context_get_gl_display</a>, function in <a class="link" href="GstGLDisplay.html" title="GstGLDisplay">GstGLDisplay</a>
</dt>
<dd></dd>
@@ -262,7 +258,7 @@
<dd></dd>
<a name="idxE"></a><h3 class="title">E</h3>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gstmpegtssection.html#gst-event-parse-mpegts-section" title="gst_event_parse_mpegts_section ()">gst_event_parse_mpegts_section</a>, function in <a class="link" href="gst-plugins-bad-libs-gstmpegtssection.html" title="gstmpegtssection">gstmpegtssection</a>
+<a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#gst-event-parse-mpegts-section" title="gst_event_parse_mpegts_section ()">gst_event_parse_mpegts_section</a>, function in <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html" title="Base MPEG-TS sections">Base MPEG-TS sections</a>
</dt>
<dd></dd>
<a name="idxG"></a><h3 class="title">G</h3>
@@ -283,11 +279,11 @@
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gstgldebug.html#GstGLAsyncDebug" title="struct GstGLAsyncDebug">GstGLAsyncDebug</a>, struct in <a class="link" href="gst-plugins-bad-libs-gstgldebug.html" title="OpenGL Debugging">OpenGL Debugging</a>
+<a class="link" href="gst-plugins-bad-libs-OpenGL-debugging.html#GstGLAsyncDebug" title="struct GstGLAsyncDebug">GstGLAsyncDebug</a>, struct in <a class="link" href="gst-plugins-bad-libs-OpenGL-debugging.html" title="OpenGL debugging">OpenGL Debugging</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gstgldebug.html#GstGLAsyncDebugLogGetMessage" title="GstGLAsyncDebugLogGetMessage ()">GstGLAsyncDebugLogGetMessage</a>, user_function in <a class="link" href="gst-plugins-bad-libs-gstgldebug.html" title="OpenGL Debugging">gstgldebug</a>
+<a class="link" href="gst-plugins-bad-libs-OpenGL-debugging.html#GstGLAsyncDebugLogGetMessage" title="GstGLAsyncDebugLogGetMessage ()">GstGLAsyncDebugLogGetMessage</a>, user_function in <a class="link" href="gst-plugins-bad-libs-OpenGL-debugging.html" title="OpenGL debugging">OpenGL debugging</a>
</dt>
<dd></dd>
<dt>
@@ -371,14 +367,6 @@
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#GLCB:CAPS" title="GLCB ()">GLCB</a>, user_function in <a class="link" href="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html" title="OpenGL Miscellaneous Utilities">OpenGL Miscellaneous Utilities</a>
-</dt>
-<dd></dd>
-<dt>
-<a class="link" href="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#GLCB-V2:CAPS" title="GLCB_V2 ()">GLCB_V2</a>, user_function in <a class="link" href="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html" title="OpenGL Miscellaneous Utilities">OpenGL Miscellaneous Utilities</a>
-</dt>
-<dd></dd>
-<dt>
<a class="link" href="GstGLColorConvert.html#GstGLColorConvert-struct" title="GstGLColorConvert">GstGLColorConvert</a>, struct in <a class="link" href="GstGLColorConvert.html" title="GstGLColorConvert">GstGLColorConvert</a>
</dt>
<dd></dd>
@@ -427,10 +415,6 @@
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#GstGLDisplayProjection" title="enum GstGLDisplayProjection">GstGLDisplayProjection</a>, enum in <a class="link" href="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html" title="OpenGL Miscellaneous Utilities">OpenGL Miscellaneous Utilities</a>
-</dt>
-<dd></dd>
-<dt>
<a class="link" href="GstGLDisplay.html#GstGLDisplayType" title="enum GstGLDisplayType">GstGLDisplayType</a>, enum in <a class="link" href="GstGLDisplay.html" title="GstGLDisplay">GstGLDisplay</a>
</dt>
<dd></dd>
@@ -443,7 +427,7 @@
</dt>
<dd></dd>
<dt>
-<a class="link" href="GstGLFramebuffer.html#GstGLFramebuffer-struct" title="struct GstGLFramebuffer">GstGLFramebuffer</a>, struct in <a class="link" href="GstGLFramebuffer.html" title="GstGLFramebuffer">GstGLFramebuffer</a>
+<a class="link" href="GstGLFramebuffer.html#GstGLFramebuffer-struct" title="GstGLFramebuffer">GstGLFramebuffer</a>, struct in <a class="link" href="GstGLFramebuffer.html" title="GstGLFramebuffer">GstGLFramebuffer</a>
</dt>
<dd></dd>
<dt>
@@ -779,47 +763,47 @@
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gstgldebug.html#GST-GL-ASYNC-CAT-LEVEL-LOG:CAPS" title="GST_GL_ASYNC_CAT_LEVEL_LOG()">GST_GL_ASYNC_CAT_LEVEL_LOG</a>, macro in <a class="link" href="gst-plugins-bad-libs-gstgldebug.html" title="OpenGL Debugging">OpenGL Debugging</a>
+<a class="link" href="gst-plugins-bad-libs-OpenGL-debugging.html#GST-GL-ASYNC-CAT-LEVEL-LOG:CAPS" title="GST_GL_ASYNC_CAT_LEVEL_LOG()">GST_GL_ASYNC_CAT_LEVEL_LOG</a>, macro in <a class="link" href="gst-plugins-bad-libs-OpenGL-debugging.html" title="OpenGL debugging">OpenGL Debugging</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gstgldebug.html#GST-GL-ASYNC-CAT-LEVEL-LOG-valist" title="GST_GL_ASYNC_CAT_LEVEL_LOG_valist()">GST_GL_ASYNC_CAT_LEVEL_LOG_valist</a>, macro in <a class="link" href="gst-plugins-bad-libs-gstgldebug.html" title="OpenGL Debugging">OpenGL Debugging</a>
+<a class="link" href="gst-plugins-bad-libs-OpenGL-debugging.html#GST-GL-ASYNC-CAT-LEVEL-LOG-valist" title="GST_GL_ASYNC_CAT_LEVEL_LOG_valist()">GST_GL_ASYNC_CAT_LEVEL_LOG_valist</a>, macro in <a class="link" href="gst-plugins-bad-libs-OpenGL-debugging.html" title="OpenGL debugging">OpenGL Debugging</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gstgldebug.html#gst-gl-async-debug-free" title="gst_gl_async_debug_free ()">gst_gl_async_debug_free</a>, function in <a class="link" href="gst-plugins-bad-libs-gstgldebug.html" title="OpenGL Debugging">OpenGL Debugging</a>
+<a class="link" href="gst-plugins-bad-libs-OpenGL-debugging.html#gst-gl-async-debug-free" title="gst_gl_async_debug_free ()">gst_gl_async_debug_free</a>, function in <a class="link" href="gst-plugins-bad-libs-OpenGL-debugging.html" title="OpenGL debugging">OpenGL Debugging</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gstgldebug.html#gst-gl-async-debug-freeze" title="gst_gl_async_debug_freeze ()">gst_gl_async_debug_freeze</a>, function in <a class="link" href="gst-plugins-bad-libs-gstgldebug.html" title="OpenGL Debugging">OpenGL Debugging</a>
+<a class="link" href="gst-plugins-bad-libs-OpenGL-debugging.html#gst-gl-async-debug-freeze" title="gst_gl_async_debug_freeze ()">gst_gl_async_debug_freeze</a>, function in <a class="link" href="gst-plugins-bad-libs-OpenGL-debugging.html" title="OpenGL debugging">OpenGL Debugging</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gstgldebug.html#gst-gl-async-debug-init" title="gst_gl_async_debug_init ()">gst_gl_async_debug_init</a>, function in <a class="link" href="gst-plugins-bad-libs-gstgldebug.html" title="OpenGL Debugging">OpenGL Debugging</a>
+<a class="link" href="gst-plugins-bad-libs-OpenGL-debugging.html#gst-gl-async-debug-init" title="gst_gl_async_debug_init ()">gst_gl_async_debug_init</a>, function in <a class="link" href="gst-plugins-bad-libs-OpenGL-debugging.html" title="OpenGL debugging">OpenGL Debugging</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gstgldebug.html#gst-gl-async-debug-new" title="gst_gl_async_debug_new ()">gst_gl_async_debug_new</a>, function in <a class="link" href="gst-plugins-bad-libs-gstgldebug.html" title="OpenGL Debugging">OpenGL Debugging</a>
+<a class="link" href="gst-plugins-bad-libs-OpenGL-debugging.html#gst-gl-async-debug-new" title="gst_gl_async_debug_new ()">gst_gl_async_debug_new</a>, function in <a class="link" href="gst-plugins-bad-libs-OpenGL-debugging.html" title="OpenGL debugging">OpenGL Debugging</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gstgldebug.html#gst-gl-async-debug-output-log-msg" title="gst_gl_async_debug_output_log_msg ()">gst_gl_async_debug_output_log_msg</a>, function in <a class="link" href="gst-plugins-bad-libs-gstgldebug.html" title="OpenGL Debugging">OpenGL Debugging</a>
+<a class="link" href="gst-plugins-bad-libs-OpenGL-debugging.html#gst-gl-async-debug-output-log-msg" title="gst_gl_async_debug_output_log_msg ()">gst_gl_async_debug_output_log_msg</a>, function in <a class="link" href="gst-plugins-bad-libs-OpenGL-debugging.html" title="OpenGL debugging">OpenGL Debugging</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gstgldebug.html#gst-gl-async-debug-store-log-msg" title="gst_gl_async_debug_store_log_msg ()">gst_gl_async_debug_store_log_msg</a>, function in <a class="link" href="gst-plugins-bad-libs-gstgldebug.html" title="OpenGL Debugging">OpenGL Debugging</a>
+<a class="link" href="gst-plugins-bad-libs-OpenGL-debugging.html#gst-gl-async-debug-store-log-msg" title="gst_gl_async_debug_store_log_msg ()">gst_gl_async_debug_store_log_msg</a>, function in <a class="link" href="gst-plugins-bad-libs-OpenGL-debugging.html" title="OpenGL debugging">OpenGL Debugging</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gstgldebug.html#gst-gl-async-debug-store-log-msg-valist" title="gst_gl_async_debug_store_log_msg_valist ()">gst_gl_async_debug_store_log_msg_valist</a>, function in <a class="link" href="gst-plugins-bad-libs-gstgldebug.html" title="OpenGL Debugging">OpenGL Debugging</a>
+<a class="link" href="gst-plugins-bad-libs-OpenGL-debugging.html#gst-gl-async-debug-store-log-msg-valist" title="gst_gl_async_debug_store_log_msg_valist ()">gst_gl_async_debug_store_log_msg_valist</a>, function in <a class="link" href="gst-plugins-bad-libs-OpenGL-debugging.html" title="OpenGL debugging">OpenGL Debugging</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gstgldebug.html#gst-gl-async-debug-thaw" title="gst_gl_async_debug_thaw ()">gst_gl_async_debug_thaw</a>, function in <a class="link" href="gst-plugins-bad-libs-gstgldebug.html" title="OpenGL Debugging">OpenGL Debugging</a>
+<a class="link" href="gst-plugins-bad-libs-OpenGL-debugging.html#gst-gl-async-debug-thaw" title="gst_gl_async_debug_thaw ()">gst_gl_async_debug_thaw</a>, function in <a class="link" href="gst-plugins-bad-libs-OpenGL-debugging.html" title="OpenGL debugging">OpenGL Debugging</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gstgldebug.html#gst-gl-async-debug-unset" title="gst_gl_async_debug_unset ()">gst_gl_async_debug_unset</a>, function in <a class="link" href="gst-plugins-bad-libs-gstgldebug.html" title="OpenGL Debugging">OpenGL Debugging</a>
+<a class="link" href="gst-plugins-bad-libs-OpenGL-debugging.html#gst-gl-async-debug-unset" title="gst_gl_async_debug_unset ()">gst_gl_async_debug_unset</a>, function in <a class="link" href="gst-plugins-bad-libs-OpenGL-debugging.html" title="OpenGL debugging">OpenGL Debugging</a>
</dt>
<dd></dd>
<dt>
@@ -951,10 +935,6 @@
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#gst-gl-context-del-fbo" title="gst_gl_context_del_fbo ()">gst_gl_context_del_fbo</a>, function in <a class="link" href="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html" title="OpenGL Miscellaneous Utilities">OpenGL Miscellaneous Utilities</a>
-</dt>
-<dd></dd>
-<dt>
<a class="link" href="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#gst-gl-context-del-shader" title="gst_gl_context_del_shader ()">gst_gl_context_del_shader</a>, function in <a class="link" href="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html" title="OpenGL Miscellaneous Utilities">OpenGL Miscellaneous Utilities</a>
</dt>
<dd></dd>
@@ -995,10 +975,6 @@
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#gst-gl-context-gen-fbo" title="gst_gl_context_gen_fbo ()">gst_gl_context_gen_fbo</a>, function in <a class="link" href="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html" title="OpenGL Miscellaneous Utilities">OpenGL Miscellaneous Utilities</a>
-</dt>
-<dd></dd>
-<dt>
<a class="link" href="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#gst-gl-context-gen-shader" title="gst_gl_context_gen_shader ()">gst_gl_context_gen_shader</a>, function in <a class="link" href="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html" title="OpenGL Miscellaneous Utilities">OpenGL Miscellaneous Utilities</a>
</dt>
<dd></dd>
@@ -1019,10 +995,6 @@
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#gst-gl-context-get-error" title="gst_gl_context_get_error ()">gst_gl_context_get_error</a>, function in <a class="link" href="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html" title="OpenGL Miscellaneous Utilities">OpenGL Miscellaneous Utilities</a>
-</dt>
-<dd></dd>
-<dt>
<a class="link" href="GstGLContext.html#gst-gl-context-get-gl-api" title="gst_gl_context_get_gl_api ()">gst_gl_context_get_gl_api</a>, function in <a class="link" href="GstGLContext.html" title="GstGLContext">GstGLContext</a>
</dt>
<dd></dd>
@@ -1079,10 +1051,6 @@
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#gst-gl-context-set-error" title="gst_gl_context_set_error ()">gst_gl_context_set_error</a>, function in <a class="link" href="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html" title="OpenGL Miscellaneous Utilities">OpenGL Miscellaneous Utilities</a>
-</dt>
-<dd></dd>
-<dt>
<a class="link" href="GstGLContext.html#gst-gl-context-set-shared-with" title="gst_gl_context_set_shared_with ()">gst_gl_context_set_shared_with</a>, function in <a class="link" href="GstGLContext.html" title="GstGLContext">GstGLContext</a>
</dt>
<dd></dd>
@@ -1099,10 +1067,6 @@
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#gst-gl-context-use-fbo-v2" title="gst_gl_context_use_fbo_v2 ()">gst_gl_context_use_fbo_v2</a>, function in <a class="link" href="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html" title="OpenGL Miscellaneous Utilities">OpenGL Miscellaneous Utilities</a>
-</dt>
-<dd></dd>
-<dt>
<a class="link" href="gst-plugins-bad-libs-GstGLContextWGL.html#gst-gl-context-wgl-get-current-context" title="gst_gl_context_wgl_get_current_context ()">gst_gl_context_wgl_get_current_context</a>, function in <a class="link" href="gst-plugins-bad-libs-GstGLContextWGL.html" title="GstGLContextWGL">GstGLContextWGL</a>
</dt>
<dd></dd>
@@ -1155,10 +1119,6 @@
</dt>
<dd></dd>
<dt>
-<a class="link" href="GstGLFilter.html#gst-gl-filter-draw-texture" title="gst_gl_filter_draw_texture ()">gst_gl_filter_draw_texture</a>, function in <a class="link" href="GstGLFilter.html" title="GstGLFilter">GstGLFilter</a>
-</dt>
-<dd></dd>
-<dt>
<a class="link" href="GstGLFilter.html#gst-gl-filter-filter-texture" title="gst_gl_filter_filter_texture ()">gst_gl_filter_filter_texture</a>, function in <a class="link" href="GstGLFilter.html" title="GstGLFilter">GstGLFilter</a>
</dt>
<dd></dd>
@@ -1179,22 +1139,10 @@
</dt>
<dd></dd>
<dt>
-<a class="link" href="GstGLFramebuffer.html#gst-gl-framebuffer-delete" title="gst_gl_framebuffer_delete ()">gst_gl_framebuffer_delete</a>, function in <a class="link" href="GstGLFramebuffer.html" title="GstGLFramebuffer">GstGLFramebuffer</a>
-</dt>
-<dd></dd>
-<dt>
-<a class="link" href="GstGLFramebuffer.html#gst-gl-framebuffer-generate" title="gst_gl_framebuffer_generate ()">gst_gl_framebuffer_generate</a>, function in <a class="link" href="GstGLFramebuffer.html" title="GstGLFramebuffer">GstGLFramebuffer</a>
-</dt>
-<dd></dd>
-<dt>
<a class="link" href="GstGLFramebuffer.html#gst-gl-framebuffer-new" title="gst_gl_framebuffer_new ()">gst_gl_framebuffer_new</a>, function in <a class="link" href="GstGLFramebuffer.html" title="GstGLFramebuffer">GstGLFramebuffer</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="GstGLFramebuffer.html#gst-gl-framebuffer-use-v2" title="gst_gl_framebuffer_use_v2 ()">gst_gl_framebuffer_use_v2</a>, function in <a class="link" href="GstGLFramebuffer.html" title="GstGLFramebuffer">GstGLFramebuffer</a>
-</dt>
-<dd></dd>
-<dt>
<a class="link" href="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#gst-gl-get-plane-data-size" title="gst_gl_get_plane_data_size ()">gst_gl_get_plane_data_size</a>, function in <a class="link" href="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html" title="OpenGL Miscellaneous Utilities">OpenGL Miscellaneous Utilities</a>
</dt>
<dd></dd>
@@ -1211,7 +1159,7 @@
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gstgldebug.html#gst-gl-insert-debug-marker" title="gst_gl_insert_debug_marker ()">gst_gl_insert_debug_marker</a>, function in <a class="link" href="gst-plugins-bad-libs-gstgldebug.html" title="OpenGL Debugging">OpenGL Debugging</a>
+<a class="link" href="gst-plugins-bad-libs-OpenGL-debugging.html#gst-gl-insert-debug-marker" title="gst_gl_insert_debug_marker ()">gst_gl_insert_debug_marker</a>, function in <a class="link" href="gst-plugins-bad-libs-OpenGL-debugging.html" title="OpenGL debugging">OpenGL Debugging</a>
</dt>
<dd></dd>
<dt>
@@ -2147,11 +2095,11 @@
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gstmpegtssection.html#gst-message-new-mpegts-section" title="gst_message_new_mpegts_section ()">gst_message_new_mpegts_section</a>, function in <a class="link" href="gst-plugins-bad-libs-gstmpegtssection.html" title="gstmpegtssection">gstmpegtssection</a>
+<a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#gst-message-new-mpegts-section" title="gst_message_new_mpegts_section ()">gst_message_new_mpegts_section</a>, function in <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html" title="Base MPEG-TS sections">Base MPEG-TS sections</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gstmpegtssection.html#gst-message-parse-mpegts-section" title="gst_message_parse_mpegts_section ()">gst_message_parse_mpegts_section</a>, function in <a class="link" href="gst-plugins-bad-libs-gstmpegtssection.html" title="gstmpegtssection">gstmpegtssection</a>
+<a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#gst-message-parse-mpegts-section" title="gst_message_parse_mpegts_section ()">gst_message_parse_mpegts_section</a>, function in <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html" title="Base MPEG-TS sections">Base MPEG-TS sections</a>
</dt>
<dd></dd>
<dt>
@@ -2267,647 +2215,647 @@
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gst-atsc-descriptor.html#GstMpegtsATSCDescriptorType" title="enum GstMpegtsATSCDescriptorType">GstMpegtsATSCDescriptorType</a>, enum in <a class="link" href="gst-plugins-bad-libs-gst-atsc-descriptor.html" title="gst-atsc-descriptor">gst-atsc-descriptor</a>
+<a class="link" href="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-descriptors.html#GstMpegtsATSCDescriptorType" title="enum GstMpegtsATSCDescriptorType">GstMpegtsATSCDescriptorType</a>, enum in <a class="link" href="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-descriptors.html" title="ATSC variants of MPEG-TS descriptors">ATSC variants of MPEG-TS descriptors</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gst-atsc-section.html#GstMpegtsAtscEIT" title="struct GstMpegtsAtscEIT">GstMpegtsAtscEIT</a>, struct in <a class="link" href="gst-plugins-bad-libs-gst-atsc-section.html" title="gst-atsc-section">gst-atsc-section</a>
+<a class="link" href="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html#GstMpegtsAtscEIT" title="struct GstMpegtsAtscEIT">GstMpegtsAtscEIT</a>, struct in <a class="link" href="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html" title="ATSC variants of MPEG-TS sections">ATSC variants of MPEG-TS sections</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gst-atsc-section.html#GstMpegtsAtscEITEvent" title="struct GstMpegtsAtscEITEvent">GstMpegtsAtscEITEvent</a>, struct in <a class="link" href="gst-plugins-bad-libs-gst-atsc-section.html" title="gst-atsc-section">gst-atsc-section</a>
+<a class="link" href="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html#GstMpegtsAtscEITEvent" title="struct GstMpegtsAtscEITEvent">GstMpegtsAtscEITEvent</a>, struct in <a class="link" href="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html" title="ATSC variants of MPEG-TS sections">ATSC variants of MPEG-TS sections</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gst-atsc-section.html#GstMpegtsAtscETT" title="struct GstMpegtsAtscETT">GstMpegtsAtscETT</a>, struct in <a class="link" href="gst-plugins-bad-libs-gst-atsc-section.html" title="gst-atsc-section">gst-atsc-section</a>
+<a class="link" href="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html#GstMpegtsAtscETT" title="struct GstMpegtsAtscETT">GstMpegtsAtscETT</a>, struct in <a class="link" href="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html" title="ATSC variants of MPEG-TS sections">ATSC variants of MPEG-TS sections</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gst-atsc-section.html#GstMpegtsAtscMGT" title="struct GstMpegtsAtscMGT">GstMpegtsAtscMGT</a>, struct in <a class="link" href="gst-plugins-bad-libs-gst-atsc-section.html" title="gst-atsc-section">gst-atsc-section</a>
+<a class="link" href="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html#GstMpegtsAtscMGT" title="struct GstMpegtsAtscMGT">GstMpegtsAtscMGT</a>, struct in <a class="link" href="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html" title="ATSC variants of MPEG-TS sections">ATSC variants of MPEG-TS sections</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gst-atsc-section.html#GstMpegtsAtscMGTTable" title="struct GstMpegtsAtscMGTTable">GstMpegtsAtscMGTTable</a>, struct in <a class="link" href="gst-plugins-bad-libs-gst-atsc-section.html" title="gst-atsc-section">gst-atsc-section</a>
+<a class="link" href="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html#GstMpegtsAtscMGTTable" title="struct GstMpegtsAtscMGTTable">GstMpegtsAtscMGTTable</a>, struct in <a class="link" href="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html" title="ATSC variants of MPEG-TS sections">ATSC variants of MPEG-TS sections</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gst-atsc-section.html#GstMpegtsAtscMGTTableType" title="enum GstMpegtsAtscMGTTableType">GstMpegtsAtscMGTTableType</a>, enum in <a class="link" href="gst-plugins-bad-libs-gst-atsc-section.html" title="gst-atsc-section">gst-atsc-section</a>
+<a class="link" href="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html#GstMpegtsAtscMGTTableType" title="enum GstMpegtsAtscMGTTableType">GstMpegtsAtscMGTTableType</a>, enum in <a class="link" href="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html" title="ATSC variants of MPEG-TS sections">ATSC variants of MPEG-TS sections</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gst-atsc-section.html#GstMpegtsAtscMultString" title="struct GstMpegtsAtscMultString">GstMpegtsAtscMultString</a>, struct in <a class="link" href="gst-plugins-bad-libs-gst-atsc-section.html" title="gst-atsc-section">gst-atsc-section</a>
+<a class="link" href="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html#GstMpegtsAtscMultString" title="struct GstMpegtsAtscMultString">GstMpegtsAtscMultString</a>, struct in <a class="link" href="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html" title="ATSC variants of MPEG-TS sections">ATSC variants of MPEG-TS sections</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gst-atsc-section.html#GstMpegtsAtscSTT" title="struct GstMpegtsAtscSTT">GstMpegtsAtscSTT</a>, struct in <a class="link" href="gst-plugins-bad-libs-gst-atsc-section.html" title="gst-atsc-section">gst-atsc-section</a>
+<a class="link" href="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html#GstMpegtsAtscSTT" title="struct GstMpegtsAtscSTT">GstMpegtsAtscSTT</a>, struct in <a class="link" href="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html" title="ATSC variants of MPEG-TS sections">ATSC variants of MPEG-TS sections</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gst-atsc-section.html#GstMpegtsAtscVCT" title="struct GstMpegtsAtscVCT">GstMpegtsAtscVCT</a>, struct in <a class="link" href="gst-plugins-bad-libs-gst-atsc-section.html" title="gst-atsc-section">gst-atsc-section</a>
+<a class="link" href="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html#GstMpegtsAtscVCT" title="struct GstMpegtsAtscVCT">GstMpegtsAtscVCT</a>, struct in <a class="link" href="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html" title="ATSC variants of MPEG-TS sections">ATSC variants of MPEG-TS sections</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gst-atsc-section.html#GstMpegtsAtscVCTSource" title="struct GstMpegtsAtscVCTSource">GstMpegtsAtscVCTSource</a>, struct in <a class="link" href="gst-plugins-bad-libs-gst-atsc-section.html" title="gst-atsc-section">gst-atsc-section</a>
+<a class="link" href="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html#GstMpegtsAtscVCTSource" title="struct GstMpegtsAtscVCTSource">GstMpegtsAtscVCTSource</a>, struct in <a class="link" href="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html" title="ATSC variants of MPEG-TS sections">ATSC variants of MPEG-TS sections</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-section.html#GstMpegtsBAT" title="struct GstMpegtsBAT">GstMpegtsBAT</a>, struct in <a class="link" href="gst-plugins-bad-libs-gst-dvb-section.html" title="gst-dvb-section">gst-dvb-section</a>
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#GstMpegtsBAT" title="struct GstMpegtsBAT">GstMpegtsBAT</a>, struct in <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html" title="DVB variants of MPEG-TS sections">DVB variants of MPEG-TS sections</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-section.html#GstMpegtsBATStream" title="struct GstMpegtsBATStream">GstMpegtsBATStream</a>, struct in <a class="link" href="gst-plugins-bad-libs-gst-dvb-section.html" title="gst-dvb-section">gst-dvb-section</a>
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#GstMpegtsBATStream" title="struct GstMpegtsBATStream">GstMpegtsBATStream</a>, struct in <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html" title="DVB variants of MPEG-TS sections">DVB variants of MPEG-TS sections</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#GstMpegtsCableDeliverySystemDescriptor" title="struct GstMpegtsCableDeliverySystemDescriptor">GstMpegtsCableDeliverySystemDescriptor</a>, struct in <a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html" title="gst-dvb-descriptor">gst-dvb-descriptor</a>
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsCableDeliverySystemDescriptor" title="struct GstMpegtsCableDeliverySystemDescriptor">GstMpegtsCableDeliverySystemDescriptor</a>, struct in <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html" title="DVB variants of MPEG-TS descriptors">DVB variants of MPEG-TS descriptors</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#GstMpegtsCableOuterFECScheme" title="enum GstMpegtsCableOuterFECScheme">GstMpegtsCableOuterFECScheme</a>, enum in <a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html" title="gst-dvb-descriptor">gst-dvb-descriptor</a>
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsCableOuterFECScheme" title="enum GstMpegtsCableOuterFECScheme">GstMpegtsCableOuterFECScheme</a>, enum in <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html" title="DVB variants of MPEG-TS descriptors">DVB variants of MPEG-TS descriptors</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#GstMpegtsComponentDescriptor" title="struct GstMpegtsComponentDescriptor">GstMpegtsComponentDescriptor</a>, struct in <a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html" title="gst-dvb-descriptor">gst-dvb-descriptor</a>
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsComponentDescriptor" title="struct GstMpegtsComponentDescriptor">GstMpegtsComponentDescriptor</a>, struct in <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html" title="DVB variants of MPEG-TS descriptors">DVB variants of MPEG-TS descriptors</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#GstMpegtsContent" title="struct GstMpegtsContent">GstMpegtsContent</a>, struct in <a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html" title="gst-dvb-descriptor">gst-dvb-descriptor</a>
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsContent" title="struct GstMpegtsContent">GstMpegtsContent</a>, struct in <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html" title="DVB variants of MPEG-TS descriptors">DVB variants of MPEG-TS descriptors</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#GstMpegtsDataBroadcastDescriptor" title="struct GstMpegtsDataBroadcastDescriptor">GstMpegtsDataBroadcastDescriptor</a>, struct in <a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html" title="gst-dvb-descriptor">gst-dvb-descriptor</a>
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsDataBroadcastDescriptor" title="struct GstMpegtsDataBroadcastDescriptor">GstMpegtsDataBroadcastDescriptor</a>, struct in <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html" title="DVB variants of MPEG-TS descriptors">DVB variants of MPEG-TS descriptors</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gstmpegtsdescriptor.html#GstMpegtsDescriptor-struct" title="struct GstMpegtsDescriptor">GstMpegtsDescriptor</a>, struct in <a class="link" href="gst-plugins-bad-libs-gstmpegtsdescriptor.html" title="gstmpegtsdescriptor">gstmpegtsdescriptor</a>
+<a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GstMpegtsDescriptor-struct" title="struct GstMpegtsDescriptor">GstMpegtsDescriptor</a>, struct in <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html" title="Base MPEG-TS descriptors">Base MPEG-TS descriptors</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gstmpegtsdescriptor.html#GstMpegtsDescriptorType" title="enum GstMpegtsDescriptorType">GstMpegtsDescriptorType</a>, enum in <a class="link" href="gst-plugins-bad-libs-gstmpegtsdescriptor.html" title="gstmpegtsdescriptor">gstmpegtsdescriptor</a>
+<a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GstMpegtsDescriptorType" title="enum GstMpegtsDescriptorType">GstMpegtsDescriptorType</a>, enum in <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html" title="Base MPEG-TS descriptors">Base MPEG-TS descriptors</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#GstMpegtsDVBCodeRate" title="enum GstMpegtsDVBCodeRate">GstMpegtsDVBCodeRate</a>, enum in <a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html" title="gst-dvb-descriptor">gst-dvb-descriptor</a>
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsDVBCodeRate" title="enum GstMpegtsDVBCodeRate">GstMpegtsDVBCodeRate</a>, enum in <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html" title="DVB variants of MPEG-TS descriptors">DVB variants of MPEG-TS descriptors</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#GstMpegtsDVBDescriptorType" title="enum GstMpegtsDVBDescriptorType">GstMpegtsDVBDescriptorType</a>, enum in <a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html" title="gst-dvb-descriptor">gst-dvb-descriptor</a>
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsDVBDescriptorType" title="enum GstMpegtsDVBDescriptorType">GstMpegtsDVBDescriptorType</a>, enum in <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html" title="DVB variants of MPEG-TS descriptors">DVB variants of MPEG-TS descriptors</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#GstMpegtsDVBExtendedDescriptorType" title="enum GstMpegtsDVBExtendedDescriptorType">GstMpegtsDVBExtendedDescriptorType</a>, enum in <a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html" title="gst-dvb-descriptor">gst-dvb-descriptor</a>
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsDVBExtendedDescriptorType" title="enum GstMpegtsDVBExtendedDescriptorType">GstMpegtsDVBExtendedDescriptorType</a>, enum in <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html" title="DVB variants of MPEG-TS descriptors">DVB variants of MPEG-TS descriptors</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#GstMpegtsDVBLinkageDescriptor" title="struct GstMpegtsDVBLinkageDescriptor">GstMpegtsDVBLinkageDescriptor</a>, struct in <a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html" title="gst-dvb-descriptor">gst-dvb-descriptor</a>
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsDVBLinkageDescriptor" title="struct GstMpegtsDVBLinkageDescriptor">GstMpegtsDVBLinkageDescriptor</a>, struct in <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html" title="DVB variants of MPEG-TS descriptors">DVB variants of MPEG-TS descriptors</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#GstMpegtsDVBLinkageEvent" title="struct GstMpegtsDVBLinkageEvent">GstMpegtsDVBLinkageEvent</a>, struct in <a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html" title="gst-dvb-descriptor">gst-dvb-descriptor</a>
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsDVBLinkageEvent" title="struct GstMpegtsDVBLinkageEvent">GstMpegtsDVBLinkageEvent</a>, struct in <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html" title="DVB variants of MPEG-TS descriptors">DVB variants of MPEG-TS descriptors</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#GstMpegtsDVBLinkageExtendedEvent" title="struct GstMpegtsDVBLinkageExtendedEvent">GstMpegtsDVBLinkageExtendedEvent</a>, struct in <a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html" title="gst-dvb-descriptor">gst-dvb-descriptor</a>
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsDVBLinkageExtendedEvent" title="struct GstMpegtsDVBLinkageExtendedEvent">GstMpegtsDVBLinkageExtendedEvent</a>, struct in <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html" title="DVB variants of MPEG-TS descriptors">DVB variants of MPEG-TS descriptors</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#GstMpegtsDVBLinkageHandOverType" title="enum GstMpegtsDVBLinkageHandOverType">GstMpegtsDVBLinkageHandOverType</a>, enum in <a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html" title="gst-dvb-descriptor">gst-dvb-descriptor</a>
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsDVBLinkageHandOverType" title="enum GstMpegtsDVBLinkageHandOverType">GstMpegtsDVBLinkageHandOverType</a>, enum in <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html" title="DVB variants of MPEG-TS descriptors">DVB variants of MPEG-TS descriptors</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#GstMpegtsDVBLinkageMobileHandOver" title="struct GstMpegtsDVBLinkageMobileHandOver">GstMpegtsDVBLinkageMobileHandOver</a>, struct in <a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html" title="gst-dvb-descriptor">gst-dvb-descriptor</a>
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsDVBLinkageMobileHandOver" title="struct GstMpegtsDVBLinkageMobileHandOver">GstMpegtsDVBLinkageMobileHandOver</a>, struct in <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html" title="DVB variants of MPEG-TS descriptors">DVB variants of MPEG-TS descriptors</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#GstMpegtsDVBLinkageType" title="enum GstMpegtsDVBLinkageType">GstMpegtsDVBLinkageType</a>, enum in <a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html" title="gst-dvb-descriptor">gst-dvb-descriptor</a>
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsDVBLinkageType" title="enum GstMpegtsDVBLinkageType">GstMpegtsDVBLinkageType</a>, enum in <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html" title="DVB variants of MPEG-TS descriptors">DVB variants of MPEG-TS descriptors</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#GstMpegtsDvbMultilingualBouquetNameItem" title="struct GstMpegtsDvbMultilingualBouquetNameItem">GstMpegtsDvbMultilingualBouquetNameItem</a>, struct in <a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html" title="gst-dvb-descriptor">gst-dvb-descriptor</a>
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsDvbMultilingualBouquetNameItem" title="struct GstMpegtsDvbMultilingualBouquetNameItem">GstMpegtsDvbMultilingualBouquetNameItem</a>, struct in <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html" title="DVB variants of MPEG-TS descriptors">DVB variants of MPEG-TS descriptors</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#GstMpegtsDvbMultilingualComponentItem" title="struct GstMpegtsDvbMultilingualComponentItem">GstMpegtsDvbMultilingualComponentItem</a>, struct in <a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html" title="gst-dvb-descriptor">gst-dvb-descriptor</a>
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsDvbMultilingualComponentItem" title="struct GstMpegtsDvbMultilingualComponentItem">GstMpegtsDvbMultilingualComponentItem</a>, struct in <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html" title="DVB variants of MPEG-TS descriptors">DVB variants of MPEG-TS descriptors</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#GstMpegtsDvbMultilingualNetworkNameItem" title="struct GstMpegtsDvbMultilingualNetworkNameItem">GstMpegtsDvbMultilingualNetworkNameItem</a>, struct in <a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html" title="gst-dvb-descriptor">gst-dvb-descriptor</a>
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsDvbMultilingualNetworkNameItem" title="struct GstMpegtsDvbMultilingualNetworkNameItem">GstMpegtsDvbMultilingualNetworkNameItem</a>, struct in <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html" title="DVB variants of MPEG-TS descriptors">DVB variants of MPEG-TS descriptors</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#GstMpegtsDvbMultilingualServiceNameItem" title="struct GstMpegtsDvbMultilingualServiceNameItem">GstMpegtsDvbMultilingualServiceNameItem</a>, struct in <a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html" title="gst-dvb-descriptor">gst-dvb-descriptor</a>
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsDvbMultilingualServiceNameItem" title="struct GstMpegtsDvbMultilingualServiceNameItem">GstMpegtsDvbMultilingualServiceNameItem</a>, struct in <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html" title="DVB variants of MPEG-TS descriptors">DVB variants of MPEG-TS descriptors</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#GstMpegtsDVBParentalRatingItem" title="struct GstMpegtsDVBParentalRatingItem">GstMpegtsDVBParentalRatingItem</a>, struct in <a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html" title="gst-dvb-descriptor">gst-dvb-descriptor</a>
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsDVBParentalRatingItem" title="struct GstMpegtsDVBParentalRatingItem">GstMpegtsDVBParentalRatingItem</a>, struct in <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html" title="DVB variants of MPEG-TS descriptors">DVB variants of MPEG-TS descriptors</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#GstMpegtsDVBScramblingModeType" title="enum GstMpegtsDVBScramblingModeType">GstMpegtsDVBScramblingModeType</a>, enum in <a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html" title="gst-dvb-descriptor">gst-dvb-descriptor</a>
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsDVBScramblingModeType" title="enum GstMpegtsDVBScramblingModeType">GstMpegtsDVBScramblingModeType</a>, enum in <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html" title="DVB variants of MPEG-TS descriptors">DVB variants of MPEG-TS descriptors</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#GstMpegtsDVBServiceListItem" title="struct GstMpegtsDVBServiceListItem">GstMpegtsDVBServiceListItem</a>, struct in <a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html" title="gst-dvb-descriptor">gst-dvb-descriptor</a>
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsDVBServiceListItem" title="struct GstMpegtsDVBServiceListItem">GstMpegtsDVBServiceListItem</a>, struct in <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html" title="DVB variants of MPEG-TS descriptors">DVB variants of MPEG-TS descriptors</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#GstMpegtsDVBServiceType" title="enum GstMpegtsDVBServiceType">GstMpegtsDVBServiceType</a>, enum in <a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html" title="gst-dvb-descriptor">gst-dvb-descriptor</a>
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsDVBServiceType" title="enum GstMpegtsDVBServiceType">GstMpegtsDVBServiceType</a>, enum in <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html" title="DVB variants of MPEG-TS descriptors">DVB variants of MPEG-TS descriptors</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#GstMpegtsDVBTeletextType" title="enum GstMpegtsDVBTeletextType">GstMpegtsDVBTeletextType</a>, enum in <a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html" title="gst-dvb-descriptor">gst-dvb-descriptor</a>
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsDVBTeletextType" title="enum GstMpegtsDVBTeletextType">GstMpegtsDVBTeletextType</a>, enum in <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html" title="DVB variants of MPEG-TS descriptors">DVB variants of MPEG-TS descriptors</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-section.html#GstMpegtsEIT" title="struct GstMpegtsEIT">GstMpegtsEIT</a>, struct in <a class="link" href="gst-plugins-bad-libs-gst-dvb-section.html" title="gst-dvb-section">gst-dvb-section</a>
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#GstMpegtsEIT" title="struct GstMpegtsEIT">GstMpegtsEIT</a>, struct in <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html" title="DVB variants of MPEG-TS sections">DVB variants of MPEG-TS sections</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-section.html#GstMpegtsEITEvent" title="struct GstMpegtsEITEvent">GstMpegtsEITEvent</a>, struct in <a class="link" href="gst-plugins-bad-libs-gst-dvb-section.html" title="gst-dvb-section">gst-dvb-section</a>
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#GstMpegtsEITEvent" title="struct GstMpegtsEITEvent">GstMpegtsEITEvent</a>, struct in <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html" title="DVB variants of MPEG-TS sections">DVB variants of MPEG-TS sections</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#GstMpegtsExtendedEventDescriptor" title="struct GstMpegtsExtendedEventDescriptor">GstMpegtsExtendedEventDescriptor</a>, struct in <a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html" title="gst-dvb-descriptor">gst-dvb-descriptor</a>
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsExtendedEventDescriptor" title="struct GstMpegtsExtendedEventDescriptor">GstMpegtsExtendedEventDescriptor</a>, struct in <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html" title="DVB variants of MPEG-TS descriptors">DVB variants of MPEG-TS descriptors</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#GstMpegtsExtendedEventItem" title="struct GstMpegtsExtendedEventItem">GstMpegtsExtendedEventItem</a>, struct in <a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html" title="gst-dvb-descriptor">gst-dvb-descriptor</a>
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsExtendedEventItem" title="struct GstMpegtsExtendedEventItem">GstMpegtsExtendedEventItem</a>, struct in <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html" title="DVB variants of MPEG-TS descriptors">DVB variants of MPEG-TS descriptors</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gst-isdb-descriptor.html#GstMpegtsISDBDescriptorType" title="enum GstMpegtsISDBDescriptorType">GstMpegtsISDBDescriptorType</a>, enum in <a class="link" href="gst-plugins-bad-libs-gst-isdb-descriptor.html" title="gst-isdb-descriptor">gst-isdb-descriptor</a>
+<a class="link" href="gst-plugins-bad-libs-ISDB-variants-of-MPEG-TS-descriptors.html#GstMpegtsISDBDescriptorType" title="enum GstMpegtsISDBDescriptorType">GstMpegtsISDBDescriptorType</a>, enum in <a class="link" href="gst-plugins-bad-libs-ISDB-variants-of-MPEG-TS-descriptors.html" title="ISDB variants of MPEG-TS descriptors">ISDB variants of MPEG-TS descriptors</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gstmpegtsdescriptor.html#GstMpegtsIso639AudioType" title="enum GstMpegtsIso639AudioType">GstMpegtsIso639AudioType</a>, enum in <a class="link" href="gst-plugins-bad-libs-gstmpegtsdescriptor.html" title="gstmpegtsdescriptor">gstmpegtsdescriptor</a>
+<a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GstMpegtsIso639AudioType" title="enum GstMpegtsIso639AudioType">GstMpegtsIso639AudioType</a>, enum in <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html" title="Base MPEG-TS descriptors">Base MPEG-TS descriptors</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gstmpegtsdescriptor.html#GstMpegtsISO639LanguageDescriptor" title="struct GstMpegtsISO639LanguageDescriptor">GstMpegtsISO639LanguageDescriptor</a>, struct in <a class="link" href="gst-plugins-bad-libs-gstmpegtsdescriptor.html" title="gstmpegtsdescriptor">gstmpegtsdescriptor</a>
+<a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GstMpegtsISO639LanguageDescriptor" title="struct GstMpegtsISO639LanguageDescriptor">GstMpegtsISO639LanguageDescriptor</a>, struct in <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html" title="Base MPEG-TS descriptors">Base MPEG-TS descriptors</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gstmpegtsdescriptor.html#GstMpegtsLogicalChannel" title="struct GstMpegtsLogicalChannel">GstMpegtsLogicalChannel</a>, struct in <a class="link" href="gst-plugins-bad-libs-gstmpegtsdescriptor.html" title="gstmpegtsdescriptor">gstmpegtsdescriptor</a>
+<a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GstMpegtsLogicalChannel" title="struct GstMpegtsLogicalChannel">GstMpegtsLogicalChannel</a>, struct in <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html" title="Base MPEG-TS descriptors">Base MPEG-TS descriptors</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gstmpegtsdescriptor.html#GstMpegtsLogicalChannelDescriptor" title="struct GstMpegtsLogicalChannelDescriptor">GstMpegtsLogicalChannelDescriptor</a>, struct in <a class="link" href="gst-plugins-bad-libs-gstmpegtsdescriptor.html" title="gstmpegtsdescriptor">gstmpegtsdescriptor</a>
+<a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GstMpegtsLogicalChannelDescriptor" title="struct GstMpegtsLogicalChannelDescriptor">GstMpegtsLogicalChannelDescriptor</a>, struct in <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html" title="Base MPEG-TS descriptors">Base MPEG-TS descriptors</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gstmpegtsdescriptor.html#GstMpegtsMiscDescriptorType" title="enum GstMpegtsMiscDescriptorType">GstMpegtsMiscDescriptorType</a>, enum in <a class="link" href="gst-plugins-bad-libs-gstmpegtsdescriptor.html" title="gstmpegtsdescriptor">gstmpegtsdescriptor</a>
+<a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GstMpegtsMiscDescriptorType" title="enum GstMpegtsMiscDescriptorType">GstMpegtsMiscDescriptorType</a>, enum in <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html" title="Base MPEG-TS descriptors">Base MPEG-TS descriptors</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#GstMpegtsModulationType" title="enum GstMpegtsModulationType">GstMpegtsModulationType</a>, enum in <a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html" title="gst-dvb-descriptor">gst-dvb-descriptor</a>
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsModulationType" title="enum GstMpegtsModulationType">GstMpegtsModulationType</a>, enum in <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html" title="DVB variants of MPEG-TS descriptors">DVB variants of MPEG-TS descriptors</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-section.html#GstMpegtsNIT" title="struct GstMpegtsNIT">GstMpegtsNIT</a>, struct in <a class="link" href="gst-plugins-bad-libs-gst-dvb-section.html" title="gst-dvb-section">gst-dvb-section</a>
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#GstMpegtsNIT" title="struct GstMpegtsNIT">GstMpegtsNIT</a>, struct in <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html" title="DVB variants of MPEG-TS sections">DVB variants of MPEG-TS sections</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-section.html#GstMpegtsNITStream" title="struct GstMpegtsNITStream">GstMpegtsNITStream</a>, struct in <a class="link" href="gst-plugins-bad-libs-gst-dvb-section.html" title="gst-dvb-section">gst-dvb-section</a>
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#GstMpegtsNITStream" title="struct GstMpegtsNITStream">GstMpegtsNITStream</a>, struct in <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html" title="DVB variants of MPEG-TS sections">DVB variants of MPEG-TS sections</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gstmpegtssection.html#GstMpegtsPatProgram" title="struct GstMpegtsPatProgram">GstMpegtsPatProgram</a>, struct in <a class="link" href="gst-plugins-bad-libs-gstmpegtssection.html" title="gstmpegtssection">gstmpegtssection</a>
+<a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsPatProgram" title="struct GstMpegtsPatProgram">GstMpegtsPatProgram</a>, struct in <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html" title="Base MPEG-TS sections">Base MPEG-TS sections</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gstmpegtssection.html#GstMpegtsPMT" title="struct GstMpegtsPMT">GstMpegtsPMT</a>, struct in <a class="link" href="gst-plugins-bad-libs-gstmpegtssection.html" title="gstmpegtssection">gstmpegtssection</a>
+<a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsPMT" title="struct GstMpegtsPMT">GstMpegtsPMT</a>, struct in <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html" title="Base MPEG-TS sections">Base MPEG-TS sections</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gstmpegtssection.html#GstMpegtsPMTStream" title="struct GstMpegtsPMTStream">GstMpegtsPMTStream</a>, struct in <a class="link" href="gst-plugins-bad-libs-gstmpegtssection.html" title="gstmpegtssection">gstmpegtssection</a>
+<a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsPMTStream" title="struct GstMpegtsPMTStream">GstMpegtsPMTStream</a>, struct in <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html" title="Base MPEG-TS sections">Base MPEG-TS sections</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-section.html#GstMpegtsRunningStatus" title="enum GstMpegtsRunningStatus">GstMpegtsRunningStatus</a>, enum in <a class="link" href="gst-plugins-bad-libs-gst-dvb-section.html" title="gst-dvb-section">gst-dvb-section</a>
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#GstMpegtsRunningStatus" title="enum GstMpegtsRunningStatus">GstMpegtsRunningStatus</a>, enum in <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html" title="DVB variants of MPEG-TS sections">DVB variants of MPEG-TS sections</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#GstMpegtsSatelliteDeliverySystemDescriptor" title="struct GstMpegtsSatelliteDeliverySystemDescriptor">GstMpegtsSatelliteDeliverySystemDescriptor</a>, struct in <a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html" title="gst-dvb-descriptor">gst-dvb-descriptor</a>
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsSatelliteDeliverySystemDescriptor" title="struct GstMpegtsSatelliteDeliverySystemDescriptor">GstMpegtsSatelliteDeliverySystemDescriptor</a>, struct in <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html" title="DVB variants of MPEG-TS descriptors">DVB variants of MPEG-TS descriptors</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#GstMpegtsSatellitePolarizationType" title="enum GstMpegtsSatellitePolarizationType">GstMpegtsSatellitePolarizationType</a>, enum in <a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html" title="gst-dvb-descriptor">gst-dvb-descriptor</a>
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsSatellitePolarizationType" title="enum GstMpegtsSatellitePolarizationType">GstMpegtsSatellitePolarizationType</a>, enum in <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html" title="DVB variants of MPEG-TS descriptors">DVB variants of MPEG-TS descriptors</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#GstMpegtsSatelliteRolloff" title="enum GstMpegtsSatelliteRolloff">GstMpegtsSatelliteRolloff</a>, enum in <a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html" title="gst-dvb-descriptor">gst-dvb-descriptor</a>
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsSatelliteRolloff" title="enum GstMpegtsSatelliteRolloff">GstMpegtsSatelliteRolloff</a>, enum in <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html" title="DVB variants of MPEG-TS descriptors">DVB variants of MPEG-TS descriptors</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-section.html#GstMpegtsSDT" title="struct GstMpegtsSDT">GstMpegtsSDT</a>, struct in <a class="link" href="gst-plugins-bad-libs-gst-dvb-section.html" title="gst-dvb-section">gst-dvb-section</a>
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#GstMpegtsSDT" title="struct GstMpegtsSDT">GstMpegtsSDT</a>, struct in <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html" title="DVB variants of MPEG-TS sections">DVB variants of MPEG-TS sections</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-section.html#GstMpegtsSDTService" title="struct GstMpegtsSDTService">GstMpegtsSDTService</a>, struct in <a class="link" href="gst-plugins-bad-libs-gst-dvb-section.html" title="gst-dvb-section">gst-dvb-section</a>
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#GstMpegtsSDTService" title="struct GstMpegtsSDTService">GstMpegtsSDTService</a>, struct in <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html" title="DVB variants of MPEG-TS sections">DVB variants of MPEG-TS sections</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gstmpegtssection.html#GstMpegtsSection-struct" title="struct GstMpegtsSection">GstMpegtsSection</a>, struct in <a class="link" href="gst-plugins-bad-libs-gstmpegtssection.html" title="gstmpegtssection">gstmpegtssection</a>
+<a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsSection-struct" title="struct GstMpegtsSection">GstMpegtsSection</a>, struct in <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html" title="Base MPEG-TS sections">Base MPEG-TS sections</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gst-atsc-section.html#GstMpegtsSectionATSCTableID" title="enum GstMpegtsSectionATSCTableID">GstMpegtsSectionATSCTableID</a>, enum in <a class="link" href="gst-plugins-bad-libs-gst-atsc-section.html" title="gst-atsc-section">gst-atsc-section</a>
+<a class="link" href="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html#GstMpegtsSectionATSCTableID" title="enum GstMpegtsSectionATSCTableID">GstMpegtsSectionATSCTableID</a>, enum in <a class="link" href="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html" title="ATSC variants of MPEG-TS sections">ATSC variants of MPEG-TS sections</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-section.html#GstMpegtsSectionDVBTableID" title="enum GstMpegtsSectionDVBTableID">GstMpegtsSectionDVBTableID</a>, enum in <a class="link" href="gst-plugins-bad-libs-gst-dvb-section.html" title="gst-dvb-section">gst-dvb-section</a>
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#GstMpegtsSectionDVBTableID" title="enum GstMpegtsSectionDVBTableID">GstMpegtsSectionDVBTableID</a>, enum in <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html" title="DVB variants of MPEG-TS sections">DVB variants of MPEG-TS sections</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gstmpegtssection.html#GstMpegtsSectionTableID" title="enum GstMpegtsSectionTableID">GstMpegtsSectionTableID</a>, enum in <a class="link" href="gst-plugins-bad-libs-gstmpegtssection.html" title="gstmpegtssection">gstmpegtssection</a>
+<a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsSectionTableID" title="enum GstMpegtsSectionTableID">GstMpegtsSectionTableID</a>, enum in <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html" title="Base MPEG-TS sections">Base MPEG-TS sections</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gstmpegtssection.html#GstMpegtsSectionType" title="enum GstMpegtsSectionType">GstMpegtsSectionType</a>, enum in <a class="link" href="gst-plugins-bad-libs-gstmpegtssection.html" title="gstmpegtssection">gstmpegtssection</a>
+<a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsSectionType" title="enum GstMpegtsSectionType">GstMpegtsSectionType</a>, enum in <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html" title="Base MPEG-TS sections">Base MPEG-TS sections</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gstmpegtssection.html#GstMpegtsStreamType" title="enum GstMpegtsStreamType">GstMpegtsStreamType</a>, enum in <a class="link" href="gst-plugins-bad-libs-gstmpegtssection.html" title="gstmpegtssection">gstmpegtssection</a>
+<a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsStreamType" title="enum GstMpegtsStreamType">GstMpegtsStreamType</a>, enum in <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html" title="Base MPEG-TS sections">Base MPEG-TS sections</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#GstMpegtsT2DeliverySystemCell" title="struct GstMpegtsT2DeliverySystemCell">GstMpegtsT2DeliverySystemCell</a>, struct in <a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html" title="gst-dvb-descriptor">gst-dvb-descriptor</a>
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsT2DeliverySystemCell" title="struct GstMpegtsT2DeliverySystemCell">GstMpegtsT2DeliverySystemCell</a>, struct in <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html" title="DVB variants of MPEG-TS descriptors">DVB variants of MPEG-TS descriptors</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#GstMpegtsT2DeliverySystemCellExtension" title="struct GstMpegtsT2DeliverySystemCellExtension">GstMpegtsT2DeliverySystemCellExtension</a>, struct in <a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html" title="gst-dvb-descriptor">gst-dvb-descriptor</a>
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsT2DeliverySystemCellExtension" title="struct GstMpegtsT2DeliverySystemCellExtension">GstMpegtsT2DeliverySystemCellExtension</a>, struct in <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html" title="DVB variants of MPEG-TS descriptors">DVB variants of MPEG-TS descriptors</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#GstMpegtsT2DeliverySystemDescriptor" title="struct GstMpegtsT2DeliverySystemDescriptor">GstMpegtsT2DeliverySystemDescriptor</a>, struct in <a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html" title="gst-dvb-descriptor">gst-dvb-descriptor</a>
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsT2DeliverySystemDescriptor" title="struct GstMpegtsT2DeliverySystemDescriptor">GstMpegtsT2DeliverySystemDescriptor</a>, struct in <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html" title="DVB variants of MPEG-TS descriptors">DVB variants of MPEG-TS descriptors</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#GstMpegtsTerrestrialDeliverySystemDescriptor" title="struct GstMpegtsTerrestrialDeliverySystemDescriptor">GstMpegtsTerrestrialDeliverySystemDescriptor</a>, struct in <a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html" title="gst-dvb-descriptor">gst-dvb-descriptor</a>
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsTerrestrialDeliverySystemDescriptor" title="struct GstMpegtsTerrestrialDeliverySystemDescriptor">GstMpegtsTerrestrialDeliverySystemDescriptor</a>, struct in <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html" title="DVB variants of MPEG-TS descriptors">DVB variants of MPEG-TS descriptors</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#GstMpegtsTerrestrialGuardInterval" title="enum GstMpegtsTerrestrialGuardInterval">GstMpegtsTerrestrialGuardInterval</a>, enum in <a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html" title="gst-dvb-descriptor">gst-dvb-descriptor</a>
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsTerrestrialGuardInterval" title="enum GstMpegtsTerrestrialGuardInterval">GstMpegtsTerrestrialGuardInterval</a>, enum in <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html" title="DVB variants of MPEG-TS descriptors">DVB variants of MPEG-TS descriptors</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#GstMpegtsTerrestrialHierarchy" title="enum GstMpegtsTerrestrialHierarchy">GstMpegtsTerrestrialHierarchy</a>, enum in <a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html" title="gst-dvb-descriptor">gst-dvb-descriptor</a>
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsTerrestrialHierarchy" title="enum GstMpegtsTerrestrialHierarchy">GstMpegtsTerrestrialHierarchy</a>, enum in <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html" title="DVB variants of MPEG-TS descriptors">DVB variants of MPEG-TS descriptors</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#GstMpegtsTerrestrialTransmissionMode" title="enum GstMpegtsTerrestrialTransmissionMode">GstMpegtsTerrestrialTransmissionMode</a>, enum in <a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html" title="gst-dvb-descriptor">gst-dvb-descriptor</a>
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsTerrestrialTransmissionMode" title="enum GstMpegtsTerrestrialTransmissionMode">GstMpegtsTerrestrialTransmissionMode</a>, enum in <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html" title="DVB variants of MPEG-TS descriptors">DVB variants of MPEG-TS descriptors</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-section.html#GstMpegtsTOT" title="struct GstMpegtsTOT">GstMpegtsTOT</a>, struct in <a class="link" href="gst-plugins-bad-libs-gst-dvb-section.html" title="gst-dvb-section">gst-dvb-section</a>
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#GstMpegtsTOT" title="struct GstMpegtsTOT">GstMpegtsTOT</a>, struct in <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html" title="DVB variants of MPEG-TS sections">DVB variants of MPEG-TS sections</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gst-atsc-section.html#gst-mpegts-atsc-string-segment-get-string" title="gst_mpegts_atsc_string_segment_get_string ()">gst_mpegts_atsc_string_segment_get_string</a>, function in <a class="link" href="gst-plugins-bad-libs-gst-atsc-section.html" title="gst-atsc-section">gst-atsc-section</a>
+<a class="link" href="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html#gst-mpegts-atsc-string-segment-get-string" title="gst_mpegts_atsc_string_segment_get_string ()">gst_mpegts_atsc_string_segment_get_string</a>, function in <a class="link" href="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html" title="ATSC variants of MPEG-TS sections">ATSC variants of MPEG-TS sections</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gst-atsc-section.html#gst-mpegts-atsc-stt-get-datetime-utc" title="gst_mpegts_atsc_stt_get_datetime_utc ()">gst_mpegts_atsc_stt_get_datetime_utc</a>, function in <a class="link" href="gst-plugins-bad-libs-gst-atsc-section.html" title="gst-atsc-section">gst-atsc-section</a>
+<a class="link" href="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html#gst-mpegts-atsc-stt-get-datetime-utc" title="gst_mpegts_atsc_stt_get_datetime_utc ()">gst_mpegts_atsc_stt_get_datetime_utc</a>, function in <a class="link" href="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html" title="ATSC variants of MPEG-TS sections">ATSC variants of MPEG-TS sections</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gstmpegtsdescriptor.html#gst-mpegts-descriptor-from-custom" title="gst_mpegts_descriptor_from_custom ()">gst_mpegts_descriptor_from_custom</a>, function in <a class="link" href="gst-plugins-bad-libs-gstmpegtsdescriptor.html" title="gstmpegtsdescriptor">gstmpegtsdescriptor</a>
+<a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#gst-mpegts-descriptor-from-custom" title="gst_mpegts_descriptor_from_custom ()">gst_mpegts_descriptor_from_custom</a>, function in <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html" title="Base MPEG-TS descriptors">Base MPEG-TS descriptors</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#gst-mpegts-descriptor-from-dvb-network-name" title="gst_mpegts_descriptor_from_dvb_network_name ()">gst_mpegts_descriptor_from_dvb_network_name</a>, function in <a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html" title="gst-dvb-descriptor">gst-dvb-descriptor</a>
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#gst-mpegts-descriptor-from-dvb-network-name" title="gst_mpegts_descriptor_from_dvb_network_name ()">gst_mpegts_descriptor_from_dvb_network_name</a>, function in <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html" title="DVB variants of MPEG-TS descriptors">DVB variants of MPEG-TS descriptors</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#gst-mpegts-descriptor-from-dvb-service" title="gst_mpegts_descriptor_from_dvb_service ()">gst_mpegts_descriptor_from_dvb_service</a>, function in <a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html" title="gst-dvb-descriptor">gst-dvb-descriptor</a>
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#gst-mpegts-descriptor-from-dvb-service" title="gst_mpegts_descriptor_from_dvb_service ()">gst_mpegts_descriptor_from_dvb_service</a>, function in <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html" title="DVB variants of MPEG-TS descriptors">DVB variants of MPEG-TS descriptors</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#gst-mpegts-descriptor-from-dvb-subtitling" title="gst_mpegts_descriptor_from_dvb_subtitling ()">gst_mpegts_descriptor_from_dvb_subtitling</a>, function in <a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html" title="gst-dvb-descriptor">gst-dvb-descriptor</a>
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#gst-mpegts-descriptor-from-dvb-subtitling" title="gst_mpegts_descriptor_from_dvb_subtitling ()">gst_mpegts_descriptor_from_dvb_subtitling</a>, function in <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html" title="DVB variants of MPEG-TS descriptors">DVB variants of MPEG-TS descriptors</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gstmpegtsdescriptor.html#gst-mpegts-descriptor-from-registration" title="gst_mpegts_descriptor_from_registration ()">gst_mpegts_descriptor_from_registration</a>, function in <a class="link" href="gst-plugins-bad-libs-gstmpegtsdescriptor.html" title="gstmpegtsdescriptor">gstmpegtsdescriptor</a>
+<a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#gst-mpegts-descriptor-from-registration" title="gst_mpegts_descriptor_from_registration ()">gst_mpegts_descriptor_from_registration</a>, function in <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html" title="Base MPEG-TS descriptors">Base MPEG-TS descriptors</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#gst-mpegts-descriptor-parse-cable-delivery-system" title="gst_mpegts_descriptor_parse_cable_delivery_system ()">gst_mpegts_descriptor_parse_cable_delivery_system</a>, function in <a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html" title="gst-dvb-descriptor">gst-dvb-descriptor</a>
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#gst-mpegts-descriptor-parse-cable-delivery-system" title="gst_mpegts_descriptor_parse_cable_delivery_system ()">gst_mpegts_descriptor_parse_cable_delivery_system</a>, function in <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html" title="DVB variants of MPEG-TS descriptors">DVB variants of MPEG-TS descriptors</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#gst-mpegts-descriptor-parse-dvb-bouquet-name" title="gst_mpegts_descriptor_parse_dvb_bouquet_name ()">gst_mpegts_descriptor_parse_dvb_bouquet_name</a>, function in <a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html" title="gst-dvb-descriptor">gst-dvb-descriptor</a>
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#gst-mpegts-descriptor-parse-dvb-bouquet-name" title="gst_mpegts_descriptor_parse_dvb_bouquet_name ()">gst_mpegts_descriptor_parse_dvb_bouquet_name</a>, function in <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html" title="DVB variants of MPEG-TS descriptors">DVB variants of MPEG-TS descriptors</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#gst-mpegts-descriptor-parse-dvb-ca-identifier" title="gst_mpegts_descriptor_parse_dvb_ca_identifier ()">gst_mpegts_descriptor_parse_dvb_ca_identifier</a>, function in <a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html" title="gst-dvb-descriptor">gst-dvb-descriptor</a>
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#gst-mpegts-descriptor-parse-dvb-ca-identifier" title="gst_mpegts_descriptor_parse_dvb_ca_identifier ()">gst_mpegts_descriptor_parse_dvb_ca_identifier</a>, function in <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html" title="DVB variants of MPEG-TS descriptors">DVB variants of MPEG-TS descriptors</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#gst-mpegts-descriptor-parse-dvb-component" title="gst_mpegts_descriptor_parse_dvb_component ()">gst_mpegts_descriptor_parse_dvb_component</a>, function in <a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html" title="gst-dvb-descriptor">gst-dvb-descriptor</a>
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#gst-mpegts-descriptor-parse-dvb-component" title="gst_mpegts_descriptor_parse_dvb_component ()">gst_mpegts_descriptor_parse_dvb_component</a>, function in <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html" title="DVB variants of MPEG-TS descriptors">DVB variants of MPEG-TS descriptors</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#gst-mpegts-descriptor-parse-dvb-content" title="gst_mpegts_descriptor_parse_dvb_content ()">gst_mpegts_descriptor_parse_dvb_content</a>, function in <a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html" title="gst-dvb-descriptor">gst-dvb-descriptor</a>
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#gst-mpegts-descriptor-parse-dvb-content" title="gst_mpegts_descriptor_parse_dvb_content ()">gst_mpegts_descriptor_parse_dvb_content</a>, function in <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html" title="DVB variants of MPEG-TS descriptors">DVB variants of MPEG-TS descriptors</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#gst-mpegts-descriptor-parse-dvb-data-broadcast" title="gst_mpegts_descriptor_parse_dvb_data_broadcast ()">gst_mpegts_descriptor_parse_dvb_data_broadcast</a>, function in <a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html" title="gst-dvb-descriptor">gst-dvb-descriptor</a>
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#gst-mpegts-descriptor-parse-dvb-data-broadcast" title="gst_mpegts_descriptor_parse_dvb_data_broadcast ()">gst_mpegts_descriptor_parse_dvb_data_broadcast</a>, function in <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html" title="DVB variants of MPEG-TS descriptors">DVB variants of MPEG-TS descriptors</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#gst-mpegts-descriptor-parse-dvb-data-broadcast-id" title="gst_mpegts_descriptor_parse_dvb_data_broadcast_id ()">gst_mpegts_descriptor_parse_dvb_data_broadcast_id</a>, function in <a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html" title="gst-dvb-descriptor">gst-dvb-descriptor</a>
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#gst-mpegts-descriptor-parse-dvb-data-broadcast-id" title="gst_mpegts_descriptor_parse_dvb_data_broadcast_id ()">gst_mpegts_descriptor_parse_dvb_data_broadcast_id</a>, function in <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html" title="DVB variants of MPEG-TS descriptors">DVB variants of MPEG-TS descriptors</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#gst-mpegts-descriptor-parse-dvb-extended-event" title="gst_mpegts_descriptor_parse_dvb_extended_event ()">gst_mpegts_descriptor_parse_dvb_extended_event</a>, function in <a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html" title="gst-dvb-descriptor">gst-dvb-descriptor</a>
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#gst-mpegts-descriptor-parse-dvb-extended-event" title="gst_mpegts_descriptor_parse_dvb_extended_event ()">gst_mpegts_descriptor_parse_dvb_extended_event</a>, function in <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html" title="DVB variants of MPEG-TS descriptors">DVB variants of MPEG-TS descriptors</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#gst-mpegts-descriptor-parse-dvb-frequency-list" title="gst_mpegts_descriptor_parse_dvb_frequency_list ()">gst_mpegts_descriptor_parse_dvb_frequency_list</a>, function in <a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html" title="gst-dvb-descriptor">gst-dvb-descriptor</a>
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#gst-mpegts-descriptor-parse-dvb-frequency-list" title="gst_mpegts_descriptor_parse_dvb_frequency_list ()">gst_mpegts_descriptor_parse_dvb_frequency_list</a>, function in <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html" title="DVB variants of MPEG-TS descriptors">DVB variants of MPEG-TS descriptors</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#gst-mpegts-descriptor-parse-dvb-linkage" title="gst_mpegts_descriptor_parse_dvb_linkage ()">gst_mpegts_descriptor_parse_dvb_linkage</a>, function in <a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html" title="gst-dvb-descriptor">gst-dvb-descriptor</a>
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#gst-mpegts-descriptor-parse-dvb-linkage" title="gst_mpegts_descriptor_parse_dvb_linkage ()">gst_mpegts_descriptor_parse_dvb_linkage</a>, function in <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html" title="DVB variants of MPEG-TS descriptors">DVB variants of MPEG-TS descriptors</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#gst-mpegts-descriptor-parse-dvb-multilingual-bouquet-name" title="gst_mpegts_descriptor_parse_dvb_multilingual_bouquet_name ()">gst_mpegts_descriptor_parse_dvb_multilingual_bouquet_name</a>, function in <a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html" title="gst-dvb-descriptor">gst-dvb-descriptor</a>
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#gst-mpegts-descriptor-parse-dvb-multilingual-bouquet-name" title="gst_mpegts_descriptor_parse_dvb_multilingual_bouquet_name ()">gst_mpegts_descriptor_parse_dvb_multilingual_bouquet_name</a>, function in <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html" title="DVB variants of MPEG-TS descriptors">DVB variants of MPEG-TS descriptors</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#gst-mpegts-descriptor-parse-dvb-multilingual-component" title="gst_mpegts_descriptor_parse_dvb_multilingual_component ()">gst_mpegts_descriptor_parse_dvb_multilingual_component</a>, function in <a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html" title="gst-dvb-descriptor">gst-dvb-descriptor</a>
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#gst-mpegts-descriptor-parse-dvb-multilingual-component" title="gst_mpegts_descriptor_parse_dvb_multilingual_component ()">gst_mpegts_descriptor_parse_dvb_multilingual_component</a>, function in <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html" title="DVB variants of MPEG-TS descriptors">DVB variants of MPEG-TS descriptors</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#gst-mpegts-descriptor-parse-dvb-multilingual-network-name" title="gst_mpegts_descriptor_parse_dvb_multilingual_network_name ()">gst_mpegts_descriptor_parse_dvb_multilingual_network_name</a>, function in <a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html" title="gst-dvb-descriptor">gst-dvb-descriptor</a>
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#gst-mpegts-descriptor-parse-dvb-multilingual-network-name" title="gst_mpegts_descriptor_parse_dvb_multilingual_network_name ()">gst_mpegts_descriptor_parse_dvb_multilingual_network_name</a>, function in <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html" title="DVB variants of MPEG-TS descriptors">DVB variants of MPEG-TS descriptors</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#gst-mpegts-descriptor-parse-dvb-multilingual-service-name" title="gst_mpegts_descriptor_parse_dvb_multilingual_service_name ()">gst_mpegts_descriptor_parse_dvb_multilingual_service_name</a>, function in <a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html" title="gst-dvb-descriptor">gst-dvb-descriptor</a>
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#gst-mpegts-descriptor-parse-dvb-multilingual-service-name" title="gst_mpegts_descriptor_parse_dvb_multilingual_service_name ()">gst_mpegts_descriptor_parse_dvb_multilingual_service_name</a>, function in <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html" title="DVB variants of MPEG-TS descriptors">DVB variants of MPEG-TS descriptors</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#gst-mpegts-descriptor-parse-dvb-network-name" title="gst_mpegts_descriptor_parse_dvb_network_name ()">gst_mpegts_descriptor_parse_dvb_network_name</a>, function in <a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html" title="gst-dvb-descriptor">gst-dvb-descriptor</a>
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#gst-mpegts-descriptor-parse-dvb-network-name" title="gst_mpegts_descriptor_parse_dvb_network_name ()">gst_mpegts_descriptor_parse_dvb_network_name</a>, function in <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html" title="DVB variants of MPEG-TS descriptors">DVB variants of MPEG-TS descriptors</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#gst-mpegts-descriptor-parse-dvb-parental-rating" title="gst_mpegts_descriptor_parse_dvb_parental_rating ()">gst_mpegts_descriptor_parse_dvb_parental_rating</a>, function in <a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html" title="gst-dvb-descriptor">gst-dvb-descriptor</a>
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#gst-mpegts-descriptor-parse-dvb-parental-rating" title="gst_mpegts_descriptor_parse_dvb_parental_rating ()">gst_mpegts_descriptor_parse_dvb_parental_rating</a>, function in <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html" title="DVB variants of MPEG-TS descriptors">DVB variants of MPEG-TS descriptors</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#gst-mpegts-descriptor-parse-dvb-private-data-specifier" title="gst_mpegts_descriptor_parse_dvb_private_data_specifier ()">gst_mpegts_descriptor_parse_dvb_private_data_specifier</a>, function in <a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html" title="gst-dvb-descriptor">gst-dvb-descriptor</a>
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#gst-mpegts-descriptor-parse-dvb-private-data-specifier" title="gst_mpegts_descriptor_parse_dvb_private_data_specifier ()">gst_mpegts_descriptor_parse_dvb_private_data_specifier</a>, function in <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html" title="DVB variants of MPEG-TS descriptors">DVB variants of MPEG-TS descriptors</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#gst-mpegts-descriptor-parse-dvb-scrambling" title="gst_mpegts_descriptor_parse_dvb_scrambling ()">gst_mpegts_descriptor_parse_dvb_scrambling</a>, function in <a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html" title="gst-dvb-descriptor">gst-dvb-descriptor</a>
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#gst-mpegts-descriptor-parse-dvb-scrambling" title="gst_mpegts_descriptor_parse_dvb_scrambling ()">gst_mpegts_descriptor_parse_dvb_scrambling</a>, function in <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html" title="DVB variants of MPEG-TS descriptors">DVB variants of MPEG-TS descriptors</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#gst-mpegts-descriptor-parse-dvb-service" title="gst_mpegts_descriptor_parse_dvb_service ()">gst_mpegts_descriptor_parse_dvb_service</a>, function in <a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html" title="gst-dvb-descriptor">gst-dvb-descriptor</a>
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#gst-mpegts-descriptor-parse-dvb-service" title="gst_mpegts_descriptor_parse_dvb_service ()">gst_mpegts_descriptor_parse_dvb_service</a>, function in <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html" title="DVB variants of MPEG-TS descriptors">DVB variants of MPEG-TS descriptors</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#gst-mpegts-descriptor-parse-dvb-service-list" title="gst_mpegts_descriptor_parse_dvb_service_list ()">gst_mpegts_descriptor_parse_dvb_service_list</a>, function in <a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html" title="gst-dvb-descriptor">gst-dvb-descriptor</a>
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#gst-mpegts-descriptor-parse-dvb-service-list" title="gst_mpegts_descriptor_parse_dvb_service_list ()">gst_mpegts_descriptor_parse_dvb_service_list</a>, function in <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html" title="DVB variants of MPEG-TS descriptors">DVB variants of MPEG-TS descriptors</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#gst-mpegts-descriptor-parse-dvb-short-event" title="gst_mpegts_descriptor_parse_dvb_short_event ()">gst_mpegts_descriptor_parse_dvb_short_event</a>, function in <a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html" title="gst-dvb-descriptor">gst-dvb-descriptor</a>
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#gst-mpegts-descriptor-parse-dvb-short-event" title="gst_mpegts_descriptor_parse_dvb_short_event ()">gst_mpegts_descriptor_parse_dvb_short_event</a>, function in <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html" title="DVB variants of MPEG-TS descriptors">DVB variants of MPEG-TS descriptors</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#gst-mpegts-descriptor-parse-dvb-stream-identifier" title="gst_mpegts_descriptor_parse_dvb_stream_identifier ()">gst_mpegts_descriptor_parse_dvb_stream_identifier</a>, function in <a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html" title="gst-dvb-descriptor">gst-dvb-descriptor</a>
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#gst-mpegts-descriptor-parse-dvb-stream-identifier" title="gst_mpegts_descriptor_parse_dvb_stream_identifier ()">gst_mpegts_descriptor_parse_dvb_stream_identifier</a>, function in <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html" title="DVB variants of MPEG-TS descriptors">DVB variants of MPEG-TS descriptors</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#gst-mpegts-descriptor-parse-dvb-stuffing" title="gst_mpegts_descriptor_parse_dvb_stuffing ()">gst_mpegts_descriptor_parse_dvb_stuffing</a>, function in <a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html" title="gst-dvb-descriptor">gst-dvb-descriptor</a>
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#gst-mpegts-descriptor-parse-dvb-stuffing" title="gst_mpegts_descriptor_parse_dvb_stuffing ()">gst_mpegts_descriptor_parse_dvb_stuffing</a>, function in <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html" title="DVB variants of MPEG-TS descriptors">DVB variants of MPEG-TS descriptors</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#gst-mpegts-descriptor-parse-dvb-subtitling-idx" title="gst_mpegts_descriptor_parse_dvb_subtitling_idx ()">gst_mpegts_descriptor_parse_dvb_subtitling_idx</a>, function in <a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html" title="gst-dvb-descriptor">gst-dvb-descriptor</a>
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#gst-mpegts-descriptor-parse-dvb-subtitling-idx" title="gst_mpegts_descriptor_parse_dvb_subtitling_idx ()">gst_mpegts_descriptor_parse_dvb_subtitling_idx</a>, function in <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html" title="DVB variants of MPEG-TS descriptors">DVB variants of MPEG-TS descriptors</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#gst-mpegts-descriptor-parse-dvb-subtitling-nb" title="gst_mpegts_descriptor_parse_dvb_subtitling_nb ()">gst_mpegts_descriptor_parse_dvb_subtitling_nb</a>, function in <a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html" title="gst-dvb-descriptor">gst-dvb-descriptor</a>
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#gst-mpegts-descriptor-parse-dvb-subtitling-nb" title="gst_mpegts_descriptor_parse_dvb_subtitling_nb ()">gst_mpegts_descriptor_parse_dvb_subtitling_nb</a>, function in <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html" title="DVB variants of MPEG-TS descriptors">DVB variants of MPEG-TS descriptors</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#gst-mpegts-descriptor-parse-dvb-t2-delivery-system" title="gst_mpegts_descriptor_parse_dvb_t2_delivery_system ()">gst_mpegts_descriptor_parse_dvb_t2_delivery_system</a>, function in <a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html" title="gst-dvb-descriptor">gst-dvb-descriptor</a>
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#gst-mpegts-descriptor-parse-dvb-t2-delivery-system" title="gst_mpegts_descriptor_parse_dvb_t2_delivery_system ()">gst_mpegts_descriptor_parse_dvb_t2_delivery_system</a>, function in <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html" title="DVB variants of MPEG-TS descriptors">DVB variants of MPEG-TS descriptors</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#gst-mpegts-descriptor-parse-dvb-teletext-idx" title="gst_mpegts_descriptor_parse_dvb_teletext_idx ()">gst_mpegts_descriptor_parse_dvb_teletext_idx</a>, function in <a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html" title="gst-dvb-descriptor">gst-dvb-descriptor</a>
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#gst-mpegts-descriptor-parse-dvb-teletext-idx" title="gst_mpegts_descriptor_parse_dvb_teletext_idx ()">gst_mpegts_descriptor_parse_dvb_teletext_idx</a>, function in <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html" title="DVB variants of MPEG-TS descriptors">DVB variants of MPEG-TS descriptors</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#gst-mpegts-descriptor-parse-dvb-teletext-nb" title="gst_mpegts_descriptor_parse_dvb_teletext_nb ()">gst_mpegts_descriptor_parse_dvb_teletext_nb</a>, function in <a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html" title="gst-dvb-descriptor">gst-dvb-descriptor</a>
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#gst-mpegts-descriptor-parse-dvb-teletext-nb" title="gst_mpegts_descriptor_parse_dvb_teletext_nb ()">gst_mpegts_descriptor_parse_dvb_teletext_nb</a>, function in <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html" title="DVB variants of MPEG-TS descriptors">DVB variants of MPEG-TS descriptors</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gstmpegtsdescriptor.html#gst-mpegts-descriptor-parse-iso-639-language" title="gst_mpegts_descriptor_parse_iso_639_language ()">gst_mpegts_descriptor_parse_iso_639_language</a>, function in <a class="link" href="gst-plugins-bad-libs-gstmpegtsdescriptor.html" title="gstmpegtsdescriptor">gstmpegtsdescriptor</a>
+<a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#gst-mpegts-descriptor-parse-iso-639-language" title="gst_mpegts_descriptor_parse_iso_639_language ()">gst_mpegts_descriptor_parse_iso_639_language</a>, function in <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html" title="Base MPEG-TS descriptors">Base MPEG-TS descriptors</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gstmpegtsdescriptor.html#gst-mpegts-descriptor-parse-iso-639-language-idx" title="gst_mpegts_descriptor_parse_iso_639_language_idx ()">gst_mpegts_descriptor_parse_iso_639_language_idx</a>, function in <a class="link" href="gst-plugins-bad-libs-gstmpegtsdescriptor.html" title="gstmpegtsdescriptor">gstmpegtsdescriptor</a>
+<a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#gst-mpegts-descriptor-parse-iso-639-language-idx" title="gst_mpegts_descriptor_parse_iso_639_language_idx ()">gst_mpegts_descriptor_parse_iso_639_language_idx</a>, function in <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html" title="Base MPEG-TS descriptors">Base MPEG-TS descriptors</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gstmpegtsdescriptor.html#gst-mpegts-descriptor-parse-iso-639-language-nb" title="gst_mpegts_descriptor_parse_iso_639_language_nb ()">gst_mpegts_descriptor_parse_iso_639_language_nb</a>, function in <a class="link" href="gst-plugins-bad-libs-gstmpegtsdescriptor.html" title="gstmpegtsdescriptor">gstmpegtsdescriptor</a>
+<a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#gst-mpegts-descriptor-parse-iso-639-language-nb" title="gst_mpegts_descriptor_parse_iso_639_language_nb ()">gst_mpegts_descriptor_parse_iso_639_language_nb</a>, function in <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html" title="Base MPEG-TS descriptors">Base MPEG-TS descriptors</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gstmpegtsdescriptor.html#gst-mpegts-descriptor-parse-logical-channel" title="gst_mpegts_descriptor_parse_logical_channel ()">gst_mpegts_descriptor_parse_logical_channel</a>, function in <a class="link" href="gst-plugins-bad-libs-gstmpegtsdescriptor.html" title="gstmpegtsdescriptor">gstmpegtsdescriptor</a>
+<a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#gst-mpegts-descriptor-parse-logical-channel" title="gst_mpegts_descriptor_parse_logical_channel ()">gst_mpegts_descriptor_parse_logical_channel</a>, function in <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html" title="Base MPEG-TS descriptors">Base MPEG-TS descriptors</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#gst-mpegts-descriptor-parse-satellite-delivery-system" title="gst_mpegts_descriptor_parse_satellite_delivery_system ()">gst_mpegts_descriptor_parse_satellite_delivery_system</a>, function in <a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html" title="gst-dvb-descriptor">gst-dvb-descriptor</a>
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#gst-mpegts-descriptor-parse-satellite-delivery-system" title="gst_mpegts_descriptor_parse_satellite_delivery_system ()">gst_mpegts_descriptor_parse_satellite_delivery_system</a>, function in <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html" title="DVB variants of MPEG-TS descriptors">DVB variants of MPEG-TS descriptors</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#gst-mpegts-descriptor-parse-terrestrial-delivery-system" title="gst_mpegts_descriptor_parse_terrestrial_delivery_system ()">gst_mpegts_descriptor_parse_terrestrial_delivery_system</a>, function in <a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html" title="gst-dvb-descriptor">gst-dvb-descriptor</a>
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#gst-mpegts-descriptor-parse-terrestrial-delivery-system" title="gst_mpegts_descriptor_parse_terrestrial_delivery_system ()">gst_mpegts_descriptor_parse_terrestrial_delivery_system</a>, function in <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html" title="DVB variants of MPEG-TS descriptors">DVB variants of MPEG-TS descriptors</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#gst-mpegts-dvb-component-descriptor-free" title="gst_mpegts_dvb_component_descriptor_free ()">gst_mpegts_dvb_component_descriptor_free</a>, function in <a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html" title="gst-dvb-descriptor">gst-dvb-descriptor</a>
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#gst-mpegts-dvb-component-descriptor-free" title="gst_mpegts_dvb_component_descriptor_free ()">gst_mpegts_dvb_component_descriptor_free</a>, function in <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html" title="DVB variants of MPEG-TS descriptors">DVB variants of MPEG-TS descriptors</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#gst-mpegts-dvb-data-broadcast-descriptor-free" title="gst_mpegts_dvb_data_broadcast_descriptor_free ()">gst_mpegts_dvb_data_broadcast_descriptor_free</a>, function in <a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html" title="gst-dvb-descriptor">gst-dvb-descriptor</a>
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#gst-mpegts-dvb-data-broadcast-descriptor-free" title="gst_mpegts_dvb_data_broadcast_descriptor_free ()">gst_mpegts_dvb_data_broadcast_descriptor_free</a>, function in <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html" title="DVB variants of MPEG-TS descriptors">DVB variants of MPEG-TS descriptors</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#gst-mpegts-dvb-linkage-descriptor-free" title="gst_mpegts_dvb_linkage_descriptor_free ()">gst_mpegts_dvb_linkage_descriptor_free</a>, function in <a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html" title="gst-dvb-descriptor">gst-dvb-descriptor</a>
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#gst-mpegts-dvb-linkage-descriptor-free" title="gst_mpegts_dvb_linkage_descriptor_free ()">gst_mpegts_dvb_linkage_descriptor_free</a>, function in <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html" title="DVB variants of MPEG-TS descriptors">DVB variants of MPEG-TS descriptors</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#gst-mpegts-dvb-linkage-descriptor-get-event" title="gst_mpegts_dvb_linkage_descriptor_get_event ()">gst_mpegts_dvb_linkage_descriptor_get_event</a>, function in <a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html" title="gst-dvb-descriptor">gst-dvb-descriptor</a>
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#gst-mpegts-dvb-linkage-descriptor-get-event" title="gst_mpegts_dvb_linkage_descriptor_get_event ()">gst_mpegts_dvb_linkage_descriptor_get_event</a>, function in <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html" title="DVB variants of MPEG-TS descriptors">DVB variants of MPEG-TS descriptors</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#gst-mpegts-dvb-linkage-descriptor-get-extended-event" title="gst_mpegts_dvb_linkage_descriptor_get_extended_event ()">gst_mpegts_dvb_linkage_descriptor_get_extended_event</a>, function in <a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html" title="gst-dvb-descriptor">gst-dvb-descriptor</a>
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#gst-mpegts-dvb-linkage-descriptor-get-extended-event" title="gst_mpegts_dvb_linkage_descriptor_get_extended_event ()">gst_mpegts_dvb_linkage_descriptor_get_extended_event</a>, function in <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html" title="DVB variants of MPEG-TS descriptors">DVB variants of MPEG-TS descriptors</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#gst-mpegts-dvb-linkage-descriptor-get-mobile-hand-over" title="gst_mpegts_dvb_linkage_descriptor_get_mobile_hand_over ()">gst_mpegts_dvb_linkage_descriptor_get_mobile_hand_over</a>, function in <a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html" title="gst-dvb-descriptor">gst-dvb-descriptor</a>
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#gst-mpegts-dvb-linkage-descriptor-get-mobile-hand-over" title="gst_mpegts_dvb_linkage_descriptor_get_mobile_hand_over ()">gst_mpegts_dvb_linkage_descriptor_get_mobile_hand_over</a>, function in <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html" title="DVB variants of MPEG-TS descriptors">DVB variants of MPEG-TS descriptors</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#gst-mpegts-extended-event-descriptor-free" title="gst_mpegts_extended_event_descriptor_free ()">gst_mpegts_extended_event_descriptor_free</a>, function in <a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html" title="gst-dvb-descriptor">gst-dvb-descriptor</a>
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#gst-mpegts-extended-event-descriptor-free" title="gst_mpegts_extended_event_descriptor_free ()">gst_mpegts_extended_event_descriptor_free</a>, function in <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html" title="DVB variants of MPEG-TS descriptors">DVB variants of MPEG-TS descriptors</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gstmpegtsdescriptor.html#gst-mpegts-find-descriptor" title="gst_mpegts_find_descriptor ()">gst_mpegts_find_descriptor</a>, function in <a class="link" href="gst-plugins-bad-libs-gstmpegtsdescriptor.html" title="gstmpegtsdescriptor">gstmpegtsdescriptor</a>
+<a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#gst-mpegts-find-descriptor" title="gst_mpegts_find_descriptor ()">gst_mpegts_find_descriptor</a>, function in <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html" title="Base MPEG-TS descriptors">Base MPEG-TS descriptors</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gstmpegts.html#gst-mpegts-initialize" title="gst_mpegts_initialize ()">gst_mpegts_initialize</a>, function in <a class="link" href="gst-plugins-bad-libs-gstmpegts.html" title="gstmpegts">gstmpegts</a>
+<a class="link" href="gst-plugins-bad-libs-Mpeg-ts-helper-library.html#gst-mpegts-initialize" title="gst_mpegts_initialize ()">gst_mpegts_initialize</a>, function in <a class="link" href="gst-plugins-bad-libs-Mpeg-ts-helper-library.html" title="Mpeg-ts helper library">Mpeg-ts helper library</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gstmpegtsdescriptor.html#gst-mpegts-iso-639-language-descriptor-free" title="gst_mpegts_iso_639_language_descriptor_free ()">gst_mpegts_iso_639_language_descriptor_free</a>, function in <a class="link" href="gst-plugins-bad-libs-gstmpegtsdescriptor.html" title="gstmpegtsdescriptor">gstmpegtsdescriptor</a>
+<a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#gst-mpegts-iso-639-language-descriptor-free" title="gst_mpegts_iso_639_language_descriptor_free ()">gst_mpegts_iso_639_language_descriptor_free</a>, function in <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html" title="Base MPEG-TS descriptors">Base MPEG-TS descriptors</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-section.html#gst-mpegts-nit-new" title="gst_mpegts_nit_new ()">gst_mpegts_nit_new</a>, function in <a class="link" href="gst-plugins-bad-libs-gst-dvb-section.html" title="gst-dvb-section">gst-dvb-section</a>
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#gst-mpegts-nit-new" title="gst_mpegts_nit_new ()">gst_mpegts_nit_new</a>, function in <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html" title="DVB variants of MPEG-TS sections">DVB variants of MPEG-TS sections</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-section.html#gst-mpegts-nit-stream-new" title="gst_mpegts_nit_stream_new ()">gst_mpegts_nit_stream_new</a>, function in <a class="link" href="gst-plugins-bad-libs-gst-dvb-section.html" title="gst-dvb-section">gst-dvb-section</a>
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#gst-mpegts-nit-stream-new" title="gst_mpegts_nit_stream_new ()">gst_mpegts_nit_stream_new</a>, function in <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html" title="DVB variants of MPEG-TS sections">DVB variants of MPEG-TS sections</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gstmpegtsdescriptor.html#gst-mpegts-parse-descriptors" title="gst_mpegts_parse_descriptors ()">gst_mpegts_parse_descriptors</a>, function in <a class="link" href="gst-plugins-bad-libs-gstmpegtsdescriptor.html" title="gstmpegtsdescriptor">gstmpegtsdescriptor</a>
+<a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#gst-mpegts-parse-descriptors" title="gst_mpegts_parse_descriptors ()">gst_mpegts_parse_descriptors</a>, function in <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html" title="Base MPEG-TS descriptors">Base MPEG-TS descriptors</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gstmpegtssection.html#gst-mpegts-pat-new" title="gst_mpegts_pat_new ()">gst_mpegts_pat_new</a>, function in <a class="link" href="gst-plugins-bad-libs-gstmpegtssection.html" title="gstmpegtssection">gstmpegtssection</a>
+<a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#gst-mpegts-pat-new" title="gst_mpegts_pat_new ()">gst_mpegts_pat_new</a>, function in <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html" title="Base MPEG-TS sections">Base MPEG-TS sections</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gstmpegtssection.html#gst-mpegts-pat-program-new" title="gst_mpegts_pat_program_new ()">gst_mpegts_pat_program_new</a>, function in <a class="link" href="gst-plugins-bad-libs-gstmpegtssection.html" title="gstmpegtssection">gstmpegtssection</a>
+<a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#gst-mpegts-pat-program-new" title="gst_mpegts_pat_program_new ()">gst_mpegts_pat_program_new</a>, function in <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html" title="Base MPEG-TS sections">Base MPEG-TS sections</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gstmpegtssection.html#gst-mpegts-pmt-new" title="gst_mpegts_pmt_new ()">gst_mpegts_pmt_new</a>, function in <a class="link" href="gst-plugins-bad-libs-gstmpegtssection.html" title="gstmpegtssection">gstmpegtssection</a>
+<a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#gst-mpegts-pmt-new" title="gst_mpegts_pmt_new ()">gst_mpegts_pmt_new</a>, function in <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html" title="Base MPEG-TS sections">Base MPEG-TS sections</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gstmpegtssection.html#gst-mpegts-pmt-stream-new" title="gst_mpegts_pmt_stream_new ()">gst_mpegts_pmt_stream_new</a>, function in <a class="link" href="gst-plugins-bad-libs-gstmpegtssection.html" title="gstmpegtssection">gstmpegtssection</a>
+<a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#gst-mpegts-pmt-stream-new" title="gst_mpegts_pmt_stream_new ()">gst_mpegts_pmt_stream_new</a>, function in <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html" title="Base MPEG-TS sections">Base MPEG-TS sections</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-section.html#gst-mpegts-sdt-new" title="gst_mpegts_sdt_new ()">gst_mpegts_sdt_new</a>, function in <a class="link" href="gst-plugins-bad-libs-gst-dvb-section.html" title="gst-dvb-section">gst-dvb-section</a>
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#gst-mpegts-sdt-new" title="gst_mpegts_sdt_new ()">gst_mpegts_sdt_new</a>, function in <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html" title="DVB variants of MPEG-TS sections">DVB variants of MPEG-TS sections</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-section.html#gst-mpegts-sdt-service-new" title="gst_mpegts_sdt_service_new ()">gst_mpegts_sdt_service_new</a>, function in <a class="link" href="gst-plugins-bad-libs-gst-dvb-section.html" title="gst-dvb-section">gst-dvb-section</a>
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#gst-mpegts-sdt-service-new" title="gst_mpegts_sdt_service_new ()">gst_mpegts_sdt_service_new</a>, function in <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html" title="DVB variants of MPEG-TS sections">DVB variants of MPEG-TS sections</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-section.html#gst-mpegts-section-from-nit" title="gst_mpegts_section_from_nit ()">gst_mpegts_section_from_nit</a>, function in <a class="link" href="gst-plugins-bad-libs-gst-dvb-section.html" title="gst-dvb-section">gst-dvb-section</a>
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#gst-mpegts-section-from-nit" title="gst_mpegts_section_from_nit ()">gst_mpegts_section_from_nit</a>, function in <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html" title="DVB variants of MPEG-TS sections">DVB variants of MPEG-TS sections</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gstmpegtssection.html#gst-mpegts-section-from-pat" title="gst_mpegts_section_from_pat ()">gst_mpegts_section_from_pat</a>, function in <a class="link" href="gst-plugins-bad-libs-gstmpegtssection.html" title="gstmpegtssection">gstmpegtssection</a>
+<a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#gst-mpegts-section-from-pat" title="gst_mpegts_section_from_pat ()">gst_mpegts_section_from_pat</a>, function in <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html" title="Base MPEG-TS sections">Base MPEG-TS sections</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gstmpegtssection.html#gst-mpegts-section-from-pmt" title="gst_mpegts_section_from_pmt ()">gst_mpegts_section_from_pmt</a>, function in <a class="link" href="gst-plugins-bad-libs-gstmpegtssection.html" title="gstmpegtssection">gstmpegtssection</a>
+<a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#gst-mpegts-section-from-pmt" title="gst_mpegts_section_from_pmt ()">gst_mpegts_section_from_pmt</a>, function in <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html" title="Base MPEG-TS sections">Base MPEG-TS sections</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-section.html#gst-mpegts-section-from-sdt" title="gst_mpegts_section_from_sdt ()">gst_mpegts_section_from_sdt</a>, function in <a class="link" href="gst-plugins-bad-libs-gst-dvb-section.html" title="gst-dvb-section">gst-dvb-section</a>
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#gst-mpegts-section-from-sdt" title="gst_mpegts_section_from_sdt ()">gst_mpegts_section_from_sdt</a>, function in <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html" title="DVB variants of MPEG-TS sections">DVB variants of MPEG-TS sections</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gst-atsc-section.html#gst-mpegts-section-get-atsc-cvct" title="gst_mpegts_section_get_atsc_cvct ()">gst_mpegts_section_get_atsc_cvct</a>, function in <a class="link" href="gst-plugins-bad-libs-gst-atsc-section.html" title="gst-atsc-section">gst-atsc-section</a>
+<a class="link" href="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html#gst-mpegts-section-get-atsc-cvct" title="gst_mpegts_section_get_atsc_cvct ()">gst_mpegts_section_get_atsc_cvct</a>, function in <a class="link" href="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html" title="ATSC variants of MPEG-TS sections">ATSC variants of MPEG-TS sections</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gst-atsc-section.html#gst-mpegts-section-get-atsc-eit" title="gst_mpegts_section_get_atsc_eit ()">gst_mpegts_section_get_atsc_eit</a>, function in <a class="link" href="gst-plugins-bad-libs-gst-atsc-section.html" title="gst-atsc-section">gst-atsc-section</a>
+<a class="link" href="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html#gst-mpegts-section-get-atsc-eit" title="gst_mpegts_section_get_atsc_eit ()">gst_mpegts_section_get_atsc_eit</a>, function in <a class="link" href="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html" title="ATSC variants of MPEG-TS sections">ATSC variants of MPEG-TS sections</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gst-atsc-section.html#gst-mpegts-section-get-atsc-ett" title="gst_mpegts_section_get_atsc_ett ()">gst_mpegts_section_get_atsc_ett</a>, function in <a class="link" href="gst-plugins-bad-libs-gst-atsc-section.html" title="gst-atsc-section">gst-atsc-section</a>
+<a class="link" href="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html#gst-mpegts-section-get-atsc-ett" title="gst_mpegts_section_get_atsc_ett ()">gst_mpegts_section_get_atsc_ett</a>, function in <a class="link" href="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html" title="ATSC variants of MPEG-TS sections">ATSC variants of MPEG-TS sections</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gst-atsc-section.html#gst-mpegts-section-get-atsc-mgt" title="gst_mpegts_section_get_atsc_mgt ()">gst_mpegts_section_get_atsc_mgt</a>, function in <a class="link" href="gst-plugins-bad-libs-gst-atsc-section.html" title="gst-atsc-section">gst-atsc-section</a>
+<a class="link" href="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html#gst-mpegts-section-get-atsc-mgt" title="gst_mpegts_section_get_atsc_mgt ()">gst_mpegts_section_get_atsc_mgt</a>, function in <a class="link" href="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html" title="ATSC variants of MPEG-TS sections">ATSC variants of MPEG-TS sections</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gst-atsc-section.html#gst-mpegts-section-get-atsc-stt" title="gst_mpegts_section_get_atsc_stt ()">gst_mpegts_section_get_atsc_stt</a>, function in <a class="link" href="gst-plugins-bad-libs-gst-atsc-section.html" title="gst-atsc-section">gst-atsc-section</a>
+<a class="link" href="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html#gst-mpegts-section-get-atsc-stt" title="gst_mpegts_section_get_atsc_stt ()">gst_mpegts_section_get_atsc_stt</a>, function in <a class="link" href="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html" title="ATSC variants of MPEG-TS sections">ATSC variants of MPEG-TS sections</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gst-atsc-section.html#gst-mpegts-section-get-atsc-tvct" title="gst_mpegts_section_get_atsc_tvct ()">gst_mpegts_section_get_atsc_tvct</a>, function in <a class="link" href="gst-plugins-bad-libs-gst-atsc-section.html" title="gst-atsc-section">gst-atsc-section</a>
+<a class="link" href="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html#gst-mpegts-section-get-atsc-tvct" title="gst_mpegts_section_get_atsc_tvct ()">gst_mpegts_section_get_atsc_tvct</a>, function in <a class="link" href="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html" title="ATSC variants of MPEG-TS sections">ATSC variants of MPEG-TS sections</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-section.html#gst-mpegts-section-get-bat" title="gst_mpegts_section_get_bat ()">gst_mpegts_section_get_bat</a>, function in <a class="link" href="gst-plugins-bad-libs-gst-dvb-section.html" title="gst-dvb-section">gst-dvb-section</a>
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#gst-mpegts-section-get-bat" title="gst_mpegts_section_get_bat ()">gst_mpegts_section_get_bat</a>, function in <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html" title="DVB variants of MPEG-TS sections">DVB variants of MPEG-TS sections</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gstmpegtssection.html#gst-mpegts-section-get-cat" title="gst_mpegts_section_get_cat ()">gst_mpegts_section_get_cat</a>, function in <a class="link" href="gst-plugins-bad-libs-gstmpegtssection.html" title="gstmpegtssection">gstmpegtssection</a>
+<a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#gst-mpegts-section-get-cat" title="gst_mpegts_section_get_cat ()">gst_mpegts_section_get_cat</a>, function in <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html" title="Base MPEG-TS sections">Base MPEG-TS sections</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-section.html#gst-mpegts-section-get-eit" title="gst_mpegts_section_get_eit ()">gst_mpegts_section_get_eit</a>, function in <a class="link" href="gst-plugins-bad-libs-gst-dvb-section.html" title="gst-dvb-section">gst-dvb-section</a>
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#gst-mpegts-section-get-eit" title="gst_mpegts_section_get_eit ()">gst_mpegts_section_get_eit</a>, function in <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html" title="DVB variants of MPEG-TS sections">DVB variants of MPEG-TS sections</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-section.html#gst-mpegts-section-get-nit" title="gst_mpegts_section_get_nit ()">gst_mpegts_section_get_nit</a>, function in <a class="link" href="gst-plugins-bad-libs-gst-dvb-section.html" title="gst-dvb-section">gst-dvb-section</a>
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#gst-mpegts-section-get-nit" title="gst_mpegts_section_get_nit ()">gst_mpegts_section_get_nit</a>, function in <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html" title="DVB variants of MPEG-TS sections">DVB variants of MPEG-TS sections</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gstmpegtssection.html#gst-mpegts-section-get-pat" title="gst_mpegts_section_get_pat ()">gst_mpegts_section_get_pat</a>, function in <a class="link" href="gst-plugins-bad-libs-gstmpegtssection.html" title="gstmpegtssection">gstmpegtssection</a>
+<a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#gst-mpegts-section-get-pat" title="gst_mpegts_section_get_pat ()">gst_mpegts_section_get_pat</a>, function in <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html" title="Base MPEG-TS sections">Base MPEG-TS sections</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gstmpegtssection.html#gst-mpegts-section-get-pmt" title="gst_mpegts_section_get_pmt ()">gst_mpegts_section_get_pmt</a>, function in <a class="link" href="gst-plugins-bad-libs-gstmpegtssection.html" title="gstmpegtssection">gstmpegtssection</a>
+<a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#gst-mpegts-section-get-pmt" title="gst_mpegts_section_get_pmt ()">gst_mpegts_section_get_pmt</a>, function in <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html" title="Base MPEG-TS sections">Base MPEG-TS sections</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-section.html#gst-mpegts-section-get-sdt" title="gst_mpegts_section_get_sdt ()">gst_mpegts_section_get_sdt</a>, function in <a class="link" href="gst-plugins-bad-libs-gst-dvb-section.html" title="gst-dvb-section">gst-dvb-section</a>
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#gst-mpegts-section-get-sdt" title="gst_mpegts_section_get_sdt ()">gst_mpegts_section_get_sdt</a>, function in <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html" title="DVB variants of MPEG-TS sections">DVB variants of MPEG-TS sections</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-section.html#gst-mpegts-section-get-tdt" title="gst_mpegts_section_get_tdt ()">gst_mpegts_section_get_tdt</a>, function in <a class="link" href="gst-plugins-bad-libs-gst-dvb-section.html" title="gst-dvb-section">gst-dvb-section</a>
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#gst-mpegts-section-get-tdt" title="gst_mpegts_section_get_tdt ()">gst_mpegts_section_get_tdt</a>, function in <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html" title="DVB variants of MPEG-TS sections">DVB variants of MPEG-TS sections</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-section.html#gst-mpegts-section-get-tot" title="gst_mpegts_section_get_tot ()">gst_mpegts_section_get_tot</a>, function in <a class="link" href="gst-plugins-bad-libs-gst-dvb-section.html" title="gst-dvb-section">gst-dvb-section</a>
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#gst-mpegts-section-get-tot" title="gst_mpegts_section_get_tot ()">gst_mpegts_section_get_tot</a>, function in <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html" title="DVB variants of MPEG-TS sections">DVB variants of MPEG-TS sections</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gstmpegtssection.html#gst-mpegts-section-get-tsdt" title="gst_mpegts_section_get_tsdt ()">gst_mpegts_section_get_tsdt</a>, function in <a class="link" href="gst-plugins-bad-libs-gstmpegtssection.html" title="gstmpegtssection">gstmpegtssection</a>
+<a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#gst-mpegts-section-get-tsdt" title="gst_mpegts_section_get_tsdt ()">gst_mpegts_section_get_tsdt</a>, function in <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html" title="Base MPEG-TS sections">Base MPEG-TS sections</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gstmpegtssection.html#gst-mpegts-section-new" title="gst_mpegts_section_new ()">gst_mpegts_section_new</a>, function in <a class="link" href="gst-plugins-bad-libs-gstmpegtssection.html" title="gstmpegtssection">gstmpegtssection</a>
+<a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#gst-mpegts-section-new" title="gst_mpegts_section_new ()">gst_mpegts_section_new</a>, function in <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html" title="Base MPEG-TS sections">Base MPEG-TS sections</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gstmpegtssection.html#gst-mpegts-section-packetize" title="gst_mpegts_section_packetize ()">gst_mpegts_section_packetize</a>, function in <a class="link" href="gst-plugins-bad-libs-gstmpegtssection.html" title="gstmpegtssection">gstmpegtssection</a>
+<a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#gst-mpegts-section-packetize" title="gst_mpegts_section_packetize ()">gst_mpegts_section_packetize</a>, function in <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html" title="Base MPEG-TS sections">Base MPEG-TS sections</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gstmpegtssection.html#gst-mpegts-section-ref" title="gst_mpegts_section_ref()">gst_mpegts_section_ref</a>, macro in <a class="link" href="gst-plugins-bad-libs-gstmpegtssection.html" title="gstmpegtssection">gstmpegtssection</a>
+<a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#gst-mpegts-section-ref" title="gst_mpegts_section_ref()">gst_mpegts_section_ref</a>, macro in <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html" title="Base MPEG-TS sections">Base MPEG-TS sections</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gstmpegtssection.html#gst-mpegts-section-send-event" title="gst_mpegts_section_send_event ()">gst_mpegts_section_send_event</a>, function in <a class="link" href="gst-plugins-bad-libs-gstmpegtssection.html" title="gstmpegtssection">gstmpegtssection</a>
+<a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#gst-mpegts-section-send-event" title="gst_mpegts_section_send_event ()">gst_mpegts_section_send_event</a>, function in <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html" title="Base MPEG-TS sections">Base MPEG-TS sections</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gstmpegtssection.html#GST-MPEGTS-SECTION-TYPE:CAPS" title="GST_MPEGTS_SECTION_TYPE()">GST_MPEGTS_SECTION_TYPE</a>, macro in <a class="link" href="gst-plugins-bad-libs-gstmpegtssection.html" title="gstmpegtssection">gstmpegtssection</a>
+<a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GST-MPEGTS-SECTION-TYPE:CAPS" title="GST_MPEGTS_SECTION_TYPE()">GST_MPEGTS_SECTION_TYPE</a>, macro in <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html" title="Base MPEG-TS sections">Base MPEG-TS sections</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gstmpegtssection.html#gst-mpegts-section-unref" title="gst_mpegts_section_unref()">gst_mpegts_section_unref</a>, macro in <a class="link" href="gst-plugins-bad-libs-gstmpegtssection.html" title="gstmpegtssection">gstmpegtssection</a>
+<a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#gst-mpegts-section-unref" title="gst_mpegts_section_unref()">gst_mpegts_section_unref</a>, macro in <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html" title="Base MPEG-TS sections">Base MPEG-TS sections</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#gst-mpegts-t2-delivery-system-descriptor-free" title="gst_mpegts_t2_delivery_system_descriptor_free ()">gst_mpegts_t2_delivery_system_descriptor_free</a>, function in <a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html" title="gst-dvb-descriptor">gst-dvb-descriptor</a>
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#gst-mpegts-t2-delivery-system-descriptor-free" title="gst_mpegts_t2_delivery_system_descriptor_free ()">gst_mpegts_t2_delivery_system_descriptor_free</a>, function in <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html" title="DVB variants of MPEG-TS descriptors">DVB variants of MPEG-TS descriptors</a>
</dt>
<dd></dd>
<dt>
@@ -3348,10 +3296,6 @@
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer--position-update-interval" title="The “position-update-interval” property">GstPlayer:position-update-interval</a>, object property in <a class="link" href="gst-plugins-bad-libs-gstplayer.html" title="gstplayer">gstplayer</a>
-</dt>
-<dd></dd>
-<dt>
<a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer--rate" title="The “rate” property">GstPlayer:rate</a>, object property in <a class="link" href="gst-plugins-bad-libs-gstplayer.html" title="gstplayer">gstplayer</a>
</dt>
<dd></dd>
@@ -3460,6 +3404,22 @@
</dt>
<dd></dd>
<dt>
+<a class="link" href="gst-plugins-bad-libs-gstplayer.html#gst-player-config-get-position-update-interval" title="gst_player_config_get_position_update_interval ()">gst_player_config_get_position_update_interval</a>, function in <a class="link" href="gst-plugins-bad-libs-gstplayer.html" title="gstplayer">gstplayer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-gstplayer.html#gst-player-config-get-user-agent" title="gst_player_config_get_user_agent ()">gst_player_config_get_user_agent</a>, function in <a class="link" href="gst-plugins-bad-libs-gstplayer.html" title="gstplayer">gstplayer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-gstplayer.html#gst-player-config-set-position-update-interval" title="gst_player_config_set_position_update_interval ()">gst_player_config_set_position_update_interval</a>, function in <a class="link" href="gst-plugins-bad-libs-gstplayer.html" title="gstplayer">gstplayer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-gstplayer.html#gst-player-config-set-user-agent" title="gst_player_config_set_user_agent ()">gst_player_config_set_user_agent</a>, function in <a class="link" href="gst-plugins-bad-libs-gstplayer.html" title="gstplayer">gstplayer</a>
+</dt>
+<dd></dd>
+<dt>
<a class="link" href="gst-plugins-bad-libs-gstplayer.html#GST-PLAYER-ERROR:CAPS" title="GST_PLAYER_ERROR">GST_PLAYER_ERROR</a>, macro in <a class="link" href="gst-plugins-bad-libs-gstplayer.html" title="gstplayer">gstplayer</a>
</dt>
<dd></dd>
@@ -3480,6 +3440,10 @@
</dt>
<dd></dd>
<dt>
+<a class="link" href="gst-plugins-bad-libs-gstplayer.html#gst-player-get-config" title="gst_player_get_config ()">gst_player_get_config</a>, function in <a class="link" href="gst-plugins-bad-libs-gstplayer.html" title="gstplayer">gstplayer</a>
+</dt>
+<dd></dd>
+<dt>
<a class="link" href="gst-plugins-bad-libs-gstplayer.html#gst-player-get-current-audio-track" title="gst_player_get_current_audio_track ()">gst_player_get_current_audio_track</a>, function in <a class="link" href="gst-plugins-bad-libs-gstplayer.html" title="gstplayer">gstplayer</a>
</dt>
<dd></dd>
@@ -3524,10 +3488,6 @@
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gstplayer.html#gst-player-get-position-update-interval" title="gst_player_get_position_update_interval ()">gst_player_get_position_update_interval</a>, function in <a class="link" href="gst-plugins-bad-libs-gstplayer.html" title="gstplayer">gstplayer</a>
-</dt>
-<dd></dd>
-<dt>
<a class="link" href="gst-plugins-bad-libs-gstplayer.html#gst-player-get-rate" title="gst_player_get_rate ()">gst_player_get_rate</a>, function in <a class="link" href="gst-plugins-bad-libs-gstplayer.html" title="gstplayer">gstplayer</a>
</dt>
<dd></dd>
@@ -3628,6 +3588,10 @@
</dt>
<dd></dd>
<dt>
+<a class="link" href="gst-plugins-bad-libs-gstplayer.html#gst-player-set-config" title="gst_player_set_config ()">gst_player_set_config</a>, function in <a class="link" href="gst-plugins-bad-libs-gstplayer.html" title="gstplayer">gstplayer</a>
+</dt>
+<dd></dd>
+<dt>
<a class="link" href="gst-plugins-bad-libs-gstplayer.html#gst-player-set-multiview-flags" title="gst_player_set_multiview_flags ()">gst_player_set_multiview_flags</a>, function in <a class="link" href="gst-plugins-bad-libs-gstplayer.html" title="gstplayer">gstplayer</a>
</dt>
<dd></dd>
@@ -3640,10 +3604,6 @@
</dt>
<dd></dd>
<dt>
-<a class="link" href="gst-plugins-bad-libs-gstplayer.html#gst-player-set-position-update-interval" title="gst_player_set_position_update_interval ()">gst_player_set_position_update_interval</a>, function in <a class="link" href="gst-plugins-bad-libs-gstplayer.html" title="gstplayer">gstplayer</a>
-</dt>
-<dd></dd>
-<dt>
<a class="link" href="gst-plugins-bad-libs-gstplayer.html#gst-player-set-rate" title="gst_player_set_rate ()">gst_player_set_rate</a>, function in <a class="link" href="gst-plugins-bad-libs-gstplayer.html" title="gstplayer">gstplayer</a>
</dt>
<dd></dd>
diff --git a/docs/libs/html/base.html b/docs/libs/html/base.html
index 6efd348..2bc7751 100644
--- a/docs/libs/html/base.html
+++ b/docs/libs/html/base.html
@@ -24,7 +24,8 @@
<a name="base"></a>GStreamer Base classes from gst-plugins-bad</h2></div></div></div>
<div class="toc"><dl class="toc">
<dt>
-<span class="refentrytitle"><a href="gst-plugins-bad-libs-GstAggregator.html">GstAggregator</a></span><span class="refpurpose"></span>
+<span class="refentrytitle"><a href="gst-plugins-bad-libs-GstAggregator.html">GstAggregator</a></span><span class="refpurpose"> — manages a set of pads with the purpose of
+aggregating their buffers.</span>
</dt>
<dt>
<span class="refentrytitle"><a href="gst-plugins-bad-libs-GstAggregatorPad.html">GstAggregatorPad</a></span><span class="refpurpose"></span>
diff --git a/docs/libs/html/ch08.html b/docs/libs/html/ch08.html
index 3daceb5..985917d 100644
--- a/docs/libs/html/ch08.html
+++ b/docs/libs/html/ch08.html
@@ -23,7 +23,7 @@
<div class="titlepage"><div><div><h2 class="title">
<a name="id-1.2.11"></a>Interfaces</h2></div></div></div>
<div class="toc"><dl class="toc"><dt>
-<span class="refentrytitle"><a href="gst-plugins-bad-libs-GstPhotography.html">GstPhotography</a></span><span class="refpurpose"></span>
+<span class="refentrytitle"><a href="gst-plugins-bad-libs-GstPhotography.html">GstPhotography</a></span><span class="refpurpose"> — Interface for digital image capture elements</span>
</dt></dl></div>
</div>
<div class="footer">
diff --git a/docs/libs/html/codecparsers.html b/docs/libs/html/codecparsers.html
index 35dd0ea..f03fbe0 100644
--- a/docs/libs/html/codecparsers.html
+++ b/docs/libs/html/codecparsers.html
@@ -24,19 +24,23 @@
<a name="codecparsers"></a>Bitstream parsing Library</h2></div></div></div>
<div class="toc"><dl class="toc">
<dt>
-<span class="refentrytitle"><a href="gst-plugins-bad-libs-h264parser.html">h264parser</a></span><span class="refpurpose"></span>
+<span class="refentrytitle"><a href="gst-plugins-bad-libs-h264parser.html">h264parser</a></span><span class="refpurpose"> — Convenience library for h264 video
+bitstream parsing.</span>
</dt>
<dt>
-<span class="refentrytitle"><a href="gst-plugins-bad-libs-jpegparser.html">jpegparser</a></span><span class="refpurpose"></span>
+<span class="refentrytitle"><a href="gst-plugins-bad-libs-jpegparser.html">jpegparser</a></span><span class="refpurpose"> — Convenience library for JPEG bitstream parsing.</span>
</dt>
<dt>
-<span class="refentrytitle"><a href="gst-plugins-bad-libs-mpegvideoparser.html">mpegvideoparser</a></span><span class="refpurpose"></span>
+<span class="refentrytitle"><a href="gst-plugins-bad-libs-mpegvideoparser.html">mpegvideoparser</a></span><span class="refpurpose"> — Convenience library for mpeg1 and 2 video
+bitstream parsing.</span>
</dt>
<dt>
-<span class="refentrytitle"><a href="gst-plugins-bad-libs-mpeg4parser.html">mpeg4parser</a></span><span class="refpurpose"></span>
+<span class="refentrytitle"><a href="gst-plugins-bad-libs-mpeg4parser.html">mpeg4parser</a></span><span class="refpurpose"> — Convenience library for parsing mpeg4 part 2 video
+bitstream.</span>
</dt>
<dt>
-<span class="refentrytitle"><a href="gst-plugins-bad-libs-vc1parser.html">vc1parser</a></span><span class="refpurpose"></span>
+<span class="refentrytitle"><a href="gst-plugins-bad-libs-vc1parser.html">vc1parser</a></span><span class="refpurpose"> — Convenience library for parsing vc1 video
+bitstream.</span>
</dt>
<dt>
<span class="refentrytitle"><a href="gst-plugins-bad-libs-gstmpegvideometa.html">gstmpegvideometa</a></span><span class="refpurpose"></span>
diff --git a/docs/libs/html/gl.html b/docs/libs/html/gl.html
index 6e5d70a..236e3be 100644
--- a/docs/libs/html/gl.html
+++ b/docs/libs/html/gl.html
@@ -27,22 +27,22 @@
<span class="refentrytitle"><a href="gst-plugins-bad-libs-GstGLAPI.html">GstGLAPI</a></span><span class="refpurpose"></span>
</dt>
<dt>
-<span class="refentrytitle"><a href="gst-plugins-bad-libs-gstglbasememory.html">GstGLBaseMemory</a></span><span class="refpurpose"></span>
+<span class="refentrytitle"><a href="gst-plugins-bad-libs-gstglbasememory.html">GstGLBaseMemory</a></span><span class="refpurpose"> — memory subclass for GL buffers</span>
</dt>
<dt>
-<span class="refentrytitle"><a href="GstGLBaseFilter.html">GstGLBaseFilter</a></span><span class="refpurpose"></span>
+<span class="refentrytitle"><a href="GstGLBaseFilter.html">GstGLBaseFilter</a></span><span class="refpurpose"> — <span class="type">GstBaseTransform</span> subclass for transformin OpenGL resources</span>
</dt>
<dt>
-<span class="refentrytitle"><a href="gst-plugins-bad-libs-GstGLBuffer.html">GstGLBuffer</a></span><span class="refpurpose"></span>
+<span class="refentrytitle"><a href="gst-plugins-bad-libs-GstGLBuffer.html">GstGLBuffer</a></span><span class="refpurpose"> — memory subclass for GL buffers</span>
</dt>
<dt>
-<span class="refentrytitle"><a href="GstGLBufferPool.html">GstGLBufferPool</a></span><span class="refpurpose"></span>
+<span class="refentrytitle"><a href="GstGLBufferPool.html">GstGLBufferPool</a></span><span class="refpurpose"> — buffer pool for <span class="type">GstGLMemory</span> objects</span>
</dt>
<dt>
-<span class="refentrytitle"><a href="GstGLColorConvert.html">GstGLColorConvert</a></span><span class="refpurpose"></span>
+<span class="refentrytitle"><a href="GstGLColorConvert.html">GstGLColorConvert</a></span><span class="refpurpose"> — an object that converts between color spaces/formats</span>
</dt>
<dt>
-<span class="refentrytitle"><a href="GstGLContext.html">GstGLContext</a></span><span class="refpurpose"></span>
+<span class="refentrytitle"><a href="GstGLContext.html">GstGLContext</a></span><span class="refpurpose"> — OpenGL context abstraction</span>
</dt>
<dt>
<span class="refentrytitle"><a href="gst-plugins-bad-libs-GstGLContextCocoa.html">GstGLContextCocoa</a></span><span class="refpurpose"></span>
@@ -60,7 +60,7 @@
<span class="refentrytitle"><a href="gst-plugins-bad-libs-GstGLContextWGL.html">GstGLContextWGL</a></span><span class="refpurpose"></span>
</dt>
<dt>
-<span class="refentrytitle"><a href="GstGLDisplay.html">GstGLDisplay</a></span><span class="refpurpose"></span>
+<span class="refentrytitle"><a href="GstGLDisplay.html">GstGLDisplay</a></span><span class="refpurpose"> — window system display connection abstraction</span>
</dt>
<dt>
<span class="refentrytitle"><a href="gst-plugins-bad-libs-GstEGLImageMemory.html">GstEGLImageMemory</a></span><span class="refpurpose"></span>
@@ -72,28 +72,28 @@
<span class="refentrytitle"><a href="GstGLFramebuffer.html">GstGLFramebuffer</a></span><span class="refpurpose"></span>
</dt>
<dt>
-<span class="refentrytitle"><a href="gst-plugins-bad-libs-GstGLMemory.html">GstGLMemory</a></span><span class="refpurpose"></span>
+<span class="refentrytitle"><a href="gst-plugins-bad-libs-GstGLMemory.html">GstGLMemory</a></span><span class="refpurpose"> — memory subclass for GL textures</span>
</dt>
<dt>
-<span class="refentrytitle"><a href="gst-plugins-bad-libs-gstglmemorypbo.html">GstGLMemoryPBO</a></span><span class="refpurpose"></span>
+<span class="refentrytitle"><a href="gst-plugins-bad-libs-gstglmemorypbo.html">GstGLMemoryPBO</a></span><span class="refpurpose"> — memory subclass for GL textures</span>
</dt>
<dt>
-<span class="refentrytitle"><a href="GstGLShader.html">GstGLShader</a></span><span class="refpurpose"></span>
+<span class="refentrytitle"><a href="GstGLShader.html">GstGLShader</a></span><span class="refpurpose"> — object representing an OpenGL shader program</span>
</dt>
<dt>
-<span class="refentrytitle"><a href="gst-plugins-bad-libs-GstGLSL.html">GstGLSL</a></span><span class="refpurpose"></span>
+<span class="refentrytitle"><a href="gst-plugins-bad-libs-GstGLSL.html">GstGLSL</a></span><span class="refpurpose"> — helpers for dealing with OpenGL shaders</span>
</dt>
<dt>
-<span class="refentrytitle"><a href=".html"></a></span><span class="refpurpose"></span>
+<span class="refentrytitle"><a href=".html">GstGLSLStage</a></span><span class="refpurpose"> — object for dealing with OpenGL shader stages</span>
</dt>
<dt>
<span class="refentrytitle"><a href="gst-plugins-bad-libs-GstGLSyncMeta.html">GstGLSyncMeta</a></span><span class="refpurpose"></span>
</dt>
<dt>
-<span class="refentrytitle"><a href="GstGLUpload.html">GstGLUpload</a></span><span class="refpurpose"></span>
+<span class="refentrytitle"><a href="GstGLUpload.html">GstGLUpload</a></span><span class="refpurpose"> — an object that uploads to GL textures</span>
</dt>
<dt>
-<span class="refentrytitle"><a href="GstGLWindow.html">GstGLWindow</a></span><span class="refpurpose"></span>
+<span class="refentrytitle"><a href="GstGLWindow.html">GstGLWindow</a></span><span class="refpurpose"> — window/surface abstraction</span>
</dt>
<dt>
<span class="refentrytitle"><a href="gst-plugins-bad-libs-GstGLWindowAndroid.html">GstGLWindowAndroid</a></span><span class="refpurpose"></span>
@@ -114,7 +114,7 @@
<span class="refentrytitle"><a href="gst-plugins-bad-libs-GstGLWindowX11.html">GstGLWindowX11</a></span><span class="refpurpose"></span>
</dt>
<dt>
-<span class="refentrytitle"><a href="gst-plugins-bad-libs-gstgldebug.html">OpenGL Debugging</a></span><span class="refpurpose"></span>
+<span class="refentrytitle"><a href="gst-plugins-bad-libs-OpenGL-debugging.html">OpenGL debugging</a></span><span class="refpurpose"> — helper routines for dealing with OpenGL debugging</span>
</dt>
<dt>
<span class="refentrytitle"><a href="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html">OpenGL Miscellaneous Utilities</a></span><span class="refpurpose"></span>
diff --git a/docs/libs/html/gst-plugins-bad-libs-1.0.devhelp2 b/docs/libs/html/gst-plugins-bad-libs-1.0.devhelp2
index 0be1ec3..4eb766b 100644
--- a/docs/libs/html/gst-plugins-bad-libs-1.0.devhelp2
+++ b/docs/libs/html/gst-plugins-bad-libs-1.0.devhelp2
@@ -12,14 +12,14 @@
<sub name="gstmpegvideometa" link="gst-plugins-bad-libs-gstmpegvideometa.html"/>
</sub>
<sub name="Mpeg TS helper library" link="mpegts.html">
- <sub name="gstmpegts" link="gst-plugins-bad-libs-gstmpegts.html"/>
- <sub name="gstmpegtssection" link="gst-plugins-bad-libs-gstmpegtssection.html"/>
- <sub name="gstmpegtsdescriptor" link="gst-plugins-bad-libs-gstmpegtsdescriptor.html"/>
- <sub name="gst-atsc-section" link="gst-plugins-bad-libs-gst-atsc-section.html"/>
- <sub name="gst-dvb-section" link="gst-plugins-bad-libs-gst-dvb-section.html"/>
- <sub name="gst-atsc-descriptor" link="gst-plugins-bad-libs-gst-atsc-descriptor.html"/>
- <sub name="gst-dvb-descriptor" link="gst-plugins-bad-libs-gst-dvb-descriptor.html"/>
- <sub name="gst-isdb-descriptor" link="gst-plugins-bad-libs-gst-isdb-descriptor.html"/>
+ <sub name="Mpeg-ts helper library" link="gst-plugins-bad-libs-Mpeg-ts-helper-library.html"/>
+ <sub name="Base MPEG-TS sections" link="gst-plugins-bad-libs-Base-MPEG-TS-sections.html"/>
+ <sub name="Base MPEG-TS descriptors" link="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html"/>
+ <sub name="ATSC variants of MPEG-TS sections" link="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html"/>
+ <sub name="DVB variants of MPEG-TS sections" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html"/>
+ <sub name="ATSC variants of MPEG-TS descriptors" link="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-descriptors.html"/>
+ <sub name="DVB variants of MPEG-TS descriptors" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html"/>
+ <sub name="ISDB variants of MPEG-TS descriptors" link="gst-plugins-bad-libs-ISDB-variants-of-MPEG-TS-descriptors.html"/>
</sub>
<sub name="Useful elements" link="tools.html">
<sub name="GstInsertbin" link="gst-plugins-bad-libs-GstInsertbin.html"/>
@@ -53,7 +53,7 @@
<sub name="GstGLMemoryPBO" link="gst-plugins-bad-libs-gstglmemorypbo.html"/>
<sub name="GstGLShader" link="GstGLShader.html"/>
<sub name="GstGLSL" link="gst-plugins-bad-libs-GstGLSL.html"/>
- <sub name="" link=".html"/>
+ <sub name="GstGLSLStage" link=".html"/>
<sub name="GstGLSyncMeta" link="gst-plugins-bad-libs-GstGLSyncMeta.html"/>
<sub name="GstGLUpload" link="GstGLUpload.html"/>
<sub name="GstGLWindow" link="GstGLWindow.html"/>
@@ -63,7 +63,7 @@
<sub name="GstGLWindowWayland" link="gst-plugins-bad-libs-GstGLWindowWayland.html"/>
<sub name="GstGLWindowWin32" link="gst-plugins-bad-libs-GstGLWindowWin32.html"/>
<sub name="GstGLWindowX11" link="gst-plugins-bad-libs-GstGLWindowX11.html"/>
- <sub name="OpenGL Debugging" link="gst-plugins-bad-libs-gstgldebug.html"/>
+ <sub name="OpenGL debugging" link="gst-plugins-bad-libs-OpenGL-debugging.html"/>
<sub name="OpenGL Miscellaneous Utilities" link="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html"/>
<sub name="OpenGL Formats" link="gst-plugins-bad-libs-OpenGL-Formats.html"/>
</sub>
@@ -81,6 +81,7 @@
<sub name="Object Hierarchy" link="gstreamer-libs-hierarchy.html"/>
<sub name="Index" link="api-index-full.html"/>
<sub name="Index of deprecated API" link="api-index-deprecated.html"/>
+ <sub name="Annotation Glossary" link="annotation-glossary.html"/>
</chapters>
<functions>
<keyword type="macro" name="GST_H264_IS_P_SLICE()" link="gst-plugins-bad-libs-h264parser.html#GST-H264-IS-P-SLICE:CAPS"/>
@@ -99,11 +100,11 @@
<keyword type="function" name="gst_h264_nal_parser_free ()" link="gst-plugins-bad-libs-h264parser.html#gst-h264-nal-parser-free"/>
<keyword type="function" name="gst_h264_parse_sps ()" link="gst-plugins-bad-libs-h264parser.html#gst-h264-parse-sps"/>
<keyword type="function" name="gst_h264_parse_pps ()" link="gst-plugins-bad-libs-h264parser.html#gst-h264-parse-pps"/>
- <keyword type="function" name="gst_h264_pps_clear ()" link="gst-plugins-bad-libs-h264parser.html#gst-h264-pps-clear"/>
- <keyword type="function" name="gst_h264_quant_matrix_8x8_get_zigzag_from_raster ()" link="gst-plugins-bad-libs-h264parser.html#gst-h264-quant-matrix-8x8-get-zigzag-from-raster"/>
- <keyword type="function" name="gst_h264_quant_matrix_8x8_get_raster_from_zigzag ()" link="gst-plugins-bad-libs-h264parser.html#gst-h264-quant-matrix-8x8-get-raster-from-zigzag"/>
- <keyword type="function" name="gst_h264_quant_matrix_4x4_get_zigzag_from_raster ()" link="gst-plugins-bad-libs-h264parser.html#gst-h264-quant-matrix-4x4-get-zigzag-from-raster"/>
- <keyword type="function" name="gst_h264_quant_matrix_4x4_get_raster_from_zigzag ()" link="gst-plugins-bad-libs-h264parser.html#gst-h264-quant-matrix-4x4-get-raster-from-zigzag"/>
+ <keyword type="function" name="gst_h264_pps_clear ()" link="gst-plugins-bad-libs-h264parser.html#gst-h264-pps-clear" since="1.4"/>
+ <keyword type="function" name="gst_h264_quant_matrix_8x8_get_zigzag_from_raster ()" link="gst-plugins-bad-libs-h264parser.html#gst-h264-quant-matrix-8x8-get-zigzag-from-raster" since="1.4"/>
+ <keyword type="function" name="gst_h264_quant_matrix_8x8_get_raster_from_zigzag ()" link="gst-plugins-bad-libs-h264parser.html#gst-h264-quant-matrix-8x8-get-raster-from-zigzag" since="1.4"/>
+ <keyword type="function" name="gst_h264_quant_matrix_4x4_get_zigzag_from_raster ()" link="gst-plugins-bad-libs-h264parser.html#gst-h264-quant-matrix-4x4-get-zigzag-from-raster" since="1.4"/>
+ <keyword type="function" name="gst_h264_quant_matrix_4x4_get_raster_from_zigzag ()" link="gst-plugins-bad-libs-h264parser.html#gst-h264-quant-matrix-4x4-get-raster-from-zigzag" since="1.4"/>
<keyword type="function" name="gst_h264_video_calculate_framerate ()" link="gst-plugins-bad-libs-h264parser.html#gst-h264-video-calculate-framerate"/>
<keyword type="macro" name="GST_H264_MAX_SPS_COUNT" link="gst-plugins-bad-libs-h264parser.html#GST-H264-MAX-SPS-COUNT:CAPS"/>
<keyword type="macro" name="GST_H264_MAX_PPS_COUNT" link="gst-plugins-bad-libs-h264parser.html#GST-H264-MAX-PPS-COUNT:CAPS"/>
@@ -126,44 +127,44 @@
<keyword type="struct" name="struct GstH264PicTiming" link="gst-plugins-bad-libs-h264parser.html#GstH264PicTiming"/>
<keyword type="struct" name="struct GstH264BufferingPeriod" link="gst-plugins-bad-libs-h264parser.html#GstH264BufferingPeriod"/>
<keyword type="struct" name="struct GstH264SEIMessage" link="gst-plugins-bad-libs-h264parser.html#GstH264SEIMessage"/>
- <keyword type="function" name="gst_jpeg_parse ()" link="gst-plugins-bad-libs-jpegparser.html#gst-jpeg-parse"/>
- <keyword type="function" name="gst_jpeg_segment_parse_frame_header ()" link="gst-plugins-bad-libs-jpegparser.html#gst-jpeg-segment-parse-frame-header"/>
- <keyword type="function" name="gst_jpeg_segment_parse_scan_header ()" link="gst-plugins-bad-libs-jpegparser.html#gst-jpeg-segment-parse-scan-header"/>
- <keyword type="function" name="gst_jpeg_segment_parse_huffman_table ()" link="gst-plugins-bad-libs-jpegparser.html#gst-jpeg-segment-parse-huffman-table"/>
- <keyword type="function" name="gst_jpeg_segment_parse_quantization_table ()" link="gst-plugins-bad-libs-jpegparser.html#gst-jpeg-segment-parse-quantization-table"/>
- <keyword type="function" name="gst_jpeg_segment_parse_restart_interval ()" link="gst-plugins-bad-libs-jpegparser.html#gst-jpeg-segment-parse-restart-interval"/>
+ <keyword type="function" name="gst_jpeg_parse ()" link="gst-plugins-bad-libs-jpegparser.html#gst-jpeg-parse" since="1.6"/>
+ <keyword type="function" name="gst_jpeg_segment_parse_frame_header ()" link="gst-plugins-bad-libs-jpegparser.html#gst-jpeg-segment-parse-frame-header" since="1.6"/>
+ <keyword type="function" name="gst_jpeg_segment_parse_scan_header ()" link="gst-plugins-bad-libs-jpegparser.html#gst-jpeg-segment-parse-scan-header" since="1.6"/>
+ <keyword type="function" name="gst_jpeg_segment_parse_huffman_table ()" link="gst-plugins-bad-libs-jpegparser.html#gst-jpeg-segment-parse-huffman-table" since="1.6"/>
+ <keyword type="function" name="gst_jpeg_segment_parse_quantization_table ()" link="gst-plugins-bad-libs-jpegparser.html#gst-jpeg-segment-parse-quantization-table" since="1.6"/>
+ <keyword type="function" name="gst_jpeg_segment_parse_restart_interval ()" link="gst-plugins-bad-libs-jpegparser.html#gst-jpeg-segment-parse-restart-interval" since="1.6"/>
<keyword type="function" name="gst_jpeg_get_default_quantization_tables ()" link="gst-plugins-bad-libs-jpegparser.html#gst-jpeg-get-default-quantization-tables"/>
- <keyword type="function" name="gst_jpeg_get_default_huffman_tables ()" link="gst-plugins-bad-libs-jpegparser.html#gst-jpeg-get-default-huffman-tables"/>
- <keyword type="macro" name="GST_JPEG_MAX_FRAME_COMPONENTS" link="gst-plugins-bad-libs-jpegparser.html#GST-JPEG-MAX-FRAME-COMPONENTS:CAPS"/>
- <keyword type="macro" name="GST_JPEG_MAX_SCAN_COMPONENTS" link="gst-plugins-bad-libs-jpegparser.html#GST-JPEG-MAX-SCAN-COMPONENTS:CAPS"/>
- <keyword type="macro" name="GST_JPEG_MAX_QUANT_ELEMENTS" link="gst-plugins-bad-libs-jpegparser.html#GST-JPEG-MAX-QUANT-ELEMENTS:CAPS"/>
+ <keyword type="function" name="gst_jpeg_get_default_huffman_tables ()" link="gst-plugins-bad-libs-jpegparser.html#gst-jpeg-get-default-huffman-tables" since="1.6"/>
+ <keyword type="macro" name="GST_JPEG_MAX_FRAME_COMPONENTS" link="gst-plugins-bad-libs-jpegparser.html#GST-JPEG-MAX-FRAME-COMPONENTS:CAPS" since="1.6"/>
+ <keyword type="macro" name="GST_JPEG_MAX_SCAN_COMPONENTS" link="gst-plugins-bad-libs-jpegparser.html#GST-JPEG-MAX-SCAN-COMPONENTS:CAPS" since="1.6"/>
+ <keyword type="macro" name="GST_JPEG_MAX_QUANT_ELEMENTS" link="gst-plugins-bad-libs-jpegparser.html#GST-JPEG-MAX-QUANT-ELEMENTS:CAPS" since="1.6"/>
<keyword type="macro" name="GST_JPEG_MARKER_SOF_MIN" link="gst-plugins-bad-libs-jpegparser.html#GST-JPEG-MARKER-SOF-MIN:CAPS"/>
<keyword type="macro" name="GST_JPEG_MARKER_SOF_MAX" link="gst-plugins-bad-libs-jpegparser.html#GST-JPEG-MARKER-SOF-MAX:CAPS"/>
<keyword type="macro" name="GST_JPEG_MARKER_APP_MIN" link="gst-plugins-bad-libs-jpegparser.html#GST-JPEG-MARKER-APP-MIN:CAPS"/>
<keyword type="macro" name="GST_JPEG_MARKER_APP_MAX" link="gst-plugins-bad-libs-jpegparser.html#GST-JPEG-MARKER-APP-MAX:CAPS"/>
<keyword type="macro" name="GST_JPEG_MARKER_RST_MIN" link="gst-plugins-bad-libs-jpegparser.html#GST-JPEG-MARKER-RST-MIN:CAPS"/>
<keyword type="macro" name="GST_JPEG_MARKER_RST_MAX" link="gst-plugins-bad-libs-jpegparser.html#GST-JPEG-MARKER-RST-MAX:CAPS"/>
- <keyword type="enum" name="enum GstJpegEntropyCodingMode" link="gst-plugins-bad-libs-jpegparser.html#GstJpegEntropyCodingMode"/>
- <keyword type="enum" name="enum GstJpegProfile" link="gst-plugins-bad-libs-jpegparser.html#GstJpegProfile"/>
- <keyword type="struct" name="struct GstJpegSegment" link="gst-plugins-bad-libs-jpegparser.html#GstJpegSegment"/>
- <keyword type="struct" name="struct GstJpegFrameHdr" link="gst-plugins-bad-libs-jpegparser.html#GstJpegFrameHdr"/>
- <keyword type="struct" name="struct GstJpegFrameComponent" link="gst-plugins-bad-libs-jpegparser.html#GstJpegFrameComponent"/>
- <keyword type="struct" name="struct GstJpegScanHdr" link="gst-plugins-bad-libs-jpegparser.html#GstJpegScanHdr"/>
- <keyword type="struct" name="struct GstJpegScanComponent" link="gst-plugins-bad-libs-jpegparser.html#GstJpegScanComponent"/>
- <keyword type="struct" name="struct GstJpegHuffmanTables" link="gst-plugins-bad-libs-jpegparser.html#GstJpegHuffmanTables"/>
- <keyword type="struct" name="struct GstJpegHuffmanTable" link="gst-plugins-bad-libs-jpegparser.html#GstJpegHuffmanTable"/>
- <keyword type="struct" name="struct GstJpegQuantTable" link="gst-plugins-bad-libs-jpegparser.html#GstJpegQuantTable"/>
+ <keyword type="enum" name="enum GstJpegEntropyCodingMode" link="gst-plugins-bad-libs-jpegparser.html#GstJpegEntropyCodingMode" since="1.6"/>
+ <keyword type="enum" name="enum GstJpegProfile" link="gst-plugins-bad-libs-jpegparser.html#GstJpegProfile" since="1.6"/>
+ <keyword type="struct" name="struct GstJpegSegment" link="gst-plugins-bad-libs-jpegparser.html#GstJpegSegment" since="1.6"/>
+ <keyword type="struct" name="struct GstJpegFrameHdr" link="gst-plugins-bad-libs-jpegparser.html#GstJpegFrameHdr" since="1.6"/>
+ <keyword type="struct" name="struct GstJpegFrameComponent" link="gst-plugins-bad-libs-jpegparser.html#GstJpegFrameComponent" since="1.6"/>
+ <keyword type="struct" name="struct GstJpegScanHdr" link="gst-plugins-bad-libs-jpegparser.html#GstJpegScanHdr" since="1.6"/>
+ <keyword type="struct" name="struct GstJpegScanComponent" link="gst-plugins-bad-libs-jpegparser.html#GstJpegScanComponent" since="1.6"/>
+ <keyword type="struct" name="struct GstJpegHuffmanTables" link="gst-plugins-bad-libs-jpegparser.html#GstJpegHuffmanTables" since="1.6"/>
+ <keyword type="struct" name="struct GstJpegHuffmanTable" link="gst-plugins-bad-libs-jpegparser.html#GstJpegHuffmanTable" since="1.6"/>
+ <keyword type="struct" name="struct GstJpegQuantTable" link="gst-plugins-bad-libs-jpegparser.html#GstJpegQuantTable" since="1.6"/>
<keyword type="function" name="gst_mpeg_video_parse ()" link="gst-plugins-bad-libs-mpegvideoparser.html#gst-mpeg-video-parse"/>
- <keyword type="function" name="gst_mpeg_video_parse_sequence_header ()" link="gst-plugins-bad-libs-mpegvideoparser.html#gst-mpeg-video-parse-sequence-header" deprecated=""/>
- <keyword type="function" name="gst_mpeg_video_parse_picture_header ()" link="gst-plugins-bad-libs-mpegvideoparser.html#gst-mpeg-video-parse-picture-header" deprecated=""/>
- <keyword type="function" name="gst_mpeg_video_parse_picture_extension ()" link="gst-plugins-bad-libs-mpegvideoparser.html#gst-mpeg-video-parse-picture-extension" deprecated=""/>
- <keyword type="function" name="gst_mpeg_video_parse_gop ()" link="gst-plugins-bad-libs-mpegvideoparser.html#gst-mpeg-video-parse-gop" deprecated=""/>
- <keyword type="function" name="gst_mpeg_video_parse_sequence_extension ()" link="gst-plugins-bad-libs-mpegvideoparser.html#gst-mpeg-video-parse-sequence-extension" deprecated=""/>
+ <keyword type="function" name="gst_mpeg_video_parse_sequence_header ()" link="gst-plugins-bad-libs-mpegvideoparser.html#gst-mpeg-video-parse-sequence-header" deprecated="Use gst_mpeg_video_packet_parse_sequence_header() instead."/>
+ <keyword type="function" name="gst_mpeg_video_parse_picture_header ()" link="gst-plugins-bad-libs-mpegvideoparser.html#gst-mpeg-video-parse-picture-header" deprecated="Use gst_mpeg_video_packet_parse_picture_header() instead."/>
+ <keyword type="function" name="gst_mpeg_video_parse_picture_extension ()" link="gst-plugins-bad-libs-mpegvideoparser.html#gst-mpeg-video-parse-picture-extension" deprecated="Use gst_mpeg_video_packet_parse_picture_extension() instead."/>
+ <keyword type="function" name="gst_mpeg_video_parse_gop ()" link="gst-plugins-bad-libs-mpegvideoparser.html#gst-mpeg-video-parse-gop" deprecated="Use gst_mpeg_video_packet_parse_gop() instead."/>
+ <keyword type="function" name="gst_mpeg_video_parse_sequence_extension ()" link="gst-plugins-bad-libs-mpegvideoparser.html#gst-mpeg-video-parse-sequence-extension" deprecated="Use gst_mpeg_video_packet_parse_sequence_extension() instead."/>
<keyword type="function" name="gst_mpeg_video_parse_sequence_display_extension ()" link="gst-plugins-bad-libs-mpegvideoparser.html#gst-mpeg-video-parse-sequence-display-extension" deprecated=""/>
- <keyword type="function" name="gst_mpeg_video_parse_quant_matrix_extension ()" link="gst-plugins-bad-libs-mpegvideoparser.html#gst-mpeg-video-parse-quant-matrix-extension" deprecated=""/>
+ <keyword type="function" name="gst_mpeg_video_parse_quant_matrix_extension ()" link="gst-plugins-bad-libs-mpegvideoparser.html#gst-mpeg-video-parse-quant-matrix-extension" deprecated="Use gst_mpeg_video_packet_parse_quant_matrix_extension() instead."/>
<keyword type="function" name="gst_mpeg_video_finalise_mpeg2_sequence_header ()" link="gst-plugins-bad-libs-mpegvideoparser.html#gst-mpeg-video-finalise-mpeg2-sequence-header"/>
- <keyword type="function" name="gst_mpeg_video_quant_matrix_get_raster_from_zigzag ()" link="gst-plugins-bad-libs-mpegvideoparser.html#gst-mpeg-video-quant-matrix-get-raster-from-zigzag"/>
- <keyword type="function" name="gst_mpeg_video_quant_matrix_get_zigzag_from_raster ()" link="gst-plugins-bad-libs-mpegvideoparser.html#gst-mpeg-video-quant-matrix-get-zigzag-from-raster"/>
+ <keyword type="function" name="gst_mpeg_video_quant_matrix_get_raster_from_zigzag ()" link="gst-plugins-bad-libs-mpegvideoparser.html#gst-mpeg-video-quant-matrix-get-raster-from-zigzag" since="1.2"/>
+ <keyword type="function" name="gst_mpeg_video_quant_matrix_get_zigzag_from_raster ()" link="gst-plugins-bad-libs-mpegvideoparser.html#gst-mpeg-video-quant-matrix-get-zigzag-from-raster" since="1.2"/>
<keyword type="enum" name="enum GstMpegVideoPacketTypeCode" link="gst-plugins-bad-libs-mpegvideoparser.html#GstMpegVideoPacketTypeCode"/>
<keyword type="enum" name="enum GstMpegVideoPacketExtensionCode" link="gst-plugins-bad-libs-mpegvideoparser.html#GstMpegVideoPacketExtensionCode"/>
<keyword type="enum" name="enum GstMpegVideoLevel" link="gst-plugins-bad-libs-mpegvideoparser.html#GstMpegVideoLevel"/>
@@ -240,183 +241,183 @@
<keyword type="struct" name="GstVC1Picture" link="gst-plugins-bad-libs-vc1parser.html#GstVC1Picture"/>
<keyword type="struct" name="struct GstVC1VopDquant" link="gst-plugins-bad-libs-vc1parser.html#GstVC1VopDquant"/>
<keyword type="struct" name="struct GstVC1BDU" link="gst-plugins-bad-libs-vc1parser.html#GstVC1BDU"/>
- <keyword type="function" name="gst_buffer_add_mpeg_video_meta ()" link="gst-plugins-bad-libs-gstmpegvideometa.html#gst-buffer-add-mpeg-video-meta"/>
+ <keyword type="function" name="gst_buffer_add_mpeg_video_meta ()" link="gst-plugins-bad-libs-gstmpegvideometa.html#gst-buffer-add-mpeg-video-meta" since="1.2"/>
<keyword type="macro" name="gst_buffer_get_mpeg_video_meta()" link="gst-plugins-bad-libs-gstmpegvideometa.html#gst-buffer-get-mpeg-video-meta"/>
<keyword type="function" name="gst_mpeg_video_meta_get_info ()" link="gst-plugins-bad-libs-gstmpegvideometa.html#gst-mpeg-video-meta-get-info"/>
<keyword type="macro" name="GST_MPEG_VIDEO_META_API_TYPE" link="gst-plugins-bad-libs-gstmpegvideometa.html#GST-MPEG-VIDEO-META-API-TYPE:CAPS"/>
<keyword type="macro" name="GST_MPEG_VIDEO_META_INFO" link="gst-plugins-bad-libs-gstmpegvideometa.html#GST-MPEG-VIDEO-META-INFO:CAPS"/>
- <keyword type="struct" name="struct GstMpegVideoMeta" link="gst-plugins-bad-libs-gstmpegvideometa.html#GstMpegVideoMeta"/>
- <keyword type="function" name="gst_mpegts_initialize ()" link="gst-plugins-bad-libs-gstmpegts.html#gst-mpegts-initialize"/>
- <keyword type="macro" name="GST_MPEGTS_SECTION_TYPE()" link="gst-plugins-bad-libs-gstmpegtssection.html#GST-MPEGTS-SECTION-TYPE:CAPS"/>
- <keyword type="function" name="gst_message_new_mpegts_section ()" link="gst-plugins-bad-libs-gstmpegtssection.html#gst-message-new-mpegts-section"/>
- <keyword type="function" name="gst_message_parse_mpegts_section ()" link="gst-plugins-bad-libs-gstmpegtssection.html#gst-message-parse-mpegts-section"/>
- <keyword type="function" name="gst_mpegts_section_send_event ()" link="gst-plugins-bad-libs-gstmpegtssection.html#gst-mpegts-section-send-event"/>
- <keyword type="function" name="gst_event_parse_mpegts_section ()" link="gst-plugins-bad-libs-gstmpegtssection.html#gst-event-parse-mpegts-section"/>
- <keyword type="function" name="gst_mpegts_section_packetize ()" link="gst-plugins-bad-libs-gstmpegtssection.html#gst-mpegts-section-packetize"/>
- <keyword type="function" name="gst_mpegts_section_new ()" link="gst-plugins-bad-libs-gstmpegtssection.html#gst-mpegts-section-new"/>
- <keyword type="macro" name="gst_mpegts_section_ref()" link="gst-plugins-bad-libs-gstmpegtssection.html#gst-mpegts-section-ref"/>
- <keyword type="macro" name="gst_mpegts_section_unref()" link="gst-plugins-bad-libs-gstmpegtssection.html#gst-mpegts-section-unref"/>
- <keyword type="function" name="gst_mpegts_section_get_pat ()" link="gst-plugins-bad-libs-gstmpegtssection.html#gst-mpegts-section-get-pat"/>
- <keyword type="function" name="gst_mpegts_pat_new ()" link="gst-plugins-bad-libs-gstmpegtssection.html#gst-mpegts-pat-new"/>
- <keyword type="function" name="gst_mpegts_pat_program_new ()" link="gst-plugins-bad-libs-gstmpegtssection.html#gst-mpegts-pat-program-new"/>
- <keyword type="function" name="gst_mpegts_section_from_pat ()" link="gst-plugins-bad-libs-gstmpegtssection.html#gst-mpegts-section-from-pat"/>
- <keyword type="function" name="gst_mpegts_section_get_pmt ()" link="gst-plugins-bad-libs-gstmpegtssection.html#gst-mpegts-section-get-pmt"/>
- <keyword type="function" name="gst_mpegts_pmt_new ()" link="gst-plugins-bad-libs-gstmpegtssection.html#gst-mpegts-pmt-new"/>
- <keyword type="function" name="gst_mpegts_pmt_stream_new ()" link="gst-plugins-bad-libs-gstmpegtssection.html#gst-mpegts-pmt-stream-new"/>
- <keyword type="function" name="gst_mpegts_section_from_pmt ()" link="gst-plugins-bad-libs-gstmpegtssection.html#gst-mpegts-section-from-pmt"/>
- <keyword type="function" name="gst_mpegts_section_get_tsdt ()" link="gst-plugins-bad-libs-gstmpegtssection.html#gst-mpegts-section-get-tsdt"/>
- <keyword type="function" name="gst_mpegts_section_get_cat ()" link="gst-plugins-bad-libs-gstmpegtssection.html#gst-mpegts-section-get-cat"/>
- <keyword type="struct" name="struct GstMpegtsSection" link="gst-plugins-bad-libs-gstmpegtssection.html#GstMpegtsSection-struct"/>
- <keyword type="enum" name="enum GstMpegtsSectionTableID" link="gst-plugins-bad-libs-gstmpegtssection.html#GstMpegtsSectionTableID"/>
- <keyword type="enum" name="enum GstMpegtsSectionType" link="gst-plugins-bad-libs-gstmpegtssection.html#GstMpegtsSectionType"/>
- <keyword type="struct" name="struct GstMpegtsPatProgram" link="gst-plugins-bad-libs-gstmpegtssection.html#GstMpegtsPatProgram"/>
- <keyword type="struct" name="struct GstMpegtsPMT" link="gst-plugins-bad-libs-gstmpegtssection.html#GstMpegtsPMT"/>
- <keyword type="struct" name="struct GstMpegtsPMTStream" link="gst-plugins-bad-libs-gstmpegtssection.html#GstMpegtsPMTStream"/>
- <keyword type="enum" name="enum GstMpegtsStreamType" link="gst-plugins-bad-libs-gstmpegtssection.html#GstMpegtsStreamType"/>
- <keyword type="function" name="gst_mpegts_find_descriptor ()" link="gst-plugins-bad-libs-gstmpegtsdescriptor.html#gst-mpegts-find-descriptor"/>
- <keyword type="function" name="gst_mpegts_parse_descriptors ()" link="gst-plugins-bad-libs-gstmpegtsdescriptor.html#gst-mpegts-parse-descriptors"/>
- <keyword type="function" name="gst_mpegts_descriptor_from_custom ()" link="gst-plugins-bad-libs-gstmpegtsdescriptor.html#gst-mpegts-descriptor-from-custom"/>
- <keyword type="function" name="gst_mpegts_descriptor_from_registration ()" link="gst-plugins-bad-libs-gstmpegtsdescriptor.html#gst-mpegts-descriptor-from-registration"/>
- <keyword type="function" name="gst_mpegts_descriptor_parse_iso_639_language ()" link="gst-plugins-bad-libs-gstmpegtsdescriptor.html#gst-mpegts-descriptor-parse-iso-639-language"/>
- <keyword type="function" name="gst_mpegts_descriptor_parse_iso_639_language_idx ()" link="gst-plugins-bad-libs-gstmpegtsdescriptor.html#gst-mpegts-descriptor-parse-iso-639-language-idx"/>
- <keyword type="function" name="gst_mpegts_descriptor_parse_iso_639_language_nb ()" link="gst-plugins-bad-libs-gstmpegtsdescriptor.html#gst-mpegts-descriptor-parse-iso-639-language-nb"/>
- <keyword type="function" name="gst_mpegts_iso_639_language_descriptor_free ()" link="gst-plugins-bad-libs-gstmpegtsdescriptor.html#gst-mpegts-iso-639-language-descriptor-free"/>
- <keyword type="function" name="gst_mpegts_descriptor_parse_logical_channel ()" link="gst-plugins-bad-libs-gstmpegtsdescriptor.html#gst-mpegts-descriptor-parse-logical-channel"/>
- <keyword type="struct" name="struct GstMpegtsDescriptor" link="gst-plugins-bad-libs-gstmpegtsdescriptor.html#GstMpegtsDescriptor-struct"/>
- <keyword type="enum" name="enum GstMpegtsDescriptorType" link="gst-plugins-bad-libs-gstmpegtsdescriptor.html#GstMpegtsDescriptorType"/>
- <keyword type="enum" name="enum GstMpegtsMiscDescriptorType" link="gst-plugins-bad-libs-gstmpegtsdescriptor.html#GstMpegtsMiscDescriptorType"/>
- <keyword type="struct" name="struct GstMpegtsISO639LanguageDescriptor" link="gst-plugins-bad-libs-gstmpegtsdescriptor.html#GstMpegtsISO639LanguageDescriptor"/>
- <keyword type="enum" name="enum GstMpegtsIso639AudioType" link="gst-plugins-bad-libs-gstmpegtsdescriptor.html#GstMpegtsIso639AudioType"/>
- <keyword type="struct" name="struct GstMpegtsLogicalChannel" link="gst-plugins-bad-libs-gstmpegtsdescriptor.html#GstMpegtsLogicalChannel"/>
- <keyword type="struct" name="struct GstMpegtsLogicalChannelDescriptor" link="gst-plugins-bad-libs-gstmpegtsdescriptor.html#GstMpegtsLogicalChannelDescriptor"/>
- <keyword type="function" name="gst_mpegts_section_get_atsc_tvct ()" link="gst-plugins-bad-libs-gst-atsc-section.html#gst-mpegts-section-get-atsc-tvct"/>
- <keyword type="function" name="gst_mpegts_section_get_atsc_cvct ()" link="gst-plugins-bad-libs-gst-atsc-section.html#gst-mpegts-section-get-atsc-cvct"/>
- <keyword type="function" name="gst_mpegts_section_get_atsc_mgt ()" link="gst-plugins-bad-libs-gst-atsc-section.html#gst-mpegts-section-get-atsc-mgt"/>
- <keyword type="function" name="gst_mpegts_atsc_string_segment_get_string ()" link="gst-plugins-bad-libs-gst-atsc-section.html#gst-mpegts-atsc-string-segment-get-string"/>
- <keyword type="function" name="gst_mpegts_section_get_atsc_eit ()" link="gst-plugins-bad-libs-gst-atsc-section.html#gst-mpegts-section-get-atsc-eit"/>
- <keyword type="function" name="gst_mpegts_section_get_atsc_ett ()" link="gst-plugins-bad-libs-gst-atsc-section.html#gst-mpegts-section-get-atsc-ett"/>
- <keyword type="function" name="gst_mpegts_section_get_atsc_stt ()" link="gst-plugins-bad-libs-gst-atsc-section.html#gst-mpegts-section-get-atsc-stt"/>
- <keyword type="function" name="gst_mpegts_atsc_stt_get_datetime_utc ()" link="gst-plugins-bad-libs-gst-atsc-section.html#gst-mpegts-atsc-stt-get-datetime-utc"/>
- <keyword type="enum" name="enum GstMpegtsSectionATSCTableID" link="gst-plugins-bad-libs-gst-atsc-section.html#GstMpegtsSectionATSCTableID"/>
- <keyword type="struct" name="struct GstMpegtsAtscVCTSource" link="gst-plugins-bad-libs-gst-atsc-section.html#GstMpegtsAtscVCTSource"/>
- <keyword type="struct" name="struct GstMpegtsAtscVCT" link="gst-plugins-bad-libs-gst-atsc-section.html#GstMpegtsAtscVCT"/>
- <keyword type="enum" name="enum GstMpegtsAtscMGTTableType" link="gst-plugins-bad-libs-gst-atsc-section.html#GstMpegtsAtscMGTTableType"/>
- <keyword type="struct" name="struct GstMpegtsAtscMGTTable" link="gst-plugins-bad-libs-gst-atsc-section.html#GstMpegtsAtscMGTTable"/>
- <keyword type="struct" name="struct GstMpegtsAtscMGT" link="gst-plugins-bad-libs-gst-atsc-section.html#GstMpegtsAtscMGT"/>
- <keyword type="struct" name="struct GstMpegtsAtscMultString" link="gst-plugins-bad-libs-gst-atsc-section.html#GstMpegtsAtscMultString"/>
- <keyword type="struct" name="struct GstMpegtsAtscEITEvent" link="gst-plugins-bad-libs-gst-atsc-section.html#GstMpegtsAtscEITEvent"/>
- <keyword type="struct" name="struct GstMpegtsAtscEIT" link="gst-plugins-bad-libs-gst-atsc-section.html#GstMpegtsAtscEIT"/>
- <keyword type="struct" name="struct GstMpegtsAtscETT" link="gst-plugins-bad-libs-gst-atsc-section.html#GstMpegtsAtscETT"/>
- <keyword type="struct" name="struct GstMpegtsAtscSTT" link="gst-plugins-bad-libs-gst-atsc-section.html#GstMpegtsAtscSTT"/>
- <keyword type="function" name="gst_mpegts_section_get_nit ()" link="gst-plugins-bad-libs-gst-dvb-section.html#gst-mpegts-section-get-nit"/>
- <keyword type="function" name="gst_mpegts_nit_new ()" link="gst-plugins-bad-libs-gst-dvb-section.html#gst-mpegts-nit-new"/>
- <keyword type="function" name="gst_mpegts_nit_stream_new ()" link="gst-plugins-bad-libs-gst-dvb-section.html#gst-mpegts-nit-stream-new"/>
- <keyword type="function" name="gst_mpegts_section_from_nit ()" link="gst-plugins-bad-libs-gst-dvb-section.html#gst-mpegts-section-from-nit"/>
- <keyword type="function" name="gst_mpegts_section_get_bat ()" link="gst-plugins-bad-libs-gst-dvb-section.html#gst-mpegts-section-get-bat"/>
- <keyword type="function" name="gst_mpegts_section_get_sdt ()" link="gst-plugins-bad-libs-gst-dvb-section.html#gst-mpegts-section-get-sdt"/>
- <keyword type="function" name="gst_mpegts_sdt_new ()" link="gst-plugins-bad-libs-gst-dvb-section.html#gst-mpegts-sdt-new"/>
- <keyword type="function" name="gst_mpegts_sdt_service_new ()" link="gst-plugins-bad-libs-gst-dvb-section.html#gst-mpegts-sdt-service-new"/>
- <keyword type="function" name="gst_mpegts_section_from_sdt ()" link="gst-plugins-bad-libs-gst-dvb-section.html#gst-mpegts-section-from-sdt"/>
- <keyword type="function" name="gst_mpegts_section_get_eit ()" link="gst-plugins-bad-libs-gst-dvb-section.html#gst-mpegts-section-get-eit"/>
- <keyword type="function" name="gst_mpegts_section_get_tdt ()" link="gst-plugins-bad-libs-gst-dvb-section.html#gst-mpegts-section-get-tdt"/>
- <keyword type="function" name="gst_mpegts_section_get_tot ()" link="gst-plugins-bad-libs-gst-dvb-section.html#gst-mpegts-section-get-tot"/>
- <keyword type="enum" name="enum GstMpegtsSectionDVBTableID" link="gst-plugins-bad-libs-gst-dvb-section.html#GstMpegtsSectionDVBTableID"/>
- <keyword type="struct" name="struct GstMpegtsNIT" link="gst-plugins-bad-libs-gst-dvb-section.html#GstMpegtsNIT"/>
- <keyword type="struct" name="struct GstMpegtsNITStream" link="gst-plugins-bad-libs-gst-dvb-section.html#GstMpegtsNITStream"/>
- <keyword type="struct" name="struct GstMpegtsBAT" link="gst-plugins-bad-libs-gst-dvb-section.html#GstMpegtsBAT"/>
- <keyword type="struct" name="struct GstMpegtsBATStream" link="gst-plugins-bad-libs-gst-dvb-section.html#GstMpegtsBATStream"/>
- <keyword type="struct" name="struct GstMpegtsSDT" link="gst-plugins-bad-libs-gst-dvb-section.html#GstMpegtsSDT"/>
- <keyword type="struct" name="struct GstMpegtsSDTService" link="gst-plugins-bad-libs-gst-dvb-section.html#GstMpegtsSDTService"/>
- <keyword type="struct" name="struct GstMpegtsEIT" link="gst-plugins-bad-libs-gst-dvb-section.html#GstMpegtsEIT"/>
- <keyword type="struct" name="struct GstMpegtsEITEvent" link="gst-plugins-bad-libs-gst-dvb-section.html#GstMpegtsEITEvent"/>
- <keyword type="enum" name="enum GstMpegtsRunningStatus" link="gst-plugins-bad-libs-gst-dvb-section.html#GstMpegtsRunningStatus"/>
- <keyword type="struct" name="struct GstMpegtsTOT" link="gst-plugins-bad-libs-gst-dvb-section.html#GstMpegtsTOT"/>
- <keyword type="enum" name="enum GstMpegtsATSCDescriptorType" link="gst-plugins-bad-libs-gst-atsc-descriptor.html#GstMpegtsATSCDescriptorType"/>
- <keyword type="function" name="gst_mpegts_descriptor_parse_dvb_content ()" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#gst-mpegts-descriptor-parse-dvb-content"/>
- <keyword type="function" name="gst_mpegts_dvb_component_descriptor_free ()" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#gst-mpegts-dvb-component-descriptor-free"/>
- <keyword type="function" name="gst_mpegts_descriptor_parse_dvb_component ()" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#gst-mpegts-descriptor-parse-dvb-component"/>
- <keyword type="function" name="gst_mpegts_extended_event_descriptor_free ()" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#gst-mpegts-extended-event-descriptor-free"/>
- <keyword type="function" name="gst_mpegts_descriptor_parse_dvb_extended_event ()" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#gst-mpegts-descriptor-parse-dvb-extended-event"/>
- <keyword type="function" name="gst_mpegts_descriptor_parse_satellite_delivery_system ()" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#gst-mpegts-descriptor-parse-satellite-delivery-system"/>
- <keyword type="function" name="gst_mpegts_descriptor_parse_cable_delivery_system ()" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#gst-mpegts-descriptor-parse-cable-delivery-system"/>
- <keyword type="function" name="gst_mpegts_descriptor_parse_terrestrial_delivery_system ()" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#gst-mpegts-descriptor-parse-terrestrial-delivery-system"/>
- <keyword type="function" name="gst_mpegts_t2_delivery_system_descriptor_free ()" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#gst-mpegts-t2-delivery-system-descriptor-free"/>
- <keyword type="function" name="gst_mpegts_descriptor_parse_dvb_t2_delivery_system ()" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#gst-mpegts-descriptor-parse-dvb-t2-delivery-system"/>
- <keyword type="function" name="gst_mpegts_descriptor_parse_dvb_short_event ()" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#gst-mpegts-descriptor-parse-dvb-short-event"/>
- <keyword type="function" name="gst_mpegts_descriptor_parse_dvb_network_name ()" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#gst-mpegts-descriptor-parse-dvb-network-name"/>
- <keyword type="function" name="gst_mpegts_descriptor_from_dvb_network_name ()" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#gst-mpegts-descriptor-from-dvb-network-name"/>
- <keyword type="function" name="gst_mpegts_descriptor_parse_dvb_service ()" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#gst-mpegts-descriptor-parse-dvb-service"/>
- <keyword type="function" name="gst_mpegts_descriptor_from_dvb_service ()" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#gst-mpegts-descriptor-from-dvb-service"/>
- <keyword type="function" name="gst_mpegts_descriptor_parse_dvb_teletext_idx ()" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#gst-mpegts-descriptor-parse-dvb-teletext-idx"/>
- <keyword type="function" name="gst_mpegts_descriptor_parse_dvb_teletext_nb ()" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#gst-mpegts-descriptor-parse-dvb-teletext-nb"/>
- <keyword type="function" name="gst_mpegts_descriptor_parse_dvb_subtitling_idx ()" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#gst-mpegts-descriptor-parse-dvb-subtitling-idx"/>
- <keyword type="function" name="gst_mpegts_descriptor_parse_dvb_subtitling_nb ()" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#gst-mpegts-descriptor-parse-dvb-subtitling-nb"/>
- <keyword type="function" name="gst_mpegts_descriptor_from_dvb_subtitling ()" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#gst-mpegts-descriptor-from-dvb-subtitling"/>
- <keyword type="function" name="gst_mpegts_dvb_linkage_descriptor_free ()" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#gst-mpegts-dvb-linkage-descriptor-free"/>
- <keyword type="function" name="gst_mpegts_dvb_linkage_descriptor_get_mobile_hand_over ()" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#gst-mpegts-dvb-linkage-descriptor-get-mobile-hand-over"/>
- <keyword type="function" name="gst_mpegts_dvb_linkage_descriptor_get_event ()" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#gst-mpegts-dvb-linkage-descriptor-get-event"/>
- <keyword type="function" name="gst_mpegts_dvb_linkage_descriptor_get_extended_event ()" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#gst-mpegts-dvb-linkage-descriptor-get-extended-event"/>
- <keyword type="function" name="gst_mpegts_descriptor_parse_dvb_linkage ()" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#gst-mpegts-descriptor-parse-dvb-linkage"/>
- <keyword type="function" name="gst_mpegts_descriptor_parse_dvb_private_data_specifier ()" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#gst-mpegts-descriptor-parse-dvb-private-data-specifier"/>
- <keyword type="function" name="gst_mpegts_descriptor_parse_dvb_frequency_list ()" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#gst-mpegts-descriptor-parse-dvb-frequency-list"/>
- <keyword type="function" name="gst_mpegts_dvb_data_broadcast_descriptor_free ()" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#gst-mpegts-dvb-data-broadcast-descriptor-free"/>
- <keyword type="function" name="gst_mpegts_descriptor_parse_dvb_data_broadcast ()" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#gst-mpegts-descriptor-parse-dvb-data-broadcast"/>
- <keyword type="function" name="gst_mpegts_descriptor_parse_dvb_scrambling ()" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#gst-mpegts-descriptor-parse-dvb-scrambling"/>
- <keyword type="function" name="gst_mpegts_descriptor_parse_dvb_data_broadcast_id ()" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#gst-mpegts-descriptor-parse-dvb-data-broadcast-id"/>
- <keyword type="function" name="gst_mpegts_descriptor_parse_dvb_parental_rating ()" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#gst-mpegts-descriptor-parse-dvb-parental-rating"/>
- <keyword type="function" name="gst_mpegts_descriptor_parse_dvb_stream_identifier ()" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#gst-mpegts-descriptor-parse-dvb-stream-identifier"/>
- <keyword type="function" name="gst_mpegts_descriptor_parse_dvb_ca_identifier ()" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#gst-mpegts-descriptor-parse-dvb-ca-identifier"/>
- <keyword type="function" name="gst_mpegts_descriptor_parse_dvb_service_list ()" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#gst-mpegts-descriptor-parse-dvb-service-list"/>
- <keyword type="function" name="gst_mpegts_descriptor_parse_dvb_stuffing ()" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#gst-mpegts-descriptor-parse-dvb-stuffing"/>
- <keyword type="function" name="gst_mpegts_descriptor_parse_dvb_bouquet_name ()" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#gst-mpegts-descriptor-parse-dvb-bouquet-name"/>
- <keyword type="function" name="gst_mpegts_descriptor_parse_dvb_multilingual_network_name ()" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#gst-mpegts-descriptor-parse-dvb-multilingual-network-name"/>
- <keyword type="function" name="gst_mpegts_descriptor_parse_dvb_multilingual_bouquet_name ()" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#gst-mpegts-descriptor-parse-dvb-multilingual-bouquet-name"/>
- <keyword type="function" name="gst_mpegts_descriptor_parse_dvb_multilingual_service_name ()" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#gst-mpegts-descriptor-parse-dvb-multilingual-service-name"/>
- <keyword type="function" name="gst_mpegts_descriptor_parse_dvb_multilingual_component ()" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#gst-mpegts-descriptor-parse-dvb-multilingual-component"/>
- <keyword type="enum" name="enum GstMpegtsDVBDescriptorType" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GstMpegtsDVBDescriptorType"/>
- <keyword type="enum" name="enum GstMpegtsDVBExtendedDescriptorType" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GstMpegtsDVBExtendedDescriptorType"/>
- <keyword type="struct" name="struct GstMpegtsContent" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GstMpegtsContent"/>
- <keyword type="struct" name="struct GstMpegtsComponentDescriptor" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GstMpegtsComponentDescriptor"/>
- <keyword type="struct" name="struct GstMpegtsExtendedEventItem" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GstMpegtsExtendedEventItem"/>
- <keyword type="struct" name="struct GstMpegtsExtendedEventDescriptor" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GstMpegtsExtendedEventDescriptor"/>
- <keyword type="struct" name="struct GstMpegtsSatelliteDeliverySystemDescriptor" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GstMpegtsSatelliteDeliverySystemDescriptor"/>
- <keyword type="enum" name="enum GstMpegtsDVBCodeRate" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GstMpegtsDVBCodeRate"/>
- <keyword type="enum" name="enum GstMpegtsModulationType" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GstMpegtsModulationType"/>
- <keyword type="enum" name="enum GstMpegtsSatellitePolarizationType" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GstMpegtsSatellitePolarizationType"/>
- <keyword type="enum" name="enum GstMpegtsSatelliteRolloff" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GstMpegtsSatelliteRolloff"/>
- <keyword type="struct" name="struct GstMpegtsCableDeliverySystemDescriptor" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GstMpegtsCableDeliverySystemDescriptor"/>
- <keyword type="enum" name="enum GstMpegtsCableOuterFECScheme" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GstMpegtsCableOuterFECScheme"/>
- <keyword type="struct" name="struct GstMpegtsTerrestrialDeliverySystemDescriptor" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GstMpegtsTerrestrialDeliverySystemDescriptor"/>
- <keyword type="enum" name="enum GstMpegtsTerrestrialTransmissionMode" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GstMpegtsTerrestrialTransmissionMode"/>
- <keyword type="enum" name="enum GstMpegtsTerrestrialGuardInterval" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GstMpegtsTerrestrialGuardInterval"/>
- <keyword type="enum" name="enum GstMpegtsTerrestrialHierarchy" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GstMpegtsTerrestrialHierarchy"/>
- <keyword type="struct" name="struct GstMpegtsT2DeliverySystemCellExtension" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GstMpegtsT2DeliverySystemCellExtension"/>
- <keyword type="struct" name="struct GstMpegtsT2DeliverySystemCell" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GstMpegtsT2DeliverySystemCell"/>
- <keyword type="struct" name="struct GstMpegtsT2DeliverySystemDescriptor" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GstMpegtsT2DeliverySystemDescriptor"/>
- <keyword type="enum" name="enum GstMpegtsDVBServiceType" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GstMpegtsDVBServiceType"/>
- <keyword type="enum" name="enum GstMpegtsDVBTeletextType" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GstMpegtsDVBTeletextType"/>
- <keyword type="enum" name="enum GstMpegtsDVBLinkageType" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GstMpegtsDVBLinkageType"/>
- <keyword type="enum" name="enum GstMpegtsDVBLinkageHandOverType" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GstMpegtsDVBLinkageHandOverType"/>
- <keyword type="struct" name="struct GstMpegtsDVBLinkageMobileHandOver" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GstMpegtsDVBLinkageMobileHandOver"/>
- <keyword type="struct" name="struct GstMpegtsDVBLinkageEvent" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GstMpegtsDVBLinkageEvent"/>
- <keyword type="struct" name="struct GstMpegtsDVBLinkageExtendedEvent" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GstMpegtsDVBLinkageExtendedEvent"/>
- <keyword type="struct" name="struct GstMpegtsDVBLinkageDescriptor" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GstMpegtsDVBLinkageDescriptor"/>
- <keyword type="struct" name="struct GstMpegtsDataBroadcastDescriptor" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GstMpegtsDataBroadcastDescriptor"/>
- <keyword type="enum" name="enum GstMpegtsDVBScramblingModeType" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GstMpegtsDVBScramblingModeType"/>
- <keyword type="struct" name="struct GstMpegtsDVBParentalRatingItem" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GstMpegtsDVBParentalRatingItem"/>
- <keyword type="struct" name="struct GstMpegtsDVBServiceListItem" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GstMpegtsDVBServiceListItem"/>
- <keyword type="struct" name="struct GstMpegtsDvbMultilingualNetworkNameItem" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GstMpegtsDvbMultilingualNetworkNameItem"/>
- <keyword type="struct" name="struct GstMpegtsDvbMultilingualBouquetNameItem" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GstMpegtsDvbMultilingualBouquetNameItem"/>
- <keyword type="struct" name="struct GstMpegtsDvbMultilingualServiceNameItem" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GstMpegtsDvbMultilingualServiceNameItem"/>
- <keyword type="struct" name="struct GstMpegtsDvbMultilingualComponentItem" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GstMpegtsDvbMultilingualComponentItem"/>
- <keyword type="enum" name="enum GstMpegtsISDBDescriptorType" link="gst-plugins-bad-libs-gst-isdb-descriptor.html#GstMpegtsISDBDescriptorType"/>
+ <keyword type="struct" name="struct GstMpegVideoMeta" link="gst-plugins-bad-libs-gstmpegvideometa.html#GstMpegVideoMeta" since="1.2"/>
+ <keyword type="function" name="gst_mpegts_initialize ()" link="gst-plugins-bad-libs-Mpeg-ts-helper-library.html#gst-mpegts-initialize"/>
+ <keyword type="macro" name="GST_MPEGTS_SECTION_TYPE()" link="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GST-MPEGTS-SECTION-TYPE:CAPS"/>
+ <keyword type="function" name="gst_message_new_mpegts_section ()" link="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#gst-message-new-mpegts-section"/>
+ <keyword type="function" name="gst_message_parse_mpegts_section ()" link="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#gst-message-parse-mpegts-section"/>
+ <keyword type="function" name="gst_mpegts_section_send_event ()" link="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#gst-mpegts-section-send-event"/>
+ <keyword type="function" name="gst_event_parse_mpegts_section ()" link="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#gst-event-parse-mpegts-section"/>
+ <keyword type="function" name="gst_mpegts_section_packetize ()" link="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#gst-mpegts-section-packetize"/>
+ <keyword type="function" name="gst_mpegts_section_new ()" link="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#gst-mpegts-section-new"/>
+ <keyword type="macro" name="gst_mpegts_section_ref()" link="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#gst-mpegts-section-ref"/>
+ <keyword type="macro" name="gst_mpegts_section_unref()" link="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#gst-mpegts-section-unref"/>
+ <keyword type="function" name="gst_mpegts_section_get_pat ()" link="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#gst-mpegts-section-get-pat"/>
+ <keyword type="function" name="gst_mpegts_pat_new ()" link="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#gst-mpegts-pat-new"/>
+ <keyword type="function" name="gst_mpegts_pat_program_new ()" link="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#gst-mpegts-pat-program-new"/>
+ <keyword type="function" name="gst_mpegts_section_from_pat ()" link="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#gst-mpegts-section-from-pat"/>
+ <keyword type="function" name="gst_mpegts_section_get_pmt ()" link="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#gst-mpegts-section-get-pmt"/>
+ <keyword type="function" name="gst_mpegts_pmt_new ()" link="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#gst-mpegts-pmt-new"/>
+ <keyword type="function" name="gst_mpegts_pmt_stream_new ()" link="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#gst-mpegts-pmt-stream-new"/>
+ <keyword type="function" name="gst_mpegts_section_from_pmt ()" link="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#gst-mpegts-section-from-pmt"/>
+ <keyword type="function" name="gst_mpegts_section_get_tsdt ()" link="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#gst-mpegts-section-get-tsdt"/>
+ <keyword type="function" name="gst_mpegts_section_get_cat ()" link="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#gst-mpegts-section-get-cat"/>
+ <keyword type="struct" name="struct GstMpegtsSection" link="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsSection-struct"/>
+ <keyword type="enum" name="enum GstMpegtsSectionTableID" link="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsSectionTableID"/>
+ <keyword type="enum" name="enum GstMpegtsSectionType" link="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsSectionType"/>
+ <keyword type="struct" name="struct GstMpegtsPatProgram" link="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsPatProgram"/>
+ <keyword type="struct" name="struct GstMpegtsPMT" link="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsPMT"/>
+ <keyword type="struct" name="struct GstMpegtsPMTStream" link="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsPMTStream"/>
+ <keyword type="enum" name="enum GstMpegtsStreamType" link="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsStreamType"/>
+ <keyword type="function" name="gst_mpegts_find_descriptor ()" link="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#gst-mpegts-find-descriptor"/>
+ <keyword type="function" name="gst_mpegts_parse_descriptors ()" link="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#gst-mpegts-parse-descriptors"/>
+ <keyword type="function" name="gst_mpegts_descriptor_from_custom ()" link="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#gst-mpegts-descriptor-from-custom"/>
+ <keyword type="function" name="gst_mpegts_descriptor_from_registration ()" link="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#gst-mpegts-descriptor-from-registration"/>
+ <keyword type="function" name="gst_mpegts_descriptor_parse_iso_639_language ()" link="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#gst-mpegts-descriptor-parse-iso-639-language"/>
+ <keyword type="function" name="gst_mpegts_descriptor_parse_iso_639_language_idx ()" link="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#gst-mpegts-descriptor-parse-iso-639-language-idx"/>
+ <keyword type="function" name="gst_mpegts_descriptor_parse_iso_639_language_nb ()" link="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#gst-mpegts-descriptor-parse-iso-639-language-nb"/>
+ <keyword type="function" name="gst_mpegts_iso_639_language_descriptor_free ()" link="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#gst-mpegts-iso-639-language-descriptor-free"/>
+ <keyword type="function" name="gst_mpegts_descriptor_parse_logical_channel ()" link="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#gst-mpegts-descriptor-parse-logical-channel"/>
+ <keyword type="struct" name="struct GstMpegtsDescriptor" link="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GstMpegtsDescriptor-struct"/>
+ <keyword type="enum" name="enum GstMpegtsDescriptorType" link="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GstMpegtsDescriptorType"/>
+ <keyword type="enum" name="enum GstMpegtsMiscDescriptorType" link="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GstMpegtsMiscDescriptorType"/>
+ <keyword type="struct" name="struct GstMpegtsISO639LanguageDescriptor" link="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GstMpegtsISO639LanguageDescriptor"/>
+ <keyword type="enum" name="enum GstMpegtsIso639AudioType" link="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GstMpegtsIso639AudioType"/>
+ <keyword type="struct" name="struct GstMpegtsLogicalChannel" link="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GstMpegtsLogicalChannel"/>
+ <keyword type="struct" name="struct GstMpegtsLogicalChannelDescriptor" link="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GstMpegtsLogicalChannelDescriptor"/>
+ <keyword type="function" name="gst_mpegts_section_get_atsc_tvct ()" link="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html#gst-mpegts-section-get-atsc-tvct"/>
+ <keyword type="function" name="gst_mpegts_section_get_atsc_cvct ()" link="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html#gst-mpegts-section-get-atsc-cvct"/>
+ <keyword type="function" name="gst_mpegts_section_get_atsc_mgt ()" link="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html#gst-mpegts-section-get-atsc-mgt"/>
+ <keyword type="function" name="gst_mpegts_atsc_string_segment_get_string ()" link="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html#gst-mpegts-atsc-string-segment-get-string"/>
+ <keyword type="function" name="gst_mpegts_section_get_atsc_eit ()" link="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html#gst-mpegts-section-get-atsc-eit"/>
+ <keyword type="function" name="gst_mpegts_section_get_atsc_ett ()" link="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html#gst-mpegts-section-get-atsc-ett"/>
+ <keyword type="function" name="gst_mpegts_section_get_atsc_stt ()" link="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html#gst-mpegts-section-get-atsc-stt"/>
+ <keyword type="function" name="gst_mpegts_atsc_stt_get_datetime_utc ()" link="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html#gst-mpegts-atsc-stt-get-datetime-utc"/>
+ <keyword type="enum" name="enum GstMpegtsSectionATSCTableID" link="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html#GstMpegtsSectionATSCTableID"/>
+ <keyword type="struct" name="struct GstMpegtsAtscVCTSource" link="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html#GstMpegtsAtscVCTSource"/>
+ <keyword type="struct" name="struct GstMpegtsAtscVCT" link="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html#GstMpegtsAtscVCT"/>
+ <keyword type="enum" name="enum GstMpegtsAtscMGTTableType" link="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html#GstMpegtsAtscMGTTableType"/>
+ <keyword type="struct" name="struct GstMpegtsAtscMGTTable" link="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html#GstMpegtsAtscMGTTable"/>
+ <keyword type="struct" name="struct GstMpegtsAtscMGT" link="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html#GstMpegtsAtscMGT"/>
+ <keyword type="struct" name="struct GstMpegtsAtscMultString" link="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html#GstMpegtsAtscMultString"/>
+ <keyword type="struct" name="struct GstMpegtsAtscEITEvent" link="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html#GstMpegtsAtscEITEvent"/>
+ <keyword type="struct" name="struct GstMpegtsAtscEIT" link="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html#GstMpegtsAtscEIT"/>
+ <keyword type="struct" name="struct GstMpegtsAtscETT" link="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html#GstMpegtsAtscETT"/>
+ <keyword type="struct" name="struct GstMpegtsAtscSTT" link="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html#GstMpegtsAtscSTT"/>
+ <keyword type="function" name="gst_mpegts_section_get_nit ()" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#gst-mpegts-section-get-nit"/>
+ <keyword type="function" name="gst_mpegts_nit_new ()" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#gst-mpegts-nit-new"/>
+ <keyword type="function" name="gst_mpegts_nit_stream_new ()" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#gst-mpegts-nit-stream-new"/>
+ <keyword type="function" name="gst_mpegts_section_from_nit ()" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#gst-mpegts-section-from-nit"/>
+ <keyword type="function" name="gst_mpegts_section_get_bat ()" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#gst-mpegts-section-get-bat"/>
+ <keyword type="function" name="gst_mpegts_section_get_sdt ()" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#gst-mpegts-section-get-sdt"/>
+ <keyword type="function" name="gst_mpegts_sdt_new ()" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#gst-mpegts-sdt-new"/>
+ <keyword type="function" name="gst_mpegts_sdt_service_new ()" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#gst-mpegts-sdt-service-new"/>
+ <keyword type="function" name="gst_mpegts_section_from_sdt ()" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#gst-mpegts-section-from-sdt"/>
+ <keyword type="function" name="gst_mpegts_section_get_eit ()" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#gst-mpegts-section-get-eit"/>
+ <keyword type="function" name="gst_mpegts_section_get_tdt ()" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#gst-mpegts-section-get-tdt"/>
+ <keyword type="function" name="gst_mpegts_section_get_tot ()" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#gst-mpegts-section-get-tot"/>
+ <keyword type="enum" name="enum GstMpegtsSectionDVBTableID" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#GstMpegtsSectionDVBTableID"/>
+ <keyword type="struct" name="struct GstMpegtsNIT" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#GstMpegtsNIT"/>
+ <keyword type="struct" name="struct GstMpegtsNITStream" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#GstMpegtsNITStream"/>
+ <keyword type="struct" name="struct GstMpegtsBAT" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#GstMpegtsBAT"/>
+ <keyword type="struct" name="struct GstMpegtsBATStream" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#GstMpegtsBATStream"/>
+ <keyword type="struct" name="struct GstMpegtsSDT" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#GstMpegtsSDT"/>
+ <keyword type="struct" name="struct GstMpegtsSDTService" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#GstMpegtsSDTService"/>
+ <keyword type="struct" name="struct GstMpegtsEIT" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#GstMpegtsEIT"/>
+ <keyword type="struct" name="struct GstMpegtsEITEvent" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#GstMpegtsEITEvent"/>
+ <keyword type="enum" name="enum GstMpegtsRunningStatus" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#GstMpegtsRunningStatus"/>
+ <keyword type="struct" name="struct GstMpegtsTOT" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#GstMpegtsTOT"/>
+ <keyword type="enum" name="enum GstMpegtsATSCDescriptorType" link="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-descriptors.html#GstMpegtsATSCDescriptorType"/>
+ <keyword type="function" name="gst_mpegts_descriptor_parse_dvb_content ()" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#gst-mpegts-descriptor-parse-dvb-content"/>
+ <keyword type="function" name="gst_mpegts_dvb_component_descriptor_free ()" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#gst-mpegts-dvb-component-descriptor-free"/>
+ <keyword type="function" name="gst_mpegts_descriptor_parse_dvb_component ()" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#gst-mpegts-descriptor-parse-dvb-component"/>
+ <keyword type="function" name="gst_mpegts_extended_event_descriptor_free ()" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#gst-mpegts-extended-event-descriptor-free"/>
+ <keyword type="function" name="gst_mpegts_descriptor_parse_dvb_extended_event ()" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#gst-mpegts-descriptor-parse-dvb-extended-event"/>
+ <keyword type="function" name="gst_mpegts_descriptor_parse_satellite_delivery_system ()" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#gst-mpegts-descriptor-parse-satellite-delivery-system"/>
+ <keyword type="function" name="gst_mpegts_descriptor_parse_cable_delivery_system ()" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#gst-mpegts-descriptor-parse-cable-delivery-system"/>
+ <keyword type="function" name="gst_mpegts_descriptor_parse_terrestrial_delivery_system ()" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#gst-mpegts-descriptor-parse-terrestrial-delivery-system"/>
+ <keyword type="function" name="gst_mpegts_t2_delivery_system_descriptor_free ()" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#gst-mpegts-t2-delivery-system-descriptor-free"/>
+ <keyword type="function" name="gst_mpegts_descriptor_parse_dvb_t2_delivery_system ()" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#gst-mpegts-descriptor-parse-dvb-t2-delivery-system"/>
+ <keyword type="function" name="gst_mpegts_descriptor_parse_dvb_short_event ()" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#gst-mpegts-descriptor-parse-dvb-short-event"/>
+ <keyword type="function" name="gst_mpegts_descriptor_parse_dvb_network_name ()" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#gst-mpegts-descriptor-parse-dvb-network-name"/>
+ <keyword type="function" name="gst_mpegts_descriptor_from_dvb_network_name ()" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#gst-mpegts-descriptor-from-dvb-network-name"/>
+ <keyword type="function" name="gst_mpegts_descriptor_parse_dvb_service ()" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#gst-mpegts-descriptor-parse-dvb-service"/>
+ <keyword type="function" name="gst_mpegts_descriptor_from_dvb_service ()" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#gst-mpegts-descriptor-from-dvb-service"/>
+ <keyword type="function" name="gst_mpegts_descriptor_parse_dvb_teletext_idx ()" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#gst-mpegts-descriptor-parse-dvb-teletext-idx"/>
+ <keyword type="function" name="gst_mpegts_descriptor_parse_dvb_teletext_nb ()" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#gst-mpegts-descriptor-parse-dvb-teletext-nb"/>
+ <keyword type="function" name="gst_mpegts_descriptor_parse_dvb_subtitling_idx ()" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#gst-mpegts-descriptor-parse-dvb-subtitling-idx"/>
+ <keyword type="function" name="gst_mpegts_descriptor_parse_dvb_subtitling_nb ()" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#gst-mpegts-descriptor-parse-dvb-subtitling-nb"/>
+ <keyword type="function" name="gst_mpegts_descriptor_from_dvb_subtitling ()" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#gst-mpegts-descriptor-from-dvb-subtitling"/>
+ <keyword type="function" name="gst_mpegts_dvb_linkage_descriptor_free ()" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#gst-mpegts-dvb-linkage-descriptor-free"/>
+ <keyword type="function" name="gst_mpegts_dvb_linkage_descriptor_get_mobile_hand_over ()" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#gst-mpegts-dvb-linkage-descriptor-get-mobile-hand-over"/>
+ <keyword type="function" name="gst_mpegts_dvb_linkage_descriptor_get_event ()" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#gst-mpegts-dvb-linkage-descriptor-get-event"/>
+ <keyword type="function" name="gst_mpegts_dvb_linkage_descriptor_get_extended_event ()" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#gst-mpegts-dvb-linkage-descriptor-get-extended-event"/>
+ <keyword type="function" name="gst_mpegts_descriptor_parse_dvb_linkage ()" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#gst-mpegts-descriptor-parse-dvb-linkage"/>
+ <keyword type="function" name="gst_mpegts_descriptor_parse_dvb_private_data_specifier ()" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#gst-mpegts-descriptor-parse-dvb-private-data-specifier"/>
+ <keyword type="function" name="gst_mpegts_descriptor_parse_dvb_frequency_list ()" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#gst-mpegts-descriptor-parse-dvb-frequency-list"/>
+ <keyword type="function" name="gst_mpegts_dvb_data_broadcast_descriptor_free ()" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#gst-mpegts-dvb-data-broadcast-descriptor-free"/>
+ <keyword type="function" name="gst_mpegts_descriptor_parse_dvb_data_broadcast ()" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#gst-mpegts-descriptor-parse-dvb-data-broadcast"/>
+ <keyword type="function" name="gst_mpegts_descriptor_parse_dvb_scrambling ()" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#gst-mpegts-descriptor-parse-dvb-scrambling"/>
+ <keyword type="function" name="gst_mpegts_descriptor_parse_dvb_data_broadcast_id ()" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#gst-mpegts-descriptor-parse-dvb-data-broadcast-id"/>
+ <keyword type="function" name="gst_mpegts_descriptor_parse_dvb_parental_rating ()" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#gst-mpegts-descriptor-parse-dvb-parental-rating"/>
+ <keyword type="function" name="gst_mpegts_descriptor_parse_dvb_stream_identifier ()" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#gst-mpegts-descriptor-parse-dvb-stream-identifier"/>
+ <keyword type="function" name="gst_mpegts_descriptor_parse_dvb_ca_identifier ()" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#gst-mpegts-descriptor-parse-dvb-ca-identifier"/>
+ <keyword type="function" name="gst_mpegts_descriptor_parse_dvb_service_list ()" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#gst-mpegts-descriptor-parse-dvb-service-list"/>
+ <keyword type="function" name="gst_mpegts_descriptor_parse_dvb_stuffing ()" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#gst-mpegts-descriptor-parse-dvb-stuffing"/>
+ <keyword type="function" name="gst_mpegts_descriptor_parse_dvb_bouquet_name ()" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#gst-mpegts-descriptor-parse-dvb-bouquet-name"/>
+ <keyword type="function" name="gst_mpegts_descriptor_parse_dvb_multilingual_network_name ()" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#gst-mpegts-descriptor-parse-dvb-multilingual-network-name"/>
+ <keyword type="function" name="gst_mpegts_descriptor_parse_dvb_multilingual_bouquet_name ()" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#gst-mpegts-descriptor-parse-dvb-multilingual-bouquet-name"/>
+ <keyword type="function" name="gst_mpegts_descriptor_parse_dvb_multilingual_service_name ()" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#gst-mpegts-descriptor-parse-dvb-multilingual-service-name"/>
+ <keyword type="function" name="gst_mpegts_descriptor_parse_dvb_multilingual_component ()" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#gst-mpegts-descriptor-parse-dvb-multilingual-component"/>
+ <keyword type="enum" name="enum GstMpegtsDVBDescriptorType" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsDVBDescriptorType"/>
+ <keyword type="enum" name="enum GstMpegtsDVBExtendedDescriptorType" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsDVBExtendedDescriptorType"/>
+ <keyword type="struct" name="struct GstMpegtsContent" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsContent"/>
+ <keyword type="struct" name="struct GstMpegtsComponentDescriptor" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsComponentDescriptor"/>
+ <keyword type="struct" name="struct GstMpegtsExtendedEventItem" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsExtendedEventItem"/>
+ <keyword type="struct" name="struct GstMpegtsExtendedEventDescriptor" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsExtendedEventDescriptor"/>
+ <keyword type="struct" name="struct GstMpegtsSatelliteDeliverySystemDescriptor" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsSatelliteDeliverySystemDescriptor"/>
+ <keyword type="enum" name="enum GstMpegtsDVBCodeRate" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsDVBCodeRate"/>
+ <keyword type="enum" name="enum GstMpegtsModulationType" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsModulationType"/>
+ <keyword type="enum" name="enum GstMpegtsSatellitePolarizationType" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsSatellitePolarizationType"/>
+ <keyword type="enum" name="enum GstMpegtsSatelliteRolloff" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsSatelliteRolloff"/>
+ <keyword type="struct" name="struct GstMpegtsCableDeliverySystemDescriptor" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsCableDeliverySystemDescriptor"/>
+ <keyword type="enum" name="enum GstMpegtsCableOuterFECScheme" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsCableOuterFECScheme"/>
+ <keyword type="struct" name="struct GstMpegtsTerrestrialDeliverySystemDescriptor" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsTerrestrialDeliverySystemDescriptor"/>
+ <keyword type="enum" name="enum GstMpegtsTerrestrialTransmissionMode" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsTerrestrialTransmissionMode"/>
+ <keyword type="enum" name="enum GstMpegtsTerrestrialGuardInterval" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsTerrestrialGuardInterval"/>
+ <keyword type="enum" name="enum GstMpegtsTerrestrialHierarchy" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsTerrestrialHierarchy"/>
+ <keyword type="struct" name="struct GstMpegtsT2DeliverySystemCellExtension" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsT2DeliverySystemCellExtension"/>
+ <keyword type="struct" name="struct GstMpegtsT2DeliverySystemCell" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsT2DeliverySystemCell"/>
+ <keyword type="struct" name="struct GstMpegtsT2DeliverySystemDescriptor" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsT2DeliverySystemDescriptor"/>
+ <keyword type="enum" name="enum GstMpegtsDVBServiceType" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsDVBServiceType"/>
+ <keyword type="enum" name="enum GstMpegtsDVBTeletextType" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsDVBTeletextType"/>
+ <keyword type="enum" name="enum GstMpegtsDVBLinkageType" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsDVBLinkageType"/>
+ <keyword type="enum" name="enum GstMpegtsDVBLinkageHandOverType" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsDVBLinkageHandOverType"/>
+ <keyword type="struct" name="struct GstMpegtsDVBLinkageMobileHandOver" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsDVBLinkageMobileHandOver"/>
+ <keyword type="struct" name="struct GstMpegtsDVBLinkageEvent" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsDVBLinkageEvent"/>
+ <keyword type="struct" name="struct GstMpegtsDVBLinkageExtendedEvent" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsDVBLinkageExtendedEvent"/>
+ <keyword type="struct" name="struct GstMpegtsDVBLinkageDescriptor" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsDVBLinkageDescriptor"/>
+ <keyword type="struct" name="struct GstMpegtsDataBroadcastDescriptor" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsDataBroadcastDescriptor"/>
+ <keyword type="enum" name="enum GstMpegtsDVBScramblingModeType" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsDVBScramblingModeType"/>
+ <keyword type="struct" name="struct GstMpegtsDVBParentalRatingItem" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsDVBParentalRatingItem"/>
+ <keyword type="struct" name="struct GstMpegtsDVBServiceListItem" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsDVBServiceListItem"/>
+ <keyword type="struct" name="struct GstMpegtsDvbMultilingualNetworkNameItem" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsDvbMultilingualNetworkNameItem"/>
+ <keyword type="struct" name="struct GstMpegtsDvbMultilingualBouquetNameItem" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsDvbMultilingualBouquetNameItem"/>
+ <keyword type="struct" name="struct GstMpegtsDvbMultilingualServiceNameItem" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsDvbMultilingualServiceNameItem"/>
+ <keyword type="struct" name="struct GstMpegtsDvbMultilingualComponentItem" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsDvbMultilingualComponentItem"/>
+ <keyword type="enum" name="enum GstMpegtsISDBDescriptorType" link="gst-plugins-bad-libs-ISDB-variants-of-MPEG-TS-descriptors.html#GstMpegtsISDBDescriptorType"/>
<keyword type="function" name="GstInsertBinCallback ()" link="gst-plugins-bad-libs-GstInsertbin.html#GstInsertBinCallback"/>
- <keyword type="function" name="gst_insert_bin_new ()" link="gst-plugins-bad-libs-GstInsertbin.html#gst-insert-bin-new"/>
- <keyword type="function" name="gst_insert_bin_append ()" link="gst-plugins-bad-libs-GstInsertbin.html#gst-insert-bin-append"/>
- <keyword type="function" name="gst_insert_bin_prepend ()" link="gst-plugins-bad-libs-GstInsertbin.html#gst-insert-bin-prepend"/>
- <keyword type="function" name="gst_insert_bin_insert_after ()" link="gst-plugins-bad-libs-GstInsertbin.html#gst-insert-bin-insert-after"/>
- <keyword type="function" name="gst_insert_bin_insert_before ()" link="gst-plugins-bad-libs-GstInsertbin.html#gst-insert-bin-insert-before"/>
- <keyword type="function" name="gst_insert_bin_remove ()" link="gst-plugins-bad-libs-GstInsertbin.html#gst-insert-bin-remove"/>
+ <keyword type="function" name="gst_insert_bin_new ()" link="gst-plugins-bad-libs-GstInsertbin.html#gst-insert-bin-new" since="1.2"/>
+ <keyword type="function" name="gst_insert_bin_append ()" link="gst-plugins-bad-libs-GstInsertbin.html#gst-insert-bin-append" since="1.2"/>
+ <keyword type="function" name="gst_insert_bin_prepend ()" link="gst-plugins-bad-libs-GstInsertbin.html#gst-insert-bin-prepend" since="1.2"/>
+ <keyword type="function" name="gst_insert_bin_insert_after ()" link="gst-plugins-bad-libs-GstInsertbin.html#gst-insert-bin-insert-after" since="1.2"/>
+ <keyword type="function" name="gst_insert_bin_insert_before ()" link="gst-plugins-bad-libs-GstInsertbin.html#gst-insert-bin-insert-before" since="1.2"/>
+ <keyword type="function" name="gst_insert_bin_remove ()" link="gst-plugins-bad-libs-GstInsertbin.html#gst-insert-bin-remove" since="1.2"/>
<keyword type="struct" name="struct GstInsertBin" link="gst-plugins-bad-libs-GstInsertbin.html#GstInsertBin-struct"/>
<keyword type="struct" name="struct GstInsertBinClass" link="gst-plugins-bad-libs-GstInsertbin.html#GstInsertBinClass"/>
<keyword type="signal" name="The “append” signal" link="gst-plugins-bad-libs-GstInsertbin.html#GstInsertBin-append"/>
@@ -452,26 +453,26 @@
<keyword type="macro" name="GST_GL_API_OPENGL_NAME" link="gst-plugins-bad-libs-GstGLAPI.html#GST-GL-API-OPENGL-NAME:CAPS"/>
<keyword type="function" name="GstGLAllocationParamsCopyFunc ()" link="gst-plugins-bad-libs-gstglbasememory.html#GstGLAllocationParamsCopyFunc"/>
<keyword type="function" name="GstGLAllocationParamsFreeFunc ()" link="gst-plugins-bad-libs-gstglbasememory.html#GstGLAllocationParamsFreeFunc"/>
- <keyword type="function" name="gst_gl_allocation_params_init ()" link="gst-plugins-bad-libs-gstglbasememory.html#gst-gl-allocation-params-init"/>
- <keyword type="function" name="gst_gl_allocation_params_copy ()" link="gst-plugins-bad-libs-gstglbasememory.html#gst-gl-allocation-params-copy"/>
- <keyword type="function" name="gst_gl_allocation_params_free ()" link="gst-plugins-bad-libs-gstglbasememory.html#gst-gl-allocation-params-free"/>
- <keyword type="function" name="gst_gl_allocation_params_free_data ()" link="gst-plugins-bad-libs-gstglbasememory.html#gst-gl-allocation-params-free-data"/>
- <keyword type="function" name="gst_gl_allocation_params_copy_data ()" link="gst-plugins-bad-libs-gstglbasememory.html#gst-gl-allocation-params-copy-data"/>
- <keyword type="function" name="gst_gl_base_memory_init_once ()" link="gst-plugins-bad-libs-gstglbasememory.html#gst-gl-base-memory-init-once"/>
- <keyword type="function" name="gst_gl_base_memory_init ()" link="gst-plugins-bad-libs-gstglbasememory.html#gst-gl-base-memory-init"/>
- <keyword type="function" name="gst_is_gl_base_memory ()" link="gst-plugins-bad-libs-gstglbasememory.html#gst-is-gl-base-memory"/>
- <keyword type="function" name="GstGLBaseMemoryAllocatorAllocFunction ()" link="gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemoryAllocatorAllocFunction"/>
- <keyword type="function" name="GstGLBaseMemoryAllocatorCreateFunction ()" link="gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemoryAllocatorCreateFunction"/>
- <keyword type="function" name="GstGLBaseMemoryAllocatorMapFunction ()" link="gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemoryAllocatorMapFunction"/>
- <keyword type="function" name="GstGLBaseMemoryAllocatorUnmapFunction ()" link="gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemoryAllocatorUnmapFunction"/>
- <keyword type="function" name="GstGLBaseMemoryAllocatorCopyFunction ()" link="gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemoryAllocatorCopyFunction"/>
- <keyword type="function" name="GstGLBaseMemoryAllocatorDestroyFunction ()" link="gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemoryAllocatorDestroyFunction"/>
- <keyword type="function" name="gst_gl_base_memory_alloc ()" link="gst-plugins-bad-libs-gstglbasememory.html#gst-gl-base-memory-alloc"/>
+ <keyword type="function" name="gst_gl_allocation_params_init ()" link="gst-plugins-bad-libs-gstglbasememory.html#gst-gl-allocation-params-init" since="1.8"/>
+ <keyword type="function" name="gst_gl_allocation_params_copy ()" link="gst-plugins-bad-libs-gstglbasememory.html#gst-gl-allocation-params-copy" since="1.8"/>
+ <keyword type="function" name="gst_gl_allocation_params_free ()" link="gst-plugins-bad-libs-gstglbasememory.html#gst-gl-allocation-params-free" since="1.8"/>
+ <keyword type="function" name="gst_gl_allocation_params_free_data ()" link="gst-plugins-bad-libs-gstglbasememory.html#gst-gl-allocation-params-free-data" since="1.8"/>
+ <keyword type="function" name="gst_gl_allocation_params_copy_data ()" link="gst-plugins-bad-libs-gstglbasememory.html#gst-gl-allocation-params-copy-data" since="1.8"/>
+ <keyword type="function" name="gst_gl_base_memory_init_once ()" link="gst-plugins-bad-libs-gstglbasememory.html#gst-gl-base-memory-init-once" since="1.8"/>
+ <keyword type="function" name="gst_gl_base_memory_init ()" link="gst-plugins-bad-libs-gstglbasememory.html#gst-gl-base-memory-init" since="1.8"/>
+ <keyword type="function" name="gst_is_gl_base_memory ()" link="gst-plugins-bad-libs-gstglbasememory.html#gst-is-gl-base-memory" since="1.8"/>
+ <keyword type="function" name="GstGLBaseMemoryAllocatorAllocFunction ()" link="gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemoryAllocatorAllocFunction" since="1.8"/>
+ <keyword type="function" name="GstGLBaseMemoryAllocatorCreateFunction ()" link="gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemoryAllocatorCreateFunction" since="1.8"/>
+ <keyword type="function" name="GstGLBaseMemoryAllocatorMapFunction ()" link="gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemoryAllocatorMapFunction" since="1.8"/>
+ <keyword type="function" name="GstGLBaseMemoryAllocatorUnmapFunction ()" link="gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemoryAllocatorUnmapFunction" since="1.8"/>
+ <keyword type="function" name="GstGLBaseMemoryAllocatorCopyFunction ()" link="gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemoryAllocatorCopyFunction" since="1.8"/>
+ <keyword type="function" name="GstGLBaseMemoryAllocatorDestroyFunction ()" link="gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemoryAllocatorDestroyFunction" since="1.8"/>
+ <keyword type="function" name="gst_gl_base_memory_alloc ()" link="gst-plugins-bad-libs-gstglbasememory.html#gst-gl-base-memory-alloc" since="1.8"/>
<keyword type="function" name="gst_gl_base_memory_alloc_data ()" link="gst-plugins-bad-libs-gstglbasememory.html#gst-gl-base-memory-alloc-data"/>
- <keyword type="function" name="gst_gl_base_memory_memcpy ()" link="gst-plugins-bad-libs-gstglbasememory.html#gst-gl-base-memory-memcpy"/>
+ <keyword type="function" name="gst_gl_base_memory_memcpy ()" link="gst-plugins-bad-libs-gstglbasememory.html#gst-gl-base-memory-memcpy" since="1.8"/>
<keyword type="struct" name="GstGLBaseMemoryAllocator" link="gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemoryAllocator-struct"/>
- <keyword type="struct" name="GstGLBaseMemoryAllocatorClass" link="gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemoryAllocatorClass"/>
- <keyword type="macro" name="GST_GL_BASE_MEMORY_ALLOCATOR_NAME" link="gst-plugins-bad-libs-gstglbasememory.html#GST-GL-BASE-MEMORY-ALLOCATOR-NAME:CAPS"/>
+ <keyword type="struct" name="GstGLBaseMemoryAllocatorClass" link="gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemoryAllocatorClass" since="1.8"/>
+ <keyword type="macro" name="GST_GL_BASE_MEMORY_ALLOCATOR_NAME" link="gst-plugins-bad-libs-gstglbasememory.html#GST-GL-BASE-MEMORY-ALLOCATOR-NAME:CAPS" since="1.8"/>
<keyword type="macro" name="GST_MAP_GL" link="gst-plugins-bad-libs-gstglbasememory.html#GST-MAP-GL:CAPS"/>
<keyword type="enum" name="enum GstGLBaseMemoryError" link="gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemoryError"/>
<keyword type="macro" name="GST_GL_BASE_MEMORY_ERROR" link="gst-plugins-bad-libs-gstglbasememory.html#GST-GL-BASE-MEMORY-ERROR:CAPS"/>
@@ -485,10 +486,10 @@
<keyword type="struct" name="GstGLBaseFilter" link="GstGLBaseFilter.html#GstGLBaseFilter-struct"/>
<keyword type="struct" name="GstGLBaseFilterClass" link="GstGLBaseFilter.html#GstGLBaseFilterClass"/>
<keyword type="property" name="The “context” property" link="GstGLBaseFilter.html#GstGLBaseFilter--context"/>
- <keyword type="function" name="gst_gl_buffer_init_once ()" link="gst-plugins-bad-libs-GstGLBuffer.html#gst-gl-buffer-init-once"/>
- <keyword type="function" name="gst_is_gl_buffer ()" link="gst-plugins-bad-libs-GstGLBuffer.html#gst-is-gl-buffer"/>
+ <keyword type="function" name="gst_gl_buffer_init_once ()" link="gst-plugins-bad-libs-GstGLBuffer.html#gst-gl-buffer-init-once" since="1.8"/>
+ <keyword type="function" name="gst_is_gl_buffer ()" link="gst-plugins-bad-libs-GstGLBuffer.html#gst-is-gl-buffer" since="1.8"/>
<keyword type="function" name="gst_gl_buffer_alloc ()" link="gst-plugins-bad-libs-GstGLBuffer.html#gst-gl-buffer-alloc"/>
- <keyword type="function" name="gst_gl_buffer_allocation_params_new ()" link="gst-plugins-bad-libs-GstGLBuffer.html#gst-gl-buffer-allocation-params-new"/>
+ <keyword type="function" name="gst_gl_buffer_allocation_params_new ()" link="gst-plugins-bad-libs-GstGLBuffer.html#gst-gl-buffer-allocation-params-new" since="1.8"/>
<keyword type="struct" name="GstGLBuffer" link="gst-plugins-bad-libs-GstGLBuffer.html#GstGLBuffer"/>
<keyword type="struct" name="struct GstGLBufferAllocationParams" link="gst-plugins-bad-libs-GstGLBuffer.html#GstGLBufferAllocationParams"/>
<keyword type="macro" name="GST_GL_ALLOCATION_PARAMS_ALLOC_FLAG_BUFFER" link="gst-plugins-bad-libs-GstGLBuffer.html#GST-GL-ALLOCATION-PARAMS-ALLOC-FLAG-BUFFER:CAPS"/>
@@ -513,32 +514,32 @@
<keyword type="struct" name="GstGLColorConvertClass" link="GstGLColorConvert.html#GstGLColorConvertClass"/>
<keyword type="function" name="gst_gl_context_error_quark ()" link="GstGLContext.html#gst-gl-context-error-quark"/>
<keyword type="function" name="GstGLContextThreadFunc ()" link="GstGLContext.html#GstGLContextThreadFunc"/>
- <keyword type="function" name="gst_gl_context_new ()" link="GstGLContext.html#gst-gl-context-new"/>
- <keyword type="function" name="gst_gl_context_new_wrapped ()" link="GstGLContext.html#gst-gl-context-new-wrapped"/>
- <keyword type="function" name="gst_gl_context_create ()" link="GstGLContext.html#gst-gl-context-create"/>
- <keyword type="function" name="gst_gl_context_destroy ()" link="GstGLContext.html#gst-gl-context-destroy"/>
- <keyword type="function" name="gst_gl_context_activate ()" link="GstGLContext.html#gst-gl-context-activate"/>
+ <keyword type="function" name="gst_gl_context_new ()" link="GstGLContext.html#gst-gl-context-new" since="1.4"/>
+ <keyword type="function" name="gst_gl_context_new_wrapped ()" link="GstGLContext.html#gst-gl-context-new-wrapped" since="1.4"/>
+ <keyword type="function" name="gst_gl_context_create ()" link="GstGLContext.html#gst-gl-context-create" since="1.4"/>
+ <keyword type="function" name="gst_gl_context_destroy ()" link="GstGLContext.html#gst-gl-context-destroy" since="1.6"/>
+ <keyword type="function" name="gst_gl_context_activate ()" link="GstGLContext.html#gst-gl-context-activate" since="1.4"/>
<keyword type="function" name="gst_gl_context_default_get_proc_address ()" link="GstGLContext.html#gst-gl-context-default-get-proc-address"/>
- <keyword type="function" name="gst_gl_context_get_proc_address ()" link="GstGLContext.html#gst-gl-context-get-proc-address"/>
+ <keyword type="function" name="gst_gl_context_get_proc_address ()" link="GstGLContext.html#gst-gl-context-get-proc-address" since="1.4"/>
<keyword type="function" name="gst_gl_context_get_proc_address_with_platform ()" link="GstGLContext.html#gst-gl-context-get-proc-address-with-platform"/>
- <keyword type="function" name="gst_gl_context_get_window ()" link="GstGLContext.html#gst-gl-context-get-window"/>
- <keyword type="function" name="gst_gl_context_set_window ()" link="GstGLContext.html#gst-gl-context-set-window"/>
- <keyword type="function" name="gst_gl_context_thread_add ()" link="GstGLContext.html#gst-gl-context-thread-add"/>
- <keyword type="function" name="gst_gl_context_get_display ()" link="GstGLContext.html#gst-gl-context-get-display"/>
- <keyword type="function" name="gst_gl_context_get_gl_api ()" link="GstGLContext.html#gst-gl-context-get-gl-api"/>
- <keyword type="function" name="gst_gl_context_get_gl_context ()" link="GstGLContext.html#gst-gl-context-get-gl-context"/>
- <keyword type="function" name="gst_gl_context_get_gl_platform ()" link="GstGLContext.html#gst-gl-context-get-gl-platform"/>
- <keyword type="function" name="gst_gl_context_get_current_gl_context ()" link="GstGLContext.html#gst-gl-context-get-current-gl-context"/>
- <keyword type="function" name="gst_gl_context_get_current_gl_api ()" link="GstGLContext.html#gst-gl-context-get-current-gl-api"/>
- <keyword type="function" name="gst_gl_context_get_thread ()" link="GstGLContext.html#gst-gl-context-get-thread"/>
- <keyword type="function" name="gst_gl_context_can_share ()" link="GstGLContext.html#gst-gl-context-can-share"/>
- <keyword type="function" name="gst_gl_context_is_shared ()" link="GstGLContext.html#gst-gl-context-is-shared"/>
- <keyword type="function" name="gst_gl_context_set_shared_with ()" link="GstGLContext.html#gst-gl-context-set-shared-with"/>
- <keyword type="function" name="gst_gl_context_check_feature ()" link="GstGLContext.html#gst-gl-context-check-feature"/>
- <keyword type="function" name="gst_gl_context_check_gl_version ()" link="GstGLContext.html#gst-gl-context-check-gl-version"/>
- <keyword type="function" name="gst_gl_context_get_gl_version ()" link="GstGLContext.html#gst-gl-context-get-gl-version"/>
- <keyword type="function" name="gst_gl_context_fill_info ()" link="GstGLContext.html#gst-gl-context-fill-info"/>
- <keyword type="function" name="gst_gl_context_get_current ()" link="GstGLContext.html#gst-gl-context-get-current"/>
+ <keyword type="function" name="gst_gl_context_get_window ()" link="GstGLContext.html#gst-gl-context-get-window" since="1.4"/>
+ <keyword type="function" name="gst_gl_context_set_window ()" link="GstGLContext.html#gst-gl-context-set-window" since="1.4"/>
+ <keyword type="function" name="gst_gl_context_thread_add ()" link="GstGLContext.html#gst-gl-context-thread-add" since="1.4"/>
+ <keyword type="function" name="gst_gl_context_get_display ()" link="GstGLContext.html#gst-gl-context-get-display" since="1.4"/>
+ <keyword type="function" name="gst_gl_context_get_gl_api ()" link="GstGLContext.html#gst-gl-context-get-gl-api" since="1.4"/>
+ <keyword type="function" name="gst_gl_context_get_gl_context ()" link="GstGLContext.html#gst-gl-context-get-gl-context" since="1.4"/>
+ <keyword type="function" name="gst_gl_context_get_gl_platform ()" link="GstGLContext.html#gst-gl-context-get-gl-platform" since="1.4"/>
+ <keyword type="function" name="gst_gl_context_get_current_gl_context ()" link="GstGLContext.html#gst-gl-context-get-current-gl-context" since="1.6"/>
+ <keyword type="function" name="gst_gl_context_get_current_gl_api ()" link="GstGLContext.html#gst-gl-context-get-current-gl-api" since="1.6"/>
+ <keyword type="function" name="gst_gl_context_get_thread ()" link="GstGLContext.html#gst-gl-context-get-thread" since="1.6"/>
+ <keyword type="function" name="gst_gl_context_can_share ()" link="GstGLContext.html#gst-gl-context-can-share" since="1.6"/>
+ <keyword type="function" name="gst_gl_context_is_shared ()" link="GstGLContext.html#gst-gl-context-is-shared" since="1.8"/>
+ <keyword type="function" name="gst_gl_context_set_shared_with ()" link="GstGLContext.html#gst-gl-context-set-shared-with" since="1.8"/>
+ <keyword type="function" name="gst_gl_context_check_feature ()" link="GstGLContext.html#gst-gl-context-check-feature" since="1.4"/>
+ <keyword type="function" name="gst_gl_context_check_gl_version ()" link="GstGLContext.html#gst-gl-context-check-gl-version" since="1.4"/>
+ <keyword type="function" name="gst_gl_context_get_gl_version ()" link="GstGLContext.html#gst-gl-context-get-gl-version" since="1.4"/>
+ <keyword type="function" name="gst_gl_context_fill_info ()" link="GstGLContext.html#gst-gl-context-fill-info" since="1.6"/>
+ <keyword type="function" name="gst_gl_context_get_current ()" link="GstGLContext.html#gst-gl-context-get-current" since="1.6"/>
<keyword type="macro" name="GST_GL_CONTEXT_ERROR" link="GstGLContext.html#GST-GL-CONTEXT-ERROR:CAPS"/>
<keyword type="enum" name="enum GstGLContextError" link="GstGLContext.html#GstGLContextError"/>
<keyword type="struct" name="GstGLContext" link="GstGLContext.html#GstGLContext-struct"/>
@@ -561,53 +562,49 @@
<keyword type="function" name="gst_gl_context_wgl_get_current_context ()" link="gst-plugins-bad-libs-GstGLContextWGL.html#gst-gl-context-wgl-get-current-context"/>
<keyword type="function" name="gst_gl_context_wgl_get_proc_address ()" link="gst-plugins-bad-libs-GstGLContextWGL.html#gst-gl-context-wgl-get-proc-address"/>
<keyword type="struct" name="struct GstGLContextWGL" link="gst-plugins-bad-libs-GstGLContextWGL.html#GstGLContextWGL"/>
- <keyword type="function" name="gst_gl_display_new ()" link="GstGLDisplay.html#gst-gl-display-new"/>
- <keyword type="function" name="gst_gl_display_get_handle_type ()" link="GstGLDisplay.html#gst-gl-display-get-handle-type"/>
+ <keyword type="function" name="gst_gl_display_new ()" link="GstGLDisplay.html#gst-gl-display-new" since="1.4"/>
+ <keyword type="function" name="gst_gl_display_get_handle_type ()" link="GstGLDisplay.html#gst-gl-display-get-handle-type" since="1.4"/>
<keyword type="function" name="gst_gl_display_filter_gl_api ()" link="GstGLDisplay.html#gst-gl-display-filter-gl-api"/>
<keyword type="function" name="gst_gl_display_get_gl_api ()" link="GstGLDisplay.html#gst-gl-display-get-gl-api"/>
- <keyword type="function" name="gst_gl_display_add_context ()" link="GstGLDisplay.html#gst-gl-display-add-context"/>
- <keyword type="function" name="gst_gl_display_get_gl_context_for_thread ()" link="GstGLDisplay.html#gst-gl-display-get-gl-context-for-thread"/>
+ <keyword type="function" name="gst_gl_display_add_context ()" link="GstGLDisplay.html#gst-gl-display-add-context" since="1.6"/>
+ <keyword type="function" name="gst_gl_display_get_gl_context_for_thread ()" link="GstGLDisplay.html#gst-gl-display-get-gl-context-for-thread" since="1.6"/>
<keyword type="function" name="gst_gl_display_get_handle ()" link="GstGLDisplay.html#gst-gl-display-get-handle"/>
- <keyword type="function" name="gst_gl_display_create_context ()" link="GstGLDisplay.html#gst-gl-display-create-context"/>
- <keyword type="function" name="gst_context_get_gl_display ()" link="GstGLDisplay.html#gst-context-get-gl-display"/>
- <keyword type="function" name="gst_context_set_gl_display ()" link="GstGLDisplay.html#gst-context-set-gl-display"/>
+ <keyword type="function" name="gst_gl_display_create_context ()" link="GstGLDisplay.html#gst-gl-display-create-context" since="1.6"/>
+ <keyword type="function" name="gst_context_get_gl_display ()" link="GstGLDisplay.html#gst-context-get-gl-display" since="1.4"/>
+ <keyword type="function" name="gst_context_set_gl_display ()" link="GstGLDisplay.html#gst-context-set-gl-display" since="1.4"/>
<keyword type="macro" name="GST_GL_DISPLAY_CONTEXT_TYPE" link="GstGLDisplay.html#GST-GL-DISPLAY-CONTEXT-TYPE:CAPS"/>
<keyword type="enum" name="enum GstGLDisplayType" link="GstGLDisplay.html#GstGLDisplayType"/>
<keyword type="struct" name="GstGLDisplay" link="GstGLDisplay.html#GstGLDisplay-struct"/>
<keyword type="signal" name="The “create-context” signal" link="GstGLDisplay.html#GstGLDisplay-create-context"/>
- <keyword type="function" name="gst_gl_filter_draw_texture ()" link="GstGLFilter.html#gst-gl-filter-draw-texture"/>
<keyword type="function" name="gst_gl_filter_render_to_target ()" link="GstGLFilter.html#gst-gl-filter-render-to-target"/>
<keyword type="function" name="gst_gl_filter_render_to_target_with_shader ()" link="GstGLFilter.html#gst-gl-filter-render-to-target-with-shader"/>
<keyword type="function" name="gst_gl_filter_filter_texture ()" link="GstGLFilter.html#gst-gl-filter-filter-texture"/>
<keyword type="struct" name="GstGLFilter" link="GstGLFilter.html#GstGLFilter-struct"/>
<keyword type="struct" name="GstGLFilterClass" link="GstGLFilter.html#GstGLFilterClass"/>
<keyword type="function" name="gst_gl_framebuffer_new ()" link="GstGLFramebuffer.html#gst-gl-framebuffer-new"/>
- <keyword type="function" name="gst_gl_framebuffer_generate ()" link="GstGLFramebuffer.html#gst-gl-framebuffer-generate"/>
- <keyword type="function" name="gst_gl_framebuffer_delete ()" link="GstGLFramebuffer.html#gst-gl-framebuffer-delete"/>
- <keyword type="function" name="gst_gl_framebuffer_use_v2 ()" link="GstGLFramebuffer.html#gst-gl-framebuffer-use-v2"/>
- <keyword type="struct" name="struct GstGLFramebuffer" link="GstGLFramebuffer.html#GstGLFramebuffer-struct"/>
+ <keyword type="struct" name="GstGLFramebuffer" link="GstGLFramebuffer.html#GstGLFramebuffer-struct"/>
<keyword type="struct" name="struct GstGLFramebufferClass" link="GstGLFramebuffer.html#GstGLFramebufferClass"/>
- <keyword type="function" name="gst_gl_video_allocation_params_copy_data ()" link="gst-plugins-bad-libs-GstGLMemory.html#gst-gl-video-allocation-params-copy-data"/>
- <keyword type="function" name="gst_gl_video_allocation_params_free_data ()" link="gst-plugins-bad-libs-GstGLMemory.html#gst-gl-video-allocation-params-free-data"/>
- <keyword type="function" name="gst_gl_video_allocation_params_init_full ()" link="gst-plugins-bad-libs-GstGLMemory.html#gst-gl-video-allocation-params-init-full"/>
- <keyword type="function" name="gst_gl_video_allocation_params_new ()" link="gst-plugins-bad-libs-GstGLMemory.html#gst-gl-video-allocation-params-new"/>
- <keyword type="function" name="gst_gl_video_allocation_params_new_wrapped_data ()" link="gst-plugins-bad-libs-GstGLMemory.html#gst-gl-video-allocation-params-new-wrapped-data"/>
- <keyword type="function" name="gst_gl_video_allocation_params_new_wrapped_gl_handle ()" link="gst-plugins-bad-libs-GstGLMemory.html#gst-gl-video-allocation-params-new-wrapped-gl-handle"/>
- <keyword type="function" name="gst_gl_video_allocation_params_new_wrapped_texture ()" link="gst-plugins-bad-libs-GstGLMemory.html#gst-gl-video-allocation-params-new-wrapped-texture"/>
- <keyword type="function" name="gst_gl_memory_allocator_get_default ()" link="gst-plugins-bad-libs-GstGLMemory.html#gst-gl-memory-allocator-get-default"/>
- <keyword type="function" name="gst_gl_memory_init_once ()" link="gst-plugins-bad-libs-GstGLMemory.html#gst-gl-memory-init-once"/>
- <keyword type="function" name="gst_gl_memory_init ()" link="gst-plugins-bad-libs-GstGLMemory.html#gst-gl-memory-init"/>
- <keyword type="function" name="gst_is_gl_memory ()" link="gst-plugins-bad-libs-GstGLMemory.html#gst-is-gl-memory"/>
- <keyword type="function" name="gst_gl_memory_copy_into ()" link="gst-plugins-bad-libs-GstGLMemory.html#gst-gl-memory-copy-into"/>
+ <keyword type="function" name="gst_gl_video_allocation_params_copy_data ()" link="gst-plugins-bad-libs-GstGLMemory.html#gst-gl-video-allocation-params-copy-data" since="1.8"/>
+ <keyword type="function" name="gst_gl_video_allocation_params_free_data ()" link="gst-plugins-bad-libs-GstGLMemory.html#gst-gl-video-allocation-params-free-data" since="1.8"/>
+ <keyword type="function" name="gst_gl_video_allocation_params_init_full ()" link="gst-plugins-bad-libs-GstGLMemory.html#gst-gl-video-allocation-params-init-full" since="1.8"/>
+ <keyword type="function" name="gst_gl_video_allocation_params_new ()" link="gst-plugins-bad-libs-GstGLMemory.html#gst-gl-video-allocation-params-new" since="1.8"/>
+ <keyword type="function" name="gst_gl_video_allocation_params_new_wrapped_data ()" link="gst-plugins-bad-libs-GstGLMemory.html#gst-gl-video-allocation-params-new-wrapped-data" since="1.8"/>
+ <keyword type="function" name="gst_gl_video_allocation_params_new_wrapped_gl_handle ()" link="gst-plugins-bad-libs-GstGLMemory.html#gst-gl-video-allocation-params-new-wrapped-gl-handle" since="1.8"/>
+ <keyword type="function" name="gst_gl_video_allocation_params_new_wrapped_texture ()" link="gst-plugins-bad-libs-GstGLMemory.html#gst-gl-video-allocation-params-new-wrapped-texture" since="1.8"/>
+ <keyword type="function" name="gst_gl_memory_allocator_get_default ()" link="gst-plugins-bad-libs-GstGLMemory.html#gst-gl-memory-allocator-get-default" since="1.8"/>
+ <keyword type="function" name="gst_gl_memory_init_once ()" link="gst-plugins-bad-libs-GstGLMemory.html#gst-gl-memory-init-once" since="1.4"/>
+ <keyword type="function" name="gst_gl_memory_init ()" link="gst-plugins-bad-libs-GstGLMemory.html#gst-gl-memory-init" since="1.8"/>
+ <keyword type="function" name="gst_is_gl_memory ()" link="gst-plugins-bad-libs-GstGLMemory.html#gst-is-gl-memory" since="1.4"/>
+ <keyword type="function" name="gst_gl_memory_copy_into ()" link="gst-plugins-bad-libs-GstGLMemory.html#gst-gl-memory-copy-into" since="1.8"/>
<keyword type="function" name="gst_gl_memory_copy_teximage ()" link="gst-plugins-bad-libs-GstGLMemory.html#gst-gl-memory-copy-teximage"/>
- <keyword type="function" name="gst_gl_memory_read_pixels ()" link="gst-plugins-bad-libs-GstGLMemory.html#gst-gl-memory-read-pixels"/>
- <keyword type="function" name="gst_gl_memory_texsubimage ()" link="gst-plugins-bad-libs-GstGLMemory.html#gst-gl-memory-texsubimage"/>
- <keyword type="function" name="gst_gl_memory_get_texture_height ()" link="gst-plugins-bad-libs-GstGLMemory.html#gst-gl-memory-get-texture-height"/>
- <keyword type="function" name="gst_gl_memory_get_texture_id ()" link="gst-plugins-bad-libs-GstGLMemory.html#gst-gl-memory-get-texture-id"/>
- <keyword type="function" name="gst_gl_memory_get_texture_target ()" link="gst-plugins-bad-libs-GstGLMemory.html#gst-gl-memory-get-texture-target"/>
- <keyword type="function" name="gst_gl_memory_get_texture_type ()" link="gst-plugins-bad-libs-GstGLMemory.html#gst-gl-memory-get-texture-type"/>
- <keyword type="function" name="gst_gl_memory_get_texture_width ()" link="gst-plugins-bad-libs-GstGLMemory.html#gst-gl-memory-get-texture-width"/>
- <keyword type="function" name="gst_gl_memory_setup_buffer ()" link="gst-plugins-bad-libs-GstGLMemory.html#gst-gl-memory-setup-buffer"/>
+ <keyword type="function" name="gst_gl_memory_read_pixels ()" link="gst-plugins-bad-libs-GstGLMemory.html#gst-gl-memory-read-pixels" since="1.8"/>
+ <keyword type="function" name="gst_gl_memory_texsubimage ()" link="gst-plugins-bad-libs-GstGLMemory.html#gst-gl-memory-texsubimage" since="1.8"/>
+ <keyword type="function" name="gst_gl_memory_get_texture_height ()" link="gst-plugins-bad-libs-GstGLMemory.html#gst-gl-memory-get-texture-height" since="1.8"/>
+ <keyword type="function" name="gst_gl_memory_get_texture_id ()" link="gst-plugins-bad-libs-GstGLMemory.html#gst-gl-memory-get-texture-id" since="1.8"/>
+ <keyword type="function" name="gst_gl_memory_get_texture_target ()" link="gst-plugins-bad-libs-GstGLMemory.html#gst-gl-memory-get-texture-target" since="1.8"/>
+ <keyword type="function" name="gst_gl_memory_get_texture_type ()" link="gst-plugins-bad-libs-GstGLMemory.html#gst-gl-memory-get-texture-type" since="1.8"/>
+ <keyword type="function" name="gst_gl_memory_get_texture_width ()" link="gst-plugins-bad-libs-GstGLMemory.html#gst-gl-memory-get-texture-width" since="1.8"/>
+ <keyword type="function" name="gst_gl_memory_setup_buffer ()" link="gst-plugins-bad-libs-GstGLMemory.html#gst-gl-memory-setup-buffer" since="1.8"/>
<keyword type="macro" name="GST_GL_MEMORY_VIDEO_FORMATS_STR" link="gst-plugins-bad-libs-GstGLMemory.html#GST-GL-MEMORY-VIDEO-FORMATS-STR:CAPS"/>
<keyword type="struct" name="struct GstGLVideoAllocationParams" link="gst-plugins-bad-libs-GstGLMemory.html#GstGLVideoAllocationParams"/>
<keyword type="macro" name="GST_GL_ALLOCATION_PARAMS_ALLOC_FLAG_VIDEO" link="gst-plugins-bad-libs-GstGLMemory.html#GST-GL-ALLOCATION-PARAMS-ALLOC-FLAG-VIDEO:CAPS"/>
@@ -615,9 +612,9 @@
<keyword type="struct" name="GstGLMemoryAllocatorClass" link="gst-plugins-bad-libs-GstGLMemory.html#GstGLMemoryAllocatorClass"/>
<keyword type="struct" name="GstGLMemory" link="gst-plugins-bad-libs-GstGLMemory.html#GstGLMemory"/>
<keyword type="macro" name="GST_GL_MEMORY_ALLOCATOR_NAME" link="gst-plugins-bad-libs-GstGLMemory.html#GST-GL-MEMORY-ALLOCATOR-NAME:CAPS"/>
- <keyword type="function" name="gst_is_gl_memory_pbo ()" link="gst-plugins-bad-libs-gstglmemorypbo.html#gst-is-gl-memory-pbo"/>
- <keyword type="function" name="gst_gl_memory_pbo_copy_into_texture ()" link="gst-plugins-bad-libs-gstglmemorypbo.html#gst-gl-memory-pbo-copy-into-texture"/>
- <keyword type="function" name="gst_gl_memory_pbo_download_transfer ()" link="gst-plugins-bad-libs-gstglmemorypbo.html#gst-gl-memory-pbo-download-transfer"/>
+ <keyword type="function" name="gst_is_gl_memory_pbo ()" link="gst-plugins-bad-libs-gstglmemorypbo.html#gst-is-gl-memory-pbo" since="1.8"/>
+ <keyword type="function" name="gst_gl_memory_pbo_copy_into_texture ()" link="gst-plugins-bad-libs-gstglmemorypbo.html#gst-gl-memory-pbo-copy-into-texture" since="1.8"/>
+ <keyword type="function" name="gst_gl_memory_pbo_download_transfer ()" link="gst-plugins-bad-libs-gstglmemorypbo.html#gst-gl-memory-pbo-download-transfer" since="1.8"/>
<keyword type="function" name="gst_gl_memory_pbo_init_once ()" link="gst-plugins-bad-libs-gstglmemorypbo.html#gst-gl-memory-pbo-init-once"/>
<keyword type="function" name="gst_gl_memory_pbo_upload_transfer ()" link="gst-plugins-bad-libs-gstglmemorypbo.html#gst-gl-memory-pbo-upload-transfer"/>
<keyword type="struct" name="GstGLMemoryPBOAllocator" link="gst-plugins-bad-libs-gstglmemorypbo.html#GstGLMemoryPBOAllocator-struct"/>
@@ -625,20 +622,20 @@
<keyword type="macro" name="GST_GL_MEMORY_PBO_ALLOCATOR_NAME" link="gst-plugins-bad-libs-gstglmemorypbo.html#GST-GL-MEMORY-PBO-ALLOCATOR-NAME:CAPS"/>
<keyword type="struct" name="GstGLMemoryPBO" link="gst-plugins-bad-libs-gstglmemorypbo.html#GstGLMemoryPBO"/>
<keyword type="function" name="gst_gl_shader_new ()" link="GstGLShader.html#gst-gl-shader-new"/>
- <keyword type="function" name="gst_gl_shader_new_default ()" link="GstGLShader.html#gst-gl-shader-new-default"/>
- <keyword type="function" name="gst_gl_shader_new_link_with_stages ()" link="GstGLShader.html#gst-gl-shader-new-link-with-stages"/>
- <keyword type="function" name="gst_gl_shader_new_with_stages ()" link="GstGLShader.html#gst-gl-shader-new-with-stages"/>
+ <keyword type="function" name="gst_gl_shader_new_default ()" link="GstGLShader.html#gst-gl-shader-new-default" since="1.8"/>
+ <keyword type="function" name="gst_gl_shader_new_link_with_stages ()" link="GstGLShader.html#gst-gl-shader-new-link-with-stages" since="1.8"/>
+ <keyword type="function" name="gst_gl_shader_new_with_stages ()" link="GstGLShader.html#gst-gl-shader-new-with-stages" since="1.8"/>
<keyword type="function" name="gst_gl_shader_use ()" link="GstGLShader.html#gst-gl-shader-use"/>
- <keyword type="function" name="gst_gl_shader_get_program_handle ()" link="GstGLShader.html#gst-gl-shader-get-program-handle"/>
- <keyword type="function" name="gst_gl_shader_release ()" link="GstGLShader.html#gst-gl-shader-release"/>
- <keyword type="function" name="gst_gl_shader_release_unlocked ()" link="GstGLShader.html#gst-gl-shader-release-unlocked"/>
- <keyword type="function" name="gst_gl_shader_attach ()" link="GstGLShader.html#gst-gl-shader-attach"/>
- <keyword type="function" name="gst_gl_shader_attach_unlocked ()" link="GstGLShader.html#gst-gl-shader-attach-unlocked"/>
- <keyword type="function" name="gst_gl_shader_compile_attach_stage ()" link="GstGLShader.html#gst-gl-shader-compile-attach-stage"/>
- <keyword type="function" name="gst_gl_shader_detach ()" link="GstGLShader.html#gst-gl-shader-detach"/>
- <keyword type="function" name="gst_gl_shader_detach_unlocked ()" link="GstGLShader.html#gst-gl-shader-detach-unlocked"/>
- <keyword type="function" name="gst_gl_shader_is_linked ()" link="GstGLShader.html#gst-gl-shader-is-linked"/>
- <keyword type="function" name="gst_gl_shader_link ()" link="GstGLShader.html#gst-gl-shader-link"/>
+ <keyword type="function" name="gst_gl_shader_get_program_handle ()" link="GstGLShader.html#gst-gl-shader-get-program-handle" since="1.8"/>
+ <keyword type="function" name="gst_gl_shader_release ()" link="GstGLShader.html#gst-gl-shader-release" since="1.8"/>
+ <keyword type="function" name="gst_gl_shader_release_unlocked ()" link="GstGLShader.html#gst-gl-shader-release-unlocked" since="1.8"/>
+ <keyword type="function" name="gst_gl_shader_attach ()" link="GstGLShader.html#gst-gl-shader-attach" since="1.8"/>
+ <keyword type="function" name="gst_gl_shader_attach_unlocked ()" link="GstGLShader.html#gst-gl-shader-attach-unlocked" since="1.8"/>
+ <keyword type="function" name="gst_gl_shader_compile_attach_stage ()" link="GstGLShader.html#gst-gl-shader-compile-attach-stage" since="1.8"/>
+ <keyword type="function" name="gst_gl_shader_detach ()" link="GstGLShader.html#gst-gl-shader-detach" since="1.8"/>
+ <keyword type="function" name="gst_gl_shader_detach_unlocked ()" link="GstGLShader.html#gst-gl-shader-detach-unlocked" since="1.8"/>
+ <keyword type="function" name="gst_gl_shader_is_linked ()" link="GstGLShader.html#gst-gl-shader-is-linked" since="1.8"/>
+ <keyword type="function" name="gst_gl_shader_link ()" link="GstGLShader.html#gst-gl-shader-link" since="1.8"/>
<keyword type="function" name="gst_gl_shader_set_uniform_1i ()" link="GstGLShader.html#gst-gl-shader-set-uniform-1i"/>
<keyword type="function" name="gst_gl_shader_set_uniform_1f ()" link="GstGLShader.html#gst-gl-shader-set-uniform-1f"/>
<keyword type="function" name="gst_gl_shader_set_uniform_1fv ()" link="GstGLShader.html#gst-gl-shader-set-uniform-1fv"/>
@@ -705,23 +702,23 @@
<keyword type="macro" name="GST_GL_WINDOW_RESIZE_CB()" link="GstGLWindow.html#GST-GL-WINDOW-RESIZE-CB:CAPS"/>
<keyword type="function" name="GstGLWindowCB ()" link="GstGLWindow.html#GstGLWindowCB"/>
<keyword type="macro" name="GST_GL_WINDOW_CB()" link="GstGLWindow.html#GST-GL-WINDOW-CB:CAPS"/>
- <keyword type="function" name="gst_gl_window_new ()" link="GstGLWindow.html#gst-gl-window-new"/>
- <keyword type="function" name="gst_gl_window_draw ()" link="GstGLWindow.html#gst-gl-window-draw"/>
- <keyword type="function" name="gst_gl_window_is_running ()" link="GstGLWindow.html#gst-gl-window-is-running"/>
- <keyword type="function" name="gst_gl_window_quit ()" link="GstGLWindow.html#gst-gl-window-quit"/>
- <keyword type="function" name="gst_gl_window_run ()" link="GstGLWindow.html#gst-gl-window-run"/>
- <keyword type="function" name="gst_gl_window_get_context ()" link="GstGLWindow.html#gst-gl-window-get-context"/>
- <keyword type="function" name="gst_gl_window_get_display ()" link="GstGLWindow.html#gst-gl-window-get-display"/>
- <keyword type="function" name="gst_gl_window_send_message ()" link="GstGLWindow.html#gst-gl-window-send-message"/>
- <keyword type="function" name="gst_gl_window_send_message_async ()" link="GstGLWindow.html#gst-gl-window-send-message-async"/>
- <keyword type="function" name="gst_gl_window_set_close_callback ()" link="GstGLWindow.html#gst-gl-window-set-close-callback"/>
- <keyword type="function" name="gst_gl_window_set_draw_callback ()" link="GstGLWindow.html#gst-gl-window-set-draw-callback"/>
- <keyword type="function" name="gst_gl_window_set_resize_callback ()" link="GstGLWindow.html#gst-gl-window-set-resize-callback"/>
- <keyword type="function" name="gst_gl_window_set_window_handle ()" link="GstGLWindow.html#gst-gl-window-set-window-handle"/>
- <keyword type="function" name="gst_gl_window_get_window_handle ()" link="GstGLWindow.html#gst-gl-window-get-window-handle"/>
- <keyword type="function" name="gst_gl_window_set_preferred_size ()" link="GstGLWindow.html#gst-gl-window-set-preferred-size"/>
- <keyword type="function" name="gst_gl_window_show ()" link="GstGLWindow.html#gst-gl-window-show"/>
- <keyword type="function" name="gst_gl_window_get_surface_dimensions ()" link="GstGLWindow.html#gst-gl-window-get-surface-dimensions"/>
+ <keyword type="function" name="gst_gl_window_new ()" link="GstGLWindow.html#gst-gl-window-new" since="1.4"/>
+ <keyword type="function" name="gst_gl_window_draw ()" link="GstGLWindow.html#gst-gl-window-draw" since="1.4"/>
+ <keyword type="function" name="gst_gl_window_is_running ()" link="GstGLWindow.html#gst-gl-window-is-running" since="1.4"/>
+ <keyword type="function" name="gst_gl_window_quit ()" link="GstGLWindow.html#gst-gl-window-quit" since="1.4"/>
+ <keyword type="function" name="gst_gl_window_run ()" link="GstGLWindow.html#gst-gl-window-run" since="1.4"/>
+ <keyword type="function" name="gst_gl_window_get_context ()" link="GstGLWindow.html#gst-gl-window-get-context" since="1.4"/>
+ <keyword type="function" name="gst_gl_window_get_display ()" link="GstGLWindow.html#gst-gl-window-get-display" since="1.4"/>
+ <keyword type="function" name="gst_gl_window_send_message ()" link="GstGLWindow.html#gst-gl-window-send-message" since="1.4"/>
+ <keyword type="function" name="gst_gl_window_send_message_async ()" link="GstGLWindow.html#gst-gl-window-send-message-async" since="1.4"/>
+ <keyword type="function" name="gst_gl_window_set_close_callback ()" link="GstGLWindow.html#gst-gl-window-set-close-callback" since="1.4"/>
+ <keyword type="function" name="gst_gl_window_set_draw_callback ()" link="GstGLWindow.html#gst-gl-window-set-draw-callback" since="1.4"/>
+ <keyword type="function" name="gst_gl_window_set_resize_callback ()" link="GstGLWindow.html#gst-gl-window-set-resize-callback" since="1.4"/>
+ <keyword type="function" name="gst_gl_window_set_window_handle ()" link="GstGLWindow.html#gst-gl-window-set-window-handle" since="1.4"/>
+ <keyword type="function" name="gst_gl_window_get_window_handle ()" link="GstGLWindow.html#gst-gl-window-get-window-handle" since="1.4"/>
+ <keyword type="function" name="gst_gl_window_set_preferred_size ()" link="GstGLWindow.html#gst-gl-window-set-preferred-size" since="1.6"/>
+ <keyword type="function" name="gst_gl_window_show ()" link="GstGLWindow.html#gst-gl-window-show" since="1.6"/>
+ <keyword type="function" name="gst_gl_window_get_surface_dimensions ()" link="GstGLWindow.html#gst-gl-window-get-surface-dimensions" since="1.6"/>
<keyword type="function" name="gst_gl_window_handle_events ()" link="GstGLWindow.html#gst-gl-window-handle-events"/>
<keyword type="enum" name="enum GstGLWindowError" link="GstGLWindow.html#GstGLWindowError"/>
<keyword type="macro" name="GST_GL_WINDOW_ERROR" link="GstGLWindow.html#GST-GL-WINDOW-ERROR:CAPS"/>
@@ -752,33 +749,25 @@
<keyword type="function" name="gst_gl_window_x11_untrap_x_errors ()" link="gst-plugins-bad-libs-GstGLWindowX11.html#gst-gl-window-x11-untrap-x-errors"/>
<keyword type="struct" name="struct GstGLWindowX11" link="gst-plugins-bad-libs-GstGLWindowX11.html#GstGLWindowX11"/>
<keyword type="struct" name="struct GstGLWindowX11Class" link="gst-plugins-bad-libs-GstGLWindowX11.html#GstGLWindowX11Class"/>
- <keyword type="function" name="GstGLAsyncDebugLogGetMessage ()" link="gst-plugins-bad-libs-gstgldebug.html#GstGLAsyncDebugLogGetMessage"/>
- <keyword type="function" name="gst_gl_async_debug_new ()" link="gst-plugins-bad-libs-gstgldebug.html#gst-gl-async-debug-new"/>
- <keyword type="function" name="gst_gl_async_debug_free ()" link="gst-plugins-bad-libs-gstgldebug.html#gst-gl-async-debug-free"/>
- <keyword type="function" name="gst_gl_async_debug_init ()" link="gst-plugins-bad-libs-gstgldebug.html#gst-gl-async-debug-init"/>
- <keyword type="function" name="gst_gl_async_debug_unset ()" link="gst-plugins-bad-libs-gstgldebug.html#gst-gl-async-debug-unset"/>
- <keyword type="function" name="gst_gl_async_debug_freeze ()" link="gst-plugins-bad-libs-gstgldebug.html#gst-gl-async-debug-freeze"/>
- <keyword type="function" name="gst_gl_async_debug_thaw ()" link="gst-plugins-bad-libs-gstgldebug.html#gst-gl-async-debug-thaw"/>
- <keyword type="function" name="gst_gl_async_debug_output_log_msg ()" link="gst-plugins-bad-libs-gstgldebug.html#gst-gl-async-debug-output-log-msg"/>
- <keyword type="function" name="gst_gl_async_debug_store_log_msg ()" link="gst-plugins-bad-libs-gstgldebug.html#gst-gl-async-debug-store-log-msg"/>
- <keyword type="function" name="gst_gl_async_debug_store_log_msg_valist ()" link="gst-plugins-bad-libs-gstgldebug.html#gst-gl-async-debug-store-log-msg-valist"/>
- <keyword type="macro" name="GST_GL_ASYNC_CAT_LEVEL_LOG_valist()" link="gst-plugins-bad-libs-gstgldebug.html#GST-GL-ASYNC-CAT-LEVEL-LOG-valist"/>
- <keyword type="macro" name="GST_GL_ASYNC_CAT_LEVEL_LOG()" link="gst-plugins-bad-libs-gstgldebug.html#GST-GL-ASYNC-CAT-LEVEL-LOG:CAPS"/>
- <keyword type="function" name="gst_gl_insert_debug_marker ()" link="gst-plugins-bad-libs-gstgldebug.html#gst-gl-insert-debug-marker"/>
- <keyword type="struct" name="struct GstGLAsyncDebug" link="gst-plugins-bad-libs-gstgldebug.html#GstGLAsyncDebug"/>
- <keyword type="function" name="GLCB ()" link="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#GLCB:CAPS"/>
- <keyword type="function" name="GLCB_V2 ()" link="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#GLCB-V2:CAPS"/>
- <keyword type="function" name="CDCB ()" link="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#CDCB:CAPS"/>
+ <keyword type="function" name="GstGLAsyncDebugLogGetMessage ()" link="gst-plugins-bad-libs-OpenGL-debugging.html#GstGLAsyncDebugLogGetMessage"/>
+ <keyword type="function" name="gst_gl_async_debug_new ()" link="gst-plugins-bad-libs-OpenGL-debugging.html#gst-gl-async-debug-new" since="1.8"/>
+ <keyword type="function" name="gst_gl_async_debug_free ()" link="gst-plugins-bad-libs-OpenGL-debugging.html#gst-gl-async-debug-free" since="1.8"/>
+ <keyword type="function" name="gst_gl_async_debug_init ()" link="gst-plugins-bad-libs-OpenGL-debugging.html#gst-gl-async-debug-init" since="1.8"/>
+ <keyword type="function" name="gst_gl_async_debug_unset ()" link="gst-plugins-bad-libs-OpenGL-debugging.html#gst-gl-async-debug-unset"/>
+ <keyword type="function" name="gst_gl_async_debug_freeze ()" link="gst-plugins-bad-libs-OpenGL-debugging.html#gst-gl-async-debug-freeze" since="1.8"/>
+ <keyword type="function" name="gst_gl_async_debug_thaw ()" link="gst-plugins-bad-libs-OpenGL-debugging.html#gst-gl-async-debug-thaw" since="1.8"/>
+ <keyword type="function" name="gst_gl_async_debug_output_log_msg ()" link="gst-plugins-bad-libs-OpenGL-debugging.html#gst-gl-async-debug-output-log-msg"/>
+ <keyword type="function" name="gst_gl_async_debug_store_log_msg ()" link="gst-plugins-bad-libs-OpenGL-debugging.html#gst-gl-async-debug-store-log-msg" since="1.8"/>
+ <keyword type="function" name="gst_gl_async_debug_store_log_msg_valist ()" link="gst-plugins-bad-libs-OpenGL-debugging.html#gst-gl-async-debug-store-log-msg-valist" since="1.8"/>
+ <keyword type="macro" name="GST_GL_ASYNC_CAT_LEVEL_LOG_valist()" link="gst-plugins-bad-libs-OpenGL-debugging.html#GST-GL-ASYNC-CAT-LEVEL-LOG-valist"/>
+ <keyword type="macro" name="GST_GL_ASYNC_CAT_LEVEL_LOG()" link="gst-plugins-bad-libs-OpenGL-debugging.html#GST-GL-ASYNC-CAT-LEVEL-LOG:CAPS"/>
+ <keyword type="function" name="gst_gl_insert_debug_marker ()" link="gst-plugins-bad-libs-OpenGL-debugging.html#gst-gl-insert-debug-marker" since="1.8"/>
+ <keyword type="struct" name="struct GstGLAsyncDebug" link="gst-plugins-bad-libs-OpenGL-debugging.html#GstGLAsyncDebug"/>
<keyword type="function" name="gst_gl_handle_set_context ()" link="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#gst-gl-handle-set-context"/>
<keyword type="function" name="gst_gl_handle_context_query ()" link="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#gst-gl-handle-context-query"/>
- <keyword type="function" name="gst_gl_context_gen_fbo ()" link="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#gst-gl-context-gen-fbo"/>
- <keyword type="function" name="gst_gl_context_del_fbo ()" link="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#gst-gl-context-del-fbo"/>
- <keyword type="function" name="gst_gl_context_use_fbo_v2 ()" link="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#gst-gl-context-use-fbo-v2"/>
<keyword type="function" name="gst_gl_context_gen_shader ()" link="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#gst-gl-context-gen-shader"/>
<keyword type="function" name="gst_gl_context_del_shader ()" link="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#gst-gl-context-del-shader"/>
<keyword type="function" name="gst_gl_context_check_framebuffer_status ()" link="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#gst-gl-context-check-framebuffer-status"/>
- <keyword type="function" name="gst_gl_context_set_error ()" link="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#gst-gl-context-set-error"/>
- <keyword type="function" name="gst_gl_context_get_error ()" link="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#gst-gl-context-get-error"/>
<keyword type="function" name="gst_gl_context_clear_shader ()" link="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#gst-gl-context-clear-shader"/>
<keyword type="function" name="gst_gl_caps_replace_all_caps_features ()" link="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#gst-gl-caps-replace-all-caps-features"/>
<keyword type="function" name="gst_gl_ensure_element_data ()" link="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#gst-gl-ensure-element-data"/>
@@ -788,7 +777,6 @@
<keyword type="function" name="gst_gl_value_get_texture_target_mask ()" link="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#gst-gl-value-get-texture-target-mask"/>
<keyword type="function" name="gst_gl_value_set_texture_target ()" link="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#gst-gl-value-set-texture-target"/>
<keyword type="function" name="gst_gl_value_set_texture_target_from_mask ()" link="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#gst-gl-value-set-texture-target-from-mask"/>
- <keyword type="enum" name="enum GstGLDisplayProjection" link="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#GstGLDisplayProjection"/>
<keyword type="function" name="gst_gl_format_type_n_bytes ()" link="gst-plugins-bad-libs-OpenGL-Formats.html#gst-gl-format-type-n-bytes"/>
<keyword type="function" name="gst_gl_texture_type_n_bytes ()" link="gst-plugins-bad-libs-OpenGL-Formats.html#gst-gl-texture-type-n-bytes"/>
<keyword type="function" name="gst_gl_format_from_gl_texture_type ()" link="gst-plugins-bad-libs-OpenGL-Formats.html#gst-gl-format-from-gl-texture-type"/>
@@ -799,7 +787,7 @@
<keyword type="function" name="gst_gl_texture_target_to_gl ()" link="gst-plugins-bad-libs-OpenGL-Formats.html#gst-gl-texture-target-to-gl"/>
<keyword type="function" name="gst_gl_texture_target_from_gl ()" link="gst-plugins-bad-libs-OpenGL-Formats.html#gst-gl-texture-target-from-gl"/>
<keyword type="function" name="gst_gl_texture_target_to_buffer_pool_option ()" link="gst-plugins-bad-libs-OpenGL-Formats.html#gst-gl-texture-target-to-buffer-pool-option"/>
- <keyword type="enum" name="enum GstGLTextureTarget" link="gst-plugins-bad-libs-OpenGL-Formats.html#GstGLTextureTarget"/>
+ <keyword type="enum" name="enum GstGLTextureTarget" link="gst-plugins-bad-libs-OpenGL-Formats.html#GstGLTextureTarget" since="1.8"/>
<keyword type="macro" name="GST_GL_TEXTURE_TARGET_2D_STR" link="gst-plugins-bad-libs-OpenGL-Formats.html#GST-GL-TEXTURE-TARGET-2D-STR:CAPS"/>
<keyword type="macro" name="GST_GL_TEXTURE_TARGET_RECTANGLE_STR" link="gst-plugins-bad-libs-OpenGL-Formats.html#GST-GL-TEXTURE-TARGET-RECTANGLE-STR:CAPS"/>
<keyword type="macro" name="GST_GL_TEXTURE_TARGET_EXTERNAL_OES_STR" link="gst-plugins-bad-libs-OpenGL-Formats.html#GST-GL-TEXTURE-TARGET-EXTERNAL-OES-STR:CAPS"/>
@@ -820,8 +808,8 @@
<keyword type="function" name="gst_player_get_volume ()" link="gst-plugins-bad-libs-gstplayer.html#gst-player-get-volume"/>
<keyword type="function" name="gst_player_get_mute ()" link="gst-plugins-bad-libs-gstplayer.html#gst-player-get-mute"/>
<keyword type="function" name="gst_player_get_pipeline ()" link="gst-plugins-bad-libs-gstplayer.html#gst-player-get-pipeline"/>
- <keyword type="function" name="gst_player_set_position_update_interval ()" link="gst-plugins-bad-libs-gstplayer.html#gst-player-set-position-update-interval"/>
- <keyword type="function" name="gst_player_get_position_update_interval ()" link="gst-plugins-bad-libs-gstplayer.html#gst-player-get-position-update-interval"/>
+ <keyword type="function" name="gst_player_set_config ()" link="gst-plugins-bad-libs-gstplayer.html#gst-player-set-config"/>
+ <keyword type="function" name="gst_player_get_config ()" link="gst-plugins-bad-libs-gstplayer.html#gst-player-get-config"/>
<keyword type="function" name="gst_player_state_get_name ()" link="gst-plugins-bad-libs-gstplayer.html#gst-player-state-get-name"/>
<keyword type="function" name="gst_player_error_get_name ()" link="gst-plugins-bad-libs-gstplayer.html#gst-player-error-get-name"/>
<keyword type="function" name="gst_player_get_media_info ()" link="gst-plugins-bad-libs-gstplayer.html#gst-player-get-media-info"/>
@@ -846,14 +834,18 @@
<keyword type="function" name="gst_player_has_color_balance ()" link="gst-plugins-bad-libs-gstplayer.html#gst-player-has-color-balance"/>
<keyword type="function" name="gst_player_set_color_balance ()" link="gst-plugins-bad-libs-gstplayer.html#gst-player-set-color-balance"/>
<keyword type="function" name="gst_player_get_color_balance ()" link="gst-plugins-bad-libs-gstplayer.html#gst-player-get-color-balance"/>
- <keyword type="function" name="gst_player_get_multiview_mode ()" link="gst-plugins-bad-libs-gstplayer.html#gst-player-get-multiview-mode"/>
- <keyword type="function" name="gst_player_set_multiview_mode ()" link="gst-plugins-bad-libs-gstplayer.html#gst-player-set-multiview-mode"/>
- <keyword type="function" name="gst_player_get_multiview_flags ()" link="gst-plugins-bad-libs-gstplayer.html#gst-player-get-multiview-flags"/>
- <keyword type="function" name="gst_player_set_multiview_flags ()" link="gst-plugins-bad-libs-gstplayer.html#gst-player-set-multiview-flags"/>
+ <keyword type="function" name="gst_player_get_multiview_mode ()" link="gst-plugins-bad-libs-gstplayer.html#gst-player-get-multiview-mode" since="1.10"/>
+ <keyword type="function" name="gst_player_set_multiview_mode ()" link="gst-plugins-bad-libs-gstplayer.html#gst-player-set-multiview-mode" since="1.10"/>
+ <keyword type="function" name="gst_player_get_multiview_flags ()" link="gst-plugins-bad-libs-gstplayer.html#gst-player-get-multiview-flags" since="1.10"/>
+ <keyword type="function" name="gst_player_set_multiview_flags ()" link="gst-plugins-bad-libs-gstplayer.html#gst-player-set-multiview-flags" since="1.10"/>
<keyword type="function" name="gst_player_get_audio_video_offset ()" link="gst-plugins-bad-libs-gstplayer.html#gst-player-get-audio-video-offset"/>
<keyword type="function" name="gst_player_set_audio_video_offset ()" link="gst-plugins-bad-libs-gstplayer.html#gst-player-set-audio-video-offset"/>
<keyword type="function" name="gst_player_get_rate ()" link="gst-plugins-bad-libs-gstplayer.html#gst-player-get-rate"/>
<keyword type="function" name="gst_player_set_rate ()" link="gst-plugins-bad-libs-gstplayer.html#gst-player-set-rate"/>
+ <keyword type="function" name="gst_player_config_set_position_update_interval ()" link="gst-plugins-bad-libs-gstplayer.html#gst-player-config-set-position-update-interval"/>
+ <keyword type="function" name="gst_player_config_get_position_update_interval ()" link="gst-plugins-bad-libs-gstplayer.html#gst-player-config-get-position-update-interval"/>
+ <keyword type="function" name="gst_player_config_set_user_agent ()" link="gst-plugins-bad-libs-gstplayer.html#gst-player-config-set-user-agent"/>
+ <keyword type="function" name="gst_player_config_get_user_agent ()" link="gst-plugins-bad-libs-gstplayer.html#gst-player-config-get-user-agent"/>
<keyword type="struct" name="GstPlayer" link="gst-plugins-bad-libs-gstplayer.html#GstPlayer-struct"/>
<keyword type="enum" name="enum GstPlayerState" link="gst-plugins-bad-libs-gstplayer.html#GstPlayerState"/>
<keyword type="macro" name="GST_PLAYER_ERROR" link="gst-plugins-bad-libs-gstplayer.html#GST-PLAYER-ERROR:CAPS"/>
@@ -872,7 +864,6 @@
<keyword type="property" name="The “mute” property" link="gst-plugins-bad-libs-gstplayer.html#GstPlayer--mute"/>
<keyword type="property" name="The “pipeline” property" link="gst-plugins-bad-libs-gstplayer.html#GstPlayer--pipeline"/>
<keyword type="property" name="The “position” property" link="gst-plugins-bad-libs-gstplayer.html#GstPlayer--position"/>
- <keyword type="property" name="The “position-update-interval” property" link="gst-plugins-bad-libs-gstplayer.html#GstPlayer--position-update-interval"/>
<keyword type="property" name="The “rate” property" link="gst-plugins-bad-libs-gstplayer.html#GstPlayer--rate"/>
<keyword type="property" name="The “signal-dispatcher” property" link="gst-plugins-bad-libs-gstplayer.html#GstPlayer--signal-dispatcher"/>
<keyword type="property" name="The “suburi” property" link="gst-plugins-bad-libs-gstplayer.html#GstPlayer--suburi"/>
@@ -1212,463 +1203,463 @@
<keyword type="constant" name="GST_VC1_MVMODE_1MV_HPEL" link="gst-plugins-bad-libs-vc1parser.html#GST-VC1-MVMODE-1MV-HPEL:CAPS"/>
<keyword type="constant" name="GST_VC1_MVMODE_MIXED_MV" link="gst-plugins-bad-libs-vc1parser.html#GST-VC1-MVMODE-MIXED-MV:CAPS"/>
<keyword type="constant" name="GST_VC1_MVMODE_INTENSITY_COMP" link="gst-plugins-bad-libs-vc1parser.html#GST-VC1-MVMODE-INTENSITY-COMP:CAPS"/>
- <keyword type="constant" name="GST_MTS_TABLE_ID_PROGRAM_ASSOCIATION" link="gst-plugins-bad-libs-gstmpegtssection.html#GST-MTS-TABLE-ID-PROGRAM-ASSOCIATION:CAPS"/>
- <keyword type="constant" name="GST_MTS_TABLE_ID_CONDITIONAL_ACCESS" link="gst-plugins-bad-libs-gstmpegtssection.html#GST-MTS-TABLE-ID-CONDITIONAL-ACCESS:CAPS"/>
- <keyword type="constant" name="GST_MTS_TABLE_ID_TS_PROGRAM_MAP" link="gst-plugins-bad-libs-gstmpegtssection.html#GST-MTS-TABLE-ID-TS-PROGRAM-MAP:CAPS"/>
- <keyword type="constant" name="GST_MTS_TABLE_ID_TS_DESCRIPTION" link="gst-plugins-bad-libs-gstmpegtssection.html#GST-MTS-TABLE-ID-TS-DESCRIPTION:CAPS"/>
- <keyword type="constant" name="GST_MTS_TABLE_ID_14496_SCENE_DESCRIPTION" link="gst-plugins-bad-libs-gstmpegtssection.html#GST-MTS-TABLE-ID-14496-SCENE-DESCRIPTION:CAPS"/>
- <keyword type="constant" name="GST_MTS_TABLE_ID_14496_OBJET_DESCRIPTOR" link="gst-plugins-bad-libs-gstmpegtssection.html#GST-MTS-TABLE-ID-14496-OBJET-DESCRIPTOR:CAPS"/>
- <keyword type="constant" name="GST_MTS_TABLE_ID_METADATA" link="gst-plugins-bad-libs-gstmpegtssection.html#GST-MTS-TABLE-ID-METADATA:CAPS"/>
- <keyword type="constant" name="GST_MTS_TABLE_ID_IPMP_CONTROL_INFORMATION" link="gst-plugins-bad-libs-gstmpegtssection.html#GST-MTS-TABLE-ID-IPMP-CONTROL-INFORMATION:CAPS"/>
- <keyword type="constant" name="GST_MTS_TABLE_ID_DSM_CC_MULTIPROTO_ENCAPSULATED_DATA" link="gst-plugins-bad-libs-gstmpegtssection.html#GST-MTS-TABLE-ID-DSM-CC-MULTIPROTO-ENCAPSULATED-DATA:CAPS"/>
- <keyword type="constant" name="GST_MTS_TABLE_ID_DSM_CC_U_N_MESSAGES" link="gst-plugins-bad-libs-gstmpegtssection.html#GST-MTS-TABLE-ID-DSM-CC-U-N-MESSAGES:CAPS"/>
- <keyword type="constant" name="GST_MTS_TABLE_ID_DSM_CC_DOWNLOAD_DATA_MESSAGES" link="gst-plugins-bad-libs-gstmpegtssection.html#GST-MTS-TABLE-ID-DSM-CC-DOWNLOAD-DATA-MESSAGES:CAPS"/>
- <keyword type="constant" name="GST_MTS_TABLE_ID_DSM_CC_STREAM_DESCRIPTORS" link="gst-plugins-bad-libs-gstmpegtssection.html#GST-MTS-TABLE-ID-DSM-CC-STREAM-DESCRIPTORS:CAPS"/>
- <keyword type="constant" name="GST_MTS_TABLE_ID_DSM_CC_PRIVATE_DATA" link="gst-plugins-bad-libs-gstmpegtssection.html#GST-MTS-TABLE-ID-DSM-CC-PRIVATE-DATA:CAPS"/>
- <keyword type="constant" name="GST_MTS_TABLE_ID_DSM_CC_ADDRESSABLE_SECTIONS" link="gst-plugins-bad-libs-gstmpegtssection.html#GST-MTS-TABLE-ID-DSM-CC-ADDRESSABLE-SECTIONS:CAPS"/>
- <keyword type="constant" name="GST_MTS_TABLE_ID_UNSET" link="gst-plugins-bad-libs-gstmpegtssection.html#GST-MTS-TABLE-ID-UNSET:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_SECTION_UNKNOWN" link="gst-plugins-bad-libs-gstmpegtssection.html#GST-MPEGTS-SECTION-UNKNOWN:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_SECTION_PAT" link="gst-plugins-bad-libs-gstmpegtssection.html#GST-MPEGTS-SECTION-PAT:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_SECTION_PMT" link="gst-plugins-bad-libs-gstmpegtssection.html#GST-MPEGTS-SECTION-PMT:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_SECTION_CAT" link="gst-plugins-bad-libs-gstmpegtssection.html#GST-MPEGTS-SECTION-CAT:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_SECTION_TSDT" link="gst-plugins-bad-libs-gstmpegtssection.html#GST-MPEGTS-SECTION-TSDT:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_SECTION_EIT" link="gst-plugins-bad-libs-gstmpegtssection.html#GST-MPEGTS-SECTION-EIT:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_SECTION_NIT" link="gst-plugins-bad-libs-gstmpegtssection.html#GST-MPEGTS-SECTION-NIT:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_SECTION_BAT" link="gst-plugins-bad-libs-gstmpegtssection.html#GST-MPEGTS-SECTION-BAT:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_SECTION_SDT" link="gst-plugins-bad-libs-gstmpegtssection.html#GST-MPEGTS-SECTION-SDT:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_SECTION_TDT" link="gst-plugins-bad-libs-gstmpegtssection.html#GST-MPEGTS-SECTION-TDT:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_SECTION_TOT" link="gst-plugins-bad-libs-gstmpegtssection.html#GST-MPEGTS-SECTION-TOT:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_SECTION_ATSC_TVCT" link="gst-plugins-bad-libs-gstmpegtssection.html#GST-MPEGTS-SECTION-ATSC-TVCT:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_SECTION_ATSC_CVCT" link="gst-plugins-bad-libs-gstmpegtssection.html#GST-MPEGTS-SECTION-ATSC-CVCT:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_SECTION_ATSC_MGT" link="gst-plugins-bad-libs-gstmpegtssection.html#GST-MPEGTS-SECTION-ATSC-MGT:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_SECTION_ATSC_ETT" link="gst-plugins-bad-libs-gstmpegtssection.html#GST-MPEGTS-SECTION-ATSC-ETT:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_SECTION_ATSC_EIT" link="gst-plugins-bad-libs-gstmpegtssection.html#GST-MPEGTS-SECTION-ATSC-EIT:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_SECTION_ATSC_STT" link="gst-plugins-bad-libs-gstmpegtssection.html#GST-MPEGTS-SECTION-ATSC-STT:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_STREAM_TYPE_RESERVED_00" link="gst-plugins-bad-libs-gstmpegtssection.html#GST-MPEGTS-STREAM-TYPE-RESERVED-00:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_STREAM_TYPE_VIDEO_MPEG1" link="gst-plugins-bad-libs-gstmpegtssection.html#GST-MPEGTS-STREAM-TYPE-VIDEO-MPEG1:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_STREAM_TYPE_VIDEO_MPEG2" link="gst-plugins-bad-libs-gstmpegtssection.html#GST-MPEGTS-STREAM-TYPE-VIDEO-MPEG2:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_STREAM_TYPE_AUDIO_MPEG1" link="gst-plugins-bad-libs-gstmpegtssection.html#GST-MPEGTS-STREAM-TYPE-AUDIO-MPEG1:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_STREAM_TYPE_AUDIO_MPEG2" link="gst-plugins-bad-libs-gstmpegtssection.html#GST-MPEGTS-STREAM-TYPE-AUDIO-MPEG2:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_STREAM_TYPE_PRIVATE_SECTIONS" link="gst-plugins-bad-libs-gstmpegtssection.html#GST-MPEGTS-STREAM-TYPE-PRIVATE-SECTIONS:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_STREAM_TYPE_PRIVATE_PES_PACKETS" link="gst-plugins-bad-libs-gstmpegtssection.html#GST-MPEGTS-STREAM-TYPE-PRIVATE-PES-PACKETS:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_STREAM_TYPE_MHEG" link="gst-plugins-bad-libs-gstmpegtssection.html#GST-MPEGTS-STREAM-TYPE-MHEG:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_STREAM_TYPE_DSM_CC" link="gst-plugins-bad-libs-gstmpegtssection.html#GST-MPEGTS-STREAM-TYPE-DSM-CC:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_STREAM_TYPE_H_222_1" link="gst-plugins-bad-libs-gstmpegtssection.html#GST-MPEGTS-STREAM-TYPE-H-222-1:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_STREAM_TYPE_DSMCC_A" link="gst-plugins-bad-libs-gstmpegtssection.html#GST-MPEGTS-STREAM-TYPE-DSMCC-A:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_STREAM_TYPE_DSMCC_B" link="gst-plugins-bad-libs-gstmpegtssection.html#GST-MPEGTS-STREAM-TYPE-DSMCC-B:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_STREAM_TYPE_DSMCC_C" link="gst-plugins-bad-libs-gstmpegtssection.html#GST-MPEGTS-STREAM-TYPE-DSMCC-C:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_STREAM_TYPE_DSMCC_D" link="gst-plugins-bad-libs-gstmpegtssection.html#GST-MPEGTS-STREAM-TYPE-DSMCC-D:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_STREAM_TYPE_AUXILIARY" link="gst-plugins-bad-libs-gstmpegtssection.html#GST-MPEGTS-STREAM-TYPE-AUXILIARY:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_STREAM_TYPE_AUDIO_AAC_ADTS" link="gst-plugins-bad-libs-gstmpegtssection.html#GST-MPEGTS-STREAM-TYPE-AUDIO-AAC-ADTS:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_STREAM_TYPE_VIDEO_MPEG4" link="gst-plugins-bad-libs-gstmpegtssection.html#GST-MPEGTS-STREAM-TYPE-VIDEO-MPEG4:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_STREAM_TYPE_AUDIO_AAC_LATM" link="gst-plugins-bad-libs-gstmpegtssection.html#GST-MPEGTS-STREAM-TYPE-AUDIO-AAC-LATM:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_STREAM_TYPE_SL_FLEXMUX_PES_PACKETS" link="gst-plugins-bad-libs-gstmpegtssection.html#GST-MPEGTS-STREAM-TYPE-SL-FLEXMUX-PES-PACKETS:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_STREAM_TYPE_SL_FLEXMUX_SECTIONS" link="gst-plugins-bad-libs-gstmpegtssection.html#GST-MPEGTS-STREAM-TYPE-SL-FLEXMUX-SECTIONS:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_STREAM_TYPE_SYNCHRONIZED_DOWNLOAD" link="gst-plugins-bad-libs-gstmpegtssection.html#GST-MPEGTS-STREAM-TYPE-SYNCHRONIZED-DOWNLOAD:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_STREAM_TYPE_METADATA_PES_PACKETS" link="gst-plugins-bad-libs-gstmpegtssection.html#GST-MPEGTS-STREAM-TYPE-METADATA-PES-PACKETS:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_STREAM_TYPE_METADATA_SECTIONS" link="gst-plugins-bad-libs-gstmpegtssection.html#GST-MPEGTS-STREAM-TYPE-METADATA-SECTIONS:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_STREAM_TYPE_METADATA_DATA_CAROUSEL" link="gst-plugins-bad-libs-gstmpegtssection.html#GST-MPEGTS-STREAM-TYPE-METADATA-DATA-CAROUSEL:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_STREAM_TYPE_METADATA_OBJECT_CAROUSEL" link="gst-plugins-bad-libs-gstmpegtssection.html#GST-MPEGTS-STREAM-TYPE-METADATA-OBJECT-CAROUSEL:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_STREAM_TYPE_METADATA_SYNCHRONIZED_DOWNLOAD" link="gst-plugins-bad-libs-gstmpegtssection.html#GST-MPEGTS-STREAM-TYPE-METADATA-SYNCHRONIZED-DOWNLOAD:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_STREAM_TYPE_MPEG2_IPMP" link="gst-plugins-bad-libs-gstmpegtssection.html#GST-MPEGTS-STREAM-TYPE-MPEG2-IPMP:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_STREAM_TYPE_VIDEO_H264" link="gst-plugins-bad-libs-gstmpegtssection.html#GST-MPEGTS-STREAM-TYPE-VIDEO-H264:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_STREAM_TYPE_AUDIO_AAC_CLEAN" link="gst-plugins-bad-libs-gstmpegtssection.html#GST-MPEGTS-STREAM-TYPE-AUDIO-AAC-CLEAN:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_STREAM_TYPE_MPEG4_TIMED_TEXT" link="gst-plugins-bad-libs-gstmpegtssection.html#GST-MPEGTS-STREAM-TYPE-MPEG4-TIMED-TEXT:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_STREAM_TYPE_VIDEO_RVC" link="gst-plugins-bad-libs-gstmpegtssection.html#GST-MPEGTS-STREAM-TYPE-VIDEO-RVC:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_STREAM_TYPE_VIDEO_H264_SVC_SUB_BITSTREAM" link="gst-plugins-bad-libs-gstmpegtssection.html#GST-MPEGTS-STREAM-TYPE-VIDEO-H264-SVC-SUB-BITSTREAM:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_STREAM_TYPE_VIDEO_H264_MVC_SUB_BITSTREAM" link="gst-plugins-bad-libs-gstmpegtssection.html#GST-MPEGTS-STREAM-TYPE-VIDEO-H264-MVC-SUB-BITSTREAM:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_STREAM_TYPE_VIDEO_JP2K" link="gst-plugins-bad-libs-gstmpegtssection.html#GST-MPEGTS-STREAM-TYPE-VIDEO-JP2K:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_STREAM_TYPE_VIDEO_MPEG2_STEREO_ADDITIONAL_VIEW" link="gst-plugins-bad-libs-gstmpegtssection.html#GST-MPEGTS-STREAM-TYPE-VIDEO-MPEG2-STEREO-ADDITIONAL-VIEW:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_STREAM_TYPE_VIDEO_H264_STEREO_ADDITIONAL_VIEW" link="gst-plugins-bad-libs-gstmpegtssection.html#GST-MPEGTS-STREAM-TYPE-VIDEO-H264-STEREO-ADDITIONAL-VIEW:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_STREAM_TYPE_VIDEO_HEVC" link="gst-plugins-bad-libs-gstmpegtssection.html#GST-MPEGTS-STREAM-TYPE-VIDEO-HEVC:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_STREAM_TYPE_IPMP_STREAM" link="gst-plugins-bad-libs-gstmpegtssection.html#GST-MPEGTS-STREAM-TYPE-IPMP-STREAM:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_RESERVED_00" link="gst-plugins-bad-libs-gstmpegtsdescriptor.html#GST-MTS-DESC-RESERVED-00:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_RESERVED_01" link="gst-plugins-bad-libs-gstmpegtsdescriptor.html#GST-MTS-DESC-RESERVED-01:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_VIDEO_STREAM" link="gst-plugins-bad-libs-gstmpegtsdescriptor.html#GST-MTS-DESC-VIDEO-STREAM:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_AUDIO_STREAM" link="gst-plugins-bad-libs-gstmpegtsdescriptor.html#GST-MTS-DESC-AUDIO-STREAM:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_HIERARCHY" link="gst-plugins-bad-libs-gstmpegtsdescriptor.html#GST-MTS-DESC-HIERARCHY:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_REGISTRATION" link="gst-plugins-bad-libs-gstmpegtsdescriptor.html#GST-MTS-DESC-REGISTRATION:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_DATA_STREAM_ALIGNMENT" link="gst-plugins-bad-libs-gstmpegtsdescriptor.html#GST-MTS-DESC-DATA-STREAM-ALIGNMENT:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_TARGET_BACKGROUND_GRID" link="gst-plugins-bad-libs-gstmpegtsdescriptor.html#GST-MTS-DESC-TARGET-BACKGROUND-GRID:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_VIDEO_WINDOW" link="gst-plugins-bad-libs-gstmpegtsdescriptor.html#GST-MTS-DESC-VIDEO-WINDOW:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_CA" link="gst-plugins-bad-libs-gstmpegtsdescriptor.html#GST-MTS-DESC-CA:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_ISO_639_LANGUAGE" link="gst-plugins-bad-libs-gstmpegtsdescriptor.html#GST-MTS-DESC-ISO-639-LANGUAGE:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_SYSTEM_CLOCK" link="gst-plugins-bad-libs-gstmpegtsdescriptor.html#GST-MTS-DESC-SYSTEM-CLOCK:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_MULTIPLEX_BUFFER_UTILISATION" link="gst-plugins-bad-libs-gstmpegtsdescriptor.html#GST-MTS-DESC-MULTIPLEX-BUFFER-UTILISATION:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_COPYRIGHT" link="gst-plugins-bad-libs-gstmpegtsdescriptor.html#GST-MTS-DESC-COPYRIGHT:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_MAXIMUM_BITRATE" link="gst-plugins-bad-libs-gstmpegtsdescriptor.html#GST-MTS-DESC-MAXIMUM-BITRATE:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_PRIVATE_DATA_INDICATOR" link="gst-plugins-bad-libs-gstmpegtsdescriptor.html#GST-MTS-DESC-PRIVATE-DATA-INDICATOR:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_SMOOTHING_BUFFER" link="gst-plugins-bad-libs-gstmpegtsdescriptor.html#GST-MTS-DESC-SMOOTHING-BUFFER:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_STD" link="gst-plugins-bad-libs-gstmpegtsdescriptor.html#GST-MTS-DESC-STD:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_IBP" link="gst-plugins-bad-libs-gstmpegtsdescriptor.html#GST-MTS-DESC-IBP:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_DSMCC_CAROUSEL_IDENTIFIER" link="gst-plugins-bad-libs-gstmpegtsdescriptor.html#GST-MTS-DESC-DSMCC-CAROUSEL-IDENTIFIER:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_DSMCC_ASSOCIATION_TAG" link="gst-plugins-bad-libs-gstmpegtsdescriptor.html#GST-MTS-DESC-DSMCC-ASSOCIATION-TAG:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_DSMCC_DEFERRED_ASSOCIATION_TAG" link="gst-plugins-bad-libs-gstmpegtsdescriptor.html#GST-MTS-DESC-DSMCC-DEFERRED-ASSOCIATION-TAG:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_DSMCC_NPT_REFERENCE" link="gst-plugins-bad-libs-gstmpegtsdescriptor.html#GST-MTS-DESC-DSMCC-NPT-REFERENCE:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_DSMCC_NPT_ENDPOINT" link="gst-plugins-bad-libs-gstmpegtsdescriptor.html#GST-MTS-DESC-DSMCC-NPT-ENDPOINT:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_DSMCC_STREAM_MODE" link="gst-plugins-bad-libs-gstmpegtsdescriptor.html#GST-MTS-DESC-DSMCC-STREAM-MODE:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_DSMCC_STREAM_EVENT" link="gst-plugins-bad-libs-gstmpegtsdescriptor.html#GST-MTS-DESC-DSMCC-STREAM-EVENT:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_MPEG4_VIDEO" link="gst-plugins-bad-libs-gstmpegtsdescriptor.html#GST-MTS-DESC-MPEG4-VIDEO:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_MPEG4_AUDIO" link="gst-plugins-bad-libs-gstmpegtsdescriptor.html#GST-MTS-DESC-MPEG4-AUDIO:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_IOD" link="gst-plugins-bad-libs-gstmpegtsdescriptor.html#GST-MTS-DESC-IOD:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_SL" link="gst-plugins-bad-libs-gstmpegtsdescriptor.html#GST-MTS-DESC-SL:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_FMC" link="gst-plugins-bad-libs-gstmpegtsdescriptor.html#GST-MTS-DESC-FMC:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_EXTERNAL_ES_ID" link="gst-plugins-bad-libs-gstmpegtsdescriptor.html#GST-MTS-DESC-EXTERNAL-ES-ID:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_MUX_CODE" link="gst-plugins-bad-libs-gstmpegtsdescriptor.html#GST-MTS-DESC-MUX-CODE:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_FMX_BUFFER_SIZE" link="gst-plugins-bad-libs-gstmpegtsdescriptor.html#GST-MTS-DESC-FMX-BUFFER-SIZE:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_MULTIPLEX_BUFFER" link="gst-plugins-bad-libs-gstmpegtsdescriptor.html#GST-MTS-DESC-MULTIPLEX-BUFFER:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_CONTENT_LABELING" link="gst-plugins-bad-libs-gstmpegtsdescriptor.html#GST-MTS-DESC-CONTENT-LABELING:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_METADATA_POINTER" link="gst-plugins-bad-libs-gstmpegtsdescriptor.html#GST-MTS-DESC-METADATA-POINTER:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_METADATA" link="gst-plugins-bad-libs-gstmpegtsdescriptor.html#GST-MTS-DESC-METADATA:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_METADATA_STD" link="gst-plugins-bad-libs-gstmpegtsdescriptor.html#GST-MTS-DESC-METADATA-STD:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_AVC_VIDEO" link="gst-plugins-bad-libs-gstmpegtsdescriptor.html#GST-MTS-DESC-AVC-VIDEO:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_IPMP" link="gst-plugins-bad-libs-gstmpegtsdescriptor.html#GST-MTS-DESC-IPMP:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_AVC_TIMING_AND_HRD" link="gst-plugins-bad-libs-gstmpegtsdescriptor.html#GST-MTS-DESC-AVC-TIMING-AND-HRD:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_MPEG2_AAC_AUDIO" link="gst-plugins-bad-libs-gstmpegtsdescriptor.html#GST-MTS-DESC-MPEG2-AAC-AUDIO:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_FLEX_MUX_TIMING" link="gst-plugins-bad-libs-gstmpegtsdescriptor.html#GST-MTS-DESC-FLEX-MUX-TIMING:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_MPEG4_TEXT" link="gst-plugins-bad-libs-gstmpegtsdescriptor.html#GST-MTS-DESC-MPEG4-TEXT:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_MPEG4_AUDIO_EXTENSION" link="gst-plugins-bad-libs-gstmpegtsdescriptor.html#GST-MTS-DESC-MPEG4-AUDIO-EXTENSION:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_AUXILIARY_VIDEO_STREAM" link="gst-plugins-bad-libs-gstmpegtsdescriptor.html#GST-MTS-DESC-AUXILIARY-VIDEO-STREAM:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_SVC_EXTENSION" link="gst-plugins-bad-libs-gstmpegtsdescriptor.html#GST-MTS-DESC-SVC-EXTENSION:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_MVC_EXTENSION" link="gst-plugins-bad-libs-gstmpegtsdescriptor.html#GST-MTS-DESC-MVC-EXTENSION:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_J2K_VIDEO" link="gst-plugins-bad-libs-gstmpegtsdescriptor.html#GST-MTS-DESC-J2K-VIDEO:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_MVC_OPERATION_POINT" link="gst-plugins-bad-libs-gstmpegtsdescriptor.html#GST-MTS-DESC-MVC-OPERATION-POINT:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_MPEG2_STEREOSCOPIC_VIDEO_FORMAT" link="gst-plugins-bad-libs-gstmpegtsdescriptor.html#GST-MTS-DESC-MPEG2-STEREOSCOPIC-VIDEO-FORMAT:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_STEREOSCOPIC_PROGRAM_INFO" link="gst-plugins-bad-libs-gstmpegtsdescriptor.html#GST-MTS-DESC-STEREOSCOPIC-PROGRAM-INFO:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_STEREOSCOPIC_VIDEO_INFO" link="gst-plugins-bad-libs-gstmpegtsdescriptor.html#GST-MTS-DESC-STEREOSCOPIC-VIDEO-INFO:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_AC3_AUDIO_STREAM" link="gst-plugins-bad-libs-gstmpegtsdescriptor.html#GST-MTS-DESC-AC3-AUDIO-STREAM:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_DTG_LOGICAL_CHANNEL" link="gst-plugins-bad-libs-gstmpegtsdescriptor.html#GST-MTS-DESC-DTG-LOGICAL-CHANNEL:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_AUDIO_TYPE_UNDEFINED" link="gst-plugins-bad-libs-gstmpegtsdescriptor.html#GST-MPEGTS-AUDIO-TYPE-UNDEFINED:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_AUDIO_TYPE_CLEAN_EFFECTS" link="gst-plugins-bad-libs-gstmpegtsdescriptor.html#GST-MPEGTS-AUDIO-TYPE-CLEAN-EFFECTS:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_AUDIO_TYPE_HEARING_IMPAIRED" link="gst-plugins-bad-libs-gstmpegtsdescriptor.html#GST-MPEGTS-AUDIO-TYPE-HEARING-IMPAIRED:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_AUDIO_TYPE_VISUAL_IMPAIRED_COMMENTARY" link="gst-plugins-bad-libs-gstmpegtsdescriptor.html#GST-MPEGTS-AUDIO-TYPE-VISUAL-IMPAIRED-COMMENTARY:CAPS"/>
- <keyword type="constant" name="GST_MTS_TABLE_ID_ATSC_MASTER_GUIDE" link="gst-plugins-bad-libs-gst-atsc-section.html#GST-MTS-TABLE-ID-ATSC-MASTER-GUIDE:CAPS"/>
- <keyword type="constant" name="GST_MTS_TABLE_ID_ATSC_TERRESTRIAL_VIRTUAL_CHANNEL" link="gst-plugins-bad-libs-gst-atsc-section.html#GST-MTS-TABLE-ID-ATSC-TERRESTRIAL-VIRTUAL-CHANNEL:CAPS"/>
- <keyword type="constant" name="GST_MTS_TABLE_ID_ATSC_CABLE_VIRTUAL_CHANNEL" link="gst-plugins-bad-libs-gst-atsc-section.html#GST-MTS-TABLE-ID-ATSC-CABLE-VIRTUAL-CHANNEL:CAPS"/>
- <keyword type="constant" name="GST_MTS_TABLE_ID_ATSC_RATING_REGION" link="gst-plugins-bad-libs-gst-atsc-section.html#GST-MTS-TABLE-ID-ATSC-RATING-REGION:CAPS"/>
- <keyword type="constant" name="GST_MTS_TABLE_ID_ATSC_EVENT_INFORMATION" link="gst-plugins-bad-libs-gst-atsc-section.html#GST-MTS-TABLE-ID-ATSC-EVENT-INFORMATION:CAPS"/>
- <keyword type="constant" name="GST_MTS_TABLE_ID_ATSC_CHANNEL_OR_EVENT_EXTENDED_TEXT" link="gst-plugins-bad-libs-gst-atsc-section.html#GST-MTS-TABLE-ID-ATSC-CHANNEL-OR-EVENT-EXTENDED-TEXT:CAPS"/>
- <keyword type="constant" name="GST_MTS_TABLE_ID_ATSC_SYSTEM_TIME" link="gst-plugins-bad-libs-gst-atsc-section.html#GST-MTS-TABLE-ID-ATSC-SYSTEM-TIME:CAPS"/>
- <keyword type="constant" name="GST_MTS_TABLE_ID_ATSC_DATA_EVENT" link="gst-plugins-bad-libs-gst-atsc-section.html#GST-MTS-TABLE-ID-ATSC-DATA-EVENT:CAPS"/>
- <keyword type="constant" name="GST_MTS_TABLE_ID_ATSC_DATA_SERVICE" link="gst-plugins-bad-libs-gst-atsc-section.html#GST-MTS-TABLE-ID-ATSC-DATA-SERVICE:CAPS"/>
- <keyword type="constant" name="GST_MTS_TABLE_ID_ATSC_NETWORK_RESOURCE" link="gst-plugins-bad-libs-gst-atsc-section.html#GST-MTS-TABLE-ID-ATSC-NETWORK-RESOURCE:CAPS"/>
- <keyword type="constant" name="GST_MTS_TABLE_ID_ATSC_LONG_TERM_SERVICE" link="gst-plugins-bad-libs-gst-atsc-section.html#GST-MTS-TABLE-ID-ATSC-LONG-TERM-SERVICE:CAPS"/>
- <keyword type="constant" name="GST_MTS_TABLE_ID_ATSC_DIRECTED_CHANNEL_CHANGE" link="gst-plugins-bad-libs-gst-atsc-section.html#GST-MTS-TABLE-ID-ATSC-DIRECTED-CHANNEL-CHANGE:CAPS"/>
- <keyword type="constant" name="GST_MTS_TABLE_ID_ATSC_DIRECTED_CHANNEL_CHANGE_SECTION_CODE" link="gst-plugins-bad-libs-gst-atsc-section.html#GST-MTS-TABLE-ID-ATSC-DIRECTED-CHANNEL-CHANGE-SECTION-CODE:CAPS"/>
- <keyword type="constant" name="GST_MTS_TABLE_ID_ATSC_AGGREGATE_EVENT_INFORMATION" link="gst-plugins-bad-libs-gst-atsc-section.html#GST-MTS-TABLE-ID-ATSC-AGGREGATE-EVENT-INFORMATION:CAPS"/>
- <keyword type="constant" name="GST_MTS_TABLE_ID_ATSC_AGGREGATE_EXTENDED_TEXT" link="gst-plugins-bad-libs-gst-atsc-section.html#GST-MTS-TABLE-ID-ATSC-AGGREGATE-EXTENDED-TEXT:CAPS"/>
- <keyword type="constant" name="GST_MTS_TABLE_ID_ATSC_AGGREGATE_DATA_EVENT" link="gst-plugins-bad-libs-gst-atsc-section.html#GST-MTS-TABLE-ID-ATSC-AGGREGATE-DATA-EVENT:CAPS"/>
- <keyword type="constant" name="GST_MTS_TABLE_ID_ATSC_SATELLITE_VIRTUAL_CHANNEL" link="gst-plugins-bad-libs-gst-atsc-section.html#GST-MTS-TABLE-ID-ATSC-SATELLITE-VIRTUAL-CHANNEL:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_ATSC_MGT_TABLE_TYPE_EIT0" link="gst-plugins-bad-libs-gst-atsc-section.html#GST-MPEGTS-ATSC-MGT-TABLE-TYPE-EIT0:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_ATSC_MGT_TABLE_TYPE_EIT127" link="gst-plugins-bad-libs-gst-atsc-section.html#GST-MPEGTS-ATSC-MGT-TABLE-TYPE-EIT127:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_ATSC_MGT_TABLE_TYPE_ETT0" link="gst-plugins-bad-libs-gst-atsc-section.html#GST-MPEGTS-ATSC-MGT-TABLE-TYPE-ETT0:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_ATSC_MGT_TABLE_TYPE_ETT127" link="gst-plugins-bad-libs-gst-atsc-section.html#GST-MPEGTS-ATSC-MGT-TABLE-TYPE-ETT127:CAPS"/>
- <keyword type="constant" name="GST_MTS_TABLE_ID_NETWORK_INFORMATION_ACTUAL_NETWORK" link="gst-plugins-bad-libs-gst-dvb-section.html#GST-MTS-TABLE-ID-NETWORK-INFORMATION-ACTUAL-NETWORK:CAPS"/>
- <keyword type="constant" name="GST_MTS_TABLE_ID_NETWORK_INFORMATION_OTHER_NETWORK" link="gst-plugins-bad-libs-gst-dvb-section.html#GST-MTS-TABLE-ID-NETWORK-INFORMATION-OTHER-NETWORK:CAPS"/>
- <keyword type="constant" name="GST_MTS_TABLE_ID_SERVICE_DESCRIPTION_ACTUAL_TS" link="gst-plugins-bad-libs-gst-dvb-section.html#GST-MTS-TABLE-ID-SERVICE-DESCRIPTION-ACTUAL-TS:CAPS"/>
- <keyword type="constant" name="GST_MTS_TABLE_ID_SERVICE_DESCRIPTION_OTHER_TS" link="gst-plugins-bad-libs-gst-dvb-section.html#GST-MTS-TABLE-ID-SERVICE-DESCRIPTION-OTHER-TS:CAPS"/>
- <keyword type="constant" name="GST_MTS_TABLE_ID_BOUQUET_ASSOCIATION" link="gst-plugins-bad-libs-gst-dvb-section.html#GST-MTS-TABLE-ID-BOUQUET-ASSOCIATION:CAPS"/>
- <keyword type="constant" name="GST_MTS_TABLE_ID_EVENT_INFORMATION_ACTUAL_TS_PRESENT" link="gst-plugins-bad-libs-gst-dvb-section.html#GST-MTS-TABLE-ID-EVENT-INFORMATION-ACTUAL-TS-PRESENT:CAPS"/>
- <keyword type="constant" name="GST_MTS_TABLE_ID_EVENT_INFORMATION_OTHER_TS_PRESENT" link="gst-plugins-bad-libs-gst-dvb-section.html#GST-MTS-TABLE-ID-EVENT-INFORMATION-OTHER-TS-PRESENT:CAPS"/>
- <keyword type="constant" name="GST_MTS_TABLE_ID_EVENT_INFORMATION_ACTUAL_TS_SCHEDULE_1" link="gst-plugins-bad-libs-gst-dvb-section.html#GST-MTS-TABLE-ID-EVENT-INFORMATION-ACTUAL-TS-SCHEDULE-1:CAPS"/>
- <keyword type="constant" name="GST_MTS_TABLE_ID_EVENT_INFORMATION_ACTUAL_TS_SCHEDULE_N" link="gst-plugins-bad-libs-gst-dvb-section.html#GST-MTS-TABLE-ID-EVENT-INFORMATION-ACTUAL-TS-SCHEDULE-N:CAPS"/>
- <keyword type="constant" name="GST_MTS_TABLE_ID_EVENT_INFORMATION_OTHER_TS_SCHEDULE_1" link="gst-plugins-bad-libs-gst-dvb-section.html#GST-MTS-TABLE-ID-EVENT-INFORMATION-OTHER-TS-SCHEDULE-1:CAPS"/>
- <keyword type="constant" name="GST_MTS_TABLE_ID_EVENT_INFORMATION_OTHER_TS_SCHEDULE_N" link="gst-plugins-bad-libs-gst-dvb-section.html#GST-MTS-TABLE-ID-EVENT-INFORMATION-OTHER-TS-SCHEDULE-N:CAPS"/>
- <keyword type="constant" name="GST_MTS_TABLE_ID_TIME_DATE" link="gst-plugins-bad-libs-gst-dvb-section.html#GST-MTS-TABLE-ID-TIME-DATE:CAPS"/>
- <keyword type="constant" name="GST_MTS_TABLE_ID_RUNNING_STATUS" link="gst-plugins-bad-libs-gst-dvb-section.html#GST-MTS-TABLE-ID-RUNNING-STATUS:CAPS"/>
- <keyword type="constant" name="GST_MTS_TABLE_ID_STUFFING" link="gst-plugins-bad-libs-gst-dvb-section.html#GST-MTS-TABLE-ID-STUFFING:CAPS"/>
- <keyword type="constant" name="GST_MTS_TABLE_ID_TIME_OFFSET" link="gst-plugins-bad-libs-gst-dvb-section.html#GST-MTS-TABLE-ID-TIME-OFFSET:CAPS"/>
- <keyword type="constant" name="GST_MTS_TABLE_ID_APPLICATION_INFORMATION_TABLE" link="gst-plugins-bad-libs-gst-dvb-section.html#GST-MTS-TABLE-ID-APPLICATION-INFORMATION-TABLE:CAPS"/>
- <keyword type="constant" name="GST_MTS_TABLE_ID_CONTAINER" link="gst-plugins-bad-libs-gst-dvb-section.html#GST-MTS-TABLE-ID-CONTAINER:CAPS"/>
- <keyword type="constant" name="GST_MTS_TABLE_ID_RELATED_CONTENT" link="gst-plugins-bad-libs-gst-dvb-section.html#GST-MTS-TABLE-ID-RELATED-CONTENT:CAPS"/>
- <keyword type="constant" name="GST_MTS_TABLE_ID_CONTENT_IDENTIFIER" link="gst-plugins-bad-libs-gst-dvb-section.html#GST-MTS-TABLE-ID-CONTENT-IDENTIFIER:CAPS"/>
- <keyword type="constant" name="GST_MTS_TABLE_ID_MPE_FEC" link="gst-plugins-bad-libs-gst-dvb-section.html#GST-MTS-TABLE-ID-MPE-FEC:CAPS"/>
- <keyword type="constant" name="GST_MTS_TABLE_ID_RESOLUTION_NOTIFICATION" link="gst-plugins-bad-libs-gst-dvb-section.html#GST-MTS-TABLE-ID-RESOLUTION-NOTIFICATION:CAPS"/>
- <keyword type="constant" name="GST_MTS_TABLE_ID_MPE_IFEC" link="gst-plugins-bad-libs-gst-dvb-section.html#GST-MTS-TABLE-ID-MPE-IFEC:CAPS"/>
- <keyword type="constant" name="GST_MTS_TABLE_ID_DISCONTINUITY_INFORMATION" link="gst-plugins-bad-libs-gst-dvb-section.html#GST-MTS-TABLE-ID-DISCONTINUITY-INFORMATION:CAPS"/>
- <keyword type="constant" name="GST_MTS_TABLE_ID_SELECTION_INFORMATION" link="gst-plugins-bad-libs-gst-dvb-section.html#GST-MTS-TABLE-ID-SELECTION-INFORMATION:CAPS"/>
- <keyword type="constant" name="GST_MTS_TABLE_ID_CA_MESSAGE_ECM_0" link="gst-plugins-bad-libs-gst-dvb-section.html#GST-MTS-TABLE-ID-CA-MESSAGE-ECM-0:CAPS"/>
- <keyword type="constant" name="GST_MTS_TABLE_ID_CA_MESSAGE_ECM_1" link="gst-plugins-bad-libs-gst-dvb-section.html#GST-MTS-TABLE-ID-CA-MESSAGE-ECM-1:CAPS"/>
- <keyword type="constant" name="GST_MTS_TABLE_ID_CA_MESSAGE_SYSTEM_PRIVATE_1" link="gst-plugins-bad-libs-gst-dvb-section.html#GST-MTS-TABLE-ID-CA-MESSAGE-SYSTEM-PRIVATE-1:CAPS"/>
- <keyword type="constant" name="GST_MTS_TABLE_ID_CA_MESSAGE_SYSTEM_PRIVATE_N" link="gst-plugins-bad-libs-gst-dvb-section.html#GST-MTS-TABLE-ID-CA-MESSAGE-SYSTEM-PRIVATE-N:CAPS"/>
- <keyword type="constant" name="GST_MTS_TABLE_ID_SCT" link="gst-plugins-bad-libs-gst-dvb-section.html#GST-MTS-TABLE-ID-SCT:CAPS"/>
- <keyword type="constant" name="GST_MTS_TABLE_ID_FCT" link="gst-plugins-bad-libs-gst-dvb-section.html#GST-MTS-TABLE-ID-FCT:CAPS"/>
- <keyword type="constant" name="GST_MTS_TABLE_ID_TCT" link="gst-plugins-bad-libs-gst-dvb-section.html#GST-MTS-TABLE-ID-TCT:CAPS"/>
- <keyword type="constant" name="GST_MTS_TABLE_ID_SPT" link="gst-plugins-bad-libs-gst-dvb-section.html#GST-MTS-TABLE-ID-SPT:CAPS"/>
- <keyword type="constant" name="GST_MTS_TABLE_ID_CMT" link="gst-plugins-bad-libs-gst-dvb-section.html#GST-MTS-TABLE-ID-CMT:CAPS"/>
- <keyword type="constant" name="GST_MTS_TABLE_ID_TBTP" link="gst-plugins-bad-libs-gst-dvb-section.html#GST-MTS-TABLE-ID-TBTP:CAPS"/>
- <keyword type="constant" name="GST_MTS_TABLE_ID_PCR_PACKET_PAYLOAD" link="gst-plugins-bad-libs-gst-dvb-section.html#GST-MTS-TABLE-ID-PCR-PACKET-PAYLOAD:CAPS"/>
- <keyword type="constant" name="GST_MTS_TABLE_ID_TRANSMISSION_MODE_SUPPORT_PAYLOAD" link="gst-plugins-bad-libs-gst-dvb-section.html#GST-MTS-TABLE-ID-TRANSMISSION-MODE-SUPPORT-PAYLOAD:CAPS"/>
- <keyword type="constant" name="GST_MTS_TABLE_ID_TIM" link="gst-plugins-bad-libs-gst-dvb-section.html#GST-MTS-TABLE-ID-TIM:CAPS"/>
- <keyword type="constant" name="GST_MTS_TABLE_ID_LL_FEC_PARITY_DATA_TABLE" link="gst-plugins-bad-libs-gst-dvb-section.html#GST-MTS-TABLE-ID-LL-FEC-PARITY-DATA-TABLE:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_RUNNING_STATUS_UNDEFINED" link="gst-plugins-bad-libs-gst-dvb-section.html#GST-MPEGTS-RUNNING-STATUS-UNDEFINED:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_RUNNING_STATUS_NOT_RUNNING" link="gst-plugins-bad-libs-gst-dvb-section.html#GST-MPEGTS-RUNNING-STATUS-NOT-RUNNING:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_RUNNING_STATUS_STARTS_IN_FEW_SECONDS" link="gst-plugins-bad-libs-gst-dvb-section.html#GST-MPEGTS-RUNNING-STATUS-STARTS-IN-FEW-SECONDS:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_RUNNING_STATUS_PAUSING" link="gst-plugins-bad-libs-gst-dvb-section.html#GST-MPEGTS-RUNNING-STATUS-PAUSING:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_RUNNING_STATUS_RUNNING" link="gst-plugins-bad-libs-gst-dvb-section.html#GST-MPEGTS-RUNNING-STATUS-RUNNING:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_RUNNING_STATUS_OFF_AIR" link="gst-plugins-bad-libs-gst-dvb-section.html#GST-MPEGTS-RUNNING-STATUS-OFF-AIR:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_ATSC_STUFFING" link="gst-plugins-bad-libs-gst-atsc-descriptor.html#GST-MTS-DESC-ATSC-STUFFING:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_ATSC_AC3" link="gst-plugins-bad-libs-gst-atsc-descriptor.html#GST-MTS-DESC-ATSC-AC3:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_ATSC_CAPTION_SERVICE" link="gst-plugins-bad-libs-gst-atsc-descriptor.html#GST-MTS-DESC-ATSC-CAPTION-SERVICE:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_ATSC_CONTENT_ADVISORY" link="gst-plugins-bad-libs-gst-atsc-descriptor.html#GST-MTS-DESC-ATSC-CONTENT-ADVISORY:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_ATSC_EXTENDED_CHANNEL_NAME" link="gst-plugins-bad-libs-gst-atsc-descriptor.html#GST-MTS-DESC-ATSC-EXTENDED-CHANNEL-NAME:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_ATSC_SERVICE_LOCATION" link="gst-plugins-bad-libs-gst-atsc-descriptor.html#GST-MTS-DESC-ATSC-SERVICE-LOCATION:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_ATSC_TIME_SHIFTED_SERVICE" link="gst-plugins-bad-libs-gst-atsc-descriptor.html#GST-MTS-DESC-ATSC-TIME-SHIFTED-SERVICE:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_ATSC_COMPONENT_NAME" link="gst-plugins-bad-libs-gst-atsc-descriptor.html#GST-MTS-DESC-ATSC-COMPONENT-NAME:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_ATSC_DCC_DEPARTING_REQUEST" link="gst-plugins-bad-libs-gst-atsc-descriptor.html#GST-MTS-DESC-ATSC-DCC-DEPARTING-REQUEST:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_ATSC_DCC_ARRIVING_REQUEST" link="gst-plugins-bad-libs-gst-atsc-descriptor.html#GST-MTS-DESC-ATSC-DCC-ARRIVING-REQUEST:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_ATSC_REDISTRIBUTION_CONTROL" link="gst-plugins-bad-libs-gst-atsc-descriptor.html#GST-MTS-DESC-ATSC-REDISTRIBUTION-CONTROL:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_ATSC_GENRE" link="gst-plugins-bad-libs-gst-atsc-descriptor.html#GST-MTS-DESC-ATSC-GENRE:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_ATSC_PRIVATE_INFORMATION" link="gst-plugins-bad-libs-gst-atsc-descriptor.html#GST-MTS-DESC-ATSC-PRIVATE-INFORMATION:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_ATSC_ENHANCED_SIGNALING" link="gst-plugins-bad-libs-gst-atsc-descriptor.html#GST-MTS-DESC-ATSC-ENHANCED-SIGNALING:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_ATSC_DATA_SERVICE" link="gst-plugins-bad-libs-gst-atsc-descriptor.html#GST-MTS-DESC-ATSC-DATA-SERVICE:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_ATSC_PID_COUNT" link="gst-plugins-bad-libs-gst-atsc-descriptor.html#GST-MTS-DESC-ATSC-PID-COUNT:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_ATSC_DOWNLOAD_DESCRIPTOR" link="gst-plugins-bad-libs-gst-atsc-descriptor.html#GST-MTS-DESC-ATSC-DOWNLOAD-DESCRIPTOR:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_ATSC_MULTIPROTOCOL_ENCAPSULATION" link="gst-plugins-bad-libs-gst-atsc-descriptor.html#GST-MTS-DESC-ATSC-MULTIPROTOCOL-ENCAPSULATION:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_ATSC_MODULE_LINK" link="gst-plugins-bad-libs-gst-atsc-descriptor.html#GST-MTS-DESC-ATSC-MODULE-LINK:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_ATSC_CRC32" link="gst-plugins-bad-libs-gst-atsc-descriptor.html#GST-MTS-DESC-ATSC-CRC32:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_ATSC_GROUP_LINK" link="gst-plugins-bad-libs-gst-atsc-descriptor.html#GST-MTS-DESC-ATSC-GROUP-LINK:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_DVB_NETWORK_NAME" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MTS-DESC-DVB-NETWORK-NAME:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_DVB_SERVICE_LIST" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MTS-DESC-DVB-SERVICE-LIST:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_DVB_STUFFING" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MTS-DESC-DVB-STUFFING:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_DVB_SATELLITE_DELIVERY_SYSTEM" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MTS-DESC-DVB-SATELLITE-DELIVERY-SYSTEM:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_DVB_CABLE_DELIVERY_SYSTEM" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MTS-DESC-DVB-CABLE-DELIVERY-SYSTEM:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_DVB_VBI_DATA" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MTS-DESC-DVB-VBI-DATA:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_DVB_VBI_TELETEXT" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MTS-DESC-DVB-VBI-TELETEXT:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_DVB_BOUQUET_NAME" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MTS-DESC-DVB-BOUQUET-NAME:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_DVB_SERVICE" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MTS-DESC-DVB-SERVICE:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_DVB_COUNTRY_AVAILABILITY" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MTS-DESC-DVB-COUNTRY-AVAILABILITY:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_DVB_LINKAGE" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MTS-DESC-DVB-LINKAGE:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_DVB_NVOD_REFERENCE" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MTS-DESC-DVB-NVOD-REFERENCE:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_DVB_TIME_SHIFTED_SERVICE" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MTS-DESC-DVB-TIME-SHIFTED-SERVICE:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_DVB_SHORT_EVENT" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MTS-DESC-DVB-SHORT-EVENT:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_DVB_EXTENDED_EVENT" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MTS-DESC-DVB-EXTENDED-EVENT:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_DVB_TIME_SHIFTED_EVENT" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MTS-DESC-DVB-TIME-SHIFTED-EVENT:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_DVB_COMPONENT" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MTS-DESC-DVB-COMPONENT:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_DVB_MOSAIC" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MTS-DESC-DVB-MOSAIC:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_DVB_STREAM_IDENTIFIER" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MTS-DESC-DVB-STREAM-IDENTIFIER:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_DVB_CA_IDENTIFIER" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MTS-DESC-DVB-CA-IDENTIFIER:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_DVB_CONTENT" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MTS-DESC-DVB-CONTENT:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_DVB_PARENTAL_RATING" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MTS-DESC-DVB-PARENTAL-RATING:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_DVB_TELETEXT" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MTS-DESC-DVB-TELETEXT:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_DVB_TELEPHONE" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MTS-DESC-DVB-TELEPHONE:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_DVB_LOCAL_TIME_OFFSET" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MTS-DESC-DVB-LOCAL-TIME-OFFSET:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_DVB_SUBTITLING" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MTS-DESC-DVB-SUBTITLING:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_DVB_TERRESTRIAL_DELIVERY_SYSTEM" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MTS-DESC-DVB-TERRESTRIAL-DELIVERY-SYSTEM:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_DVB_MULTILINGUAL_NETWORK_NAME" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MTS-DESC-DVB-MULTILINGUAL-NETWORK-NAME:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_DVB_MULTILINGUAL_BOUQUET_NAME" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MTS-DESC-DVB-MULTILINGUAL-BOUQUET-NAME:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_DVB_MULTILINGUAL_SERVICE_NAME" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MTS-DESC-DVB-MULTILINGUAL-SERVICE-NAME:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_DVB_MULTILINGUAL_COMPONENT" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MTS-DESC-DVB-MULTILINGUAL-COMPONENT:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_DVB_PRIVATE_DATA_SPECIFIER" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MTS-DESC-DVB-PRIVATE-DATA-SPECIFIER:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_DVB_SERVICE_MOVE" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MTS-DESC-DVB-SERVICE-MOVE:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_DVB_SHORT_SMOOTHING_BUFFER" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MTS-DESC-DVB-SHORT-SMOOTHING-BUFFER:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_DVB_FREQUENCY_LIST" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MTS-DESC-DVB-FREQUENCY-LIST:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_DVB_PARTIAL_TRANSPORT_STREAM" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MTS-DESC-DVB-PARTIAL-TRANSPORT-STREAM:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_DVB_DATA_BROADCAST" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MTS-DESC-DVB-DATA-BROADCAST:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_DVB_SCRAMBLING" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MTS-DESC-DVB-SCRAMBLING:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_DVB_DATA_BROADCAST_ID" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MTS-DESC-DVB-DATA-BROADCAST-ID:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_DVB_TRANSPORT_STREAM" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MTS-DESC-DVB-TRANSPORT-STREAM:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_DVB_DSNG" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MTS-DESC-DVB-DSNG:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_DVB_PDC" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MTS-DESC-DVB-PDC:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_DVB_AC3" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MTS-DESC-DVB-AC3:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_DVB_ANCILLARY_DATA" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MTS-DESC-DVB-ANCILLARY-DATA:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_DVB_CELL_LIST" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MTS-DESC-DVB-CELL-LIST:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_DVB_CELL_FREQUENCY_LINK" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MTS-DESC-DVB-CELL-FREQUENCY-LINK:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_DVB_ANNOUNCEMENT_SUPPORT" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MTS-DESC-DVB-ANNOUNCEMENT-SUPPORT:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_DVB_APPLICATION_SIGNALLING" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MTS-DESC-DVB-APPLICATION-SIGNALLING:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_DVB_ADAPTATION_FIELD_DATA" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MTS-DESC-DVB-ADAPTATION-FIELD-DATA:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_DVB_SERVICE_IDENTIFIER" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MTS-DESC-DVB-SERVICE-IDENTIFIER:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_DVB_SERVICE_AVAILABILITY" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MTS-DESC-DVB-SERVICE-AVAILABILITY:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_DVB_DEFAULT_AUTHORITY" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MTS-DESC-DVB-DEFAULT-AUTHORITY:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_DVB_RELATED_CONTENT" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MTS-DESC-DVB-RELATED-CONTENT:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_DVB_TVA_ID" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MTS-DESC-DVB-TVA-ID:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_DVB_CONTENT_IDENTIFIER" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MTS-DESC-DVB-CONTENT-IDENTIFIER:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_DVB_TIMESLICE_FEC_IDENTIFIER" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MTS-DESC-DVB-TIMESLICE-FEC-IDENTIFIER:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_DVB_ECM_REPETITION_RATE" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MTS-DESC-DVB-ECM-REPETITION-RATE:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_DVB_S2_SATELLITE_DELIVERY_SYSTEM" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MTS-DESC-DVB-S2-SATELLITE-DELIVERY-SYSTEM:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_DVB_ENHANCED_AC3" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MTS-DESC-DVB-ENHANCED-AC3:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_DVB_DTS" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MTS-DESC-DVB-DTS:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_DVB_AAC" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MTS-DESC-DVB-AAC:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_DVB_XAIT_LOCATION" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MTS-DESC-DVB-XAIT-LOCATION:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_DVB_FTA_CONTENT_MANAGEMENT" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MTS-DESC-DVB-FTA-CONTENT-MANAGEMENT:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_DVB_EXTENSION" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MTS-DESC-DVB-EXTENSION:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_EXT_DVB_IMAGE_ICON" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MTS-DESC-EXT-DVB-IMAGE-ICON:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_EXT_DVB_CPCM_DELIVERY_SIGNALLING" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MTS-DESC-EXT-DVB-CPCM-DELIVERY-SIGNALLING:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_EXT_DVB_CP" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MTS-DESC-EXT-DVB-CP:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_EXT_DVB_CP_IDENTIFIER" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MTS-DESC-EXT-DVB-CP-IDENTIFIER:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_EXT_DVB_T2_DELIVERY_SYSTEM" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MTS-DESC-EXT-DVB-T2-DELIVERY-SYSTEM:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_EXT_DVB_SH_DELIVERY_SYSTEM" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MTS-DESC-EXT-DVB-SH-DELIVERY-SYSTEM:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_EXT_DVB_SUPPLEMENTARY_AUDIO" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MTS-DESC-EXT-DVB-SUPPLEMENTARY-AUDIO:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_EXT_DVB_NETWORK_CHANGE_NOTIFY" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MTS-DESC-EXT-DVB-NETWORK-CHANGE-NOTIFY:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_EXT_DVB_MESSAGE" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MTS-DESC-EXT-DVB-MESSAGE:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_EXT_DVB_TARGET_REGION" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MTS-DESC-EXT-DVB-TARGET-REGION:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_EXT_DVB_TARGET_REGION_NAME" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MTS-DESC-EXT-DVB-TARGET-REGION-NAME:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_EXT_DVB_SERVICE_RELOCATED" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MTS-DESC-EXT-DVB-SERVICE-RELOCATED:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_EXT_DVB_XAIT_PID" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MTS-DESC-EXT-DVB-XAIT-PID:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_EXT_DVB_C2_DELIVERY_SYSTEM" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MTS-DESC-EXT-DVB-C2-DELIVERY-SYSTEM:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_EXT_DVB_DTS_HD_AUDIO_STREAM" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MTS-DESC-EXT-DVB-DTS-HD-AUDIO-STREAM:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_EXT_DVB_DTS_NEUTRAL" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MTS-DESC-EXT-DVB-DTS-NEUTRAL:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_EXT_DVB_VIDEO_DEPTH_RANGE" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MTS-DESC-EXT-DVB-VIDEO-DEPTH-RANGE:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_EXT_DVB_T2MI" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MTS-DESC-EXT-DVB-T2MI:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_EXT_DVB_URI_LINKAGE" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MTS-DESC-EXT-DVB-URI-LINKAGE:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_FEC_NONE" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MPEGTS-FEC-NONE:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_FEC_1_2" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MPEGTS-FEC-1-2:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_FEC_2_3" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MPEGTS-FEC-2-3:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_FEC_3_4" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MPEGTS-FEC-3-4:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_FEC_4_5" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MPEGTS-FEC-4-5:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_FEC_5_6" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MPEGTS-FEC-5-6:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_FEC_6_7" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MPEGTS-FEC-6-7:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_FEC_7_8" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MPEGTS-FEC-7-8:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_FEC_8_9" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MPEGTS-FEC-8-9:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_FEC_AUTO" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MPEGTS-FEC-AUTO:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_FEC_3_5" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MPEGTS-FEC-3-5:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_FEC_9_10" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MPEGTS-FEC-9-10:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_FEC_2_5" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MPEGTS-FEC-2-5:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_MODULATION_QPSK" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MPEGTS-MODULATION-QPSK:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_MODULATION_QAM_16" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MPEGTS-MODULATION-QAM-16:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_MODULATION_QAM_32" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MPEGTS-MODULATION-QAM-32:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_MODULATION_QAM_64" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MPEGTS-MODULATION-QAM-64:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_MODULATION_QAM_128" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MPEGTS-MODULATION-QAM-128:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_MODULATION_QAM_256" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MPEGTS-MODULATION-QAM-256:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_MODULATION_QAM_AUTO" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MPEGTS-MODULATION-QAM-AUTO:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_MODULATION_VSB_8" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MPEGTS-MODULATION-VSB-8:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_MODULATION_VSB_16" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MPEGTS-MODULATION-VSB-16:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_MODULATION_PSK_8" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MPEGTS-MODULATION-PSK-8:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_MODULATION_APSK_16" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MPEGTS-MODULATION-APSK-16:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_MODULATION_APSK_32" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MPEGTS-MODULATION-APSK-32:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_MODULATION_DQPSK" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MPEGTS-MODULATION-DQPSK:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_MODULATION_QAM_4_NR_" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MPEGTS-MODULATION-QAM-4-NR-:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_MODULATION_NONE" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MPEGTS-MODULATION-NONE:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_POLARIZATION_LINEAR_HORIZONTAL" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MPEGTS-POLARIZATION-LINEAR-HORIZONTAL:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_POLARIZATION_LINEAR_VERTICAL" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MPEGTS-POLARIZATION-LINEAR-VERTICAL:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_POLARIZATION_CIRCULAR_LEFT" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MPEGTS-POLARIZATION-CIRCULAR-LEFT:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_POLARIZATION_CIRCULAR_RIGHT" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MPEGTS-POLARIZATION-CIRCULAR-RIGHT:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_ROLLOFF_35" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MPEGTS-ROLLOFF-35:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_ROLLOFF_20" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MPEGTS-ROLLOFF-20:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_ROLLOFF_25" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MPEGTS-ROLLOFF-25:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_ROLLOFF_RESERVED" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MPEGTS-ROLLOFF-RESERVED:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_ROLLOFF_AUTO" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MPEGTS-ROLLOFF-AUTO:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_CABLE_OUTER_FEC_UNDEFINED" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MPEGTS-CABLE-OUTER-FEC-UNDEFINED:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_CABLE_OUTER_FEC_NONE" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MPEGTS-CABLE-OUTER-FEC-NONE:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_CABLE_OUTER_FEC_RS_204_188" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MPEGTS-CABLE-OUTER-FEC-RS-204-188:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_TRANSMISSION_MODE_2K" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MPEGTS-TRANSMISSION-MODE-2K:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_TRANSMISSION_MODE_8K" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MPEGTS-TRANSMISSION-MODE-8K:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_TRANSMISSION_MODE_AUTO" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MPEGTS-TRANSMISSION-MODE-AUTO:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_TRANSMISSION_MODE_4K" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MPEGTS-TRANSMISSION-MODE-4K:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_TRANSMISSION_MODE_1K" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MPEGTS-TRANSMISSION-MODE-1K:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_TRANSMISSION_MODE_16K" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MPEGTS-TRANSMISSION-MODE-16K:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_TRANSMISSION_MODE_32K" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MPEGTS-TRANSMISSION-MODE-32K:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_TRANSMISSION_MODE_C1" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MPEGTS-TRANSMISSION-MODE-C1:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_TRANSMISSION_MODE_C3780" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MPEGTS-TRANSMISSION-MODE-C3780:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_GUARD_INTERVAL_1_32" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MPEGTS-GUARD-INTERVAL-1-32:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_GUARD_INTERVAL_1_16" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MPEGTS-GUARD-INTERVAL-1-16:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_GUARD_INTERVAL_1_8" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MPEGTS-GUARD-INTERVAL-1-8:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_GUARD_INTERVAL_1_4" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MPEGTS-GUARD-INTERVAL-1-4:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_GUARD_INTERVAL_AUTO" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MPEGTS-GUARD-INTERVAL-AUTO:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_GUARD_INTERVAL_1_128" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MPEGTS-GUARD-INTERVAL-1-128:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_GUARD_INTERVAL_19_128" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MPEGTS-GUARD-INTERVAL-19-128:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_GUARD_INTERVAL_19_256" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MPEGTS-GUARD-INTERVAL-19-256:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_GUARD_INTERVAL_PN420" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MPEGTS-GUARD-INTERVAL-PN420:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_GUARD_INTERVAL_PN595" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MPEGTS-GUARD-INTERVAL-PN595:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_GUARD_INTERVAL_PN945" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MPEGTS-GUARD-INTERVAL-PN945:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_HIERARCHY_NONE" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MPEGTS-HIERARCHY-NONE:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_HIERARCHY_1" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MPEGTS-HIERARCHY-1:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_HIERARCHY_2" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MPEGTS-HIERARCHY-2:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_HIERARCHY_4" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MPEGTS-HIERARCHY-4:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_HIERARCHY_AUTO" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MPEGTS-HIERARCHY-AUTO:CAPS"/>
- <keyword type="constant" name="GST_DVB_SERVICE_RESERVED_00" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-DVB-SERVICE-RESERVED-00:CAPS"/>
- <keyword type="constant" name="GST_DVB_SERVICE_DIGITAL_TELEVISION" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-DVB-SERVICE-DIGITAL-TELEVISION:CAPS"/>
- <keyword type="constant" name="GST_DVB_SERVICE_DIGITAL_RADIO_SOUND" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-DVB-SERVICE-DIGITAL-RADIO-SOUND:CAPS"/>
- <keyword type="constant" name="GST_DVB_SERVICE_TELETEXT" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-DVB-SERVICE-TELETEXT:CAPS"/>
- <keyword type="constant" name="GST_DVB_SERVICE_NVOD_REFERENCE" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-DVB-SERVICE-NVOD-REFERENCE:CAPS"/>
- <keyword type="constant" name="GST_DVB_SERVICE_NVOD_TIME_SHIFTED" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-DVB-SERVICE-NVOD-TIME-SHIFTED:CAPS"/>
- <keyword type="constant" name="GST_DVB_SERVICE_MOSAIC" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-DVB-SERVICE-MOSAIC:CAPS"/>
- <keyword type="constant" name="GST_DVB_SERVICE_FM_RADIO" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-DVB-SERVICE-FM-RADIO:CAPS"/>
- <keyword type="constant" name="GST_DVB_SERVICE_DVB_SRM" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-DVB-SERVICE-DVB-SRM:CAPS"/>
- <keyword type="constant" name="GST_DVB_SERVICE_RESERVED_09" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-DVB-SERVICE-RESERVED-09:CAPS"/>
- <keyword type="constant" name="GST_DVB_SERVICE_ADVANCED_CODEC_DIGITAL_RADIO_SOUND" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-DVB-SERVICE-ADVANCED-CODEC-DIGITAL-RADIO-SOUND:CAPS"/>
- <keyword type="constant" name="GST_DVB_SERVICE_ADVANCED_CODEC_MOSAIC" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-DVB-SERVICE-ADVANCED-CODEC-MOSAIC:CAPS"/>
- <keyword type="constant" name="GST_DVB_SERVICE_DATA_BROADCAST" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-DVB-SERVICE-DATA-BROADCAST:CAPS"/>
- <keyword type="constant" name="GST_DVB_SERVICE_RESERVED_0D_COMMON_INTERFACE" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-DVB-SERVICE-RESERVED-0D-COMMON-INTERFACE:CAPS"/>
- <keyword type="constant" name="GST_DVB_SERVICE_RCS_MAP" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-DVB-SERVICE-RCS-MAP:CAPS"/>
- <keyword type="constant" name="GST_DVB_SERVICE_RCS_FLS" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-DVB-SERVICE-RCS-FLS:CAPS"/>
- <keyword type="constant" name="GST_DVB_SERVICE_DVB_MHP" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-DVB-SERVICE-DVB-MHP:CAPS"/>
- <keyword type="constant" name="GST_DVB_SERVICE_MPEG2_HD_DIGITAL_TELEVISION" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-DVB-SERVICE-MPEG2-HD-DIGITAL-TELEVISION:CAPS"/>
- <keyword type="constant" name="GST_DVB_SERVICE_ADVANCED_CODEC_SD_DIGITAL_TELEVISION" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-DVB-SERVICE-ADVANCED-CODEC-SD-DIGITAL-TELEVISION:CAPS"/>
- <keyword type="constant" name="GST_DVB_SERVICE_ADVANCED_CODEC_SD_NVOD_TIME_SHIFTED" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-DVB-SERVICE-ADVANCED-CODEC-SD-NVOD-TIME-SHIFTED:CAPS"/>
- <keyword type="constant" name="GST_DVB_SERVICE_ADVANCED_CODEC_SD_NVOD_REFERENCE" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-DVB-SERVICE-ADVANCED-CODEC-SD-NVOD-REFERENCE:CAPS"/>
- <keyword type="constant" name="GST_DVB_SERVICE_ADVANCED_CODEC_HD_DIGITAL_TELEVISION" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-DVB-SERVICE-ADVANCED-CODEC-HD-DIGITAL-TELEVISION:CAPS"/>
- <keyword type="constant" name="GST_DVB_SERVICE_ADVANCED_CODEC_HD_NVOD_TIME_SHIFTED" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-DVB-SERVICE-ADVANCED-CODEC-HD-NVOD-TIME-SHIFTED:CAPS"/>
- <keyword type="constant" name="GST_DVB_SERVICE_ADVANCED_CODEC_HD_NVOD_REFERENCE" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-DVB-SERVICE-ADVANCED-CODEC-HD-NVOD-REFERENCE:CAPS"/>
- <keyword type="constant" name="GST_DVB_SERVICE_ADVANCED_CODEC_STEREO_HD_DIGITAL_TELEVISION" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-DVB-SERVICE-ADVANCED-CODEC-STEREO-HD-DIGITAL-TELEVISION:CAPS"/>
- <keyword type="constant" name="GST_DVB_SERVICE_ADVANCED_CODEC_STEREO_HD_NVOD_TIME_SHIFTED" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-DVB-SERVICE-ADVANCED-CODEC-STEREO-HD-NVOD-TIME-SHIFTED:CAPS"/>
- <keyword type="constant" name="GST_DVB_SERVICE_ADVANCED_CODEC_STEREO_HD_NVOD_REFERENCE" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-DVB-SERVICE-ADVANCED-CODEC-STEREO-HD-NVOD-REFERENCE:CAPS"/>
- <keyword type="constant" name="GST_DVB_SERVICE_RESERVED_FF" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-DVB-SERVICE-RESERVED-FF:CAPS"/>
- <keyword type="constant" name="INITIAL_PAGE" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#INITIAL-PAGE:CAPS"/>
- <keyword type="constant" name="SUBTITLE_PAGE" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#SUBTITLE-PAGE:CAPS"/>
- <keyword type="constant" name="ADDITIONAL_INFO_PAGE" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#ADDITIONAL-INFO-PAGE:CAPS"/>
- <keyword type="constant" name="PROGRAMME_SCHEDULE_PAGE" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#PROGRAMME-SCHEDULE-PAGE:CAPS"/>
- <keyword type="constant" name="HEARING_IMPAIRED_PAGE" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#HEARING-IMPAIRED-PAGE:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_DVB_LINKAGE_RESERVED_00" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MPEGTS-DVB-LINKAGE-RESERVED-00:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_DVB_LINKAGE_INFORMATION" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MPEGTS-DVB-LINKAGE-INFORMATION:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_DVB_LINKAGE_EPG" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MPEGTS-DVB-LINKAGE-EPG:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_DVB_LINKAGE_CA_REPLACEMENT" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MPEGTS-DVB-LINKAGE-CA-REPLACEMENT:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_DVB_LINKAGE_TS_CONTAINING_COMPLETE_SI" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MPEGTS-DVB-LINKAGE-TS-CONTAINING-COMPLETE-SI:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_DVB_LINKAGE_SERVICE_REPLACEMENT" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MPEGTS-DVB-LINKAGE-SERVICE-REPLACEMENT:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_DVB_LINKAGE_DATA_BROADCAST" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MPEGTS-DVB-LINKAGE-DATA-BROADCAST:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_DVB_LINKAGE_RCS_MAP" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MPEGTS-DVB-LINKAGE-RCS-MAP:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_DVB_LINKAGE_MOBILE_HAND_OVER" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MPEGTS-DVB-LINKAGE-MOBILE-HAND-OVER:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_DVB_LINKAGE_SYSTEM_SOFTWARE_UPDATE" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MPEGTS-DVB-LINKAGE-SYSTEM-SOFTWARE-UPDATE:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_DVB_LINKAGE_TS_CONTAINING_SSU" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MPEGTS-DVB-LINKAGE-TS-CONTAINING-SSU:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_DVB_LINKAGE_IP_MAC_NOTIFICATION" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MPEGTS-DVB-LINKAGE-IP-MAC-NOTIFICATION:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_DVB_LINKAGE_TS_CONTAINING_INT" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MPEGTS-DVB-LINKAGE-TS-CONTAINING-INT:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_DVB_LINKAGE_EVENT" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MPEGTS-DVB-LINKAGE-EVENT:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_DVB_LINKAGE_EXTENDED_EVENT" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MPEGTS-DVB-LINKAGE-EXTENDED-EVENT:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_DVB_LINKAGE_HAND_OVER_RESERVED" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MPEGTS-DVB-LINKAGE-HAND-OVER-RESERVED:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_DVB_LINKAGE_HAND_OVER_IDENTICAL" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MPEGTS-DVB-LINKAGE-HAND-OVER-IDENTICAL:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_DVB_LINKAGE_HAND_OVER_LOCAL_VARIATION" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MPEGTS-DVB-LINKAGE-HAND-OVER-LOCAL-VARIATION:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_DVB_LINKAGE_HAND_OVER_ASSOCIATED" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MPEGTS-DVB-LINKAGE-HAND-OVER-ASSOCIATED:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_DVB_SCRAMBLING_MODE_RESERVED" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MPEGTS-DVB-SCRAMBLING-MODE-RESERVED:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_DVB_SCRAMBLING_MODE_CSA1" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MPEGTS-DVB-SCRAMBLING-MODE-CSA1:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_DVB_SCRAMBLING_MODE_CSA2" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MPEGTS-DVB-SCRAMBLING-MODE-CSA2:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_DVB_SCRAMBLING_MODE_CSA3_STANDARD" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MPEGTS-DVB-SCRAMBLING-MODE-CSA3-STANDARD:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_DVB_SCRAMBLING_MODE_CSA3_MINIMAL_ENHANCED" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MPEGTS-DVB-SCRAMBLING-MODE-CSA3-MINIMAL-ENHANCED:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_DVB_SCRAMBLING_MODE_CSA3_FULL_ENHANCED" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MPEGTS-DVB-SCRAMBLING-MODE-CSA3-FULL-ENHANCED:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_DVB_SCRAMBLING_MODE_CISSA" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MPEGTS-DVB-SCRAMBLING-MODE-CISSA:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_DVB_SCRAMBLING_MODE_ATIS_0" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MPEGTS-DVB-SCRAMBLING-MODE-ATIS-0:CAPS"/>
- <keyword type="constant" name="GST_MPEGTS_DVB_SCRAMBLING_MODE_ATIS_F" link="gst-plugins-bad-libs-gst-dvb-descriptor.html#GST-MPEGTS-DVB-SCRAMBLING-MODE-ATIS-F:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_ISDB_HIERARCHICAL_TRANSMISSION" link="gst-plugins-bad-libs-gst-isdb-descriptor.html#GST-MTS-DESC-ISDB-HIERARCHICAL-TRANSMISSION:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_ISDB_DIGITAL_COPY_CONTROL" link="gst-plugins-bad-libs-gst-isdb-descriptor.html#GST-MTS-DESC-ISDB-DIGITAL-COPY-CONTROL:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_ISDB_NETWORK_IDENTIFICATION" link="gst-plugins-bad-libs-gst-isdb-descriptor.html#GST-MTS-DESC-ISDB-NETWORK-IDENTIFICATION:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_ISDB_PARTIAL_TS_TIME" link="gst-plugins-bad-libs-gst-isdb-descriptor.html#GST-MTS-DESC-ISDB-PARTIAL-TS-TIME:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_ISDB_AUDIO_COMPONENT" link="gst-plugins-bad-libs-gst-isdb-descriptor.html#GST-MTS-DESC-ISDB-AUDIO-COMPONENT:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_ISDB_HYPERLINK" link="gst-plugins-bad-libs-gst-isdb-descriptor.html#GST-MTS-DESC-ISDB-HYPERLINK:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_ISDB_TARGET_REGION" link="gst-plugins-bad-libs-gst-isdb-descriptor.html#GST-MTS-DESC-ISDB-TARGET-REGION:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_ISDB_DATA_CONTENT" link="gst-plugins-bad-libs-gst-isdb-descriptor.html#GST-MTS-DESC-ISDB-DATA-CONTENT:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_ISDB_VIDEO_DECODE_CONTROL" link="gst-plugins-bad-libs-gst-isdb-descriptor.html#GST-MTS-DESC-ISDB-VIDEO-DECODE-CONTROL:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_ISDB_DOWNLOAD_CONTENT" link="gst-plugins-bad-libs-gst-isdb-descriptor.html#GST-MTS-DESC-ISDB-DOWNLOAD-CONTENT:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_ISDB_CA_EMM_TS" link="gst-plugins-bad-libs-gst-isdb-descriptor.html#GST-MTS-DESC-ISDB-CA-EMM-TS:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_ISDB_CA_CONTRACT_INFORMATION" link="gst-plugins-bad-libs-gst-isdb-descriptor.html#GST-MTS-DESC-ISDB-CA-CONTRACT-INFORMATION:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_ISDB_CA_SERVICE" link="gst-plugins-bad-libs-gst-isdb-descriptor.html#GST-MTS-DESC-ISDB-CA-SERVICE:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_ISDB_TS_INFORMATION" link="gst-plugins-bad-libs-gst-isdb-descriptor.html#GST-MTS-DESC-ISDB-TS-INFORMATION:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_ISDB_EXTENDED_BROADCASTER" link="gst-plugins-bad-libs-gst-isdb-descriptor.html#GST-MTS-DESC-ISDB-EXTENDED-BROADCASTER:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_ISDB_LOGO_TRANSMISSION" link="gst-plugins-bad-libs-gst-isdb-descriptor.html#GST-MTS-DESC-ISDB-LOGO-TRANSMISSION:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_ISDB_BASIC_LOCAL_EVENT" link="gst-plugins-bad-libs-gst-isdb-descriptor.html#GST-MTS-DESC-ISDB-BASIC-LOCAL-EVENT:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_ISDB_REFERENCE" link="gst-plugins-bad-libs-gst-isdb-descriptor.html#GST-MTS-DESC-ISDB-REFERENCE:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_ISDB_NODE_RELATION" link="gst-plugins-bad-libs-gst-isdb-descriptor.html#GST-MTS-DESC-ISDB-NODE-RELATION:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_ISDB_SHORT_NODE_INFORMATION" link="gst-plugins-bad-libs-gst-isdb-descriptor.html#GST-MTS-DESC-ISDB-SHORT-NODE-INFORMATION:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_ISDB_STC_REFERENCE" link="gst-plugins-bad-libs-gst-isdb-descriptor.html#GST-MTS-DESC-ISDB-STC-REFERENCE:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_ISDB_SERIES" link="gst-plugins-bad-libs-gst-isdb-descriptor.html#GST-MTS-DESC-ISDB-SERIES:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_ISDB_EVENT_GROUP" link="gst-plugins-bad-libs-gst-isdb-descriptor.html#GST-MTS-DESC-ISDB-EVENT-GROUP:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_ISDB_SI_PARAMETER" link="gst-plugins-bad-libs-gst-isdb-descriptor.html#GST-MTS-DESC-ISDB-SI-PARAMETER:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_ISDB_BROADCASTER_NAME" link="gst-plugins-bad-libs-gst-isdb-descriptor.html#GST-MTS-DESC-ISDB-BROADCASTER-NAME:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_ISDB_COMPONENT_GROUP" link="gst-plugins-bad-libs-gst-isdb-descriptor.html#GST-MTS-DESC-ISDB-COMPONENT-GROUP:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_ISDB_SI_PRIME_TS" link="gst-plugins-bad-libs-gst-isdb-descriptor.html#GST-MTS-DESC-ISDB-SI-PRIME-TS:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_ISDB_BOARD_INFORMATION" link="gst-plugins-bad-libs-gst-isdb-descriptor.html#GST-MTS-DESC-ISDB-BOARD-INFORMATION:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_ISDB_LDT_LINKAGE" link="gst-plugins-bad-libs-gst-isdb-descriptor.html#GST-MTS-DESC-ISDB-LDT-LINKAGE:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_ISDB_CONNECTED_TRANSMISSION" link="gst-plugins-bad-libs-gst-isdb-descriptor.html#GST-MTS-DESC-ISDB-CONNECTED-TRANSMISSION:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_ISDB_CONTENT_AVAILABILITY" link="gst-plugins-bad-libs-gst-isdb-descriptor.html#GST-MTS-DESC-ISDB-CONTENT-AVAILABILITY:CAPS"/>
- <keyword type="constant" name="GST_MTS_DESC_ISDB_SERVICE_GROUP" link="gst-plugins-bad-libs-gst-isdb-descriptor.html#GST-MTS-DESC-ISDB-SERVICE-GROUP:CAPS"/>
+ <keyword type="constant" name="GST_MTS_TABLE_ID_PROGRAM_ASSOCIATION" link="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GST-MTS-TABLE-ID-PROGRAM-ASSOCIATION:CAPS"/>
+ <keyword type="constant" name="GST_MTS_TABLE_ID_CONDITIONAL_ACCESS" link="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GST-MTS-TABLE-ID-CONDITIONAL-ACCESS:CAPS"/>
+ <keyword type="constant" name="GST_MTS_TABLE_ID_TS_PROGRAM_MAP" link="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GST-MTS-TABLE-ID-TS-PROGRAM-MAP:CAPS"/>
+ <keyword type="constant" name="GST_MTS_TABLE_ID_TS_DESCRIPTION" link="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GST-MTS-TABLE-ID-TS-DESCRIPTION:CAPS"/>
+ <keyword type="constant" name="GST_MTS_TABLE_ID_14496_SCENE_DESCRIPTION" link="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GST-MTS-TABLE-ID-14496-SCENE-DESCRIPTION:CAPS"/>
+ <keyword type="constant" name="GST_MTS_TABLE_ID_14496_OBJET_DESCRIPTOR" link="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GST-MTS-TABLE-ID-14496-OBJET-DESCRIPTOR:CAPS"/>
+ <keyword type="constant" name="GST_MTS_TABLE_ID_METADATA" link="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GST-MTS-TABLE-ID-METADATA:CAPS"/>
+ <keyword type="constant" name="GST_MTS_TABLE_ID_IPMP_CONTROL_INFORMATION" link="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GST-MTS-TABLE-ID-IPMP-CONTROL-INFORMATION:CAPS"/>
+ <keyword type="constant" name="GST_MTS_TABLE_ID_DSM_CC_MULTIPROTO_ENCAPSULATED_DATA" link="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GST-MTS-TABLE-ID-DSM-CC-MULTIPROTO-ENCAPSULATED-DATA:CAPS"/>
+ <keyword type="constant" name="GST_MTS_TABLE_ID_DSM_CC_U_N_MESSAGES" link="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GST-MTS-TABLE-ID-DSM-CC-U-N-MESSAGES:CAPS"/>
+ <keyword type="constant" name="GST_MTS_TABLE_ID_DSM_CC_DOWNLOAD_DATA_MESSAGES" link="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GST-MTS-TABLE-ID-DSM-CC-DOWNLOAD-DATA-MESSAGES:CAPS"/>
+ <keyword type="constant" name="GST_MTS_TABLE_ID_DSM_CC_STREAM_DESCRIPTORS" link="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GST-MTS-TABLE-ID-DSM-CC-STREAM-DESCRIPTORS:CAPS"/>
+ <keyword type="constant" name="GST_MTS_TABLE_ID_DSM_CC_PRIVATE_DATA" link="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GST-MTS-TABLE-ID-DSM-CC-PRIVATE-DATA:CAPS"/>
+ <keyword type="constant" name="GST_MTS_TABLE_ID_DSM_CC_ADDRESSABLE_SECTIONS" link="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GST-MTS-TABLE-ID-DSM-CC-ADDRESSABLE-SECTIONS:CAPS"/>
+ <keyword type="constant" name="GST_MTS_TABLE_ID_UNSET" link="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GST-MTS-TABLE-ID-UNSET:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_SECTION_UNKNOWN" link="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GST-MPEGTS-SECTION-UNKNOWN:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_SECTION_PAT" link="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GST-MPEGTS-SECTION-PAT:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_SECTION_PMT" link="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GST-MPEGTS-SECTION-PMT:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_SECTION_CAT" link="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GST-MPEGTS-SECTION-CAT:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_SECTION_TSDT" link="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GST-MPEGTS-SECTION-TSDT:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_SECTION_EIT" link="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GST-MPEGTS-SECTION-EIT:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_SECTION_NIT" link="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GST-MPEGTS-SECTION-NIT:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_SECTION_BAT" link="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GST-MPEGTS-SECTION-BAT:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_SECTION_SDT" link="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GST-MPEGTS-SECTION-SDT:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_SECTION_TDT" link="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GST-MPEGTS-SECTION-TDT:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_SECTION_TOT" link="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GST-MPEGTS-SECTION-TOT:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_SECTION_ATSC_TVCT" link="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GST-MPEGTS-SECTION-ATSC-TVCT:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_SECTION_ATSC_CVCT" link="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GST-MPEGTS-SECTION-ATSC-CVCT:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_SECTION_ATSC_MGT" link="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GST-MPEGTS-SECTION-ATSC-MGT:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_SECTION_ATSC_ETT" link="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GST-MPEGTS-SECTION-ATSC-ETT:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_SECTION_ATSC_EIT" link="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GST-MPEGTS-SECTION-ATSC-EIT:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_SECTION_ATSC_STT" link="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GST-MPEGTS-SECTION-ATSC-STT:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_STREAM_TYPE_RESERVED_00" link="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GST-MPEGTS-STREAM-TYPE-RESERVED-00:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_STREAM_TYPE_VIDEO_MPEG1" link="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GST-MPEGTS-STREAM-TYPE-VIDEO-MPEG1:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_STREAM_TYPE_VIDEO_MPEG2" link="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GST-MPEGTS-STREAM-TYPE-VIDEO-MPEG2:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_STREAM_TYPE_AUDIO_MPEG1" link="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GST-MPEGTS-STREAM-TYPE-AUDIO-MPEG1:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_STREAM_TYPE_AUDIO_MPEG2" link="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GST-MPEGTS-STREAM-TYPE-AUDIO-MPEG2:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_STREAM_TYPE_PRIVATE_SECTIONS" link="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GST-MPEGTS-STREAM-TYPE-PRIVATE-SECTIONS:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_STREAM_TYPE_PRIVATE_PES_PACKETS" link="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GST-MPEGTS-STREAM-TYPE-PRIVATE-PES-PACKETS:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_STREAM_TYPE_MHEG" link="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GST-MPEGTS-STREAM-TYPE-MHEG:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_STREAM_TYPE_DSM_CC" link="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GST-MPEGTS-STREAM-TYPE-DSM-CC:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_STREAM_TYPE_H_222_1" link="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GST-MPEGTS-STREAM-TYPE-H-222-1:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_STREAM_TYPE_DSMCC_A" link="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GST-MPEGTS-STREAM-TYPE-DSMCC-A:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_STREAM_TYPE_DSMCC_B" link="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GST-MPEGTS-STREAM-TYPE-DSMCC-B:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_STREAM_TYPE_DSMCC_C" link="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GST-MPEGTS-STREAM-TYPE-DSMCC-C:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_STREAM_TYPE_DSMCC_D" link="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GST-MPEGTS-STREAM-TYPE-DSMCC-D:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_STREAM_TYPE_AUXILIARY" link="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GST-MPEGTS-STREAM-TYPE-AUXILIARY:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_STREAM_TYPE_AUDIO_AAC_ADTS" link="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GST-MPEGTS-STREAM-TYPE-AUDIO-AAC-ADTS:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_STREAM_TYPE_VIDEO_MPEG4" link="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GST-MPEGTS-STREAM-TYPE-VIDEO-MPEG4:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_STREAM_TYPE_AUDIO_AAC_LATM" link="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GST-MPEGTS-STREAM-TYPE-AUDIO-AAC-LATM:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_STREAM_TYPE_SL_FLEXMUX_PES_PACKETS" link="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GST-MPEGTS-STREAM-TYPE-SL-FLEXMUX-PES-PACKETS:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_STREAM_TYPE_SL_FLEXMUX_SECTIONS" link="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GST-MPEGTS-STREAM-TYPE-SL-FLEXMUX-SECTIONS:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_STREAM_TYPE_SYNCHRONIZED_DOWNLOAD" link="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GST-MPEGTS-STREAM-TYPE-SYNCHRONIZED-DOWNLOAD:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_STREAM_TYPE_METADATA_PES_PACKETS" link="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GST-MPEGTS-STREAM-TYPE-METADATA-PES-PACKETS:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_STREAM_TYPE_METADATA_SECTIONS" link="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GST-MPEGTS-STREAM-TYPE-METADATA-SECTIONS:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_STREAM_TYPE_METADATA_DATA_CAROUSEL" link="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GST-MPEGTS-STREAM-TYPE-METADATA-DATA-CAROUSEL:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_STREAM_TYPE_METADATA_OBJECT_CAROUSEL" link="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GST-MPEGTS-STREAM-TYPE-METADATA-OBJECT-CAROUSEL:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_STREAM_TYPE_METADATA_SYNCHRONIZED_DOWNLOAD" link="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GST-MPEGTS-STREAM-TYPE-METADATA-SYNCHRONIZED-DOWNLOAD:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_STREAM_TYPE_MPEG2_IPMP" link="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GST-MPEGTS-STREAM-TYPE-MPEG2-IPMP:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_STREAM_TYPE_VIDEO_H264" link="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GST-MPEGTS-STREAM-TYPE-VIDEO-H264:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_STREAM_TYPE_AUDIO_AAC_CLEAN" link="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GST-MPEGTS-STREAM-TYPE-AUDIO-AAC-CLEAN:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_STREAM_TYPE_MPEG4_TIMED_TEXT" link="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GST-MPEGTS-STREAM-TYPE-MPEG4-TIMED-TEXT:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_STREAM_TYPE_VIDEO_RVC" link="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GST-MPEGTS-STREAM-TYPE-VIDEO-RVC:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_STREAM_TYPE_VIDEO_H264_SVC_SUB_BITSTREAM" link="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GST-MPEGTS-STREAM-TYPE-VIDEO-H264-SVC-SUB-BITSTREAM:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_STREAM_TYPE_VIDEO_H264_MVC_SUB_BITSTREAM" link="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GST-MPEGTS-STREAM-TYPE-VIDEO-H264-MVC-SUB-BITSTREAM:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_STREAM_TYPE_VIDEO_JP2K" link="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GST-MPEGTS-STREAM-TYPE-VIDEO-JP2K:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_STREAM_TYPE_VIDEO_MPEG2_STEREO_ADDITIONAL_VIEW" link="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GST-MPEGTS-STREAM-TYPE-VIDEO-MPEG2-STEREO-ADDITIONAL-VIEW:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_STREAM_TYPE_VIDEO_H264_STEREO_ADDITIONAL_VIEW" link="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GST-MPEGTS-STREAM-TYPE-VIDEO-H264-STEREO-ADDITIONAL-VIEW:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_STREAM_TYPE_VIDEO_HEVC" link="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GST-MPEGTS-STREAM-TYPE-VIDEO-HEVC:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_STREAM_TYPE_IPMP_STREAM" link="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GST-MPEGTS-STREAM-TYPE-IPMP-STREAM:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_RESERVED_00" link="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GST-MTS-DESC-RESERVED-00:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_RESERVED_01" link="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GST-MTS-DESC-RESERVED-01:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_VIDEO_STREAM" link="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GST-MTS-DESC-VIDEO-STREAM:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_AUDIO_STREAM" link="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GST-MTS-DESC-AUDIO-STREAM:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_HIERARCHY" link="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GST-MTS-DESC-HIERARCHY:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_REGISTRATION" link="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GST-MTS-DESC-REGISTRATION:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_DATA_STREAM_ALIGNMENT" link="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GST-MTS-DESC-DATA-STREAM-ALIGNMENT:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_TARGET_BACKGROUND_GRID" link="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GST-MTS-DESC-TARGET-BACKGROUND-GRID:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_VIDEO_WINDOW" link="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GST-MTS-DESC-VIDEO-WINDOW:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_CA" link="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GST-MTS-DESC-CA:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_ISO_639_LANGUAGE" link="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GST-MTS-DESC-ISO-639-LANGUAGE:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_SYSTEM_CLOCK" link="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GST-MTS-DESC-SYSTEM-CLOCK:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_MULTIPLEX_BUFFER_UTILISATION" link="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GST-MTS-DESC-MULTIPLEX-BUFFER-UTILISATION:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_COPYRIGHT" link="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GST-MTS-DESC-COPYRIGHT:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_MAXIMUM_BITRATE" link="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GST-MTS-DESC-MAXIMUM-BITRATE:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_PRIVATE_DATA_INDICATOR" link="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GST-MTS-DESC-PRIVATE-DATA-INDICATOR:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_SMOOTHING_BUFFER" link="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GST-MTS-DESC-SMOOTHING-BUFFER:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_STD" link="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GST-MTS-DESC-STD:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_IBP" link="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GST-MTS-DESC-IBP:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_DSMCC_CAROUSEL_IDENTIFIER" link="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GST-MTS-DESC-DSMCC-CAROUSEL-IDENTIFIER:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_DSMCC_ASSOCIATION_TAG" link="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GST-MTS-DESC-DSMCC-ASSOCIATION-TAG:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_DSMCC_DEFERRED_ASSOCIATION_TAG" link="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GST-MTS-DESC-DSMCC-DEFERRED-ASSOCIATION-TAG:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_DSMCC_NPT_REFERENCE" link="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GST-MTS-DESC-DSMCC-NPT-REFERENCE:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_DSMCC_NPT_ENDPOINT" link="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GST-MTS-DESC-DSMCC-NPT-ENDPOINT:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_DSMCC_STREAM_MODE" link="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GST-MTS-DESC-DSMCC-STREAM-MODE:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_DSMCC_STREAM_EVENT" link="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GST-MTS-DESC-DSMCC-STREAM-EVENT:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_MPEG4_VIDEO" link="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GST-MTS-DESC-MPEG4-VIDEO:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_MPEG4_AUDIO" link="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GST-MTS-DESC-MPEG4-AUDIO:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_IOD" link="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GST-MTS-DESC-IOD:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_SL" link="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GST-MTS-DESC-SL:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_FMC" link="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GST-MTS-DESC-FMC:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_EXTERNAL_ES_ID" link="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GST-MTS-DESC-EXTERNAL-ES-ID:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_MUX_CODE" link="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GST-MTS-DESC-MUX-CODE:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_FMX_BUFFER_SIZE" link="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GST-MTS-DESC-FMX-BUFFER-SIZE:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_MULTIPLEX_BUFFER" link="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GST-MTS-DESC-MULTIPLEX-BUFFER:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_CONTENT_LABELING" link="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GST-MTS-DESC-CONTENT-LABELING:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_METADATA_POINTER" link="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GST-MTS-DESC-METADATA-POINTER:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_METADATA" link="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GST-MTS-DESC-METADATA:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_METADATA_STD" link="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GST-MTS-DESC-METADATA-STD:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_AVC_VIDEO" link="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GST-MTS-DESC-AVC-VIDEO:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_IPMP" link="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GST-MTS-DESC-IPMP:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_AVC_TIMING_AND_HRD" link="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GST-MTS-DESC-AVC-TIMING-AND-HRD:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_MPEG2_AAC_AUDIO" link="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GST-MTS-DESC-MPEG2-AAC-AUDIO:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_FLEX_MUX_TIMING" link="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GST-MTS-DESC-FLEX-MUX-TIMING:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_MPEG4_TEXT" link="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GST-MTS-DESC-MPEG4-TEXT:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_MPEG4_AUDIO_EXTENSION" link="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GST-MTS-DESC-MPEG4-AUDIO-EXTENSION:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_AUXILIARY_VIDEO_STREAM" link="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GST-MTS-DESC-AUXILIARY-VIDEO-STREAM:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_SVC_EXTENSION" link="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GST-MTS-DESC-SVC-EXTENSION:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_MVC_EXTENSION" link="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GST-MTS-DESC-MVC-EXTENSION:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_J2K_VIDEO" link="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GST-MTS-DESC-J2K-VIDEO:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_MVC_OPERATION_POINT" link="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GST-MTS-DESC-MVC-OPERATION-POINT:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_MPEG2_STEREOSCOPIC_VIDEO_FORMAT" link="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GST-MTS-DESC-MPEG2-STEREOSCOPIC-VIDEO-FORMAT:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_STEREOSCOPIC_PROGRAM_INFO" link="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GST-MTS-DESC-STEREOSCOPIC-PROGRAM-INFO:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_STEREOSCOPIC_VIDEO_INFO" link="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GST-MTS-DESC-STEREOSCOPIC-VIDEO-INFO:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_AC3_AUDIO_STREAM" link="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GST-MTS-DESC-AC3-AUDIO-STREAM:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_DTG_LOGICAL_CHANNEL" link="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GST-MTS-DESC-DTG-LOGICAL-CHANNEL:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_AUDIO_TYPE_UNDEFINED" link="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GST-MPEGTS-AUDIO-TYPE-UNDEFINED:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_AUDIO_TYPE_CLEAN_EFFECTS" link="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GST-MPEGTS-AUDIO-TYPE-CLEAN-EFFECTS:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_AUDIO_TYPE_HEARING_IMPAIRED" link="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GST-MPEGTS-AUDIO-TYPE-HEARING-IMPAIRED:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_AUDIO_TYPE_VISUAL_IMPAIRED_COMMENTARY" link="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GST-MPEGTS-AUDIO-TYPE-VISUAL-IMPAIRED-COMMENTARY:CAPS"/>
+ <keyword type="constant" name="GST_MTS_TABLE_ID_ATSC_MASTER_GUIDE" link="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html#GST-MTS-TABLE-ID-ATSC-MASTER-GUIDE:CAPS"/>
+ <keyword type="constant" name="GST_MTS_TABLE_ID_ATSC_TERRESTRIAL_VIRTUAL_CHANNEL" link="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html#GST-MTS-TABLE-ID-ATSC-TERRESTRIAL-VIRTUAL-CHANNEL:CAPS"/>
+ <keyword type="constant" name="GST_MTS_TABLE_ID_ATSC_CABLE_VIRTUAL_CHANNEL" link="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html#GST-MTS-TABLE-ID-ATSC-CABLE-VIRTUAL-CHANNEL:CAPS"/>
+ <keyword type="constant" name="GST_MTS_TABLE_ID_ATSC_RATING_REGION" link="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html#GST-MTS-TABLE-ID-ATSC-RATING-REGION:CAPS"/>
+ <keyword type="constant" name="GST_MTS_TABLE_ID_ATSC_EVENT_INFORMATION" link="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html#GST-MTS-TABLE-ID-ATSC-EVENT-INFORMATION:CAPS"/>
+ <keyword type="constant" name="GST_MTS_TABLE_ID_ATSC_CHANNEL_OR_EVENT_EXTENDED_TEXT" link="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html#GST-MTS-TABLE-ID-ATSC-CHANNEL-OR-EVENT-EXTENDED-TEXT:CAPS"/>
+ <keyword type="constant" name="GST_MTS_TABLE_ID_ATSC_SYSTEM_TIME" link="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html#GST-MTS-TABLE-ID-ATSC-SYSTEM-TIME:CAPS"/>
+ <keyword type="constant" name="GST_MTS_TABLE_ID_ATSC_DATA_EVENT" link="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html#GST-MTS-TABLE-ID-ATSC-DATA-EVENT:CAPS"/>
+ <keyword type="constant" name="GST_MTS_TABLE_ID_ATSC_DATA_SERVICE" link="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html#GST-MTS-TABLE-ID-ATSC-DATA-SERVICE:CAPS"/>
+ <keyword type="constant" name="GST_MTS_TABLE_ID_ATSC_NETWORK_RESOURCE" link="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html#GST-MTS-TABLE-ID-ATSC-NETWORK-RESOURCE:CAPS"/>
+ <keyword type="constant" name="GST_MTS_TABLE_ID_ATSC_LONG_TERM_SERVICE" link="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html#GST-MTS-TABLE-ID-ATSC-LONG-TERM-SERVICE:CAPS"/>
+ <keyword type="constant" name="GST_MTS_TABLE_ID_ATSC_DIRECTED_CHANNEL_CHANGE" link="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html#GST-MTS-TABLE-ID-ATSC-DIRECTED-CHANNEL-CHANGE:CAPS"/>
+ <keyword type="constant" name="GST_MTS_TABLE_ID_ATSC_DIRECTED_CHANNEL_CHANGE_SECTION_CODE" link="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html#GST-MTS-TABLE-ID-ATSC-DIRECTED-CHANNEL-CHANGE-SECTION-CODE:CAPS"/>
+ <keyword type="constant" name="GST_MTS_TABLE_ID_ATSC_AGGREGATE_EVENT_INFORMATION" link="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html#GST-MTS-TABLE-ID-ATSC-AGGREGATE-EVENT-INFORMATION:CAPS"/>
+ <keyword type="constant" name="GST_MTS_TABLE_ID_ATSC_AGGREGATE_EXTENDED_TEXT" link="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html#GST-MTS-TABLE-ID-ATSC-AGGREGATE-EXTENDED-TEXT:CAPS"/>
+ <keyword type="constant" name="GST_MTS_TABLE_ID_ATSC_AGGREGATE_DATA_EVENT" link="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html#GST-MTS-TABLE-ID-ATSC-AGGREGATE-DATA-EVENT:CAPS"/>
+ <keyword type="constant" name="GST_MTS_TABLE_ID_ATSC_SATELLITE_VIRTUAL_CHANNEL" link="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html#GST-MTS-TABLE-ID-ATSC-SATELLITE-VIRTUAL-CHANNEL:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_ATSC_MGT_TABLE_TYPE_EIT0" link="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html#GST-MPEGTS-ATSC-MGT-TABLE-TYPE-EIT0:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_ATSC_MGT_TABLE_TYPE_EIT127" link="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html#GST-MPEGTS-ATSC-MGT-TABLE-TYPE-EIT127:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_ATSC_MGT_TABLE_TYPE_ETT0" link="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html#GST-MPEGTS-ATSC-MGT-TABLE-TYPE-ETT0:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_ATSC_MGT_TABLE_TYPE_ETT127" link="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html#GST-MPEGTS-ATSC-MGT-TABLE-TYPE-ETT127:CAPS"/>
+ <keyword type="constant" name="GST_MTS_TABLE_ID_NETWORK_INFORMATION_ACTUAL_NETWORK" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#GST-MTS-TABLE-ID-NETWORK-INFORMATION-ACTUAL-NETWORK:CAPS"/>
+ <keyword type="constant" name="GST_MTS_TABLE_ID_NETWORK_INFORMATION_OTHER_NETWORK" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#GST-MTS-TABLE-ID-NETWORK-INFORMATION-OTHER-NETWORK:CAPS"/>
+ <keyword type="constant" name="GST_MTS_TABLE_ID_SERVICE_DESCRIPTION_ACTUAL_TS" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#GST-MTS-TABLE-ID-SERVICE-DESCRIPTION-ACTUAL-TS:CAPS"/>
+ <keyword type="constant" name="GST_MTS_TABLE_ID_SERVICE_DESCRIPTION_OTHER_TS" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#GST-MTS-TABLE-ID-SERVICE-DESCRIPTION-OTHER-TS:CAPS"/>
+ <keyword type="constant" name="GST_MTS_TABLE_ID_BOUQUET_ASSOCIATION" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#GST-MTS-TABLE-ID-BOUQUET-ASSOCIATION:CAPS"/>
+ <keyword type="constant" name="GST_MTS_TABLE_ID_EVENT_INFORMATION_ACTUAL_TS_PRESENT" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#GST-MTS-TABLE-ID-EVENT-INFORMATION-ACTUAL-TS-PRESENT:CAPS"/>
+ <keyword type="constant" name="GST_MTS_TABLE_ID_EVENT_INFORMATION_OTHER_TS_PRESENT" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#GST-MTS-TABLE-ID-EVENT-INFORMATION-OTHER-TS-PRESENT:CAPS"/>
+ <keyword type="constant" name="GST_MTS_TABLE_ID_EVENT_INFORMATION_ACTUAL_TS_SCHEDULE_1" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#GST-MTS-TABLE-ID-EVENT-INFORMATION-ACTUAL-TS-SCHEDULE-1:CAPS"/>
+ <keyword type="constant" name="GST_MTS_TABLE_ID_EVENT_INFORMATION_ACTUAL_TS_SCHEDULE_N" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#GST-MTS-TABLE-ID-EVENT-INFORMATION-ACTUAL-TS-SCHEDULE-N:CAPS"/>
+ <keyword type="constant" name="GST_MTS_TABLE_ID_EVENT_INFORMATION_OTHER_TS_SCHEDULE_1" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#GST-MTS-TABLE-ID-EVENT-INFORMATION-OTHER-TS-SCHEDULE-1:CAPS"/>
+ <keyword type="constant" name="GST_MTS_TABLE_ID_EVENT_INFORMATION_OTHER_TS_SCHEDULE_N" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#GST-MTS-TABLE-ID-EVENT-INFORMATION-OTHER-TS-SCHEDULE-N:CAPS"/>
+ <keyword type="constant" name="GST_MTS_TABLE_ID_TIME_DATE" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#GST-MTS-TABLE-ID-TIME-DATE:CAPS"/>
+ <keyword type="constant" name="GST_MTS_TABLE_ID_RUNNING_STATUS" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#GST-MTS-TABLE-ID-RUNNING-STATUS:CAPS"/>
+ <keyword type="constant" name="GST_MTS_TABLE_ID_STUFFING" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#GST-MTS-TABLE-ID-STUFFING:CAPS"/>
+ <keyword type="constant" name="GST_MTS_TABLE_ID_TIME_OFFSET" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#GST-MTS-TABLE-ID-TIME-OFFSET:CAPS"/>
+ <keyword type="constant" name="GST_MTS_TABLE_ID_APPLICATION_INFORMATION_TABLE" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#GST-MTS-TABLE-ID-APPLICATION-INFORMATION-TABLE:CAPS"/>
+ <keyword type="constant" name="GST_MTS_TABLE_ID_CONTAINER" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#GST-MTS-TABLE-ID-CONTAINER:CAPS"/>
+ <keyword type="constant" name="GST_MTS_TABLE_ID_RELATED_CONTENT" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#GST-MTS-TABLE-ID-RELATED-CONTENT:CAPS"/>
+ <keyword type="constant" name="GST_MTS_TABLE_ID_CONTENT_IDENTIFIER" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#GST-MTS-TABLE-ID-CONTENT-IDENTIFIER:CAPS"/>
+ <keyword type="constant" name="GST_MTS_TABLE_ID_MPE_FEC" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#GST-MTS-TABLE-ID-MPE-FEC:CAPS"/>
+ <keyword type="constant" name="GST_MTS_TABLE_ID_RESOLUTION_NOTIFICATION" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#GST-MTS-TABLE-ID-RESOLUTION-NOTIFICATION:CAPS"/>
+ <keyword type="constant" name="GST_MTS_TABLE_ID_MPE_IFEC" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#GST-MTS-TABLE-ID-MPE-IFEC:CAPS"/>
+ <keyword type="constant" name="GST_MTS_TABLE_ID_DISCONTINUITY_INFORMATION" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#GST-MTS-TABLE-ID-DISCONTINUITY-INFORMATION:CAPS"/>
+ <keyword type="constant" name="GST_MTS_TABLE_ID_SELECTION_INFORMATION" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#GST-MTS-TABLE-ID-SELECTION-INFORMATION:CAPS"/>
+ <keyword type="constant" name="GST_MTS_TABLE_ID_CA_MESSAGE_ECM_0" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#GST-MTS-TABLE-ID-CA-MESSAGE-ECM-0:CAPS"/>
+ <keyword type="constant" name="GST_MTS_TABLE_ID_CA_MESSAGE_ECM_1" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#GST-MTS-TABLE-ID-CA-MESSAGE-ECM-1:CAPS"/>
+ <keyword type="constant" name="GST_MTS_TABLE_ID_CA_MESSAGE_SYSTEM_PRIVATE_1" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#GST-MTS-TABLE-ID-CA-MESSAGE-SYSTEM-PRIVATE-1:CAPS"/>
+ <keyword type="constant" name="GST_MTS_TABLE_ID_CA_MESSAGE_SYSTEM_PRIVATE_N" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#GST-MTS-TABLE-ID-CA-MESSAGE-SYSTEM-PRIVATE-N:CAPS"/>
+ <keyword type="constant" name="GST_MTS_TABLE_ID_SCT" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#GST-MTS-TABLE-ID-SCT:CAPS"/>
+ <keyword type="constant" name="GST_MTS_TABLE_ID_FCT" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#GST-MTS-TABLE-ID-FCT:CAPS"/>
+ <keyword type="constant" name="GST_MTS_TABLE_ID_TCT" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#GST-MTS-TABLE-ID-TCT:CAPS"/>
+ <keyword type="constant" name="GST_MTS_TABLE_ID_SPT" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#GST-MTS-TABLE-ID-SPT:CAPS"/>
+ <keyword type="constant" name="GST_MTS_TABLE_ID_CMT" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#GST-MTS-TABLE-ID-CMT:CAPS"/>
+ <keyword type="constant" name="GST_MTS_TABLE_ID_TBTP" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#GST-MTS-TABLE-ID-TBTP:CAPS"/>
+ <keyword type="constant" name="GST_MTS_TABLE_ID_PCR_PACKET_PAYLOAD" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#GST-MTS-TABLE-ID-PCR-PACKET-PAYLOAD:CAPS"/>
+ <keyword type="constant" name="GST_MTS_TABLE_ID_TRANSMISSION_MODE_SUPPORT_PAYLOAD" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#GST-MTS-TABLE-ID-TRANSMISSION-MODE-SUPPORT-PAYLOAD:CAPS"/>
+ <keyword type="constant" name="GST_MTS_TABLE_ID_TIM" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#GST-MTS-TABLE-ID-TIM:CAPS"/>
+ <keyword type="constant" name="GST_MTS_TABLE_ID_LL_FEC_PARITY_DATA_TABLE" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#GST-MTS-TABLE-ID-LL-FEC-PARITY-DATA-TABLE:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_RUNNING_STATUS_UNDEFINED" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#GST-MPEGTS-RUNNING-STATUS-UNDEFINED:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_RUNNING_STATUS_NOT_RUNNING" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#GST-MPEGTS-RUNNING-STATUS-NOT-RUNNING:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_RUNNING_STATUS_STARTS_IN_FEW_SECONDS" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#GST-MPEGTS-RUNNING-STATUS-STARTS-IN-FEW-SECONDS:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_RUNNING_STATUS_PAUSING" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#GST-MPEGTS-RUNNING-STATUS-PAUSING:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_RUNNING_STATUS_RUNNING" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#GST-MPEGTS-RUNNING-STATUS-RUNNING:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_RUNNING_STATUS_OFF_AIR" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#GST-MPEGTS-RUNNING-STATUS-OFF-AIR:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_ATSC_STUFFING" link="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-ATSC-STUFFING:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_ATSC_AC3" link="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-ATSC-AC3:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_ATSC_CAPTION_SERVICE" link="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-ATSC-CAPTION-SERVICE:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_ATSC_CONTENT_ADVISORY" link="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-ATSC-CONTENT-ADVISORY:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_ATSC_EXTENDED_CHANNEL_NAME" link="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-ATSC-EXTENDED-CHANNEL-NAME:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_ATSC_SERVICE_LOCATION" link="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-ATSC-SERVICE-LOCATION:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_ATSC_TIME_SHIFTED_SERVICE" link="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-ATSC-TIME-SHIFTED-SERVICE:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_ATSC_COMPONENT_NAME" link="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-ATSC-COMPONENT-NAME:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_ATSC_DCC_DEPARTING_REQUEST" link="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-ATSC-DCC-DEPARTING-REQUEST:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_ATSC_DCC_ARRIVING_REQUEST" link="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-ATSC-DCC-ARRIVING-REQUEST:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_ATSC_REDISTRIBUTION_CONTROL" link="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-ATSC-REDISTRIBUTION-CONTROL:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_ATSC_GENRE" link="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-ATSC-GENRE:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_ATSC_PRIVATE_INFORMATION" link="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-ATSC-PRIVATE-INFORMATION:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_ATSC_ENHANCED_SIGNALING" link="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-ATSC-ENHANCED-SIGNALING:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_ATSC_DATA_SERVICE" link="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-ATSC-DATA-SERVICE:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_ATSC_PID_COUNT" link="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-ATSC-PID-COUNT:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_ATSC_DOWNLOAD_DESCRIPTOR" link="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-ATSC-DOWNLOAD-DESCRIPTOR:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_ATSC_MULTIPROTOCOL_ENCAPSULATION" link="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-ATSC-MULTIPROTOCOL-ENCAPSULATION:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_ATSC_MODULE_LINK" link="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-ATSC-MODULE-LINK:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_ATSC_CRC32" link="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-ATSC-CRC32:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_ATSC_GROUP_LINK" link="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-ATSC-GROUP-LINK:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_DVB_NETWORK_NAME" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-DVB-NETWORK-NAME:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_DVB_SERVICE_LIST" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-DVB-SERVICE-LIST:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_DVB_STUFFING" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-DVB-STUFFING:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_DVB_SATELLITE_DELIVERY_SYSTEM" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-DVB-SATELLITE-DELIVERY-SYSTEM:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_DVB_CABLE_DELIVERY_SYSTEM" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-DVB-CABLE-DELIVERY-SYSTEM:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_DVB_VBI_DATA" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-DVB-VBI-DATA:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_DVB_VBI_TELETEXT" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-DVB-VBI-TELETEXT:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_DVB_BOUQUET_NAME" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-DVB-BOUQUET-NAME:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_DVB_SERVICE" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-DVB-SERVICE:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_DVB_COUNTRY_AVAILABILITY" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-DVB-COUNTRY-AVAILABILITY:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_DVB_LINKAGE" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-DVB-LINKAGE:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_DVB_NVOD_REFERENCE" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-DVB-NVOD-REFERENCE:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_DVB_TIME_SHIFTED_SERVICE" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-DVB-TIME-SHIFTED-SERVICE:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_DVB_SHORT_EVENT" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-DVB-SHORT-EVENT:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_DVB_EXTENDED_EVENT" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-DVB-EXTENDED-EVENT:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_DVB_TIME_SHIFTED_EVENT" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-DVB-TIME-SHIFTED-EVENT:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_DVB_COMPONENT" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-DVB-COMPONENT:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_DVB_MOSAIC" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-DVB-MOSAIC:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_DVB_STREAM_IDENTIFIER" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-DVB-STREAM-IDENTIFIER:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_DVB_CA_IDENTIFIER" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-DVB-CA-IDENTIFIER:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_DVB_CONTENT" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-DVB-CONTENT:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_DVB_PARENTAL_RATING" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-DVB-PARENTAL-RATING:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_DVB_TELETEXT" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-DVB-TELETEXT:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_DVB_TELEPHONE" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-DVB-TELEPHONE:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_DVB_LOCAL_TIME_OFFSET" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-DVB-LOCAL-TIME-OFFSET:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_DVB_SUBTITLING" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-DVB-SUBTITLING:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_DVB_TERRESTRIAL_DELIVERY_SYSTEM" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-DVB-TERRESTRIAL-DELIVERY-SYSTEM:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_DVB_MULTILINGUAL_NETWORK_NAME" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-DVB-MULTILINGUAL-NETWORK-NAME:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_DVB_MULTILINGUAL_BOUQUET_NAME" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-DVB-MULTILINGUAL-BOUQUET-NAME:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_DVB_MULTILINGUAL_SERVICE_NAME" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-DVB-MULTILINGUAL-SERVICE-NAME:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_DVB_MULTILINGUAL_COMPONENT" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-DVB-MULTILINGUAL-COMPONENT:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_DVB_PRIVATE_DATA_SPECIFIER" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-DVB-PRIVATE-DATA-SPECIFIER:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_DVB_SERVICE_MOVE" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-DVB-SERVICE-MOVE:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_DVB_SHORT_SMOOTHING_BUFFER" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-DVB-SHORT-SMOOTHING-BUFFER:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_DVB_FREQUENCY_LIST" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-DVB-FREQUENCY-LIST:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_DVB_PARTIAL_TRANSPORT_STREAM" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-DVB-PARTIAL-TRANSPORT-STREAM:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_DVB_DATA_BROADCAST" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-DVB-DATA-BROADCAST:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_DVB_SCRAMBLING" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-DVB-SCRAMBLING:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_DVB_DATA_BROADCAST_ID" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-DVB-DATA-BROADCAST-ID:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_DVB_TRANSPORT_STREAM" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-DVB-TRANSPORT-STREAM:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_DVB_DSNG" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-DVB-DSNG:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_DVB_PDC" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-DVB-PDC:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_DVB_AC3" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-DVB-AC3:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_DVB_ANCILLARY_DATA" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-DVB-ANCILLARY-DATA:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_DVB_CELL_LIST" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-DVB-CELL-LIST:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_DVB_CELL_FREQUENCY_LINK" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-DVB-CELL-FREQUENCY-LINK:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_DVB_ANNOUNCEMENT_SUPPORT" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-DVB-ANNOUNCEMENT-SUPPORT:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_DVB_APPLICATION_SIGNALLING" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-DVB-APPLICATION-SIGNALLING:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_DVB_ADAPTATION_FIELD_DATA" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-DVB-ADAPTATION-FIELD-DATA:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_DVB_SERVICE_IDENTIFIER" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-DVB-SERVICE-IDENTIFIER:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_DVB_SERVICE_AVAILABILITY" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-DVB-SERVICE-AVAILABILITY:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_DVB_DEFAULT_AUTHORITY" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-DVB-DEFAULT-AUTHORITY:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_DVB_RELATED_CONTENT" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-DVB-RELATED-CONTENT:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_DVB_TVA_ID" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-DVB-TVA-ID:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_DVB_CONTENT_IDENTIFIER" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-DVB-CONTENT-IDENTIFIER:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_DVB_TIMESLICE_FEC_IDENTIFIER" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-DVB-TIMESLICE-FEC-IDENTIFIER:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_DVB_ECM_REPETITION_RATE" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-DVB-ECM-REPETITION-RATE:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_DVB_S2_SATELLITE_DELIVERY_SYSTEM" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-DVB-S2-SATELLITE-DELIVERY-SYSTEM:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_DVB_ENHANCED_AC3" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-DVB-ENHANCED-AC3:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_DVB_DTS" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-DVB-DTS:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_DVB_AAC" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-DVB-AAC:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_DVB_XAIT_LOCATION" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-DVB-XAIT-LOCATION:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_DVB_FTA_CONTENT_MANAGEMENT" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-DVB-FTA-CONTENT-MANAGEMENT:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_DVB_EXTENSION" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-DVB-EXTENSION:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_EXT_DVB_IMAGE_ICON" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-EXT-DVB-IMAGE-ICON:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_EXT_DVB_CPCM_DELIVERY_SIGNALLING" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-EXT-DVB-CPCM-DELIVERY-SIGNALLING:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_EXT_DVB_CP" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-EXT-DVB-CP:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_EXT_DVB_CP_IDENTIFIER" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-EXT-DVB-CP-IDENTIFIER:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_EXT_DVB_T2_DELIVERY_SYSTEM" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-EXT-DVB-T2-DELIVERY-SYSTEM:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_EXT_DVB_SH_DELIVERY_SYSTEM" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-EXT-DVB-SH-DELIVERY-SYSTEM:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_EXT_DVB_SUPPLEMENTARY_AUDIO" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-EXT-DVB-SUPPLEMENTARY-AUDIO:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_EXT_DVB_NETWORK_CHANGE_NOTIFY" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-EXT-DVB-NETWORK-CHANGE-NOTIFY:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_EXT_DVB_MESSAGE" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-EXT-DVB-MESSAGE:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_EXT_DVB_TARGET_REGION" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-EXT-DVB-TARGET-REGION:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_EXT_DVB_TARGET_REGION_NAME" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-EXT-DVB-TARGET-REGION-NAME:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_EXT_DVB_SERVICE_RELOCATED" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-EXT-DVB-SERVICE-RELOCATED:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_EXT_DVB_XAIT_PID" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-EXT-DVB-XAIT-PID:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_EXT_DVB_C2_DELIVERY_SYSTEM" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-EXT-DVB-C2-DELIVERY-SYSTEM:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_EXT_DVB_DTS_HD_AUDIO_STREAM" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-EXT-DVB-DTS-HD-AUDIO-STREAM:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_EXT_DVB_DTS_NEUTRAL" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-EXT-DVB-DTS-NEUTRAL:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_EXT_DVB_VIDEO_DEPTH_RANGE" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-EXT-DVB-VIDEO-DEPTH-RANGE:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_EXT_DVB_T2MI" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-EXT-DVB-T2MI:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_EXT_DVB_URI_LINKAGE" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-EXT-DVB-URI-LINKAGE:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_FEC_NONE" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MPEGTS-FEC-NONE:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_FEC_1_2" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MPEGTS-FEC-1-2:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_FEC_2_3" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MPEGTS-FEC-2-3:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_FEC_3_4" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MPEGTS-FEC-3-4:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_FEC_4_5" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MPEGTS-FEC-4-5:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_FEC_5_6" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MPEGTS-FEC-5-6:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_FEC_6_7" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MPEGTS-FEC-6-7:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_FEC_7_8" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MPEGTS-FEC-7-8:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_FEC_8_9" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MPEGTS-FEC-8-9:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_FEC_AUTO" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MPEGTS-FEC-AUTO:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_FEC_3_5" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MPEGTS-FEC-3-5:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_FEC_9_10" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MPEGTS-FEC-9-10:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_FEC_2_5" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MPEGTS-FEC-2-5:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_MODULATION_QPSK" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MPEGTS-MODULATION-QPSK:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_MODULATION_QAM_16" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MPEGTS-MODULATION-QAM-16:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_MODULATION_QAM_32" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MPEGTS-MODULATION-QAM-32:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_MODULATION_QAM_64" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MPEGTS-MODULATION-QAM-64:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_MODULATION_QAM_128" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MPEGTS-MODULATION-QAM-128:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_MODULATION_QAM_256" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MPEGTS-MODULATION-QAM-256:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_MODULATION_QAM_AUTO" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MPEGTS-MODULATION-QAM-AUTO:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_MODULATION_VSB_8" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MPEGTS-MODULATION-VSB-8:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_MODULATION_VSB_16" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MPEGTS-MODULATION-VSB-16:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_MODULATION_PSK_8" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MPEGTS-MODULATION-PSK-8:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_MODULATION_APSK_16" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MPEGTS-MODULATION-APSK-16:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_MODULATION_APSK_32" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MPEGTS-MODULATION-APSK-32:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_MODULATION_DQPSK" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MPEGTS-MODULATION-DQPSK:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_MODULATION_QAM_4_NR_" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MPEGTS-MODULATION-QAM-4-NR-:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_MODULATION_NONE" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MPEGTS-MODULATION-NONE:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_POLARIZATION_LINEAR_HORIZONTAL" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MPEGTS-POLARIZATION-LINEAR-HORIZONTAL:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_POLARIZATION_LINEAR_VERTICAL" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MPEGTS-POLARIZATION-LINEAR-VERTICAL:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_POLARIZATION_CIRCULAR_LEFT" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MPEGTS-POLARIZATION-CIRCULAR-LEFT:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_POLARIZATION_CIRCULAR_RIGHT" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MPEGTS-POLARIZATION-CIRCULAR-RIGHT:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_ROLLOFF_35" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MPEGTS-ROLLOFF-35:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_ROLLOFF_20" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MPEGTS-ROLLOFF-20:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_ROLLOFF_25" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MPEGTS-ROLLOFF-25:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_ROLLOFF_RESERVED" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MPEGTS-ROLLOFF-RESERVED:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_ROLLOFF_AUTO" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MPEGTS-ROLLOFF-AUTO:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_CABLE_OUTER_FEC_UNDEFINED" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MPEGTS-CABLE-OUTER-FEC-UNDEFINED:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_CABLE_OUTER_FEC_NONE" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MPEGTS-CABLE-OUTER-FEC-NONE:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_CABLE_OUTER_FEC_RS_204_188" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MPEGTS-CABLE-OUTER-FEC-RS-204-188:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_TRANSMISSION_MODE_2K" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MPEGTS-TRANSMISSION-MODE-2K:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_TRANSMISSION_MODE_8K" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MPEGTS-TRANSMISSION-MODE-8K:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_TRANSMISSION_MODE_AUTO" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MPEGTS-TRANSMISSION-MODE-AUTO:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_TRANSMISSION_MODE_4K" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MPEGTS-TRANSMISSION-MODE-4K:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_TRANSMISSION_MODE_1K" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MPEGTS-TRANSMISSION-MODE-1K:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_TRANSMISSION_MODE_16K" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MPEGTS-TRANSMISSION-MODE-16K:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_TRANSMISSION_MODE_32K" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MPEGTS-TRANSMISSION-MODE-32K:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_TRANSMISSION_MODE_C1" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MPEGTS-TRANSMISSION-MODE-C1:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_TRANSMISSION_MODE_C3780" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MPEGTS-TRANSMISSION-MODE-C3780:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_GUARD_INTERVAL_1_32" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MPEGTS-GUARD-INTERVAL-1-32:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_GUARD_INTERVAL_1_16" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MPEGTS-GUARD-INTERVAL-1-16:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_GUARD_INTERVAL_1_8" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MPEGTS-GUARD-INTERVAL-1-8:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_GUARD_INTERVAL_1_4" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MPEGTS-GUARD-INTERVAL-1-4:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_GUARD_INTERVAL_AUTO" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MPEGTS-GUARD-INTERVAL-AUTO:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_GUARD_INTERVAL_1_128" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MPEGTS-GUARD-INTERVAL-1-128:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_GUARD_INTERVAL_19_128" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MPEGTS-GUARD-INTERVAL-19-128:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_GUARD_INTERVAL_19_256" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MPEGTS-GUARD-INTERVAL-19-256:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_GUARD_INTERVAL_PN420" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MPEGTS-GUARD-INTERVAL-PN420:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_GUARD_INTERVAL_PN595" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MPEGTS-GUARD-INTERVAL-PN595:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_GUARD_INTERVAL_PN945" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MPEGTS-GUARD-INTERVAL-PN945:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_HIERARCHY_NONE" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MPEGTS-HIERARCHY-NONE:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_HIERARCHY_1" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MPEGTS-HIERARCHY-1:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_HIERARCHY_2" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MPEGTS-HIERARCHY-2:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_HIERARCHY_4" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MPEGTS-HIERARCHY-4:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_HIERARCHY_AUTO" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MPEGTS-HIERARCHY-AUTO:CAPS"/>
+ <keyword type="constant" name="GST_DVB_SERVICE_RESERVED_00" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-DVB-SERVICE-RESERVED-00:CAPS"/>
+ <keyword type="constant" name="GST_DVB_SERVICE_DIGITAL_TELEVISION" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-DVB-SERVICE-DIGITAL-TELEVISION:CAPS"/>
+ <keyword type="constant" name="GST_DVB_SERVICE_DIGITAL_RADIO_SOUND" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-DVB-SERVICE-DIGITAL-RADIO-SOUND:CAPS"/>
+ <keyword type="constant" name="GST_DVB_SERVICE_TELETEXT" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-DVB-SERVICE-TELETEXT:CAPS"/>
+ <keyword type="constant" name="GST_DVB_SERVICE_NVOD_REFERENCE" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-DVB-SERVICE-NVOD-REFERENCE:CAPS"/>
+ <keyword type="constant" name="GST_DVB_SERVICE_NVOD_TIME_SHIFTED" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-DVB-SERVICE-NVOD-TIME-SHIFTED:CAPS"/>
+ <keyword type="constant" name="GST_DVB_SERVICE_MOSAIC" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-DVB-SERVICE-MOSAIC:CAPS"/>
+ <keyword type="constant" name="GST_DVB_SERVICE_FM_RADIO" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-DVB-SERVICE-FM-RADIO:CAPS"/>
+ <keyword type="constant" name="GST_DVB_SERVICE_DVB_SRM" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-DVB-SERVICE-DVB-SRM:CAPS"/>
+ <keyword type="constant" name="GST_DVB_SERVICE_RESERVED_09" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-DVB-SERVICE-RESERVED-09:CAPS"/>
+ <keyword type="constant" name="GST_DVB_SERVICE_ADVANCED_CODEC_DIGITAL_RADIO_SOUND" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-DVB-SERVICE-ADVANCED-CODEC-DIGITAL-RADIO-SOUND:CAPS"/>
+ <keyword type="constant" name="GST_DVB_SERVICE_ADVANCED_CODEC_MOSAIC" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-DVB-SERVICE-ADVANCED-CODEC-MOSAIC:CAPS"/>
+ <keyword type="constant" name="GST_DVB_SERVICE_DATA_BROADCAST" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-DVB-SERVICE-DATA-BROADCAST:CAPS"/>
+ <keyword type="constant" name="GST_DVB_SERVICE_RESERVED_0D_COMMON_INTERFACE" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-DVB-SERVICE-RESERVED-0D-COMMON-INTERFACE:CAPS"/>
+ <keyword type="constant" name="GST_DVB_SERVICE_RCS_MAP" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-DVB-SERVICE-RCS-MAP:CAPS"/>
+ <keyword type="constant" name="GST_DVB_SERVICE_RCS_FLS" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-DVB-SERVICE-RCS-FLS:CAPS"/>
+ <keyword type="constant" name="GST_DVB_SERVICE_DVB_MHP" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-DVB-SERVICE-DVB-MHP:CAPS"/>
+ <keyword type="constant" name="GST_DVB_SERVICE_MPEG2_HD_DIGITAL_TELEVISION" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-DVB-SERVICE-MPEG2-HD-DIGITAL-TELEVISION:CAPS"/>
+ <keyword type="constant" name="GST_DVB_SERVICE_ADVANCED_CODEC_SD_DIGITAL_TELEVISION" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-DVB-SERVICE-ADVANCED-CODEC-SD-DIGITAL-TELEVISION:CAPS"/>
+ <keyword type="constant" name="GST_DVB_SERVICE_ADVANCED_CODEC_SD_NVOD_TIME_SHIFTED" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-DVB-SERVICE-ADVANCED-CODEC-SD-NVOD-TIME-SHIFTED:CAPS"/>
+ <keyword type="constant" name="GST_DVB_SERVICE_ADVANCED_CODEC_SD_NVOD_REFERENCE" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-DVB-SERVICE-ADVANCED-CODEC-SD-NVOD-REFERENCE:CAPS"/>
+ <keyword type="constant" name="GST_DVB_SERVICE_ADVANCED_CODEC_HD_DIGITAL_TELEVISION" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-DVB-SERVICE-ADVANCED-CODEC-HD-DIGITAL-TELEVISION:CAPS"/>
+ <keyword type="constant" name="GST_DVB_SERVICE_ADVANCED_CODEC_HD_NVOD_TIME_SHIFTED" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-DVB-SERVICE-ADVANCED-CODEC-HD-NVOD-TIME-SHIFTED:CAPS"/>
+ <keyword type="constant" name="GST_DVB_SERVICE_ADVANCED_CODEC_HD_NVOD_REFERENCE" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-DVB-SERVICE-ADVANCED-CODEC-HD-NVOD-REFERENCE:CAPS"/>
+ <keyword type="constant" name="GST_DVB_SERVICE_ADVANCED_CODEC_STEREO_HD_DIGITAL_TELEVISION" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-DVB-SERVICE-ADVANCED-CODEC-STEREO-HD-DIGITAL-TELEVISION:CAPS"/>
+ <keyword type="constant" name="GST_DVB_SERVICE_ADVANCED_CODEC_STEREO_HD_NVOD_TIME_SHIFTED" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-DVB-SERVICE-ADVANCED-CODEC-STEREO-HD-NVOD-TIME-SHIFTED:CAPS"/>
+ <keyword type="constant" name="GST_DVB_SERVICE_ADVANCED_CODEC_STEREO_HD_NVOD_REFERENCE" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-DVB-SERVICE-ADVANCED-CODEC-STEREO-HD-NVOD-REFERENCE:CAPS"/>
+ <keyword type="constant" name="GST_DVB_SERVICE_RESERVED_FF" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-DVB-SERVICE-RESERVED-FF:CAPS"/>
+ <keyword type="constant" name="INITIAL_PAGE" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#INITIAL-PAGE:CAPS"/>
+ <keyword type="constant" name="SUBTITLE_PAGE" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#SUBTITLE-PAGE:CAPS"/>
+ <keyword type="constant" name="ADDITIONAL_INFO_PAGE" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#ADDITIONAL-INFO-PAGE:CAPS"/>
+ <keyword type="constant" name="PROGRAMME_SCHEDULE_PAGE" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#PROGRAMME-SCHEDULE-PAGE:CAPS"/>
+ <keyword type="constant" name="HEARING_IMPAIRED_PAGE" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#HEARING-IMPAIRED-PAGE:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_DVB_LINKAGE_RESERVED_00" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MPEGTS-DVB-LINKAGE-RESERVED-00:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_DVB_LINKAGE_INFORMATION" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MPEGTS-DVB-LINKAGE-INFORMATION:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_DVB_LINKAGE_EPG" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MPEGTS-DVB-LINKAGE-EPG:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_DVB_LINKAGE_CA_REPLACEMENT" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MPEGTS-DVB-LINKAGE-CA-REPLACEMENT:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_DVB_LINKAGE_TS_CONTAINING_COMPLETE_SI" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MPEGTS-DVB-LINKAGE-TS-CONTAINING-COMPLETE-SI:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_DVB_LINKAGE_SERVICE_REPLACEMENT" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MPEGTS-DVB-LINKAGE-SERVICE-REPLACEMENT:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_DVB_LINKAGE_DATA_BROADCAST" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MPEGTS-DVB-LINKAGE-DATA-BROADCAST:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_DVB_LINKAGE_RCS_MAP" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MPEGTS-DVB-LINKAGE-RCS-MAP:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_DVB_LINKAGE_MOBILE_HAND_OVER" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MPEGTS-DVB-LINKAGE-MOBILE-HAND-OVER:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_DVB_LINKAGE_SYSTEM_SOFTWARE_UPDATE" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MPEGTS-DVB-LINKAGE-SYSTEM-SOFTWARE-UPDATE:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_DVB_LINKAGE_TS_CONTAINING_SSU" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MPEGTS-DVB-LINKAGE-TS-CONTAINING-SSU:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_DVB_LINKAGE_IP_MAC_NOTIFICATION" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MPEGTS-DVB-LINKAGE-IP-MAC-NOTIFICATION:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_DVB_LINKAGE_TS_CONTAINING_INT" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MPEGTS-DVB-LINKAGE-TS-CONTAINING-INT:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_DVB_LINKAGE_EVENT" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MPEGTS-DVB-LINKAGE-EVENT:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_DVB_LINKAGE_EXTENDED_EVENT" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MPEGTS-DVB-LINKAGE-EXTENDED-EVENT:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_DVB_LINKAGE_HAND_OVER_RESERVED" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MPEGTS-DVB-LINKAGE-HAND-OVER-RESERVED:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_DVB_LINKAGE_HAND_OVER_IDENTICAL" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MPEGTS-DVB-LINKAGE-HAND-OVER-IDENTICAL:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_DVB_LINKAGE_HAND_OVER_LOCAL_VARIATION" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MPEGTS-DVB-LINKAGE-HAND-OVER-LOCAL-VARIATION:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_DVB_LINKAGE_HAND_OVER_ASSOCIATED" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MPEGTS-DVB-LINKAGE-HAND-OVER-ASSOCIATED:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_DVB_SCRAMBLING_MODE_RESERVED" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MPEGTS-DVB-SCRAMBLING-MODE-RESERVED:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_DVB_SCRAMBLING_MODE_CSA1" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MPEGTS-DVB-SCRAMBLING-MODE-CSA1:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_DVB_SCRAMBLING_MODE_CSA2" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MPEGTS-DVB-SCRAMBLING-MODE-CSA2:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_DVB_SCRAMBLING_MODE_CSA3_STANDARD" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MPEGTS-DVB-SCRAMBLING-MODE-CSA3-STANDARD:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_DVB_SCRAMBLING_MODE_CSA3_MINIMAL_ENHANCED" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MPEGTS-DVB-SCRAMBLING-MODE-CSA3-MINIMAL-ENHANCED:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_DVB_SCRAMBLING_MODE_CSA3_FULL_ENHANCED" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MPEGTS-DVB-SCRAMBLING-MODE-CSA3-FULL-ENHANCED:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_DVB_SCRAMBLING_MODE_CISSA" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MPEGTS-DVB-SCRAMBLING-MODE-CISSA:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_DVB_SCRAMBLING_MODE_ATIS_0" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MPEGTS-DVB-SCRAMBLING-MODE-ATIS-0:CAPS"/>
+ <keyword type="constant" name="GST_MPEGTS_DVB_SCRAMBLING_MODE_ATIS_F" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MPEGTS-DVB-SCRAMBLING-MODE-ATIS-F:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_ISDB_HIERARCHICAL_TRANSMISSION" link="gst-plugins-bad-libs-ISDB-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-ISDB-HIERARCHICAL-TRANSMISSION:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_ISDB_DIGITAL_COPY_CONTROL" link="gst-plugins-bad-libs-ISDB-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-ISDB-DIGITAL-COPY-CONTROL:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_ISDB_NETWORK_IDENTIFICATION" link="gst-plugins-bad-libs-ISDB-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-ISDB-NETWORK-IDENTIFICATION:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_ISDB_PARTIAL_TS_TIME" link="gst-plugins-bad-libs-ISDB-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-ISDB-PARTIAL-TS-TIME:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_ISDB_AUDIO_COMPONENT" link="gst-plugins-bad-libs-ISDB-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-ISDB-AUDIO-COMPONENT:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_ISDB_HYPERLINK" link="gst-plugins-bad-libs-ISDB-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-ISDB-HYPERLINK:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_ISDB_TARGET_REGION" link="gst-plugins-bad-libs-ISDB-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-ISDB-TARGET-REGION:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_ISDB_DATA_CONTENT" link="gst-plugins-bad-libs-ISDB-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-ISDB-DATA-CONTENT:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_ISDB_VIDEO_DECODE_CONTROL" link="gst-plugins-bad-libs-ISDB-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-ISDB-VIDEO-DECODE-CONTROL:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_ISDB_DOWNLOAD_CONTENT" link="gst-plugins-bad-libs-ISDB-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-ISDB-DOWNLOAD-CONTENT:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_ISDB_CA_EMM_TS" link="gst-plugins-bad-libs-ISDB-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-ISDB-CA-EMM-TS:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_ISDB_CA_CONTRACT_INFORMATION" link="gst-plugins-bad-libs-ISDB-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-ISDB-CA-CONTRACT-INFORMATION:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_ISDB_CA_SERVICE" link="gst-plugins-bad-libs-ISDB-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-ISDB-CA-SERVICE:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_ISDB_TS_INFORMATION" link="gst-plugins-bad-libs-ISDB-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-ISDB-TS-INFORMATION:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_ISDB_EXTENDED_BROADCASTER" link="gst-plugins-bad-libs-ISDB-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-ISDB-EXTENDED-BROADCASTER:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_ISDB_LOGO_TRANSMISSION" link="gst-plugins-bad-libs-ISDB-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-ISDB-LOGO-TRANSMISSION:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_ISDB_BASIC_LOCAL_EVENT" link="gst-plugins-bad-libs-ISDB-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-ISDB-BASIC-LOCAL-EVENT:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_ISDB_REFERENCE" link="gst-plugins-bad-libs-ISDB-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-ISDB-REFERENCE:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_ISDB_NODE_RELATION" link="gst-plugins-bad-libs-ISDB-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-ISDB-NODE-RELATION:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_ISDB_SHORT_NODE_INFORMATION" link="gst-plugins-bad-libs-ISDB-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-ISDB-SHORT-NODE-INFORMATION:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_ISDB_STC_REFERENCE" link="gst-plugins-bad-libs-ISDB-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-ISDB-STC-REFERENCE:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_ISDB_SERIES" link="gst-plugins-bad-libs-ISDB-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-ISDB-SERIES:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_ISDB_EVENT_GROUP" link="gst-plugins-bad-libs-ISDB-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-ISDB-EVENT-GROUP:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_ISDB_SI_PARAMETER" link="gst-plugins-bad-libs-ISDB-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-ISDB-SI-PARAMETER:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_ISDB_BROADCASTER_NAME" link="gst-plugins-bad-libs-ISDB-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-ISDB-BROADCASTER-NAME:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_ISDB_COMPONENT_GROUP" link="gst-plugins-bad-libs-ISDB-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-ISDB-COMPONENT-GROUP:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_ISDB_SI_PRIME_TS" link="gst-plugins-bad-libs-ISDB-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-ISDB-SI-PRIME-TS:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_ISDB_BOARD_INFORMATION" link="gst-plugins-bad-libs-ISDB-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-ISDB-BOARD-INFORMATION:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_ISDB_LDT_LINKAGE" link="gst-plugins-bad-libs-ISDB-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-ISDB-LDT-LINKAGE:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_ISDB_CONNECTED_TRANSMISSION" link="gst-plugins-bad-libs-ISDB-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-ISDB-CONNECTED-TRANSMISSION:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_ISDB_CONTENT_AVAILABILITY" link="gst-plugins-bad-libs-ISDB-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-ISDB-CONTENT-AVAILABILITY:CAPS"/>
+ <keyword type="constant" name="GST_MTS_DESC_ISDB_SERVICE_GROUP" link="gst-plugins-bad-libs-ISDB-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-ISDB-SERVICE-GROUP:CAPS"/>
<keyword type="constant" name="GST_GL_API_NONE" link="gst-plugins-bad-libs-GstGLAPI.html#GST-GL-API-NONE:CAPS"/>
<keyword type="constant" name="GST_GL_API_OPENGL" link="gst-plugins-bad-libs-GstGLAPI.html#GST-GL-API-OPENGL:CAPS"/>
<keyword type="constant" name="GST_GL_API_OPENGL3" link="gst-plugins-bad-libs-GstGLAPI.html#GST-GL-API-OPENGL3:CAPS"/>
@@ -1730,8 +1721,6 @@
<keyword type="constant" name="GST_GL_WINDOW_ERROR_FAILED" link="GstGLWindow.html#GST-GL-WINDOW-ERROR-FAILED:CAPS"/>
<keyword type="constant" name="GST_GL_WINDOW_ERROR_OLD_LIBS" link="GstGLWindow.html#GST-GL-WINDOW-ERROR-OLD-LIBS:CAPS"/>
<keyword type="constant" name="GST_GL_WINDOW_ERROR_RESOURCE_UNAVAILABLE" link="GstGLWindow.html#GST-GL-WINDOW-ERROR-RESOURCE-UNAVAILABLE:CAPS"/>
- <keyword type="constant" name="GST_GL_DISPLAY_PROJECTION_ORTHO2D" link="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#GST-GL-DISPLAY-PROJECTION-ORTHO2D:CAPS"/>
- <keyword type="constant" name="GST_GL_DISPLAY_PROJECTION_PERSPECTIVE" link="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#GST-GL-DISPLAY-PROJECTION-PERSPECTIVE:CAPS"/>
<keyword type="constant" name="GST_GL_TEXTURE_TARGET_NONE" link="gst-plugins-bad-libs-OpenGL-Formats.html#GST-GL-TEXTURE-TARGET-NONE:CAPS"/>
<keyword type="constant" name="GST_GL_TEXTURE_TARGET_2D" link="gst-plugins-bad-libs-OpenGL-Formats.html#GST-GL-TEXTURE-TARGET-2D:CAPS"/>
<keyword type="constant" name="GST_GL_TEXTURE_TARGET_RECTANGLE" link="gst-plugins-bad-libs-OpenGL-Formats.html#GST-GL-TEXTURE-TARGET-RECTANGLE:CAPS"/>
@@ -1834,5 +1823,559 @@
<keyword type="constant" name="GST_PHOTOGRAPHY_SHAKE_RISK_LOW" link="gst-plugins-bad-libs-GstPhotography.html#GST-PHOTOGRAPHY-SHAKE-RISK-LOW:CAPS"/>
<keyword type="constant" name="GST_PHOTOGRAPHY_SHAKE_RISK_MEDIUM" link="gst-plugins-bad-libs-GstPhotography.html#GST-PHOTOGRAPHY-SHAKE-RISK-MEDIUM:CAPS"/>
<keyword type="constant" name="GST_PHOTOGRAPHY_SHAKE_RISK_HIGH" link="gst-plugins-bad-libs-GstPhotography.html#GST-PHOTOGRAPHY-SHAKE-RISK-HIGH:CAPS"/>
+ <keyword type="member" name="GstH264NalUnit.ref-idc" link="gst-plugins-bad-libs-h264parser.html#GstH264NalUnit.ref-idc"/>
+ <keyword type="member" name="GstH264NalUnit.type" link="gst-plugins-bad-libs-h264parser.html#GstH264NalUnit.type"/>
+ <keyword type="member" name="GstH264NalUnit.idr-pic-flag" link="gst-plugins-bad-libs-h264parser.html#GstH264NalUnit.idr-pic-flag"/>
+ <keyword type="member" name="GstH264NalUnit.size" link="gst-plugins-bad-libs-h264parser.html#GstH264NalUnit.size"/>
+ <keyword type="member" name="GstH264NalUnit.offset" link="gst-plugins-bad-libs-h264parser.html#GstH264NalUnit.offset"/>
+ <keyword type="member" name="GstH264NalUnit.sc-offset" link="gst-plugins-bad-libs-h264parser.html#GstH264NalUnit.sc-offset"/>
+ <keyword type="member" name="GstH264NalUnit.valid" link="gst-plugins-bad-libs-h264parser.html#GstH264NalUnit.valid"/>
+ <keyword type="member" name="GstH264NalUnit.data" link="gst-plugins-bad-libs-h264parser.html#GstH264NalUnit.data"/>
+ <keyword type="member" name="GstH264NalUnit.header-bytes" link="gst-plugins-bad-libs-h264parser.html#GstH264NalUnit.header-bytes"/>
+ <keyword type="member" name="GstH264NalUnit.extension-type" link="gst-plugins-bad-libs-h264parser.html#GstH264NalUnit.extension-type"/>
+ <keyword type="member" name="GstH264SPS.id" link="gst-plugins-bad-libs-h264parser.html#GstH264SPS.id"/>
+ <keyword type="member" name="GstH264SPS.profile-idc" link="gst-plugins-bad-libs-h264parser.html#GstH264SPS.profile-idc"/>
+ <keyword type="member" name="GstH264SPS.constraint-set0-flag" link="gst-plugins-bad-libs-h264parser.html#GstH264SPS.constraint-set0-flag"/>
+ <keyword type="member" name="GstH264SPS.constraint-set1-flag" link="gst-plugins-bad-libs-h264parser.html#GstH264SPS.constraint-set1-flag"/>
+ <keyword type="member" name="GstH264SPS.constraint-set2-flag" link="gst-plugins-bad-libs-h264parser.html#GstH264SPS.constraint-set2-flag"/>
+ <keyword type="member" name="GstH264SPS.constraint-set3-flag" link="gst-plugins-bad-libs-h264parser.html#GstH264SPS.constraint-set3-flag"/>
+ <keyword type="member" name="GstH264SPS.constraint-set4-flag" link="gst-plugins-bad-libs-h264parser.html#GstH264SPS.constraint-set4-flag"/>
+ <keyword type="member" name="GstH264SPS.constraint-set5-flag" link="gst-plugins-bad-libs-h264parser.html#GstH264SPS.constraint-set5-flag"/>
+ <keyword type="member" name="GstH264SPS.level-idc" link="gst-plugins-bad-libs-h264parser.html#GstH264SPS.level-idc"/>
+ <keyword type="member" name="GstH264SPS.chroma-format-idc" link="gst-plugins-bad-libs-h264parser.html#GstH264SPS.chroma-format-idc"/>
+ <keyword type="member" name="GstH264SPS.separate-colour-plane-flag" link="gst-plugins-bad-libs-h264parser.html#GstH264SPS.separate-colour-plane-flag"/>
+ <keyword type="member" name="GstH264SPS.bit-depth-luma-minus8" link="gst-plugins-bad-libs-h264parser.html#GstH264SPS.bit-depth-luma-minus8"/>
+ <keyword type="member" name="GstH264SPS.bit-depth-chroma-minus8" link="gst-plugins-bad-libs-h264parser.html#GstH264SPS.bit-depth-chroma-minus8"/>
+ <keyword type="member" name="GstH264SPS.qpprime-y-zero-transform-bypass-flag" link="gst-plugins-bad-libs-h264parser.html#GstH264SPS.qpprime-y-zero-transform-bypass-flag"/>
+ <keyword type="member" name="GstH264SPS.scaling-matrix-present-flag" link="gst-plugins-bad-libs-h264parser.html#GstH264SPS.scaling-matrix-present-flag"/>
+ <keyword type="member" name="GstH264SPS.scaling-lists-4x4" link="gst-plugins-bad-libs-h264parser.html#GstH264SPS.scaling-lists-4x4"/>
+ <keyword type="member" name="GstH264SPS.scaling-lists-8x8" link="gst-plugins-bad-libs-h264parser.html#GstH264SPS.scaling-lists-8x8"/>
+ <keyword type="member" name="GstH264SPS.log2-max-frame-num-minus4" link="gst-plugins-bad-libs-h264parser.html#GstH264SPS.log2-max-frame-num-minus4"/>
+ <keyword type="member" name="GstH264SPS.pic-order-cnt-type" link="gst-plugins-bad-libs-h264parser.html#GstH264SPS.pic-order-cnt-type"/>
+ <keyword type="member" name="GstH264SPS.log2-max-pic-order-cnt-lsb-minus4" link="gst-plugins-bad-libs-h264parser.html#GstH264SPS.log2-max-pic-order-cnt-lsb-minus4"/>
+ <keyword type="member" name="GstH264SPS.delta-pic-order-always-zero-flag" link="gst-plugins-bad-libs-h264parser.html#GstH264SPS.delta-pic-order-always-zero-flag"/>
+ <keyword type="member" name="GstH264SPS.offset-for-non-ref-pic" link="gst-plugins-bad-libs-h264parser.html#GstH264SPS.offset-for-non-ref-pic"/>
+ <keyword type="member" name="GstH264SPS.offset-for-top-to-bottom-field" link="gst-plugins-bad-libs-h264parser.html#GstH264SPS.offset-for-top-to-bottom-field"/>
+ <keyword type="member" name="GstH264SPS.num-ref-frames-in-pic-order-cnt-cycle" link="gst-plugins-bad-libs-h264parser.html#GstH264SPS.num-ref-frames-in-pic-order-cnt-cycle"/>
+ <keyword type="member" name="GstH264SPS.offset-for-ref-frame" link="gst-plugins-bad-libs-h264parser.html#GstH264SPS.offset-for-ref-frame"/>
+ <keyword type="member" name="GstH264SPS.num-ref-frames" link="gst-plugins-bad-libs-h264parser.html#GstH264SPS.num-ref-frames"/>
+ <keyword type="member" name="GstH264SPS.gaps-in-frame-num-value-allowed-flag" link="gst-plugins-bad-libs-h264parser.html#GstH264SPS.gaps-in-frame-num-value-allowed-flag"/>
+ <keyword type="member" name="GstH264SPS.pic-width-in-mbs-minus1" link="gst-plugins-bad-libs-h264parser.html#GstH264SPS.pic-width-in-mbs-minus1"/>
+ <keyword type="member" name="GstH264SPS.pic-height-in-map-units-minus1" link="gst-plugins-bad-libs-h264parser.html#GstH264SPS.pic-height-in-map-units-minus1"/>
+ <keyword type="member" name="GstH264SPS.frame-mbs-only-flag" link="gst-plugins-bad-libs-h264parser.html#GstH264SPS.frame-mbs-only-flag"/>
+ <keyword type="member" name="GstH264SPS.mb-adaptive-frame-field-flag" link="gst-plugins-bad-libs-h264parser.html#GstH264SPS.mb-adaptive-frame-field-flag"/>
+ <keyword type="member" name="GstH264SPS.direct-8x8-inference-flag" link="gst-plugins-bad-libs-h264parser.html#GstH264SPS.direct-8x8-inference-flag"/>
+ <keyword type="member" name="GstH264SPS.frame-cropping-flag" link="gst-plugins-bad-libs-h264parser.html#GstH264SPS.frame-cropping-flag"/>
+ <keyword type="member" name="GstH264SPS.frame-crop-left-offset" link="gst-plugins-bad-libs-h264parser.html#GstH264SPS.frame-crop-left-offset"/>
+ <keyword type="member" name="GstH264SPS.frame-crop-right-offset" link="gst-plugins-bad-libs-h264parser.html#GstH264SPS.frame-crop-right-offset"/>
+ <keyword type="member" name="GstH264SPS.frame-crop-top-offset" link="gst-plugins-bad-libs-h264parser.html#GstH264SPS.frame-crop-top-offset"/>
+ <keyword type="member" name="GstH264SPS.frame-crop-bottom-offset" link="gst-plugins-bad-libs-h264parser.html#GstH264SPS.frame-crop-bottom-offset"/>
+ <keyword type="member" name="GstH264SPS.vui-parameters-present-flag" link="gst-plugins-bad-libs-h264parser.html#GstH264SPS.vui-parameters-present-flag"/>
+ <keyword type="member" name="GstH264SPS.vui-parameters" link="gst-plugins-bad-libs-h264parser.html#GstH264SPS.vui-parameters"/>
+ <keyword type="member" name="GstH264SPS.chroma-array-type" link="gst-plugins-bad-libs-h264parser.html#GstH264SPS.chroma-array-type"/>
+ <keyword type="member" name="GstH264SPS.max-frame-num" link="gst-plugins-bad-libs-h264parser.html#GstH264SPS.max-frame-num"/>
+ <keyword type="member" name="GstH264SPS.width" link="gst-plugins-bad-libs-h264parser.html#GstH264SPS.width"/>
+ <keyword type="member" name="GstH264SPS.height" link="gst-plugins-bad-libs-h264parser.html#GstH264SPS.height"/>
+ <keyword type="member" name="GstH264SPS.crop-rect-width" link="gst-plugins-bad-libs-h264parser.html#GstH264SPS.crop-rect-width"/>
+ <keyword type="member" name="GstH264SPS.crop-rect-height" link="gst-plugins-bad-libs-h264parser.html#GstH264SPS.crop-rect-height"/>
+ <keyword type="member" name="GstH264SPS.crop-rect-x" link="gst-plugins-bad-libs-h264parser.html#GstH264SPS.crop-rect-x"/>
+ <keyword type="member" name="GstH264SPS.crop-rect-y" link="gst-plugins-bad-libs-h264parser.html#GstH264SPS.crop-rect-y"/>
+ <keyword type="member" name="GstH264SPS.fps-num-removed" link="gst-plugins-bad-libs-h264parser.html#GstH264SPS.fps-num-removed"/>
+ <keyword type="member" name="GstH264SPS.fps-den-removed" link="gst-plugins-bad-libs-h264parser.html#GstH264SPS.fps-den-removed"/>
+ <keyword type="member" name="GstH264SPS.valid" link="gst-plugins-bad-libs-h264parser.html#GstH264SPS.valid"/>
+ <keyword type="member" name="GstH264SPS.extension-type" link="gst-plugins-bad-libs-h264parser.html#GstH264SPS.extension-type"/>
+ <keyword type="member" name="GstH264HRDParams.cpb-cnt-minus1" link="gst-plugins-bad-libs-h264parser.html#GstH264HRDParams.cpb-cnt-minus1"/>
+ <keyword type="member" name="GstH264HRDParams.bit-rate-scale" link="gst-plugins-bad-libs-h264parser.html#GstH264HRDParams.bit-rate-scale"/>
+ <keyword type="member" name="GstH264HRDParams.cpb-size-scale" link="gst-plugins-bad-libs-h264parser.html#GstH264HRDParams.cpb-size-scale"/>
+ <keyword type="member" name="GstH264HRDParams.bit-rate-value-minus1" link="gst-plugins-bad-libs-h264parser.html#GstH264HRDParams.bit-rate-value-minus1"/>
+ <keyword type="member" name="GstH264HRDParams.cpb-size-value-minus1" link="gst-plugins-bad-libs-h264parser.html#GstH264HRDParams.cpb-size-value-minus1"/>
+ <keyword type="member" name="GstH264HRDParams.cbr-flag" link="gst-plugins-bad-libs-h264parser.html#GstH264HRDParams.cbr-flag"/>
+ <keyword type="member" name="GstH264HRDParams.initial-cpb-removal-delay-length-minus1" link="gst-plugins-bad-libs-h264parser.html#GstH264HRDParams.initial-cpb-removal-delay-length-minus1"/>
+ <keyword type="member" name="GstH264HRDParams.cpb-removal-delay-length-minus1" link="gst-plugins-bad-libs-h264parser.html#GstH264HRDParams.cpb-removal-delay-length-minus1"/>
+ <keyword type="member" name="GstH264HRDParams.dpb-output-delay-length-minus1" link="gst-plugins-bad-libs-h264parser.html#GstH264HRDParams.dpb-output-delay-length-minus1"/>
+ <keyword type="member" name="GstH264HRDParams.time-offset-length" link="gst-plugins-bad-libs-h264parser.html#GstH264HRDParams.time-offset-length"/>
+ <keyword type="member" name="GstH264VUIParams.aspect-ratio-info-present-flag" link="gst-plugins-bad-libs-h264parser.html#GstH264VUIParams.aspect-ratio-info-present-flag"/>
+ <keyword type="member" name="GstH264VUIParams.aspect-ratio-idc" link="gst-plugins-bad-libs-h264parser.html#GstH264VUIParams.aspect-ratio-idc"/>
+ <keyword type="member" name="GstH264VUIParams.sar-width" link="gst-plugins-bad-libs-h264parser.html#GstH264VUIParams.sar-width"/>
+ <keyword type="member" name="GstH264VUIParams.sar-height" link="gst-plugins-bad-libs-h264parser.html#GstH264VUIParams.sar-height"/>
+ <keyword type="member" name="GstH264VUIParams.overscan-info-present-flag" link="gst-plugins-bad-libs-h264parser.html#GstH264VUIParams.overscan-info-present-flag"/>
+ <keyword type="member" name="GstH264VUIParams.overscan-appropriate-flag" link="gst-plugins-bad-libs-h264parser.html#GstH264VUIParams.overscan-appropriate-flag"/>
+ <keyword type="member" name="GstH264VUIParams.video-signal-type-present-flag" link="gst-plugins-bad-libs-h264parser.html#GstH264VUIParams.video-signal-type-present-flag"/>
+ <keyword type="member" name="GstH264VUIParams.video-format" link="gst-plugins-bad-libs-h264parser.html#GstH264VUIParams.video-format"/>
+ <keyword type="member" name="GstH264VUIParams.video-full-range-flag" link="gst-plugins-bad-libs-h264parser.html#GstH264VUIParams.video-full-range-flag"/>
+ <keyword type="member" name="GstH264VUIParams.colour-description-present-flag" link="gst-plugins-bad-libs-h264parser.html#GstH264VUIParams.colour-description-present-flag"/>
+ <keyword type="member" name="GstH264VUIParams.colour-primaries" link="gst-plugins-bad-libs-h264parser.html#GstH264VUIParams.colour-primaries"/>
+ <keyword type="member" name="GstH264VUIParams.transfer-characteristics" link="gst-plugins-bad-libs-h264parser.html#GstH264VUIParams.transfer-characteristics"/>
+ <keyword type="member" name="GstH264VUIParams.matrix-coefficients" link="gst-plugins-bad-libs-h264parser.html#GstH264VUIParams.matrix-coefficients"/>
+ <keyword type="member" name="GstH264VUIParams.chroma-loc-info-present-flag" link="gst-plugins-bad-libs-h264parser.html#GstH264VUIParams.chroma-loc-info-present-flag"/>
+ <keyword type="member" name="GstH264VUIParams.chroma-sample-loc-type-top-field" link="gst-plugins-bad-libs-h264parser.html#GstH264VUIParams.chroma-sample-loc-type-top-field"/>
+ <keyword type="member" name="GstH264VUIParams.chroma-sample-loc-type-bottom-field" link="gst-plugins-bad-libs-h264parser.html#GstH264VUIParams.chroma-sample-loc-type-bottom-field"/>
+ <keyword type="member" name="GstH264VUIParams.timing-info-present-flag" link="gst-plugins-bad-libs-h264parser.html#GstH264VUIParams.timing-info-present-flag"/>
+ <keyword type="member" name="GstH264VUIParams.num-units-in-tick" link="gst-plugins-bad-libs-h264parser.html#GstH264VUIParams.num-units-in-tick"/>
+ <keyword type="member" name="GstH264VUIParams.time-scale" link="gst-plugins-bad-libs-h264parser.html#GstH264VUIParams.time-scale"/>
+ <keyword type="member" name="GstH264VUIParams.fixed-frame-rate-flag" link="gst-plugins-bad-libs-h264parser.html#GstH264VUIParams.fixed-frame-rate-flag"/>
+ <keyword type="member" name="GstH264VUIParams.nal-hrd-parameters-present-flag" link="gst-plugins-bad-libs-h264parser.html#GstH264VUIParams.nal-hrd-parameters-present-flag"/>
+ <keyword type="member" name="GstH264VUIParams.nal-hrd-parameters" link="gst-plugins-bad-libs-h264parser.html#GstH264VUIParams.nal-hrd-parameters"/>
+ <keyword type="member" name="GstH264VUIParams.vcl-hrd-parameters-present-flag" link="gst-plugins-bad-libs-h264parser.html#GstH264VUIParams.vcl-hrd-parameters-present-flag"/>
+ <keyword type="member" name="GstH264VUIParams.vcl-hrd-parameters" link="gst-plugins-bad-libs-h264parser.html#GstH264VUIParams.vcl-hrd-parameters"/>
+ <keyword type="member" name="GstH264VUIParams.low-delay-hrd-flag" link="gst-plugins-bad-libs-h264parser.html#GstH264VUIParams.low-delay-hrd-flag"/>
+ <keyword type="member" name="GstH264VUIParams.pic-struct-present-flag" link="gst-plugins-bad-libs-h264parser.html#GstH264VUIParams.pic-struct-present-flag"/>
+ <keyword type="member" name="GstH264VUIParams.bitstream-restriction-flag" link="gst-plugins-bad-libs-h264parser.html#GstH264VUIParams.bitstream-restriction-flag"/>
+ <keyword type="member" name="GstH264VUIParams.motion-vectors-over-pic-boundaries-flag" link="gst-plugins-bad-libs-h264parser.html#GstH264VUIParams.motion-vectors-over-pic-boundaries-flag"/>
+ <keyword type="member" name="GstH264VUIParams.max-bytes-per-pic-denom" link="gst-plugins-bad-libs-h264parser.html#GstH264VUIParams.max-bytes-per-pic-denom"/>
+ <keyword type="member" name="GstH264VUIParams.max-bits-per-mb-denom" link="gst-plugins-bad-libs-h264parser.html#GstH264VUIParams.max-bits-per-mb-denom"/>
+ <keyword type="member" name="GstH264VUIParams.log2-max-mv-length-horizontal" link="gst-plugins-bad-libs-h264parser.html#GstH264VUIParams.log2-max-mv-length-horizontal"/>
+ <keyword type="member" name="GstH264VUIParams.log2-max-mv-length-vertical" link="gst-plugins-bad-libs-h264parser.html#GstH264VUIParams.log2-max-mv-length-vertical"/>
+ <keyword type="member" name="GstH264VUIParams.num-reorder-frames" link="gst-plugins-bad-libs-h264parser.html#GstH264VUIParams.num-reorder-frames"/>
+ <keyword type="member" name="GstH264VUIParams.max-dec-frame-buffering" link="gst-plugins-bad-libs-h264parser.html#GstH264VUIParams.max-dec-frame-buffering"/>
+ <keyword type="member" name="GstH264VUIParams.par-n" link="gst-plugins-bad-libs-h264parser.html#GstH264VUIParams.par-n"/>
+ <keyword type="member" name="GstH264VUIParams.par-d" link="gst-plugins-bad-libs-h264parser.html#GstH264VUIParams.par-d"/>
+ <keyword type="member" name="GstJpegSegment.marker" link="gst-plugins-bad-libs-jpegparser.html#GstJpegSegment.marker"/>
+ <keyword type="member" name="GstJpegSegment.data" link="gst-plugins-bad-libs-jpegparser.html#GstJpegSegment.data"/>
+ <keyword type="member" name="GstJpegSegment.offset" link="gst-plugins-bad-libs-jpegparser.html#GstJpegSegment.offset"/>
+ <keyword type="member" name="GstJpegSegment.size" link="gst-plugins-bad-libs-jpegparser.html#GstJpegSegment.size"/>
+ <keyword type="member" name="GstJpegFrameHdr.sample-precision" link="gst-plugins-bad-libs-jpegparser.html#GstJpegFrameHdr.sample-precision"/>
+ <keyword type="member" name="GstJpegFrameHdr.width" link="gst-plugins-bad-libs-jpegparser.html#GstJpegFrameHdr.width"/>
+ <keyword type="member" name="GstJpegFrameHdr.height" link="gst-plugins-bad-libs-jpegparser.html#GstJpegFrameHdr.height"/>
+ <keyword type="member" name="GstJpegFrameHdr.num-components" link="gst-plugins-bad-libs-jpegparser.html#GstJpegFrameHdr.num-components"/>
+ <keyword type="member" name="GstJpegFrameHdr.components" link="gst-plugins-bad-libs-jpegparser.html#GstJpegFrameHdr.components"/>
+ <keyword type="member" name="GstJpegFrameComponent.identifier" link="gst-plugins-bad-libs-jpegparser.html#GstJpegFrameComponent.identifier"/>
+ <keyword type="member" name="GstJpegFrameComponent.horizontal-factor" link="gst-plugins-bad-libs-jpegparser.html#GstJpegFrameComponent.horizontal-factor"/>
+ <keyword type="member" name="GstJpegFrameComponent.vertical-factor" link="gst-plugins-bad-libs-jpegparser.html#GstJpegFrameComponent.vertical-factor"/>
+ <keyword type="member" name="GstJpegFrameComponent.quant-table-selector" link="gst-plugins-bad-libs-jpegparser.html#GstJpegFrameComponent.quant-table-selector"/>
+ <keyword type="member" name="GstJpegScanHdr.num-components" link="gst-plugins-bad-libs-jpegparser.html#GstJpegScanHdr.num-components"/>
+ <keyword type="member" name="GstJpegScanHdr.components" link="gst-plugins-bad-libs-jpegparser.html#GstJpegScanHdr.components"/>
+ <keyword type="member" name="GstJpegScanComponent.component-selector" link="gst-plugins-bad-libs-jpegparser.html#GstJpegScanComponent.component-selector"/>
+ <keyword type="member" name="GstJpegScanComponent.dc-selector" link="gst-plugins-bad-libs-jpegparser.html#GstJpegScanComponent.dc-selector"/>
+ <keyword type="member" name="GstJpegScanComponent.ac-selector" link="gst-plugins-bad-libs-jpegparser.html#GstJpegScanComponent.ac-selector"/>
+ <keyword type="member" name="GstJpegHuffmanTables.dc-tables" link="gst-plugins-bad-libs-jpegparser.html#GstJpegHuffmanTables.dc-tables"/>
+ <keyword type="member" name="GstJpegHuffmanTables.ac-tables" link="gst-plugins-bad-libs-jpegparser.html#GstJpegHuffmanTables.ac-tables"/>
+ <keyword type="member" name="GstJpegHuffmanTable.huf-bits" link="gst-plugins-bad-libs-jpegparser.html#GstJpegHuffmanTable.huf-bits"/>
+ <keyword type="member" name="GstJpegHuffmanTable.huf-values" link="gst-plugins-bad-libs-jpegparser.html#GstJpegHuffmanTable.huf-values"/>
+ <keyword type="member" name="GstJpegHuffmanTable.valid" link="gst-plugins-bad-libs-jpegparser.html#GstJpegHuffmanTable.valid"/>
+ <keyword type="member" name="GstJpegQuantTable.quant-precision" link="gst-plugins-bad-libs-jpegparser.html#GstJpegQuantTable.quant-precision"/>
+ <keyword type="member" name="GstJpegQuantTable.quant-table" link="gst-plugins-bad-libs-jpegparser.html#GstJpegQuantTable.quant-table"/>
+ <keyword type="member" name="GstJpegQuantTable.valid" link="gst-plugins-bad-libs-jpegparser.html#GstJpegQuantTable.valid"/>
+ <keyword type="member" name="GstMpegVideoSequenceHdr.width" link="gst-plugins-bad-libs-mpegvideoparser.html#GstMpegVideoSequenceHdr.width"/>
+ <keyword type="member" name="GstMpegVideoSequenceHdr.height" link="gst-plugins-bad-libs-mpegvideoparser.html#GstMpegVideoSequenceHdr.height"/>
+ <keyword type="member" name="GstMpegVideoSequenceHdr.aspect-ratio-info" link="gst-plugins-bad-libs-mpegvideoparser.html#GstMpegVideoSequenceHdr.aspect-ratio-info"/>
+ <keyword type="member" name="GstMpegVideoSequenceHdr.frame-rate-code" link="gst-plugins-bad-libs-mpegvideoparser.html#GstMpegVideoSequenceHdr.frame-rate-code"/>
+ <keyword type="member" name="GstMpegVideoSequenceHdr.bitrate-value" link="gst-plugins-bad-libs-mpegvideoparser.html#GstMpegVideoSequenceHdr.bitrate-value"/>
+ <keyword type="member" name="GstMpegVideoSequenceHdr.vbv-buffer-size-value" link="gst-plugins-bad-libs-mpegvideoparser.html#GstMpegVideoSequenceHdr.vbv-buffer-size-value"/>
+ <keyword type="member" name="GstMpegVideoSequenceHdr.constrained-parameters-flag" link="gst-plugins-bad-libs-mpegvideoparser.html#GstMpegVideoSequenceHdr.constrained-parameters-flag"/>
+ <keyword type="member" name="GstMpegVideoSequenceHdr.load-intra-quantiser-matrix" link="gst-plugins-bad-libs-mpegvideoparser.html#GstMpegVideoSequenceHdr.load-intra-quantiser-matrix"/>
+ <keyword type="member" name="GstMpegVideoSequenceHdr.intra-quantizer-matrix" link="gst-plugins-bad-libs-mpegvideoparser.html#GstMpegVideoSequenceHdr.intra-quantizer-matrix"/>
+ <keyword type="member" name="GstMpegVideoSequenceHdr.load-non-intra-quantiser-matrix" link="gst-plugins-bad-libs-mpegvideoparser.html#GstMpegVideoSequenceHdr.load-non-intra-quantiser-matrix"/>
+ <keyword type="member" name="GstMpegVideoSequenceHdr.non-intra-quantizer-matrix" link="gst-plugins-bad-libs-mpegvideoparser.html#GstMpegVideoSequenceHdr.non-intra-quantizer-matrix"/>
+ <keyword type="member" name="GstMpegVideoSequenceHdr.par-w" link="gst-plugins-bad-libs-mpegvideoparser.html#GstMpegVideoSequenceHdr.par-w"/>
+ <keyword type="member" name="GstMpegVideoSequenceHdr.par-h" link="gst-plugins-bad-libs-mpegvideoparser.html#GstMpegVideoSequenceHdr.par-h"/>
+ <keyword type="member" name="GstMpegVideoSequenceHdr.fps-n" link="gst-plugins-bad-libs-mpegvideoparser.html#GstMpegVideoSequenceHdr.fps-n"/>
+ <keyword type="member" name="GstMpegVideoSequenceHdr.fps-d" link="gst-plugins-bad-libs-mpegvideoparser.html#GstMpegVideoSequenceHdr.fps-d"/>
+ <keyword type="member" name="GstMpegVideoSequenceHdr.bitrate" link="gst-plugins-bad-libs-mpegvideoparser.html#GstMpegVideoSequenceHdr.bitrate"/>
+ <keyword type="member" name="GstMpegVideoSequenceExt.profile" link="gst-plugins-bad-libs-mpegvideoparser.html#GstMpegVideoSequenceExt.profile"/>
+ <keyword type="member" name="GstMpegVideoSequenceExt.level" link="gst-plugins-bad-libs-mpegvideoparser.html#GstMpegVideoSequenceExt.level"/>
+ <keyword type="member" name="GstMpegVideoSequenceExt.progressive" link="gst-plugins-bad-libs-mpegvideoparser.html#GstMpegVideoSequenceExt.progressive"/>
+ <keyword type="member" name="GstMpegVideoSequenceExt.chroma-format" link="gst-plugins-bad-libs-mpegvideoparser.html#GstMpegVideoSequenceExt.chroma-format"/>
+ <keyword type="member" name="GstMpegVideoSequenceExt.horiz-size-ext" link="gst-plugins-bad-libs-mpegvideoparser.html#GstMpegVideoSequenceExt.horiz-size-ext"/>
+ <keyword type="member" name="GstMpegVideoSequenceExt.vert-size-ext" link="gst-plugins-bad-libs-mpegvideoparser.html#GstMpegVideoSequenceExt.vert-size-ext"/>
+ <keyword type="member" name="GstMpegVideoSequenceExt.bitrate-ext" link="gst-plugins-bad-libs-mpegvideoparser.html#GstMpegVideoSequenceExt.bitrate-ext"/>
+ <keyword type="member" name="GstMpegVideoSequenceExt.vbv-buffer-size-extension" link="gst-plugins-bad-libs-mpegvideoparser.html#GstMpegVideoSequenceExt.vbv-buffer-size-extension"/>
+ <keyword type="member" name="GstMpegVideoSequenceExt.low-delay" link="gst-plugins-bad-libs-mpegvideoparser.html#GstMpegVideoSequenceExt.low-delay"/>
+ <keyword type="member" name="GstMpegVideoSequenceExt.fps-n-ext" link="gst-plugins-bad-libs-mpegvideoparser.html#GstMpegVideoSequenceExt.fps-n-ext"/>
+ <keyword type="member" name="GstMpegVideoSequenceExt.fps-d-ext" link="gst-plugins-bad-libs-mpegvideoparser.html#GstMpegVideoSequenceExt.fps-d-ext"/>
+ <keyword type="member" name="GstMpegVideoSequenceExt.profile-level-escape-bit" link="gst-plugins-bad-libs-mpegvideoparser.html#GstMpegVideoSequenceExt.profile-level-escape-bit"/>
+ <keyword type="member" name="GstMpegVideoPictureHdr.tsn" link="gst-plugins-bad-libs-mpegvideoparser.html#GstMpegVideoPictureHdr.tsn"/>
+ <keyword type="member" name="GstMpegVideoPictureHdr.pic-type" link="gst-plugins-bad-libs-mpegvideoparser.html#GstMpegVideoPictureHdr.pic-type"/>
+ <keyword type="member" name="GstMpegVideoPictureHdr.vbv-delay" link="gst-plugins-bad-libs-mpegvideoparser.html#GstMpegVideoPictureHdr.vbv-delay"/>
+ <keyword type="member" name="GstMpegVideoPictureHdr.full-pel-forward-vector" link="gst-plugins-bad-libs-mpegvideoparser.html#GstMpegVideoPictureHdr.full-pel-forward-vector"/>
+ <keyword type="member" name="GstMpegVideoPictureHdr.full-pel-backward-vector" link="gst-plugins-bad-libs-mpegvideoparser.html#GstMpegVideoPictureHdr.full-pel-backward-vector"/>
+ <keyword type="member" name="GstMpegVideoPictureHdr.f-code" link="gst-plugins-bad-libs-mpegvideoparser.html#GstMpegVideoPictureHdr.f-code"/>
+ <keyword type="member" name="GstMpegVideoGop.drop-frame-flag" link="gst-plugins-bad-libs-mpegvideoparser.html#GstMpegVideoGop.drop-frame-flag"/>
+ <keyword type="member" name="GstMpegVideoGop.hour" link="gst-plugins-bad-libs-mpegvideoparser.html#GstMpegVideoGop.hour"/>
+ <keyword type="member" name="GstMpegVideoGop.minute" link="gst-plugins-bad-libs-mpegvideoparser.html#GstMpegVideoGop.minute"/>
+ <keyword type="member" name="GstMpegVideoGop.second" link="gst-plugins-bad-libs-mpegvideoparser.html#GstMpegVideoGop.second"/>
+ <keyword type="member" name="GstMpegVideoGop.frame" link="gst-plugins-bad-libs-mpegvideoparser.html#GstMpegVideoGop.frame"/>
+ <keyword type="member" name="GstMpegVideoGop.closed-gop" link="gst-plugins-bad-libs-mpegvideoparser.html#GstMpegVideoGop.closed-gop"/>
+ <keyword type="member" name="GstMpegVideoGop.broken-link" link="gst-plugins-bad-libs-mpegvideoparser.html#GstMpegVideoGop.broken-link"/>
+ <keyword type="member" name="GstMpegVideoPictureExt.f-code" link="gst-plugins-bad-libs-mpegvideoparser.html#GstMpegVideoPictureExt.f-code"/>
+ <keyword type="member" name="GstMpegVideoPictureExt.intra-dc-precision" link="gst-plugins-bad-libs-mpegvideoparser.html#GstMpegVideoPictureExt.intra-dc-precision"/>
+ <keyword type="member" name="GstMpegVideoPictureExt.picture-structure" link="gst-plugins-bad-libs-mpegvideoparser.html#GstMpegVideoPictureExt.picture-structure"/>
+ <keyword type="member" name="GstMpegVideoPictureExt.top-field-first" link="gst-plugins-bad-libs-mpegvideoparser.html#GstMpegVideoPictureExt.top-field-first"/>
+ <keyword type="member" name="GstMpegVideoPictureExt.frame-pred-frame-dct" link="gst-plugins-bad-libs-mpegvideoparser.html#GstMpegVideoPictureExt.frame-pred-frame-dct"/>
+ <keyword type="member" name="GstMpegVideoPictureExt.concealment-motion-vectors" link="gst-plugins-bad-libs-mpegvideoparser.html#GstMpegVideoPictureExt.concealment-motion-vectors"/>
+ <keyword type="member" name="GstMpegVideoPictureExt.q-scale-type" link="gst-plugins-bad-libs-mpegvideoparser.html#GstMpegVideoPictureExt.q-scale-type"/>
+ <keyword type="member" name="GstMpegVideoPictureExt.intra-vlc-format" link="gst-plugins-bad-libs-mpegvideoparser.html#GstMpegVideoPictureExt.intra-vlc-format"/>
+ <keyword type="member" name="GstMpegVideoPictureExt.alternate-scan" link="gst-plugins-bad-libs-mpegvideoparser.html#GstMpegVideoPictureExt.alternate-scan"/>
+ <keyword type="member" name="GstMpegVideoPictureExt.repeat-first-field" link="gst-plugins-bad-libs-mpegvideoparser.html#GstMpegVideoPictureExt.repeat-first-field"/>
+ <keyword type="member" name="GstMpegVideoPictureExt.chroma-420-type" link="gst-plugins-bad-libs-mpegvideoparser.html#GstMpegVideoPictureExt.chroma-420-type"/>
+ <keyword type="member" name="GstMpegVideoPictureExt.progressive-frame" link="gst-plugins-bad-libs-mpegvideoparser.html#GstMpegVideoPictureExt.progressive-frame"/>
+ <keyword type="member" name="GstMpegVideoPictureExt.composite-display" link="gst-plugins-bad-libs-mpegvideoparser.html#GstMpegVideoPictureExt.composite-display"/>
+ <keyword type="member" name="GstMpegVideoPictureExt.v-axis" link="gst-plugins-bad-libs-mpegvideoparser.html#GstMpegVideoPictureExt.v-axis"/>
+ <keyword type="member" name="GstMpegVideoPictureExt.field-sequence" link="gst-plugins-bad-libs-mpegvideoparser.html#GstMpegVideoPictureExt.field-sequence"/>
+ <keyword type="member" name="GstMpegVideoPictureExt.sub-carrier" link="gst-plugins-bad-libs-mpegvideoparser.html#GstMpegVideoPictureExt.sub-carrier"/>
+ <keyword type="member" name="GstMpegVideoPictureExt.burst-amplitude" link="gst-plugins-bad-libs-mpegvideoparser.html#GstMpegVideoPictureExt.burst-amplitude"/>
+ <keyword type="member" name="GstMpegVideoPictureExt.sub-carrier-phase" link="gst-plugins-bad-libs-mpegvideoparser.html#GstMpegVideoPictureExt.sub-carrier-phase"/>
+ <keyword type="member" name="GstMpeg4Packet.data" link="gst-plugins-bad-libs-mpeg4parser.html#GstMpeg4Packet.data"/>
+ <keyword type="member" name="GstMpeg4Packet.offset" link="gst-plugins-bad-libs-mpeg4parser.html#GstMpeg4Packet.offset"/>
+ <keyword type="member" name="GstMpeg4Packet.size" link="gst-plugins-bad-libs-mpeg4parser.html#GstMpeg4Packet.size"/>
+ <keyword type="member" name="GstMpeg4Packet.marker-size" link="gst-plugins-bad-libs-mpeg4parser.html#GstMpeg4Packet.marker-size"/>
+ <keyword type="member" name="GstMpeg4Packet.type" link="gst-plugins-bad-libs-mpeg4parser.html#GstMpeg4Packet.type"/>
+ <keyword type="member" name="GstMpeg4VideoPacketHdr.header-extension-code" link="gst-plugins-bad-libs-mpeg4parser.html#GstMpeg4VideoPacketHdr.header-extension-code"/>
+ <keyword type="member" name="GstMpeg4VideoPacketHdr.macroblock-number" link="gst-plugins-bad-libs-mpeg4parser.html#GstMpeg4VideoPacketHdr.macroblock-number"/>
+ <keyword type="member" name="GstMpeg4VideoPacketHdr.quant-scale" link="gst-plugins-bad-libs-mpeg4parser.html#GstMpeg4VideoPacketHdr.quant-scale"/>
+ <keyword type="member" name="GstMpeg4VideoPacketHdr.size" link="gst-plugins-bad-libs-mpeg4parser.html#GstMpeg4VideoPacketHdr.size"/>
+ <keyword type="member" name="GstVC1PicAdvanced.fcm" link="gst-plugins-bad-libs-vc1parser.html#GstVC1PicAdvanced.fcm"/>
+ <keyword type="member" name="GstVC1PicAdvanced.tfcntr" link="gst-plugins-bad-libs-vc1parser.html#GstVC1PicAdvanced.tfcntr"/>
+ <keyword type="member" name="GstVC1PicAdvanced.rptfrm" link="gst-plugins-bad-libs-vc1parser.html#GstVC1PicAdvanced.rptfrm"/>
+ <keyword type="member" name="GstVC1PicAdvanced.tff" link="gst-plugins-bad-libs-vc1parser.html#GstVC1PicAdvanced.tff"/>
+ <keyword type="member" name="GstVC1PicAdvanced.rff" link="gst-plugins-bad-libs-vc1parser.html#GstVC1PicAdvanced.rff"/>
+ <keyword type="member" name="GstVC1PicAdvanced.ps-present" link="gst-plugins-bad-libs-vc1parser.html#GstVC1PicAdvanced.ps-present"/>
+ <keyword type="member" name="GstVC1PicAdvanced.ps-hoffset" link="gst-plugins-bad-libs-vc1parser.html#GstVC1PicAdvanced.ps-hoffset"/>
+ <keyword type="member" name="GstVC1PicAdvanced.ps-voffset" link="gst-plugins-bad-libs-vc1parser.html#GstVC1PicAdvanced.ps-voffset"/>
+ <keyword type="member" name="GstVC1PicAdvanced.ps-width" link="gst-plugins-bad-libs-vc1parser.html#GstVC1PicAdvanced.ps-width"/>
+ <keyword type="member" name="GstVC1PicAdvanced.ps-height" link="gst-plugins-bad-libs-vc1parser.html#GstVC1PicAdvanced.ps-height"/>
+ <keyword type="member" name="GstVC1PicAdvanced.rndctrl" link="gst-plugins-bad-libs-vc1parser.html#GstVC1PicAdvanced.rndctrl"/>
+ <keyword type="member" name="GstVC1PicAdvanced.uvsamp" link="gst-plugins-bad-libs-vc1parser.html#GstVC1PicAdvanced.uvsamp"/>
+ <keyword type="member" name="GstVC1PicAdvanced.postproc" link="gst-plugins-bad-libs-vc1parser.html#GstVC1PicAdvanced.postproc"/>
+ <keyword type="member" name="GstVC1PicAdvanced.mvrange" link="gst-plugins-bad-libs-vc1parser.html#GstVC1PicAdvanced.mvrange"/>
+ <keyword type="member" name="GstVC1PicAdvanced.mvmode" link="gst-plugins-bad-libs-vc1parser.html#GstVC1PicAdvanced.mvmode"/>
+ <keyword type="member" name="GstVC1PicAdvanced.mvtab" link="gst-plugins-bad-libs-vc1parser.html#GstVC1PicAdvanced.mvtab"/>
+ <keyword type="member" name="GstVC1PicAdvanced.cbptab" link="gst-plugins-bad-libs-vc1parser.html#GstVC1PicAdvanced.cbptab"/>
+ <keyword type="member" name="GstVC1PicAdvanced.ttmbf" link="gst-plugins-bad-libs-vc1parser.html#GstVC1PicAdvanced.ttmbf"/>
+ <keyword type="member" name="GstVC1PicAdvanced.ttfrm" link="gst-plugins-bad-libs-vc1parser.html#GstVC1PicAdvanced.ttfrm"/>
+ <keyword type="member" name="GstVC1PicAdvanced.bfraction" link="gst-plugins-bad-libs-vc1parser.html#GstVC1PicAdvanced.bfraction"/>
+ <keyword type="member" name="GstVC1PicAdvanced.mvmode2" link="gst-plugins-bad-libs-vc1parser.html#GstVC1PicAdvanced.mvmode2"/>
+ <keyword type="member" name="GstVC1PicAdvanced.lumscale" link="gst-plugins-bad-libs-vc1parser.html#GstVC1PicAdvanced.lumscale"/>
+ <keyword type="member" name="GstVC1PicAdvanced.lumshift" link="gst-plugins-bad-libs-vc1parser.html#GstVC1PicAdvanced.lumshift"/>
+ <keyword type="member" name="GstVC1PicAdvanced.bf" link="gst-plugins-bad-libs-vc1parser.html#GstVC1PicAdvanced.bf"/>
+ <keyword type="member" name="GstVC1PicAdvanced.condover" link="gst-plugins-bad-libs-vc1parser.html#GstVC1PicAdvanced.condover"/>
+ <keyword type="member" name="GstVC1PicAdvanced.transacfrm2" link="gst-plugins-bad-libs-vc1parser.html#GstVC1PicAdvanced.transacfrm2"/>
+ <keyword type="member" name="GstVC1PicAdvanced.acpred" link="gst-plugins-bad-libs-vc1parser.html#GstVC1PicAdvanced.acpred"/>
+ <keyword type="member" name="GstVC1PicAdvanced.overflags" link="gst-plugins-bad-libs-vc1parser.html#GstVC1PicAdvanced.overflags"/>
+ <keyword type="member" name="GstVC1PicAdvanced.mvtypemb" link="gst-plugins-bad-libs-vc1parser.html#GstVC1PicAdvanced.mvtypemb"/>
+ <keyword type="member" name="GstVC1PicAdvanced.skipmb" link="gst-plugins-bad-libs-vc1parser.html#GstVC1PicAdvanced.skipmb"/>
+ <keyword type="member" name="GstVC1PicAdvanced.directmb" link="gst-plugins-bad-libs-vc1parser.html#GstVC1PicAdvanced.directmb"/>
+ <keyword type="member" name="GstVC1PicAdvanced.forwardmb" link="gst-plugins-bad-libs-vc1parser.html#GstVC1PicAdvanced.forwardmb"/>
+ <keyword type="member" name="GstVC1PicAdvanced.fieldtx" link="gst-plugins-bad-libs-vc1parser.html#GstVC1PicAdvanced.fieldtx"/>
+ <keyword type="member" name="GstVC1PicAdvanced.intcomp" link="gst-plugins-bad-libs-vc1parser.html#GstVC1PicAdvanced.intcomp"/>
+ <keyword type="member" name="GstVC1PicAdvanced.dmvrange" link="gst-plugins-bad-libs-vc1parser.html#GstVC1PicAdvanced.dmvrange"/>
+ <keyword type="member" name="GstVC1PicAdvanced.mbmodetab" link="gst-plugins-bad-libs-vc1parser.html#GstVC1PicAdvanced.mbmodetab"/>
+ <keyword type="member" name="GstVC1PicAdvanced.imvtab" link="gst-plugins-bad-libs-vc1parser.html#GstVC1PicAdvanced.imvtab"/>
+ <keyword type="member" name="GstVC1PicAdvanced.icbptab" link="gst-plugins-bad-libs-vc1parser.html#GstVC1PicAdvanced.icbptab"/>
+ <keyword type="member" name="GstVC1PicAdvanced.mvbptab2" link="gst-plugins-bad-libs-vc1parser.html#GstVC1PicAdvanced.mvbptab2"/>
+ <keyword type="member" name="GstVC1PicAdvanced.mvbptab4" link="gst-plugins-bad-libs-vc1parser.html#GstVC1PicAdvanced.mvbptab4"/>
+ <keyword type="member" name="GstVC1PicAdvanced.mvswitch4" link="gst-plugins-bad-libs-vc1parser.html#GstVC1PicAdvanced.mvswitch4"/>
+ <keyword type="member" name="GstVC1PicAdvanced.refdist" link="gst-plugins-bad-libs-vc1parser.html#GstVC1PicAdvanced.refdist"/>
+ <keyword type="member" name="GstVC1PicAdvanced.fptype" link="gst-plugins-bad-libs-vc1parser.html#GstVC1PicAdvanced.fptype"/>
+ <keyword type="member" name="GstVC1PicAdvanced.numref" link="gst-plugins-bad-libs-vc1parser.html#GstVC1PicAdvanced.numref"/>
+ <keyword type="member" name="GstVC1PicAdvanced.reffield" link="gst-plugins-bad-libs-vc1parser.html#GstVC1PicAdvanced.reffield"/>
+ <keyword type="member" name="GstVC1PicAdvanced.lumscale2" link="gst-plugins-bad-libs-vc1parser.html#GstVC1PicAdvanced.lumscale2"/>
+ <keyword type="member" name="GstVC1PicAdvanced.lumshift2" link="gst-plugins-bad-libs-vc1parser.html#GstVC1PicAdvanced.lumshift2"/>
+ <keyword type="member" name="GstVC1PicAdvanced.intcompfield" link="gst-plugins-bad-libs-vc1parser.html#GstVC1PicAdvanced.intcompfield"/>
+ <keyword type="member" name="GstVC1PicSimpleMain.frmcnt" link="gst-plugins-bad-libs-vc1parser.html#GstVC1PicSimpleMain.frmcnt"/>
+ <keyword type="member" name="GstVC1PicSimpleMain.mvrange" link="gst-plugins-bad-libs-vc1parser.html#GstVC1PicSimpleMain.mvrange"/>
+ <keyword type="member" name="GstVC1PicSimpleMain.rangeredfrm" link="gst-plugins-bad-libs-vc1parser.html#GstVC1PicSimpleMain.rangeredfrm"/>
+ <keyword type="member" name="GstVC1PicSimpleMain.respic" link="gst-plugins-bad-libs-vc1parser.html#GstVC1PicSimpleMain.respic"/>
+ <keyword type="member" name="GstVC1PicSimpleMain.transacfrm2" link="gst-plugins-bad-libs-vc1parser.html#GstVC1PicSimpleMain.transacfrm2"/>
+ <keyword type="member" name="GstVC1PicSimpleMain.bf" link="gst-plugins-bad-libs-vc1parser.html#GstVC1PicSimpleMain.bf"/>
+ <keyword type="member" name="GstVC1PicSimpleMain.mvmode" link="gst-plugins-bad-libs-vc1parser.html#GstVC1PicSimpleMain.mvmode"/>
+ <keyword type="member" name="GstVC1PicSimpleMain.mvtab" link="gst-plugins-bad-libs-vc1parser.html#GstVC1PicSimpleMain.mvtab"/>
+ <keyword type="member" name="GstVC1PicSimpleMain.ttmbf" link="gst-plugins-bad-libs-vc1parser.html#GstVC1PicSimpleMain.ttmbf"/>
+ <keyword type="member" name="GstVC1PicSimpleMain.mvmode2" link="gst-plugins-bad-libs-vc1parser.html#GstVC1PicSimpleMain.mvmode2"/>
+ <keyword type="member" name="GstVC1PicSimpleMain.lumscale" link="gst-plugins-bad-libs-vc1parser.html#GstVC1PicSimpleMain.lumscale"/>
+ <keyword type="member" name="GstVC1PicSimpleMain.lumshift" link="gst-plugins-bad-libs-vc1parser.html#GstVC1PicSimpleMain.lumshift"/>
+ <keyword type="member" name="GstVC1PicSimpleMain.cbptab" link="gst-plugins-bad-libs-vc1parser.html#GstVC1PicSimpleMain.cbptab"/>
+ <keyword type="member" name="GstVC1PicSimpleMain.ttfrm" link="gst-plugins-bad-libs-vc1parser.html#GstVC1PicSimpleMain.ttfrm"/>
+ <keyword type="member" name="GstVC1PicSimpleMain.bfraction" link="gst-plugins-bad-libs-vc1parser.html#GstVC1PicSimpleMain.bfraction"/>
+ <keyword type="member" name="GstVC1PicSimpleMain.mvtypemb" link="gst-plugins-bad-libs-vc1parser.html#GstVC1PicSimpleMain.mvtypemb"/>
+ <keyword type="member" name="GstVC1PicSimpleMain.skipmb" link="gst-plugins-bad-libs-vc1parser.html#GstVC1PicSimpleMain.skipmb"/>
+ <keyword type="member" name="GstVC1PicSimpleMain.directmb" link="gst-plugins-bad-libs-vc1parser.html#GstVC1PicSimpleMain.directmb"/>
+ <keyword type="member" name="GstMpegVideoMeta.meta" link="gst-plugins-bad-libs-gstmpegvideometa.html#GstMpegVideoMeta.meta"/>
+ <keyword type="member" name="GstMpegVideoMeta.sequencehdr" link="gst-plugins-bad-libs-gstmpegvideometa.html#GstMpegVideoMeta.sequencehdr"/>
+ <keyword type="member" name="GstMpegVideoMeta.sequenceext" link="gst-plugins-bad-libs-gstmpegvideometa.html#GstMpegVideoMeta.sequenceext"/>
+ <keyword type="member" name="GstMpegVideoMeta.sequencedispext" link="gst-plugins-bad-libs-gstmpegvideometa.html#GstMpegVideoMeta.sequencedispext"/>
+ <keyword type="member" name="GstMpegVideoMeta.pichdr" link="gst-plugins-bad-libs-gstmpegvideometa.html#GstMpegVideoMeta.pichdr"/>
+ <keyword type="member" name="GstMpegVideoMeta.picext" link="gst-plugins-bad-libs-gstmpegvideometa.html#GstMpegVideoMeta.picext"/>
+ <keyword type="member" name="GstMpegVideoMeta.quantext" link="gst-plugins-bad-libs-gstmpegvideometa.html#GstMpegVideoMeta.quantext"/>
+ <keyword type="member" name="GstMpegVideoMeta.num-slices" link="gst-plugins-bad-libs-gstmpegvideometa.html#GstMpegVideoMeta.num-slices"/>
+ <keyword type="member" name="GstMpegVideoMeta.slice-offset" link="gst-plugins-bad-libs-gstmpegvideometa.html#GstMpegVideoMeta.slice-offset"/>
+ <keyword type="member" name="GstMpegtsSection-struct.section-type" link="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsSection-struct.section-type"/>
+ <keyword type="member" name="GstMpegtsSection-struct.pid" link="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsSection-struct.pid"/>
+ <keyword type="member" name="GstMpegtsSection-struct.table-id" link="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsSection-struct.table-id"/>
+ <keyword type="member" name="GstMpegtsSection-struct.subtable-extension" link="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsSection-struct.subtable-extension"/>
+ <keyword type="member" name="GstMpegtsSection-struct.version-number" link="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsSection-struct.version-number"/>
+ <keyword type="member" name="GstMpegtsSection-struct.current-next-indicator" link="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsSection-struct.current-next-indicator"/>
+ <keyword type="member" name="GstMpegtsSection-struct.section-number" link="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsSection-struct.section-number"/>
+ <keyword type="member" name="GstMpegtsSection-struct.last-section-number" link="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsSection-struct.last-section-number"/>
+ <keyword type="member" name="GstMpegtsSection-struct.crc" link="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsSection-struct.crc"/>
+ <keyword type="member" name="GstMpegtsPatProgram.program-number" link="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsPatProgram.program-number"/>
+ <keyword type="member" name="GstMpegtsPatProgram.network-or-program-map-PID" link="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsPatProgram.network-or-program-map-PID"/>
+ <keyword type="member" name="GstMpegtsPMT.pcr-pid" link="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsPMT.pcr-pid"/>
+ <keyword type="member" name="GstMpegtsPMT.program-number" link="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsPMT.program-number"/>
+ <keyword type="member" name="GstMpegtsPMT.descriptors" link="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsPMT.descriptors"/>
+ <keyword type="member" name="GstMpegtsPMT.streams" link="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsPMT.streams"/>
+ <keyword type="member" name="GstMpegtsPMTStream.stream-type" link="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsPMTStream.stream-type"/>
+ <keyword type="member" name="GstMpegtsPMTStream.pid" link="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsPMTStream.pid"/>
+ <keyword type="member" name="GstMpegtsPMTStream.descriptors" link="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsPMTStream.descriptors"/>
+ <keyword type="member" name="GstMpegtsDescriptor-struct.tag" link="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GstMpegtsDescriptor-struct.tag"/>
+ <keyword type="member" name="GstMpegtsDescriptor-struct.tag-extension" link="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GstMpegtsDescriptor-struct.tag-extension"/>
+ <keyword type="member" name="GstMpegtsDescriptor-struct.length" link="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GstMpegtsDescriptor-struct.length"/>
+ <keyword type="member" name="GstMpegtsDescriptor-struct.data" link="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GstMpegtsDescriptor-struct.data"/>
+ <keyword type="member" name="GstMpegtsAtscVCTSource.short-name" link="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html#GstMpegtsAtscVCTSource.short-name"/>
+ <keyword type="member" name="GstMpegtsAtscVCTSource.major-channel-number" link="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html#GstMpegtsAtscVCTSource.major-channel-number"/>
+ <keyword type="member" name="GstMpegtsAtscVCTSource.minor-channel-number" link="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html#GstMpegtsAtscVCTSource.minor-channel-number"/>
+ <keyword type="member" name="GstMpegtsAtscVCTSource.modulation-mode" link="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html#GstMpegtsAtscVCTSource.modulation-mode"/>
+ <keyword type="member" name="GstMpegtsAtscVCTSource.carrier-frequency" link="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html#GstMpegtsAtscVCTSource.carrier-frequency"/>
+ <keyword type="member" name="GstMpegtsAtscVCTSource.channel-TSID" link="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html#GstMpegtsAtscVCTSource.channel-TSID"/>
+ <keyword type="member" name="GstMpegtsAtscVCTSource.program-number" link="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html#GstMpegtsAtscVCTSource.program-number"/>
+ <keyword type="member" name="GstMpegtsAtscVCTSource.ETM-location" link="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html#GstMpegtsAtscVCTSource.ETM-location"/>
+ <keyword type="member" name="GstMpegtsAtscVCTSource.access-controlled" link="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html#GstMpegtsAtscVCTSource.access-controlled"/>
+ <keyword type="member" name="GstMpegtsAtscVCTSource.hidden" link="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html#GstMpegtsAtscVCTSource.hidden"/>
+ <keyword type="member" name="GstMpegtsAtscVCTSource.path-select" link="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html#GstMpegtsAtscVCTSource.path-select"/>
+ <keyword type="member" name="GstMpegtsAtscVCTSource.out-of-band" link="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html#GstMpegtsAtscVCTSource.out-of-band"/>
+ <keyword type="member" name="GstMpegtsAtscVCTSource.hide-guide" link="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html#GstMpegtsAtscVCTSource.hide-guide"/>
+ <keyword type="member" name="GstMpegtsAtscVCTSource.service-type" link="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html#GstMpegtsAtscVCTSource.service-type"/>
+ <keyword type="member" name="GstMpegtsAtscVCTSource.source-id" link="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html#GstMpegtsAtscVCTSource.source-id"/>
+ <keyword type="member" name="GstMpegtsAtscVCTSource.descriptors" link="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html#GstMpegtsAtscVCTSource.descriptors"/>
+ <keyword type="member" name="GstMpegtsAtscVCT.transport-stream-id" link="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html#GstMpegtsAtscVCT.transport-stream-id"/>
+ <keyword type="member" name="GstMpegtsAtscVCT.protocol-version" link="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html#GstMpegtsAtscVCT.protocol-version"/>
+ <keyword type="member" name="GstMpegtsAtscVCT.sources" link="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html#GstMpegtsAtscVCT.sources"/>
+ <keyword type="member" name="GstMpegtsAtscVCT.descriptors" link="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html#GstMpegtsAtscVCT.descriptors"/>
+ <keyword type="member" name="GstMpegtsAtscMGTTable.table-type" link="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html#GstMpegtsAtscMGTTable.table-type"/>
+ <keyword type="member" name="GstMpegtsAtscMGTTable.pid" link="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html#GstMpegtsAtscMGTTable.pid"/>
+ <keyword type="member" name="GstMpegtsAtscMGTTable.version-number" link="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html#GstMpegtsAtscMGTTable.version-number"/>
+ <keyword type="member" name="GstMpegtsAtscMGTTable.number-bytes" link="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html#GstMpegtsAtscMGTTable.number-bytes"/>
+ <keyword type="member" name="GstMpegtsAtscMGTTable.descriptors" link="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html#GstMpegtsAtscMGTTable.descriptors"/>
+ <keyword type="member" name="GstMpegtsAtscMGT.protocol-version" link="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html#GstMpegtsAtscMGT.protocol-version"/>
+ <keyword type="member" name="GstMpegtsAtscMGT.tables-defined" link="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html#GstMpegtsAtscMGT.tables-defined"/>
+ <keyword type="member" name="GstMpegtsAtscMGT.tables" link="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html#GstMpegtsAtscMGT.tables"/>
+ <keyword type="member" name="GstMpegtsAtscMGT.descriptors" link="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html#GstMpegtsAtscMGT.descriptors"/>
+ <keyword type="member" name="GstMpegtsAtscMultString.iso-639-langcode" link="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html#GstMpegtsAtscMultString.iso-639-langcode"/>
+ <keyword type="member" name="GstMpegtsAtscMultString.segments" link="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html#GstMpegtsAtscMultString.segments"/>
+ <keyword type="member" name="GstMpegtsAtscEITEvent.event-id" link="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html#GstMpegtsAtscEITEvent.event-id"/>
+ <keyword type="member" name="GstMpegtsAtscEITEvent.start-time" link="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html#GstMpegtsAtscEITEvent.start-time"/>
+ <keyword type="member" name="GstMpegtsAtscEITEvent.etm-location" link="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html#GstMpegtsAtscEITEvent.etm-location"/>
+ <keyword type="member" name="GstMpegtsAtscEITEvent.length-in-seconds" link="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html#GstMpegtsAtscEITEvent.length-in-seconds"/>
+ <keyword type="member" name="GstMpegtsAtscEITEvent.titles" link="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html#GstMpegtsAtscEITEvent.titles"/>
+ <keyword type="member" name="GstMpegtsAtscEITEvent.descriptors" link="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html#GstMpegtsAtscEITEvent.descriptors"/>
+ <keyword type="member" name="GstMpegtsAtscEIT.source-id" link="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html#GstMpegtsAtscEIT.source-id"/>
+ <keyword type="member" name="GstMpegtsAtscEIT.protocol-version" link="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html#GstMpegtsAtscEIT.protocol-version"/>
+ <keyword type="member" name="GstMpegtsAtscEIT.events" link="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html#GstMpegtsAtscEIT.events"/>
+ <keyword type="member" name="GstMpegtsAtscETT.ett-table-id-extension" link="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html#GstMpegtsAtscETT.ett-table-id-extension"/>
+ <keyword type="member" name="GstMpegtsAtscETT.protocol-version" link="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html#GstMpegtsAtscETT.protocol-version"/>
+ <keyword type="member" name="GstMpegtsAtscETT.etm-id" link="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html#GstMpegtsAtscETT.etm-id"/>
+ <keyword type="member" name="GstMpegtsAtscETT.messages" link="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html#GstMpegtsAtscETT.messages"/>
+ <keyword type="member" name="GstMpegtsAtscSTT.protocol-version" link="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html#GstMpegtsAtscSTT.protocol-version"/>
+ <keyword type="member" name="GstMpegtsAtscSTT.system-time" link="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html#GstMpegtsAtscSTT.system-time"/>
+ <keyword type="member" name="GstMpegtsAtscSTT.gps-utc-offset" link="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html#GstMpegtsAtscSTT.gps-utc-offset"/>
+ <keyword type="member" name="GstMpegtsAtscSTT.ds-status" link="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html#GstMpegtsAtscSTT.ds-status"/>
+ <keyword type="member" name="GstMpegtsAtscSTT.ds-dayofmonth" link="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html#GstMpegtsAtscSTT.ds-dayofmonth"/>
+ <keyword type="member" name="GstMpegtsAtscSTT.ds-hour" link="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html#GstMpegtsAtscSTT.ds-hour"/>
+ <keyword type="member" name="GstMpegtsAtscSTT.descriptors" link="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html#GstMpegtsAtscSTT.descriptors"/>
+ <keyword type="member" name="GstMpegtsAtscSTT.utc-datetime" link="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html#GstMpegtsAtscSTT.utc-datetime"/>
+ <keyword type="member" name="GstMpegtsNIT.actual-network" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#GstMpegtsNIT.actual-network"/>
+ <keyword type="member" name="GstMpegtsNIT.network-id" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#GstMpegtsNIT.network-id"/>
+ <keyword type="member" name="GstMpegtsNIT.descriptors" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#GstMpegtsNIT.descriptors"/>
+ <keyword type="member" name="GstMpegtsNIT.streams" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#GstMpegtsNIT.streams"/>
+ <keyword type="member" name="GstMpegtsNITStream.transport-stream-id" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#GstMpegtsNITStream.transport-stream-id"/>
+ <keyword type="member" name="GstMpegtsNITStream.original-network-id" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#GstMpegtsNITStream.original-network-id"/>
+ <keyword type="member" name="GstMpegtsNITStream.descriptors" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#GstMpegtsNITStream.descriptors"/>
+ <keyword type="member" name="GstMpegtsBAT.descriptors" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#GstMpegtsBAT.descriptors"/>
+ <keyword type="member" name="GstMpegtsBAT.streams" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#GstMpegtsBAT.streams"/>
+ <keyword type="member" name="GstMpegtsSDT.original-network-id" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#GstMpegtsSDT.original-network-id"/>
+ <keyword type="member" name="GstMpegtsSDT.actual-ts" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#GstMpegtsSDT.actual-ts"/>
+ <keyword type="member" name="GstMpegtsSDT.transport-stream-id" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#GstMpegtsSDT.transport-stream-id"/>
+ <keyword type="member" name="GstMpegtsSDT.services" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#GstMpegtsSDT.services"/>
+ <keyword type="member" name="GstMpegtsSDTService.service-id" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#GstMpegtsSDTService.service-id"/>
+ <keyword type="member" name="GstMpegtsSDTService.EIT-schedule-flag" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#GstMpegtsSDTService.EIT-schedule-flag"/>
+ <keyword type="member" name="GstMpegtsSDTService.EIT-present-following-flag" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#GstMpegtsSDTService.EIT-present-following-flag"/>
+ <keyword type="member" name="GstMpegtsSDTService.running-status" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#GstMpegtsSDTService.running-status"/>
+ <keyword type="member" name="GstMpegtsSDTService.free-CA-mode" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#GstMpegtsSDTService.free-CA-mode"/>
+ <keyword type="member" name="GstMpegtsSDTService.descriptors" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#GstMpegtsSDTService.descriptors"/>
+ <keyword type="member" name="GstMpegtsEIT.transport-stream-id" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#GstMpegtsEIT.transport-stream-id"/>
+ <keyword type="member" name="GstMpegtsEIT.original-network-id" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#GstMpegtsEIT.original-network-id"/>
+ <keyword type="member" name="GstMpegtsEIT.segment-last-section-number" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#GstMpegtsEIT.segment-last-section-number"/>
+ <keyword type="member" name="GstMpegtsEIT.last-table-id" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#GstMpegtsEIT.last-table-id"/>
+ <keyword type="member" name="GstMpegtsEIT.actual-stream" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#GstMpegtsEIT.actual-stream"/>
+ <keyword type="member" name="GstMpegtsEIT.present-following" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#GstMpegtsEIT.present-following"/>
+ <keyword type="member" name="GstMpegtsEIT.events" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#GstMpegtsEIT.events"/>
+ <keyword type="member" name="GstMpegtsEITEvent.event-id" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#GstMpegtsEITEvent.event-id"/>
+ <keyword type="member" name="GstMpegtsEITEvent.start-time" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#GstMpegtsEITEvent.start-time"/>
+ <keyword type="member" name="GstMpegtsEITEvent.duration" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#GstMpegtsEITEvent.duration"/>
+ <keyword type="member" name="GstMpegtsEITEvent.running-status" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#GstMpegtsEITEvent.running-status"/>
+ <keyword type="member" name="GstMpegtsEITEvent.free-CA-mode" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#GstMpegtsEITEvent.free-CA-mode"/>
+ <keyword type="member" name="GstMpegtsEITEvent.descriptors" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#GstMpegtsEITEvent.descriptors"/>
+ <keyword type="member" name="GstMpegtsTOT.utc-time" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#GstMpegtsTOT.utc-time"/>
+ <keyword type="member" name="GstMpegtsTOT.descriptors" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#GstMpegtsTOT.descriptors"/>
+ <keyword type="member" name="GstMpegtsExtendedEventDescriptor.descriptor-number" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsExtendedEventDescriptor.descriptor-number"/>
+ <keyword type="member" name="GstMpegtsExtendedEventDescriptor.last-descriptor-number" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsExtendedEventDescriptor.last-descriptor-number"/>
+ <keyword type="member" name="GstMpegtsExtendedEventDescriptor.language-code" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsExtendedEventDescriptor.language-code"/>
+ <keyword type="member" name="GstMpegtsExtendedEventDescriptor.items" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsExtendedEventDescriptor.items"/>
+ <keyword type="member" name="GstMpegtsExtendedEventDescriptor.text" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsExtendedEventDescriptor.text"/>
+ <keyword type="member" name="GstMpegtsSatelliteDeliverySystemDescriptor.frequency" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsSatelliteDeliverySystemDescriptor.frequency"/>
+ <keyword type="member" name="GstMpegtsSatelliteDeliverySystemDescriptor.orbital-position" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsSatelliteDeliverySystemDescriptor.orbital-position"/>
+ <keyword type="member" name="GstMpegtsSatelliteDeliverySystemDescriptor.west-east" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsSatelliteDeliverySystemDescriptor.west-east"/>
+ <keyword type="member" name="GstMpegtsSatelliteDeliverySystemDescriptor.polarization" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsSatelliteDeliverySystemDescriptor.polarization"/>
+ <keyword type="member" name="GstMpegtsSatelliteDeliverySystemDescriptor.roll-off" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsSatelliteDeliverySystemDescriptor.roll-off"/>
+ <keyword type="member" name="GstMpegtsSatelliteDeliverySystemDescriptor.modulation-system" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsSatelliteDeliverySystemDescriptor.modulation-system"/>
+ <keyword type="member" name="GstMpegtsSatelliteDeliverySystemDescriptor.modulation-type" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsSatelliteDeliverySystemDescriptor.modulation-type"/>
+ <keyword type="member" name="GstMpegtsSatelliteDeliverySystemDescriptor.symbol-rate" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsSatelliteDeliverySystemDescriptor.symbol-rate"/>
+ <keyword type="member" name="GstMpegtsSatelliteDeliverySystemDescriptor.fec-inner" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsSatelliteDeliverySystemDescriptor.fec-inner"/>
+ <keyword type="member" name="GstMpegtsCableDeliverySystemDescriptor.frequency" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsCableDeliverySystemDescriptor.frequency"/>
+ <keyword type="member" name="GstMpegtsCableDeliverySystemDescriptor.outer-fec" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsCableDeliverySystemDescriptor.outer-fec"/>
+ <keyword type="member" name="GstMpegtsCableDeliverySystemDescriptor.modulation" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsCableDeliverySystemDescriptor.modulation"/>
+ <keyword type="member" name="GstMpegtsCableDeliverySystemDescriptor.symbol-rate" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsCableDeliverySystemDescriptor.symbol-rate"/>
+ <keyword type="member" name="GstMpegtsCableDeliverySystemDescriptor.fec-inner" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsCableDeliverySystemDescriptor.fec-inner"/>
+ <keyword type="member" name="GstMpegtsTerrestrialDeliverySystemDescriptor.frequency" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsTerrestrialDeliverySystemDescriptor.frequency"/>
+ <keyword type="member" name="GstMpegtsTerrestrialDeliverySystemDescriptor.bandwidth" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsTerrestrialDeliverySystemDescriptor.bandwidth"/>
+ <keyword type="member" name="GstMpegtsTerrestrialDeliverySystemDescriptor.priority" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsTerrestrialDeliverySystemDescriptor.priority"/>
+ <keyword type="member" name="GstMpegtsTerrestrialDeliverySystemDescriptor.time-slicing" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsTerrestrialDeliverySystemDescriptor.time-slicing"/>
+ <keyword type="member" name="GstMpegtsTerrestrialDeliverySystemDescriptor.mpe-fec" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsTerrestrialDeliverySystemDescriptor.mpe-fec"/>
+ <keyword type="member" name="GstMpegtsTerrestrialDeliverySystemDescriptor.constellation" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsTerrestrialDeliverySystemDescriptor.constellation"/>
+ <keyword type="member" name="GstMpegtsTerrestrialDeliverySystemDescriptor.hierarchy" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsTerrestrialDeliverySystemDescriptor.hierarchy"/>
+ <keyword type="member" name="GstMpegtsTerrestrialDeliverySystemDescriptor.code-rate-hp" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsTerrestrialDeliverySystemDescriptor.code-rate-hp"/>
+ <keyword type="member" name="GstMpegtsTerrestrialDeliverySystemDescriptor.code-rate-lp" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsTerrestrialDeliverySystemDescriptor.code-rate-lp"/>
+ <keyword type="member" name="GstMpegtsTerrestrialDeliverySystemDescriptor.guard-interval" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsTerrestrialDeliverySystemDescriptor.guard-interval"/>
+ <keyword type="member" name="GstMpegtsTerrestrialDeliverySystemDescriptor.transmission-mode" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsTerrestrialDeliverySystemDescriptor.transmission-mode"/>
+ <keyword type="member" name="GstMpegtsTerrestrialDeliverySystemDescriptor.other-frequency" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsTerrestrialDeliverySystemDescriptor.other-frequency"/>
+ <keyword type="member" name="GstMpegtsT2DeliverySystemCellExtension.cell-id-extension" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsT2DeliverySystemCellExtension.cell-id-extension"/>
+ <keyword type="member" name="GstMpegtsT2DeliverySystemCellExtension.transposer-frequency" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsT2DeliverySystemCellExtension.transposer-frequency"/>
+ <keyword type="member" name="GstMpegtsT2DeliverySystemCell.cell-id" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsT2DeliverySystemCell.cell-id"/>
+ <keyword type="member" name="GstMpegtsT2DeliverySystemCell.centre-frequencies" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsT2DeliverySystemCell.centre-frequencies"/>
+ <keyword type="member" name="GstMpegtsT2DeliverySystemCell.sub-cells" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsT2DeliverySystemCell.sub-cells"/>
+ <keyword type="member" name="GstMpegtsT2DeliverySystemDescriptor.plp-id" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsT2DeliverySystemDescriptor.plp-id"/>
+ <keyword type="member" name="GstMpegtsT2DeliverySystemDescriptor.t2-system-id" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsT2DeliverySystemDescriptor.t2-system-id"/>
+ <keyword type="member" name="GstMpegtsT2DeliverySystemDescriptor.siso-miso" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsT2DeliverySystemDescriptor.siso-miso"/>
+ <keyword type="member" name="GstMpegtsT2DeliverySystemDescriptor.bandwidth" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsT2DeliverySystemDescriptor.bandwidth"/>
+ <keyword type="member" name="GstMpegtsT2DeliverySystemDescriptor.guard-interval" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsT2DeliverySystemDescriptor.guard-interval"/>
+ <keyword type="member" name="GstMpegtsT2DeliverySystemDescriptor.transmission-mode" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsT2DeliverySystemDescriptor.transmission-mode"/>
+ <keyword type="member" name="GstMpegtsT2DeliverySystemDescriptor.other-frequency" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsT2DeliverySystemDescriptor.other-frequency"/>
+ <keyword type="member" name="GstMpegtsT2DeliverySystemDescriptor.tfs" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsT2DeliverySystemDescriptor.tfs"/>
+ <keyword type="member" name="GstMpegtsT2DeliverySystemDescriptor.cells" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsT2DeliverySystemDescriptor.cells"/>
+ <keyword type="member" name="GstMpegtsDVBLinkageDescriptor.transport-stream-id" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsDVBLinkageDescriptor.transport-stream-id"/>
+ <keyword type="member" name="GstMpegtsDVBLinkageDescriptor.original-network-id" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsDVBLinkageDescriptor.original-network-id"/>
+ <keyword type="member" name="GstMpegtsDVBLinkageDescriptor.service-id" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsDVBLinkageDescriptor.service-id"/>
+ <keyword type="member" name="GstMpegtsDVBLinkageDescriptor.linkage-type" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsDVBLinkageDescriptor.linkage-type"/>
+ <keyword type="member" name="GstMpegtsDVBLinkageDescriptor.private-data-length" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsDVBLinkageDescriptor.private-data-length"/>
+ <keyword type="member" name="GstMpegtsDVBLinkageDescriptor.private-data-bytes" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsDVBLinkageDescriptor.private-data-bytes"/>
+ <keyword type="member" name="GstMpegtsDataBroadcastDescriptor.data-broadcast-id" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsDataBroadcastDescriptor.data-broadcast-id"/>
+ <keyword type="member" name="GstMpegtsDataBroadcastDescriptor.component-tag" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsDataBroadcastDescriptor.component-tag"/>
+ <keyword type="member" name="GstMpegtsDataBroadcastDescriptor.length" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsDataBroadcastDescriptor.length"/>
+ <keyword type="member" name="GstMpegtsDataBroadcastDescriptor.selector-bytes" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsDataBroadcastDescriptor.selector-bytes"/>
+ <keyword type="member" name="GstMpegtsDataBroadcastDescriptor.language-code" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsDataBroadcastDescriptor.language-code"/>
+ <keyword type="member" name="GstMpegtsDataBroadcastDescriptor.text" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsDataBroadcastDescriptor.text"/>
+ <keyword type="member" name="GstMpegtsDVBServiceListItem.service-id" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsDVBServiceListItem.service-id"/>
+ <keyword type="member" name="GstMpegtsDVBServiceListItem.type" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsDVBServiceListItem.type"/>
+ <keyword type="member" name="GstMpegtsDvbMultilingualNetworkNameItem.language-code" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsDvbMultilingualNetworkNameItem.language-code"/>
+ <keyword type="member" name="GstMpegtsDvbMultilingualNetworkNameItem.network-name" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsDvbMultilingualNetworkNameItem.network-name"/>
+ <keyword type="member" name="GstMpegtsDvbMultilingualBouquetNameItem.language-code" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsDvbMultilingualBouquetNameItem.language-code"/>
+ <keyword type="member" name="GstMpegtsDvbMultilingualBouquetNameItem.bouquet-name" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsDvbMultilingualBouquetNameItem.bouquet-name"/>
+ <keyword type="member" name="GstMpegtsDvbMultilingualServiceNameItem.language-code" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsDvbMultilingualServiceNameItem.language-code"/>
+ <keyword type="member" name="GstMpegtsDvbMultilingualServiceNameItem.provider-name" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsDvbMultilingualServiceNameItem.provider-name"/>
+ <keyword type="member" name="GstMpegtsDvbMultilingualServiceNameItem.service-name" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsDvbMultilingualServiceNameItem.service-name"/>
+ <keyword type="member" name="GstMpegtsDvbMultilingualComponentItem.language-code" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsDvbMultilingualComponentItem.language-code"/>
+ <keyword type="member" name="GstMpegtsDvbMultilingualComponentItem.description" link="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsDvbMultilingualComponentItem.description"/>
+ <keyword type="member" name="GstAggregator.parent" link="gst-plugins-bad-libs-GstAggregator.html#GstAggregator.parent"/>
+ <keyword type="member" name="GstAggregator.srcpad" link="gst-plugins-bad-libs-GstAggregator.html#GstAggregator.srcpad"/>
+ <keyword type="member" name="GstAggregator.segment" link="gst-plugins-bad-libs-GstAggregator.html#GstAggregator.segment"/>
+ <keyword type="member" name="GstAggregatorClass.sinkpads-type" link="gst-plugins-bad-libs-GstAggregator.html#GstAggregatorClass.sinkpads-type"/>
+ <keyword type="member" name="GstAggregatorClass.flush" link="gst-plugins-bad-libs-GstAggregator.html#GstAggregatorClass.flush"/>
+ <keyword type="member" name="GstAggregatorClass.clip" link="gst-plugins-bad-libs-GstAggregator.html#GstAggregatorClass.clip"/>
+ <keyword type="member" name="GstAggregatorClass.sink-event" link="gst-plugins-bad-libs-GstAggregator.html#GstAggregatorClass.sink-event"/>
+ <keyword type="member" name="GstAggregatorClass.sink-query" link="gst-plugins-bad-libs-GstAggregator.html#GstAggregatorClass.sink-query"/>
+ <keyword type="member" name="GstAggregatorClass.src-event" link="gst-plugins-bad-libs-GstAggregator.html#GstAggregatorClass.src-event"/>
+ <keyword type="member" name="GstAggregatorClass.src-query" link="gst-plugins-bad-libs-GstAggregator.html#GstAggregatorClass.src-query"/>
+ <keyword type="member" name="GstAggregatorClass.src-activate" link="gst-plugins-bad-libs-GstAggregator.html#GstAggregatorClass.src-activate"/>
+ <keyword type="member" name="GstAggregatorClass.aggregate" link="gst-plugins-bad-libs-GstAggregator.html#GstAggregatorClass.aggregate"/>
+ <keyword type="member" name="GstAggregatorClass.stop" link="gst-plugins-bad-libs-GstAggregator.html#GstAggregatorClass.stop"/>
+ <keyword type="member" name="GstAggregatorClass.start" link="gst-plugins-bad-libs-GstAggregator.html#GstAggregatorClass.start"/>
+ <keyword type="member" name="GstAggregatorClass.get-next-time" link="gst-plugins-bad-libs-GstAggregator.html#GstAggregatorClass.get-next-time"/>
+ <keyword type="member" name="GstAggregatorClass.create-new-pad" link="gst-plugins-bad-libs-GstAggregator.html#GstAggregatorClass.create-new-pad"/>
+ <keyword type="member" name="GstAggregatorPad.parent" link="gst-plugins-bad-libs-GstAggregatorPad.html#GstAggregatorPad.parent"/>
+ <keyword type="member" name="GstAggregatorPad.segment" link="gst-plugins-bad-libs-GstAggregatorPad.html#GstAggregatorPad.segment"/>
+ <keyword type="member" name="GstAggregatorPad.clip-segment" link="gst-plugins-bad-libs-GstAggregatorPad.html#GstAggregatorPad.clip-segment"/>
+ <keyword type="member" name="GstAggregatorPad.priv" link="gst-plugins-bad-libs-GstAggregatorPad.html#GstAggregatorPad.priv"/>
+ <keyword type="member" name="GstAggregatorPad.-gst-reserved" link="gst-plugins-bad-libs-GstAggregatorPad.html#GstAggregatorPad.-gst-reserved"/>
+ <keyword type="member" name="GstAggregatorPadClass.flush" link="gst-plugins-bad-libs-GstAggregatorPad.html#GstAggregatorPadClass.flush"/>
+ <keyword type="member" name="GstVideoAggregator.aggregator" link="gst-plugins-bad-libs-GstVideoAggregator.html#GstVideoAggregator.aggregator"/>
+ <keyword type="member" name="GstVideoAggregator.info" link="gst-plugins-bad-libs-GstVideoAggregator.html#GstVideoAggregator.info"/>
+ <keyword type="member" name="GstVideoAggregatorClass.update-caps" link="gst-plugins-bad-libs-GstVideoAggregator.html#GstVideoAggregatorClass.update-caps"/>
+ <keyword type="member" name="GstVideoAggregatorClass.fixate-caps" link="gst-plugins-bad-libs-GstVideoAggregator.html#GstVideoAggregatorClass.fixate-caps"/>
+ <keyword type="member" name="GstVideoAggregatorClass.aggregate-frames" link="gst-plugins-bad-libs-GstVideoAggregator.html#GstVideoAggregatorClass.aggregate-frames"/>
+ <keyword type="member" name="GstVideoAggregatorClass.get-output-buffer" link="gst-plugins-bad-libs-GstVideoAggregator.html#GstVideoAggregatorClass.get-output-buffer"/>
+ <keyword type="member" name="GstVideoAggregatorClass.negotiated-caps" link="gst-plugins-bad-libs-GstVideoAggregator.html#GstVideoAggregatorClass.negotiated-caps"/>
+ <keyword type="member" name="GstVideoAggregatorClass.find-best-format" link="gst-plugins-bad-libs-GstVideoAggregator.html#GstVideoAggregatorClass.find-best-format"/>
+ <keyword type="member" name="GstVideoAggregatorClass.sink-non-alpha-caps" link="gst-plugins-bad-libs-GstVideoAggregator.html#GstVideoAggregatorClass.sink-non-alpha-caps"/>
+ <keyword type="member" name="GstVideoAggregatorPad.parent" link="gst-plugins-bad-libs-GstVideoAggregatorPad.html#GstVideoAggregatorPad.parent"/>
+ <keyword type="member" name="GstVideoAggregatorPad.info" link="gst-plugins-bad-libs-GstVideoAggregatorPad.html#GstVideoAggregatorPad.info"/>
+ <keyword type="member" name="GstVideoAggregatorPad.buffer" link="gst-plugins-bad-libs-GstVideoAggregatorPad.html#GstVideoAggregatorPad.buffer"/>
+ <keyword type="member" name="GstVideoAggregatorPad.buffer-vinfo" link="gst-plugins-bad-libs-GstVideoAggregatorPad.html#GstVideoAggregatorPad.buffer-vinfo"/>
+ <keyword type="member" name="GstVideoAggregatorPad.aggregated-frame" link="gst-plugins-bad-libs-GstVideoAggregatorPad.html#GstVideoAggregatorPad.aggregated-frame"/>
+ <keyword type="member" name="GstVideoAggregatorPad.zorder" link="gst-plugins-bad-libs-GstVideoAggregatorPad.html#GstVideoAggregatorPad.zorder"/>
+ <keyword type="member" name="GstVideoAggregatorPad.ignore-eos" link="gst-plugins-bad-libs-GstVideoAggregatorPad.html#GstVideoAggregatorPad.ignore-eos"/>
+ <keyword type="member" name="GstGLBaseMemoryAllocatorClass.alloc" link="gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemoryAllocatorClass.alloc"/>
+ <keyword type="member" name="GstGLBaseMemoryAllocatorClass.create" link="gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemoryAllocatorClass.create"/>
+ <keyword type="member" name="GstGLBaseMemoryAllocatorClass.map" link="gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemoryAllocatorClass.map"/>
+ <keyword type="member" name="GstGLBaseMemoryAllocatorClass.flush" link="gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemoryAllocatorClass.flush"/>
+ <keyword type="member" name="GstGLBaseMemoryAllocatorClass.invalidate" link="gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemoryAllocatorClass.invalidate"/>
+ <keyword type="member" name="GstGLBaseMemoryAllocatorClass.unmap" link="gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemoryAllocatorClass.unmap"/>
+ <keyword type="member" name="GstGLBaseMemoryAllocatorClass.copy" link="gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemoryAllocatorClass.copy"/>
+ <keyword type="member" name="GstGLBaseMemoryAllocatorClass.destroy" link="gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemoryAllocatorClass.destroy"/>
+ <keyword type="member" name="GstGLAllocationParams.struct-size" link="gst-plugins-bad-libs-gstglbasememory.html#GstGLAllocationParams.struct-size"/>
+ <keyword type="member" name="GstGLAllocationParams.copy" link="gst-plugins-bad-libs-gstglbasememory.html#GstGLAllocationParams.copy"/>
+ <keyword type="member" name="GstGLAllocationParams.free" link="gst-plugins-bad-libs-gstglbasememory.html#GstGLAllocationParams.free"/>
+ <keyword type="member" name="GstGLAllocationParams.alloc-flags" link="gst-plugins-bad-libs-gstglbasememory.html#GstGLAllocationParams.alloc-flags"/>
+ <keyword type="member" name="GstGLAllocationParams.alloc-size" link="gst-plugins-bad-libs-gstglbasememory.html#GstGLAllocationParams.alloc-size"/>
+ <keyword type="member" name="GstGLAllocationParams.alloc-params" link="gst-plugins-bad-libs-gstglbasememory.html#GstGLAllocationParams.alloc-params"/>
+ <keyword type="member" name="GstGLAllocationParams.context" link="gst-plugins-bad-libs-gstglbasememory.html#GstGLAllocationParams.context"/>
+ <keyword type="member" name="GstGLAllocationParams.notify" link="gst-plugins-bad-libs-gstglbasememory.html#GstGLAllocationParams.notify"/>
+ <keyword type="member" name="GstGLAllocationParams.user-data" link="gst-plugins-bad-libs-gstglbasememory.html#GstGLAllocationParams.user-data"/>
+ <keyword type="member" name="GstGLAllocationParams.wrapped-data" link="gst-plugins-bad-libs-gstglbasememory.html#GstGLAllocationParams.wrapped-data"/>
+ <keyword type="member" name="GstGLAllocationParams.gl-handle" link="gst-plugins-bad-libs-gstglbasememory.html#GstGLAllocationParams.gl-handle"/>
+ <keyword type="member" name="GstGLBaseMemory.mem" link="gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemory.mem"/>
+ <keyword type="member" name="GstGLBaseMemory.context" link="gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemory.context"/>
+ <keyword type="member" name="GstGLBaseFilterClass.supported-gl-api" link="GstGLBaseFilter.html#GstGLBaseFilterClass.supported-gl-api"/>
+ <keyword type="member" name="GstGLBaseFilterClass.gl-start" link="GstGLBaseFilter.html#GstGLBaseFilterClass.gl-start"/>
+ <keyword type="member" name="GstGLBaseFilterClass.gl-stop" link="GstGLBaseFilter.html#GstGLBaseFilterClass.gl-stop"/>
+ <keyword type="member" name="GstGLBaseFilterClass.gl-set-caps" link="GstGLBaseFilter.html#GstGLBaseFilterClass.gl-set-caps"/>
+ <keyword type="member" name="GstGLBuffer.mem" link="gst-plugins-bad-libs-GstGLBuffer.html#GstGLBuffer.mem"/>
+ <keyword type="member" name="GstGLBuffer.id" link="gst-plugins-bad-libs-GstGLBuffer.html#GstGLBuffer.id"/>
+ <keyword type="member" name="GstGLBuffer.target" link="gst-plugins-bad-libs-GstGLBuffer.html#GstGLBuffer.target"/>
+ <keyword type="member" name="GstGLBuffer.usage-hints" link="gst-plugins-bad-libs-GstGLBuffer.html#GstGLBuffer.usage-hints"/>
+ <keyword type="member" name="GstGLBufferAllocationParams.parent" link="gst-plugins-bad-libs-GstGLBuffer.html#GstGLBufferAllocationParams.parent"/>
+ <keyword type="member" name="GstGLBufferAllocationParams.gl-target" link="gst-plugins-bad-libs-GstGLBuffer.html#GstGLBufferAllocationParams.gl-target"/>
+ <keyword type="member" name="GstGLBufferAllocationParams.gl-usage" link="gst-plugins-bad-libs-GstGLBuffer.html#GstGLBufferAllocationParams.gl-usage"/>
+ <keyword type="member" name="GstGLFilterClass.set-caps" link="GstGLFilter.html#GstGLFilterClass.set-caps"/>
+ <keyword type="member" name="GstGLFilterClass.filter" link="GstGLFilter.html#GstGLFilterClass.filter"/>
+ <keyword type="member" name="GstGLFilterClass.filter-texture" link="GstGLFilter.html#GstGLFilterClass.filter-texture"/>
+ <keyword type="member" name="GstGLFilterClass.init-fbo" link="GstGLFilter.html#GstGLFilterClass.init-fbo"/>
+ <keyword type="member" name="GstGLFilterClass.transform-internal-caps" link="GstGLFilter.html#GstGLFilterClass.transform-internal-caps"/>
+ <keyword type="member" name="GstGLFilterClass.display-init-cb" link="GstGLFilter.html#GstGLFilterClass.display-init-cb"/>
+ <keyword type="member" name="GstGLFilterClass.display-reset-cb" link="GstGLFilter.html#GstGLFilterClass.display-reset-cb"/>
+ <keyword type="member" name="GstGLMemory.mem" link="gst-plugins-bad-libs-GstGLMemory.html#GstGLMemory.mem"/>
+ <keyword type="member" name="GstGLMemory.tex-id" link="gst-plugins-bad-libs-GstGLMemory.html#GstGLMemory.tex-id"/>
+ <keyword type="member" name="GstGLMemory.tex-target" link="gst-plugins-bad-libs-GstGLMemory.html#GstGLMemory.tex-target"/>
+ <keyword type="member" name="GstGLMemory.tex-type" link="gst-plugins-bad-libs-GstGLMemory.html#GstGLMemory.tex-type"/>
+ <keyword type="member" name="GstGLMemory.info" link="gst-plugins-bad-libs-GstGLMemory.html#GstGLMemory.info"/>
+ <keyword type="member" name="GstGLMemory.valign" link="gst-plugins-bad-libs-GstGLMemory.html#GstGLMemory.valign"/>
+ <keyword type="member" name="GstGLMemory.plane" link="gst-plugins-bad-libs-GstGLMemory.html#GstGLMemory.plane"/>
+ <keyword type="member" name="GstGLMemory.tex-scaling" link="gst-plugins-bad-libs-GstGLMemory.html#GstGLMemory.tex-scaling"/>
+ <keyword type="member" name="GstGLWindowClass.get-display" link="GstGLWindow.html#GstGLWindowClass.get-display"/>
+ <keyword type="member" name="GstGLWindowClass.set-window-handle" link="GstGLWindow.html#GstGLWindowClass.set-window-handle"/>
+ <keyword type="member" name="GstGLWindowClass.get-window-handle" link="GstGLWindow.html#GstGLWindowClass.get-window-handle"/>
+ <keyword type="member" name="GstGLWindowClass.draw" link="GstGLWindow.html#GstGLWindowClass.draw"/>
+ <keyword type="member" name="GstGLWindowClass.run" link="GstGLWindow.html#GstGLWindowClass.run"/>
+ <keyword type="member" name="GstGLWindowClass.quit" link="GstGLWindow.html#GstGLWindowClass.quit"/>
+ <keyword type="member" name="GstGLWindowClass.send-message" link="GstGLWindow.html#GstGLWindowClass.send-message"/>
+ <keyword type="member" name="GstGLWindowClass.send-message-async" link="GstGLWindow.html#GstGLWindowClass.send-message-async"/>
+ <keyword type="member" name="GstGLWindowClass.open" link="GstGLWindow.html#GstGLWindowClass.open"/>
+ <keyword type="member" name="GstGLWindowClass.close" link="GstGLWindow.html#GstGLWindowClass.close"/>
+ <keyword type="member" name="GstGLWindowClass.handle-events" link="GstGLWindow.html#GstGLWindowClass.handle-events"/>
+ <keyword type="member" name="GstGLWindowClass.set-preferred-size" link="GstGLWindow.html#GstGLWindowClass.set-preferred-size"/>
+ <keyword type="member" name="GstGLWindowClass.show" link="GstGLWindow.html#GstGLWindowClass.show"/>
+ <keyword type="member" name="GstGLWindowClass.set-render-rectangle" link="GstGLWindow.html#GstGLWindowClass.set-render-rectangle"/>
+ <keyword type="member" name="GstGLWindowClass.queue-resize" link="GstGLWindow.html#GstGLWindowClass.queue-resize"/>
+ <keyword type="member" name="GstPlayerVisualization-struct.name" link="gst-plugins-bad-libs-gstplayer-visualization.html#GstPlayerVisualization-struct.name"/>
+ <keyword type="member" name="GstPlayerVisualization-struct.description" link="gst-plugins-bad-libs-gstplayer-visualization.html#GstPlayerVisualization-struct.description"/>
</functions>
</book>
diff --git a/docs/libs/html/gst-plugins-bad-libs-gst-atsc-descriptor.html b/docs/libs/html/gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-descriptors.html
similarity index 72%
rename from docs/libs/html/gst-plugins-bad-libs-gst-atsc-descriptor.html
rename to docs/libs/html/gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-descriptors.html
index 54af81d..d8ac88d 100644
--- a/docs/libs/html/gst-plugins-bad-libs-gst-atsc-descriptor.html
+++ b/docs/libs/html/gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-descriptors.html
@@ -2,12 +2,12 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>gst-atsc-descriptor: GStreamer Bad Plugins 1.0 Library Reference Manual</title>
+<title>ATSC variants of MPEG-TS descriptors: GStreamer Bad Plugins 1.0 Library Reference Manual</title>
<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
<link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Library Reference Manual">
<link rel="up" href="mpegts.html" title="Mpeg TS helper library">
-<link rel="prev" href="gst-plugins-bad-libs-gst-dvb-section.html" title="gst-dvb-section">
-<link rel="next" href="gst-plugins-bad-libs-gst-dvb-descriptor.html" title="gst-dvb-descriptor">
+<link rel="prev" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html" title="DVB variants of MPEG-TS sections">
+<link rel="next" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html" title="DVB variants of MPEG-TS descriptors">
<meta name="generator" content="GTK-Doc V1.25 (XML mode)">
<link rel="stylesheet" href="style.css" type="text/css">
</head>
@@ -15,24 +15,24 @@
<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
<td width="100%" align="left" class="shortcuts">
<a href="#" class="shortcut">Top</a><span id="nav_description"> <span class="dim">|</span>
- <a href="#gst-plugins-bad-libs-gst-atsc-descriptor.description" class="shortcut">Description</a></span>
+ <a href="#gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-descriptors.description" class="shortcut">Description</a></span>
</td>
<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
<td><a accesskey="u" href="mpegts.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
-<td><a accesskey="p" href="gst-plugins-bad-libs-gst-dvb-section.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="gst-plugins-bad-libs-gst-dvb-descriptor.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+<td><a accesskey="p" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
</tr></table>
<div class="refentry">
-<a name="gst-plugins-bad-libs-gst-atsc-descriptor"></a><div class="titlepage"></div>
+<a name="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-descriptors"></a><div class="titlepage"></div>
<div class="refnamediv"><table width="100%"><tr>
<td valign="top">
-<h2><span class="refentrytitle"><a name="gst-plugins-bad-libs-gst-atsc-descriptor.top_of_page"></a>gst-atsc-descriptor</span></h2>
-<p>gst-atsc-descriptor</p>
+<h2><span class="refentrytitle"><a name="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-descriptors.top_of_page"></a>ATSC variants of MPEG-TS descriptors</span></h2>
+<p>ATSC variants of MPEG-TS descriptors — Descriptors for the various ATSC specifications</p>
</td>
<td class="gallery_image" valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="gst-plugins-bad-libs-gst-atsc-descriptor.other"></a><h2>Types and Values</h2>
+<a name="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-descriptors.other"></a><h2>Types and Values</h2>
<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="name">
@@ -40,21 +40,29 @@
</colgroup>
<tbody><tr>
<td class="datatype_keyword">enum</td>
-<td class="function_name"><a class="link" href="gst-plugins-bad-libs-gst-atsc-descriptor.html#GstMpegtsATSCDescriptorType" title="enum GstMpegtsATSCDescriptorType">GstMpegtsATSCDescriptorType</a></td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-descriptors.html#GstMpegtsATSCDescriptorType" title="enum GstMpegtsATSCDescriptorType">GstMpegtsATSCDescriptorType</a></td>
</tr></tbody>
</table></div>
</div>
<div class="refsect1">
-<a name="gst-plugins-bad-libs-gst-atsc-descriptor.description"></a><h2>Description</h2>
+<a name="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-descriptors.includes"></a><h2>Includes</h2>
+<pre class="synopsis">#include <gst/mpegts/mpegts.h>
+</pre>
</div>
<div class="refsect1">
-<a name="gst-plugins-bad-libs-gst-atsc-descriptor.functions_details"></a><h2>Functions</h2>
+<a name="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-descriptors.description"></a><h2>Description</h2>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-descriptors.functions_details"></a><h2>Functions</h2>
<p></p>
</div>
<div class="refsect1">
-<a name="gst-plugins-bad-libs-gst-atsc-descriptor.other_details"></a><h2>Types and Values</h2>
+<a name="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-descriptors.other_details"></a><h2>Types and Values</h2>
<div class="refsect2">
<a name="GstMpegtsATSCDescriptorType"></a><h3>enum GstMpegtsATSCDescriptorType</h3>
+<p>These values correspond to the registered descriptor type from
+the various ATSC specifications.</p>
+<p>Consult the relevant specifications for more details.</p>
<div class="refsect3">
<a name="GstMpegtsATSCDescriptorType.members"></a><h4>Members</h4>
<div class="informaltable"><table class="informaltable" width="100%" border="0">
diff --git a/docs/libs/html/gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html b/docs/libs/html/gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html
new file mode 100644
index 0000000..dd8df26
--- /dev/null
+++ b/docs/libs/html/gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html
@@ -0,0 +1,995 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>ATSC variants of MPEG-TS sections: GStreamer Bad Plugins 1.0 Library Reference Manual</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
+<link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Library Reference Manual">
+<link rel="up" href="mpegts.html" title="Mpeg TS helper library">
+<link rel="prev" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html" title="Base MPEG-TS descriptors">
+<link rel="next" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html" title="DVB variants of MPEG-TS sections">
+<meta name="generator" content="GTK-Doc V1.25 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
+<td width="100%" align="left" class="shortcuts">
+<a href="#" class="shortcut">Top</a><span id="nav_description"> <span class="dim">|</span>
+ <a href="#gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.description" class="shortcut">Description</a></span>
+</td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
+<td><a accesskey="u" href="mpegts.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
+<td><a accesskey="p" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.top_of_page"></a>ATSC variants of MPEG-TS sections</span></h2>
+<p>ATSC variants of MPEG-TS sections — Sections for the various ATSC specifications</p>
+</td>
+<td class="gallery_image" valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.functions"></a><h2>Functions</h2>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="functions_return">
+<col class="functions_name">
+</colgroup>
+<tbody>
+<tr>
+<td class="function_type">const <a class="link" href="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html#GstMpegtsAtscVCT" title="struct GstMpegtsAtscVCT"><span class="returnvalue">GstMpegtsAtscVCT</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html#gst-mpegts-section-get-atsc-tvct" title="gst_mpegts_section_get_atsc_tvct ()">gst_mpegts_section_get_atsc_tvct</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">const <a class="link" href="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html#GstMpegtsAtscVCT" title="struct GstMpegtsAtscVCT"><span class="returnvalue">GstMpegtsAtscVCT</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html#gst-mpegts-section-get-atsc-cvct" title="gst_mpegts_section_get_atsc_cvct ()">gst_mpegts_section_get_atsc_cvct</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">const <a class="link" href="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html#GstMpegtsAtscMGT" title="struct GstMpegtsAtscMGT"><span class="returnvalue">GstMpegtsAtscMGT</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html#gst-mpegts-section-get-atsc-mgt" title="gst_mpegts_section_get_atsc_mgt ()">gst_mpegts_section_get_atsc_mgt</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">const <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html#gst-mpegts-atsc-string-segment-get-string" title="gst_mpegts_atsc_string_segment_get_string ()">gst_mpegts_atsc_string_segment_get_string</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">const <a class="link" href="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html#GstMpegtsAtscEIT" title="struct GstMpegtsAtscEIT"><span class="returnvalue">GstMpegtsAtscEIT</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html#gst-mpegts-section-get-atsc-eit" title="gst_mpegts_section_get_atsc_eit ()">gst_mpegts_section_get_atsc_eit</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">const <a class="link" href="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html#GstMpegtsAtscETT" title="struct GstMpegtsAtscETT"><span class="returnvalue">GstMpegtsAtscETT</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html#gst-mpegts-section-get-atsc-ett" title="gst_mpegts_section_get_atsc_ett ()">gst_mpegts_section_get_atsc_ett</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">const <a class="link" href="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html#GstMpegtsAtscSTT" title="struct GstMpegtsAtscSTT"><span class="returnvalue">GstMpegtsAtscSTT</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html#gst-mpegts-section-get-atsc-stt" title="gst_mpegts_section_get_atsc_stt ()">gst_mpegts_section_get_atsc_stt</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="/usr/share/gtk-doc/html/gstreamer-1.0GstDateTime.html#GstDateTime-struct"><span class="returnvalue">GstDateTime</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html#gst-mpegts-atsc-stt-get-datetime-utc" title="gst_mpegts_atsc_stt_get_datetime_utc ()">gst_mpegts_atsc_stt_get_datetime_utc</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.other"></a><h2>Types and Values</h2>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="name">
+<col class="description">
+</colgroup>
+<tbody>
+<tr>
+<td class="datatype_keyword">enum</td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html#GstMpegtsSectionATSCTableID" title="enum GstMpegtsSectionATSCTableID">GstMpegtsSectionATSCTableID</a></td>
+</tr>
+<tr>
+<td class="datatype_keyword">struct</td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html#GstMpegtsAtscVCTSource" title="struct GstMpegtsAtscVCTSource">GstMpegtsAtscVCTSource</a></td>
+</tr>
+<tr>
+<td class="datatype_keyword">struct</td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html#GstMpegtsAtscVCT" title="struct GstMpegtsAtscVCT">GstMpegtsAtscVCT</a></td>
+</tr>
+<tr>
+<td class="datatype_keyword">enum</td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html#GstMpegtsAtscMGTTableType" title="enum GstMpegtsAtscMGTTableType">GstMpegtsAtscMGTTableType</a></td>
+</tr>
+<tr>
+<td class="datatype_keyword">struct</td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html#GstMpegtsAtscMGTTable" title="struct GstMpegtsAtscMGTTable">GstMpegtsAtscMGTTable</a></td>
+</tr>
+<tr>
+<td class="datatype_keyword">struct</td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html#GstMpegtsAtscMGT" title="struct GstMpegtsAtscMGT">GstMpegtsAtscMGT</a></td>
+</tr>
+<tr>
+<td class="datatype_keyword">struct</td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html#GstMpegtsAtscMultString" title="struct GstMpegtsAtscMultString">GstMpegtsAtscMultString</a></td>
+</tr>
+<tr>
+<td class="datatype_keyword">struct</td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html#GstMpegtsAtscEITEvent" title="struct GstMpegtsAtscEITEvent">GstMpegtsAtscEITEvent</a></td>
+</tr>
+<tr>
+<td class="datatype_keyword">struct</td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html#GstMpegtsAtscEIT" title="struct GstMpegtsAtscEIT">GstMpegtsAtscEIT</a></td>
+</tr>
+<tr>
+<td class="datatype_keyword">struct</td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html#GstMpegtsAtscETT" title="struct GstMpegtsAtscETT">GstMpegtsAtscETT</a></td>
+</tr>
+<tr>
+<td class="datatype_keyword">struct</td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html#GstMpegtsAtscSTT" title="struct GstMpegtsAtscSTT">GstMpegtsAtscSTT</a></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.includes"></a><h2>Includes</h2>
+<pre class="synopsis">#include <gst/mpegts/mpegts.h>
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.description"></a><h2>Description</h2>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.functions_details"></a><h2>Functions</h2>
+<div class="refsect2">
+<a name="gst-mpegts-section-get-atsc-tvct"></a><h3>gst_mpegts_section_get_atsc_tvct ()</h3>
+<pre class="programlisting">const <a class="link" href="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html#GstMpegtsAtscVCT" title="struct GstMpegtsAtscVCT"><span class="returnvalue">GstMpegtsAtscVCT</span></a> *
+gst_mpegts_section_get_atsc_tvct (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsSection"><span class="type">GstMpegtsSection</span></a> *section</code></em>);</pre>
+<p>Returns the <a class="link" href="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html#GstMpegtsAtscVCT" title="struct GstMpegtsAtscVCT"><span class="type">GstMpegtsAtscVCT</span></a> contained in the <em class="parameter"><code>section</code></em>
+</p>
+<div class="refsect3">
+<a name="gst-mpegts-section-get-atsc-tvct.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>section</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsSection"><span class="type">GstMpegtsSection</span></a> of type <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GST-MPEGTS-SECTION-ATSC-TVCT:CAPS"><code class="literal">GST_MPEGTS_SECTION_ATSC_TVCT</code></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-mpegts-section-get-atsc-tvct.returns"></a><h4>Returns</h4>
+<p> The <a class="link" href="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html#GstMpegtsAtscVCT" title="struct GstMpegtsAtscVCT"><span class="type">GstMpegtsAtscVCT</span></a> contained in the section, or <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if an error
+happened.</p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-mpegts-section-get-atsc-cvct"></a><h3>gst_mpegts_section_get_atsc_cvct ()</h3>
+<pre class="programlisting">const <a class="link" href="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html#GstMpegtsAtscVCT" title="struct GstMpegtsAtscVCT"><span class="returnvalue">GstMpegtsAtscVCT</span></a> *
+gst_mpegts_section_get_atsc_cvct (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsSection"><span class="type">GstMpegtsSection</span></a> *section</code></em>);</pre>
+<p>Returns the <a class="link" href="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html#GstMpegtsAtscVCT" title="struct GstMpegtsAtscVCT"><span class="type">GstMpegtsAtscVCT</span></a> contained in the <em class="parameter"><code>section</code></em>
+</p>
+<div class="refsect3">
+<a name="gst-mpegts-section-get-atsc-cvct.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>section</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsSection"><span class="type">GstMpegtsSection</span></a> of type <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GST-MPEGTS-SECTION-ATSC-CVCT:CAPS"><code class="literal">GST_MPEGTS_SECTION_ATSC_CVCT</code></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-mpegts-section-get-atsc-cvct.returns"></a><h4>Returns</h4>
+<p> The <a class="link" href="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html#GstMpegtsAtscVCT" title="struct GstMpegtsAtscVCT"><span class="type">GstMpegtsAtscVCT</span></a> contained in the section, or <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if an error
+happened.</p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-mpegts-section-get-atsc-mgt"></a><h3>gst_mpegts_section_get_atsc_mgt ()</h3>
+<pre class="programlisting">const <a class="link" href="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html#GstMpegtsAtscMGT" title="struct GstMpegtsAtscMGT"><span class="returnvalue">GstMpegtsAtscMGT</span></a> *
+gst_mpegts_section_get_atsc_mgt (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsSection"><span class="type">GstMpegtsSection</span></a> *section</code></em>);</pre>
+<p>Returns the <a class="link" href="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html#GstMpegtsAtscMGT" title="struct GstMpegtsAtscMGT"><span class="type">GstMpegtsAtscMGT</span></a> contained in the <em class="parameter"><code>section</code></em>
+.</p>
+<div class="refsect3">
+<a name="gst-mpegts-section-get-atsc-mgt.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>section</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsSection"><span class="type">GstMpegtsSection</span></a> of type <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GST-MPEGTS-SECTION-ATSC-MGT:CAPS"><code class="literal">GST_MPEGTS_SECTION_ATSC_MGT</code></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-mpegts-section-get-atsc-mgt.returns"></a><h4>Returns</h4>
+<p> The <a class="link" href="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html#GstMpegtsAtscMGT" title="struct GstMpegtsAtscMGT"><span class="type">GstMpegtsAtscMGT</span></a> contained in the section, or <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if an error
+happened.</p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-mpegts-atsc-string-segment-get-string"></a><h3>gst_mpegts_atsc_string_segment_get_string ()</h3>
+<pre class="programlisting">const <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *
+gst_mpegts_atsc_string_segment_get_string
+ (<em class="parameter"><code><span class="type">GstMpegtsAtscStringSegment</span> *seg</code></em>);</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-mpegts-section-get-atsc-eit"></a><h3>gst_mpegts_section_get_atsc_eit ()</h3>
+<pre class="programlisting">const <a class="link" href="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html#GstMpegtsAtscEIT" title="struct GstMpegtsAtscEIT"><span class="returnvalue">GstMpegtsAtscEIT</span></a> *
+gst_mpegts_section_get_atsc_eit (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsSection"><span class="type">GstMpegtsSection</span></a> *section</code></em>);</pre>
+<p>Returns the <a class="link" href="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html#GstMpegtsAtscEIT" title="struct GstMpegtsAtscEIT"><span class="type">GstMpegtsAtscEIT</span></a> contained in the <em class="parameter"><code>section</code></em>
+.</p>
+<div class="refsect3">
+<a name="gst-mpegts-section-get-atsc-eit.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>section</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsSection"><span class="type">GstMpegtsSection</span></a> of type <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GST-MPEGTS-SECTION-ATSC-EIT:CAPS"><code class="literal">GST_MPEGTS_SECTION_ATSC_EIT</code></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-mpegts-section-get-atsc-eit.returns"></a><h4>Returns</h4>
+<p> The <a class="link" href="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html#GstMpegtsAtscEIT" title="struct GstMpegtsAtscEIT"><span class="type">GstMpegtsAtscEIT</span></a> contained in the section, or <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if an error
+happened.</p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-mpegts-section-get-atsc-ett"></a><h3>gst_mpegts_section_get_atsc_ett ()</h3>
+<pre class="programlisting">const <a class="link" href="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html#GstMpegtsAtscETT" title="struct GstMpegtsAtscETT"><span class="returnvalue">GstMpegtsAtscETT</span></a> *
+gst_mpegts_section_get_atsc_ett (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsSection"><span class="type">GstMpegtsSection</span></a> *section</code></em>);</pre>
+<p>Returns the <a class="link" href="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html#GstMpegtsAtscETT" title="struct GstMpegtsAtscETT"><span class="type">GstMpegtsAtscETT</span></a> contained in the <em class="parameter"><code>section</code></em>
+.</p>
+<div class="refsect3">
+<a name="gst-mpegts-section-get-atsc-ett.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>section</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsSection"><span class="type">GstMpegtsSection</span></a> of type <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GST-MPEGTS-SECTION-ATSC-ETT:CAPS"><code class="literal">GST_MPEGTS_SECTION_ATSC_ETT</code></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-mpegts-section-get-atsc-ett.returns"></a><h4>Returns</h4>
+<p> The <a class="link" href="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html#GstMpegtsAtscETT" title="struct GstMpegtsAtscETT"><span class="type">GstMpegtsAtscETT</span></a> contained in the section, or <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if an error
+happened.</p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-mpegts-section-get-atsc-stt"></a><h3>gst_mpegts_section_get_atsc_stt ()</h3>
+<pre class="programlisting">const <a class="link" href="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html#GstMpegtsAtscSTT" title="struct GstMpegtsAtscSTT"><span class="returnvalue">GstMpegtsAtscSTT</span></a> *
+gst_mpegts_section_get_atsc_stt (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsSection"><span class="type">GstMpegtsSection</span></a> *section</code></em>);</pre>
+<p>Returns the <a class="link" href="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html#GstMpegtsAtscSTT" title="struct GstMpegtsAtscSTT"><span class="type">GstMpegtsAtscSTT</span></a> contained in the <em class="parameter"><code>section</code></em>
+.</p>
+<div class="refsect3">
+<a name="gst-mpegts-section-get-atsc-stt.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>section</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsSection"><span class="type">GstMpegtsSection</span></a> of type <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GST-MPEGTS-SECTION-ATSC-STT:CAPS"><code class="literal">GST_MPEGTS_SECTION_ATSC_STT</code></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-mpegts-section-get-atsc-stt.returns"></a><h4>Returns</h4>
+<p> The <a class="link" href="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html#GstMpegtsAtscSTT" title="struct GstMpegtsAtscSTT"><span class="type">GstMpegtsAtscSTT</span></a> contained in the section, or <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if an error
+happened.</p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-mpegts-atsc-stt-get-datetime-utc"></a><h3>gst_mpegts_atsc_stt_get_datetime_utc ()</h3>
+<pre class="programlisting"><a href="/usr/share/gtk-doc/html/gstreamer-1.0GstDateTime.html#GstDateTime-struct"><span class="returnvalue">GstDateTime</span></a> *
+gst_mpegts_atsc_stt_get_datetime_utc (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html#GstMpegtsAtscSTT" title="struct GstMpegtsAtscSTT"><span class="type">GstMpegtsAtscSTT</span></a> *stt</code></em>);</pre>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.other_details"></a><h2>Types and Values</h2>
+<div class="refsect2">
+<a name="GstMpegtsSectionATSCTableID"></a><h3>enum GstMpegtsSectionATSCTableID</h3>
+<p>Values for a <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsSection"><span class="type">GstMpegtsSection</span></a> table_id.</p>
+<p>These are the registered ATSC table_id variants.</p>
+<p>see also: <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsSectionTableID" title="enum GstMpegtsSectionTableID"><span class="type">GstMpegtsSectionTableID</span></a></p>
+<div class="refsect3">
+<a name="GstMpegtsSectionATSCTableID.members"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="300px" class="enum_members_name">
+<col class="enum_members_description">
+<col width="200px" class="enum_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-TABLE-ID-ATSC-MASTER-GUIDE:CAPS"></a>GST_MTS_TABLE_ID_ATSC_MASTER_GUIDE</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-TABLE-ID-ATSC-TERRESTRIAL-VIRTUAL-CHANNEL:CAPS"></a>GST_MTS_TABLE_ID_ATSC_TERRESTRIAL_VIRTUAL_CHANNEL</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-TABLE-ID-ATSC-CABLE-VIRTUAL-CHANNEL:CAPS"></a>GST_MTS_TABLE_ID_ATSC_CABLE_VIRTUAL_CHANNEL</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-TABLE-ID-ATSC-RATING-REGION:CAPS"></a>GST_MTS_TABLE_ID_ATSC_RATING_REGION</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-TABLE-ID-ATSC-EVENT-INFORMATION:CAPS"></a>GST_MTS_TABLE_ID_ATSC_EVENT_INFORMATION</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-TABLE-ID-ATSC-CHANNEL-OR-EVENT-EXTENDED-TEXT:CAPS"></a>GST_MTS_TABLE_ID_ATSC_CHANNEL_OR_EVENT_EXTENDED_TEXT</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-TABLE-ID-ATSC-SYSTEM-TIME:CAPS"></a>GST_MTS_TABLE_ID_ATSC_SYSTEM_TIME</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-TABLE-ID-ATSC-DATA-EVENT:CAPS"></a>GST_MTS_TABLE_ID_ATSC_DATA_EVENT</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-TABLE-ID-ATSC-DATA-SERVICE:CAPS"></a>GST_MTS_TABLE_ID_ATSC_DATA_SERVICE</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-TABLE-ID-ATSC-NETWORK-RESOURCE:CAPS"></a>GST_MTS_TABLE_ID_ATSC_NETWORK_RESOURCE</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-TABLE-ID-ATSC-LONG-TERM-SERVICE:CAPS"></a>GST_MTS_TABLE_ID_ATSC_LONG_TERM_SERVICE</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-TABLE-ID-ATSC-DIRECTED-CHANNEL-CHANGE:CAPS"></a>GST_MTS_TABLE_ID_ATSC_DIRECTED_CHANNEL_CHANGE</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-TABLE-ID-ATSC-DIRECTED-CHANNEL-CHANGE-SECTION-CODE:CAPS"></a>GST_MTS_TABLE_ID_ATSC_DIRECTED_CHANNEL_CHANGE_SECTION_CODE</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-TABLE-ID-ATSC-AGGREGATE-EVENT-INFORMATION:CAPS"></a>GST_MTS_TABLE_ID_ATSC_AGGREGATE_EVENT_INFORMATION</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-TABLE-ID-ATSC-AGGREGATE-EXTENDED-TEXT:CAPS"></a>GST_MTS_TABLE_ID_ATSC_AGGREGATE_EXTENDED_TEXT</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-TABLE-ID-ATSC-AGGREGATE-DATA-EVENT:CAPS"></a>GST_MTS_TABLE_ID_ATSC_AGGREGATE_DATA_EVENT</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-TABLE-ID-ATSC-SATELLITE-VIRTUAL-CHANNEL:CAPS"></a>GST_MTS_TABLE_ID_ATSC_SATELLITE_VIRTUAL_CHANNEL</p></td>
+<td> </td>
+<td> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstMpegtsAtscVCTSource"></a><h3>struct GstMpegtsAtscVCTSource</h3>
+<pre class="programlisting">struct GstMpegtsAtscVCTSource {
+ gchar *short_name;
+ guint16 major_channel_number;
+ guint16 minor_channel_number;
+ guint8 modulation_mode;
+ guint32 carrier_frequency;
+ guint16 channel_TSID;
+ guint16 program_number;
+ /* FIXME: */
+ guint8 ETM_location;
+ gboolean access_controlled;
+ gboolean hidden;
+ gboolean path_select; /* CVCT only - reserved bit in TVCT */
+ gboolean out_of_band; /* CVCT only - reserved bit in TVCT */
+ gboolean hide_guide;
+ /* FIXME: */
+ guint8 service_type;
+ guint16 source_id;
+ GPtrArray *descriptors;
+};
+</pre>
+<p>Source from a <em class="parameter"><code>GstMpegtsAtscVCT</code></em>
+, can be used both for TVCT and CVCT tables</p>
+<div class="refsect3">
+<a name="GstMpegtsAtscVCTSource.members"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="300px" class="struct_members_name">
+<col class="struct_members_description">
+<col width="200px" class="struct_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *<em class="structfield"><code><a name="GstMpegtsAtscVCTSource.short-name"></a>short_name</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint16"><span class="type">guint16</span></a> <em class="structfield"><code><a name="GstMpegtsAtscVCTSource.major-channel-number"></a>major_channel_number</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint16"><span class="type">guint16</span></a> <em class="structfield"><code><a name="GstMpegtsAtscVCTSource.minor-channel-number"></a>minor_channel_number</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstMpegtsAtscVCTSource.modulation-mode"></a>modulation_mode</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint32"><span class="type">guint32</span></a> <em class="structfield"><code><a name="GstMpegtsAtscVCTSource.carrier-frequency"></a>carrier_frequency</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint16"><span class="type">guint16</span></a> <em class="structfield"><code><a name="GstMpegtsAtscVCTSource.channel-TSID"></a>channel_TSID</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint16"><span class="type">guint16</span></a> <em class="structfield"><code><a name="GstMpegtsAtscVCTSource.program-number"></a>program_number</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstMpegtsAtscVCTSource.ETM-location"></a>ETM_location</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> <em class="structfield"><code><a name="GstMpegtsAtscVCTSource.access-controlled"></a>access_controlled</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> <em class="structfield"><code><a name="GstMpegtsAtscVCTSource.hidden"></a>hidden</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> <em class="structfield"><code><a name="GstMpegtsAtscVCTSource.path-select"></a>path_select</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> <em class="structfield"><code><a name="GstMpegtsAtscVCTSource.out-of-band"></a>out_of_band</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> <em class="structfield"><code><a name="GstMpegtsAtscVCTSource.hide-guide"></a>hide_guide</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstMpegtsAtscVCTSource.service-type"></a>service_type</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint16"><span class="type">guint16</span></a> <em class="structfield"><code><a name="GstMpegtsAtscVCTSource.source-id"></a>source_id</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a> *<em class="structfield"><code><a name="GstMpegtsAtscVCTSource.descriptors"></a>descriptors</code></em>;</p></td>
+<td class="struct_member_description"><p> descriptors. </p></td>
+<td class="struct_member_annotations"><span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> GstMpegtsDescriptor]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstMpegtsAtscVCT"></a><h3>struct GstMpegtsAtscVCT</h3>
+<pre class="programlisting">struct GstMpegtsAtscVCT {
+ guint16 transport_stream_id;
+ guint8 protocol_version;
+ GPtrArray *sources;
+ GPtrArray *descriptors;
+};
+</pre>
+<p>Represents both:
+ Terrestrial Virtual Channel Table (A65)
+ Cable Virtual Channel Table (A65)</p>
+<div class="refsect3">
+<a name="GstMpegtsAtscVCT.members"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="300px" class="struct_members_name">
+<col class="struct_members_description">
+<col width="200px" class="struct_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint16"><span class="type">guint16</span></a> <em class="structfield"><code><a name="GstMpegtsAtscVCT.transport-stream-id"></a>transport_stream_id</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstMpegtsAtscVCT.protocol-version"></a>protocol_version</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a> *<em class="structfield"><code><a name="GstMpegtsAtscVCT.sources"></a>sources</code></em>;</p></td>
+<td class="struct_member_description"><p> sources. </p></td>
+<td class="struct_member_annotations"><span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> GstMpegtsAtscVCTSource]</span></td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a> *<em class="structfield"><code><a name="GstMpegtsAtscVCT.descriptors"></a>descriptors</code></em>;</p></td>
+<td class="struct_member_description"><p> descriptors. </p></td>
+<td class="struct_member_annotations"><span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> GstMpegtsDescriptor]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstMpegtsAtscMGTTableType"></a><h3>enum GstMpegtsAtscMGTTableType</h3>
+<div class="refsect3">
+<a name="GstMpegtsAtscMGTTableType.members"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="300px" class="enum_members_name">
+<col class="enum_members_description">
+<col width="200px" class="enum_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-ATSC-MGT-TABLE-TYPE-EIT0:CAPS"></a>GST_MPEGTS_ATSC_MGT_TABLE_TYPE_EIT0</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-ATSC-MGT-TABLE-TYPE-EIT127:CAPS"></a>GST_MPEGTS_ATSC_MGT_TABLE_TYPE_EIT127</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-ATSC-MGT-TABLE-TYPE-ETT0:CAPS"></a>GST_MPEGTS_ATSC_MGT_TABLE_TYPE_ETT0</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-ATSC-MGT-TABLE-TYPE-ETT127:CAPS"></a>GST_MPEGTS_ATSC_MGT_TABLE_TYPE_ETT127</p></td>
+<td> </td>
+<td> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstMpegtsAtscMGTTable"></a><h3>struct GstMpegtsAtscMGTTable</h3>
+<pre class="programlisting">struct GstMpegtsAtscMGTTable {
+ guint16 table_type;
+ guint16 pid;
+ guint8 version_number;
+ guint32 number_bytes;
+ GPtrArray *descriptors;
+};
+</pre>
+<p>Source from a <em class="parameter"><code>GstMpegtsAtscMGT</code></em>
+</p>
+<div class="refsect3">
+<a name="GstMpegtsAtscMGTTable.members"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="300px" class="struct_members_name">
+<col class="struct_members_description">
+<col width="200px" class="struct_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint16"><span class="type">guint16</span></a> <em class="structfield"><code><a name="GstMpegtsAtscMGTTable.table-type"></a>table_type</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint16"><span class="type">guint16</span></a> <em class="structfield"><code><a name="GstMpegtsAtscMGTTable.pid"></a>pid</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstMpegtsAtscMGTTable.version-number"></a>version_number</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint32"><span class="type">guint32</span></a> <em class="structfield"><code><a name="GstMpegtsAtscMGTTable.number-bytes"></a>number_bytes</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a> *<em class="structfield"><code><a name="GstMpegtsAtscMGTTable.descriptors"></a>descriptors</code></em>;</p></td>
+<td class="struct_member_description"><p> descriptors. </p></td>
+<td class="struct_member_annotations"><span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> GstMpegtsDescriptor]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstMpegtsAtscMGT"></a><h3>struct GstMpegtsAtscMGT</h3>
+<pre class="programlisting">struct GstMpegtsAtscMGT {
+ guint8 protocol_version;
+ guint16 tables_defined;
+ GPtrArray *tables;
+ GPtrArray *descriptors;
+};
+</pre>
+<p>Master Guide Table (A65)</p>
+<div class="refsect3">
+<a name="GstMpegtsAtscMGT.members"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="300px" class="struct_members_name">
+<col class="struct_members_description">
+<col width="200px" class="struct_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstMpegtsAtscMGT.protocol-version"></a>protocol_version</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint16"><span class="type">guint16</span></a> <em class="structfield"><code><a name="GstMpegtsAtscMGT.tables-defined"></a>tables_defined</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a> *<em class="structfield"><code><a name="GstMpegtsAtscMGT.tables"></a>tables</code></em>;</p></td>
+<td class="struct_member_description"><p> the tables. </p></td>
+<td class="struct_member_annotations"><span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> GstMpegtsAtscMGTTable]</span></td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a> *<em class="structfield"><code><a name="GstMpegtsAtscMGT.descriptors"></a>descriptors</code></em>;</p></td>
+<td class="struct_member_description"><p> descriptors. </p></td>
+<td class="struct_member_annotations"><span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> GstMpegtsDescriptor]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstMpegtsAtscMultString"></a><h3>struct GstMpegtsAtscMultString</h3>
+<pre class="programlisting">struct GstMpegtsAtscMultString {
+ gchar iso_639_langcode[4];
+ GPtrArray *segments;
+};
+</pre>
+<div class="refsect3">
+<a name="GstMpegtsAtscMultString.members"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="300px" class="struct_members_name">
+<col class="struct_members_description">
+<col width="200px" class="struct_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="type">gchar</span></a> <em class="structfield"><code><a name="GstMpegtsAtscMultString.iso-639-langcode"></a>iso_639_langcode</code></em>[4];</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a> *<em class="structfield"><code><a name="GstMpegtsAtscMultString.segments"></a>segments</code></em>;</p></td>
+<td class="struct_member_description"><p>. </p></td>
+<td class="struct_member_annotations"><span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> GstMpegtsAtscStringSegment]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstMpegtsAtscEITEvent"></a><h3>struct GstMpegtsAtscEITEvent</h3>
+<pre class="programlisting">struct GstMpegtsAtscEITEvent {
+ guint16 event_id;
+ guint32 start_time;
+ guint8 etm_location;
+ guint32 length_in_seconds;
+ GPtrArray *titles;
+
+ GPtrArray *descriptors;
+};
+</pre>
+<p>An ATSC EIT Event</p>
+<div class="refsect3">
+<a name="GstMpegtsAtscEITEvent.members"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="300px" class="struct_members_name">
+<col class="struct_members_description">
+<col width="200px" class="struct_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint16"><span class="type">guint16</span></a> <em class="structfield"><code><a name="GstMpegtsAtscEITEvent.event-id"></a>event_id</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint32"><span class="type">guint32</span></a> <em class="structfield"><code><a name="GstMpegtsAtscEITEvent.start-time"></a>start_time</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstMpegtsAtscEITEvent.etm-location"></a>etm_location</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint32"><span class="type">guint32</span></a> <em class="structfield"><code><a name="GstMpegtsAtscEITEvent.length-in-seconds"></a>length_in_seconds</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a> *<em class="structfield"><code><a name="GstMpegtsAtscEITEvent.titles"></a>titles</code></em>;</p></td>
+<td class="struct_member_description"><p> the titles. </p></td>
+<td class="struct_member_annotations"><span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> GstMpegtsAtscMultString]</span></td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a> *<em class="structfield"><code><a name="GstMpegtsAtscEITEvent.descriptors"></a>descriptors</code></em>;</p></td>
+<td class="struct_member_description"><p> descriptors. </p></td>
+<td class="struct_member_annotations"><span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> GstMpegtsDescriptor]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstMpegtsAtscEIT"></a><h3>struct GstMpegtsAtscEIT</h3>
+<pre class="programlisting">struct GstMpegtsAtscEIT {
+ guint16 source_id;
+ guint8 protocol_version;
+
+ GPtrArray *events;
+};
+</pre>
+<p>Event Information Table (ATSC)</p>
+<div class="refsect3">
+<a name="GstMpegtsAtscEIT.members"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="300px" class="struct_members_name">
+<col class="struct_members_description">
+<col width="200px" class="struct_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint16"><span class="type">guint16</span></a> <em class="structfield"><code><a name="GstMpegtsAtscEIT.source-id"></a>source_id</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstMpegtsAtscEIT.protocol-version"></a>protocol_version</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a> *<em class="structfield"><code><a name="GstMpegtsAtscEIT.events"></a>events</code></em>;</p></td>
+<td class="struct_member_description"><p> Events. </p></td>
+<td class="struct_member_annotations"><span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> GstMpegtsAtscEITEvent]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstMpegtsAtscETT"></a><h3>struct GstMpegtsAtscETT</h3>
+<pre class="programlisting">struct GstMpegtsAtscETT {
+ guint16 ett_table_id_extension;
+ guint16 protocol_version;
+ guint32 etm_id;
+
+ GPtrArray *messages;
+};
+</pre>
+<p>Extended Text Table (ATSC)</p>
+<div class="refsect3">
+<a name="GstMpegtsAtscETT.members"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="300px" class="struct_members_name">
+<col class="struct_members_description">
+<col width="200px" class="struct_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint16"><span class="type">guint16</span></a> <em class="structfield"><code><a name="GstMpegtsAtscETT.ett-table-id-extension"></a>ett_table_id_extension</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint16"><span class="type">guint16</span></a> <em class="structfield"><code><a name="GstMpegtsAtscETT.protocol-version"></a>protocol_version</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint32"><span class="type">guint32</span></a> <em class="structfield"><code><a name="GstMpegtsAtscETT.etm-id"></a>etm_id</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a> *<em class="structfield"><code><a name="GstMpegtsAtscETT.messages"></a>messages</code></em>;</p></td>
+<td class="struct_member_description"><p> List of texts. </p></td>
+<td class="struct_member_annotations"><span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> GstMpegtsAtscMultString]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstMpegtsAtscSTT"></a><h3>struct GstMpegtsAtscSTT</h3>
+<pre class="programlisting">struct GstMpegtsAtscSTT {
+ guint8 protocol_version;
+ guint32 system_time;
+ guint8 gps_utc_offset;
+ gboolean ds_status;
+ guint8 ds_dayofmonth;
+ guint8 ds_hour;
+ GPtrArray *descriptors;
+
+ GstDateTime *utc_datetime;
+};
+</pre>
+<p>System Time Table (A65)</p>
+<div class="refsect3">
+<a name="GstMpegtsAtscSTT.members"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="300px" class="struct_members_name">
+<col class="struct_members_description">
+<col width="200px" class="struct_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstMpegtsAtscSTT.protocol-version"></a>protocol_version</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint32"><span class="type">guint32</span></a> <em class="structfield"><code><a name="GstMpegtsAtscSTT.system-time"></a>system_time</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstMpegtsAtscSTT.gps-utc-offset"></a>gps_utc_offset</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> <em class="structfield"><code><a name="GstMpegtsAtscSTT.ds-status"></a>ds_status</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstMpegtsAtscSTT.ds-dayofmonth"></a>ds_dayofmonth</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstMpegtsAtscSTT.ds-hour"></a>ds_hour</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a> *<em class="structfield"><code><a name="GstMpegtsAtscSTT.descriptors"></a>descriptors</code></em>;</p></td>
+<td class="struct_member_description"><p> descriptors. </p></td>
+<td class="struct_member_annotations"><span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> GstMpegtsDescriptor]</span></td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/gstreamer-1.0GstDateTime.html#GstDateTime-struct"><span class="type">GstDateTime</span></a> *<em class="structfield"><code><a name="GstMpegtsAtscSTT.utc-datetime"></a>utc_datetime</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>Generated by GTK-Doc V1.25</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html b/docs/libs/html/gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html
new file mode 100644
index 0000000..deb2cbe
--- /dev/null
+++ b/docs/libs/html/gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html
@@ -0,0 +1,938 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Base MPEG-TS descriptors: GStreamer Bad Plugins 1.0 Library Reference Manual</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
+<link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Library Reference Manual">
+<link rel="up" href="mpegts.html" title="Mpeg TS helper library">
+<link rel="prev" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html" title="Base MPEG-TS sections">
+<link rel="next" href="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html" title="ATSC variants of MPEG-TS sections">
+<meta name="generator" content="GTK-Doc V1.25 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
+<td width="100%" align="left" class="shortcuts">
+<a href="#" class="shortcut">Top</a><span id="nav_description"> <span class="dim">|</span>
+ <a href="#gst-plugins-bad-libs-Base-MPEG-TS-descriptors.description" class="shortcut">Description</a></span><span id="nav_hierarchy"> <span class="dim">|</span>
+ <a href="#gst-plugins-bad-libs-Base-MPEG-TS-descriptors.object-hierarchy" class="shortcut">Object Hierarchy</a></span>
+</td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
+<td><a accesskey="u" href="mpegts.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
+<td><a accesskey="p" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="gst-plugins-bad-libs-Base-MPEG-TS-descriptors"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.top_of_page"></a>Base MPEG-TS descriptors</span></h2>
+<p>Base MPEG-TS descriptors — Descriptors for ITU H.222.0 | ISO/IEC 13818-1</p>
+</td>
+<td class="gallery_image" valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.functions"></a><h2>Functions</h2>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="functions_return">
+<col class="functions_name">
+</colgroup>
+<tbody>
+<tr>
+<td class="function_type">const <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GstMpegtsDescriptor"><span class="returnvalue">GstMpegtsDescriptor</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#gst-mpegts-find-descriptor" title="gst_mpegts_find_descriptor ()">gst_mpegts_find_descriptor</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="/usr/share/gtk-doc/html/glibglib-Pointer-Arrays.html#GPtrArray"><span class="returnvalue">GPtrArray</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#gst-mpegts-parse-descriptors" title="gst_mpegts_parse_descriptors ()">gst_mpegts_parse_descriptors</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GstMpegtsDescriptor"><span class="returnvalue">GstMpegtsDescriptor</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#gst-mpegts-descriptor-from-custom" title="gst_mpegts_descriptor_from_custom ()">gst_mpegts_descriptor_from_custom</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GstMpegtsDescriptor"><span class="returnvalue">GstMpegtsDescriptor</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#gst-mpegts-descriptor-from-registration" title="gst_mpegts_descriptor_from_registration ()">gst_mpegts_descriptor_from_registration</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#gst-mpegts-descriptor-parse-iso-639-language" title="gst_mpegts_descriptor_parse_iso_639_language ()">gst_mpegts_descriptor_parse_iso_639_language</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#gst-mpegts-descriptor-parse-iso-639-language-idx" title="gst_mpegts_descriptor_parse_iso_639_language_idx ()">gst_mpegts_descriptor_parse_iso_639_language_idx</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#gst-mpegts-descriptor-parse-iso-639-language-nb" title="gst_mpegts_descriptor_parse_iso_639_language_nb ()">gst_mpegts_descriptor_parse_iso_639_language_nb</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#gst-mpegts-iso-639-language-descriptor-free" title="gst_mpegts_iso_639_language_descriptor_free ()">gst_mpegts_iso_639_language_descriptor_free</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#gst-mpegts-descriptor-parse-logical-channel" title="gst_mpegts_descriptor_parse_logical_channel ()">gst_mpegts_descriptor_parse_logical_channel</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<a name="GstMpegtsDescriptor"></a><div class="refsect1">
+<a name="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.other"></a><h2>Types and Values</h2>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="name">
+<col class="description">
+</colgroup>
+<tbody>
+<tr>
+<td class="datatype_keyword">struct</td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GstMpegtsDescriptor-struct" title="struct GstMpegtsDescriptor">GstMpegtsDescriptor</a></td>
+</tr>
+<tr>
+<td class="datatype_keyword">enum</td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GstMpegtsDescriptorType" title="enum GstMpegtsDescriptorType">GstMpegtsDescriptorType</a></td>
+</tr>
+<tr>
+<td class="datatype_keyword">enum</td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GstMpegtsMiscDescriptorType" title="enum GstMpegtsMiscDescriptorType">GstMpegtsMiscDescriptorType</a></td>
+</tr>
+<tr>
+<td class="datatype_keyword">struct</td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GstMpegtsISO639LanguageDescriptor" title="struct GstMpegtsISO639LanguageDescriptor">GstMpegtsISO639LanguageDescriptor</a></td>
+</tr>
+<tr>
+<td class="datatype_keyword">enum</td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GstMpegtsIso639AudioType" title="enum GstMpegtsIso639AudioType">GstMpegtsIso639AudioType</a></td>
+</tr>
+<tr>
+<td class="datatype_keyword">struct</td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GstMpegtsLogicalChannel" title="struct GstMpegtsLogicalChannel">GstMpegtsLogicalChannel</a></td>
+</tr>
+<tr>
+<td class="datatype_keyword">struct</td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GstMpegtsLogicalChannelDescriptor" title="struct GstMpegtsLogicalChannelDescriptor">GstMpegtsLogicalChannelDescriptor</a></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="screen"> <a href="https://developer.gnome.org/gobject/unstable/gobject-Boxed-Types.html">GBoxed</a>
+ <span class="lineart">╰──</span> GstMpegtsDescriptor
+ <a href="https://developer.gnome.org/gobject/unstable/gobject-Enumeration-and-Flag-Types.html">GEnum</a>
+ <span class="lineart">├──</span> GstMpegtsDescriptorType
+ <span class="lineart">╰──</span> GstMpegtsIso639AudioType
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.includes"></a><h2>Includes</h2>
+<pre class="synopsis">#include <gst/mpegts/mpegts.h>
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.description"></a><h2>Description</h2>
+<p>These are the base descriptor types and methods.</p>
+<p>For more details, refer to the ITU H.222.0 or ISO/IEC 13818-1 specifications
+and other specifications mentionned in the documentation.</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.functions_details"></a><h2>Functions</h2>
+<div class="refsect2">
+<a name="gst-mpegts-find-descriptor"></a><h3>gst_mpegts_find_descriptor ()</h3>
+<pre class="programlisting">const <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GstMpegtsDescriptor"><span class="returnvalue">GstMpegtsDescriptor</span></a> *
+gst_mpegts_find_descriptor (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a> *descriptors</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> tag</code></em>);</pre>
+<p>Finds the first descriptor of type <em class="parameter"><code>tag</code></em>
+ in the array.</p>
+<p>Note: To look for descriptors that can be present more than once in an
+array of descriptors, iterate the <a href="/usr/share/gtk-doc/html/glibglib-Arrays.html#GArray"><span class="type">GArray</span></a> manually.</p>
+<div class="refsect3">
+<a name="gst-mpegts-find-descriptor.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>descriptors</p></td>
+<td class="parameter_description"><p> an array
+of <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GstMpegtsDescriptor"><span class="type">GstMpegtsDescriptor</span></a>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> GstMpegtsDescriptor][<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>tag</p></td>
+<td class="parameter_description"><p>the tag to look for</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-mpegts-find-descriptor.returns"></a><h4>Returns</h4>
+<p> the first descriptor matchin <em class="parameter"><code>tag</code></em>
+, else <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. </p>
+<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-mpegts-parse-descriptors"></a><h3>gst_mpegts_parse_descriptors ()</h3>
+<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Pointer-Arrays.html#GPtrArray"><span class="returnvalue">GPtrArray</span></a> *
+gst_mpegts_parse_descriptors (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> *buffer</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gsize"><span class="type">gsize</span></a> buf_len</code></em>);</pre>
+<p>Parses the descriptors present in <em class="parameter"><code>buffer</code></em>
+ and returns them as an
+array.</p>
+<p>Note: The data provided in <em class="parameter"><code>buffer</code></em>
+ will not be copied.</p>
+<div class="refsect3">
+<a name="gst-mpegts-parse-descriptors.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>buffer</p></td>
+<td class="parameter_description"><p> descriptors to parse. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>buf_len</p></td>
+<td class="parameter_description"><p>Size of <em class="parameter"><code>buffer</code></em>
+</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-mpegts-parse-descriptors.returns"></a><h4>Returns</h4>
+<p> an
+array of the parsed descriptors or <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if there was an error.
+Release with <a href="/usr/share/gtk-doc/html/glibglib-Arrays.html#g-array-unref"><span class="type">g_array_unref</span></a> when done with it. </p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> GstMpegtsDescriptor]</span></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-mpegts-descriptor-from-custom"></a><h3>gst_mpegts_descriptor_from_custom ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GstMpegtsDescriptor"><span class="returnvalue">GstMpegtsDescriptor</span></a> *
+gst_mpegts_descriptor_from_custom (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> tag</code></em>,
+ <em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> *data</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gsize"><span class="type">gsize</span></a> length</code></em>);</pre>
+<p>Creates a <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GstMpegtsDescriptor"><span class="type">GstMpegtsDescriptor</span></a> with custom <em class="parameter"><code>tag</code></em>
+ and <em class="parameter"><code>data</code></em>
+</p>
+<div class="refsect3">
+<a name="gst-mpegts-descriptor-from-custom.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>tag</p></td>
+<td class="parameter_description"><p>descriptor tag</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>data</p></td>
+<td class="parameter_description"><p> descriptor data (after tag and length field). </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>length</p></td>
+<td class="parameter_description"><p>length of <em class="parameter"><code>data</code></em>
+</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-mpegts-descriptor-from-custom.returns"></a><h4>Returns</h4>
+<p> <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GstMpegtsDescriptor"><span class="type">GstMpegtsDescriptor</span></a></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-mpegts-descriptor-from-registration"></a><h3>gst_mpegts_descriptor_from_registration ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GstMpegtsDescriptor"><span class="returnvalue">GstMpegtsDescriptor</span></a> *
+gst_mpegts_descriptor_from_registration
+ (<em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *format_identifier</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> *additional_info</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gsize"><span class="type">gsize</span></a> additional_info_length</code></em>);</pre>
+<p>Creates a <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GST-MTS-DESC-REGISTRATION:CAPS"><code class="literal">GST_MTS_DESC_REGISTRATION</code></a> <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GstMpegtsDescriptor"><span class="type">GstMpegtsDescriptor</span></a></p>
+<p>Return: <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GstMpegtsDescriptor"><span class="type">GstMpegtsDescriptor</span></a>, <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> on failure</p>
+<div class="refsect3">
+<a name="gst-mpegts-descriptor-from-registration.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>format_identifier</p></td>
+<td class="parameter_description"><p> a 4 character format identifier string. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>additional_info</p></td>
+<td class="parameter_description"><p> pointer to optional additional info. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>][<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>additional_info_length</p></td>
+<td class="parameter_description"><p>length of the optional <em class="parameter"><code>additional_info</code></em>
+</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-mpegts-descriptor-parse-iso-639-language"></a><h3>gst_mpegts_descriptor_parse_iso_639_language ()</h3>
+<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gst_mpegts_descriptor_parse_iso_639_language
+ (<em class="parameter"><code>const <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GstMpegtsDescriptor"><span class="type">GstMpegtsDescriptor</span></a> *descriptor</code></em>,
+ <em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GstMpegtsISO639LanguageDescriptor" title="struct GstMpegtsISO639LanguageDescriptor"><span class="type">GstMpegtsISO639LanguageDescriptor</span></a> **res</code></em>);</pre>
+<p>Extracts the iso 639-2 language information from <em class="parameter"><code>descriptor</code></em>
+.</p>
+<p>Note: Use <a href="/usr/share/gtk-doc/html/gst-plugins-base-libs-1.0gst-plugins-base-libs-gsttaglanguagecodes.html#gst-tag-get-language-code"><span class="type">gst_tag_get_language_code</span></a> if you want to get the the
+ISO 639-1 language code from the returned ISO 639-2 one.</p>
+<div class="refsect3">
+<a name="gst-mpegts-descriptor-parse-iso-639-language.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>descriptor</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GST-MTS-DESC-ISO-639-LANGUAGE:CAPS"><code class="literal">GST_MTS_DESC_ISO_639_LANGUAGE</code></a> <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GstMpegtsDescriptor"><span class="type">GstMpegtsDescriptor</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>res</p></td>
+<td class="parameter_description"><p> the <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GstMpegtsISO639LanguageDescriptor" title="struct GstMpegtsISO639LanguageDescriptor"><span class="type">GstMpegtsISO639LanguageDescriptor</span></a> to fill. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>][<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-mpegts-descriptor-parse-iso-639-language.returns"></a><h4>Returns</h4>
+<p> <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if parsing succeeded, else <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a>.</p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-mpegts-descriptor-parse-iso-639-language-idx"></a><h3>gst_mpegts_descriptor_parse_iso_639_language_idx ()</h3>
+<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gst_mpegts_descriptor_parse_iso_639_language_idx
+ (<em class="parameter"><code>const <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GstMpegtsDescriptor"><span class="type">GstMpegtsDescriptor</span></a> *descriptor</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="type">guint</span></a> idx</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="type">gchar</span></a> **lang</code></em>,
+ <em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GstMpegtsIso639AudioType" title="enum GstMpegtsIso639AudioType"><span class="type">GstMpegtsIso639AudioType</span></a> *audio_type</code></em>);</pre>
+<p>Extracts the iso 639-2 language information from specific table id in <em class="parameter"><code>descriptor</code></em>
+.</p>
+<p>Note: Use <a href="/usr/share/gtk-doc/html/gst-plugins-base-libs-1.0gst-plugins-base-libs-gsttaglanguagecodes.html#gst-tag-get-language-code"><span class="type">gst_tag_get_language_code</span></a> if you want to get the the
+ISO 639-1 language code from the returned ISO 639-2 one.</p>
+<div class="refsect3">
+<a name="gst-mpegts-descriptor-parse-iso-639-language-idx.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>descriptor</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GST-MTS-DESC-ISO-639-LANGUAGE:CAPS"><code class="literal">GST_MTS_DESC_ISO_639_LANGUAGE</code></a> <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GstMpegtsDescriptor"><span class="type">GstMpegtsDescriptor</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>idx</p></td>
+<td class="parameter_description"><p>Table id of the language to parse</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>lang</p></td>
+<td class="parameter_description"><p> 4-byte gchar array to hold the language code. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>][<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>audio_type</p></td>
+<td class="parameter_description"><p> the <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GstMpegtsIso639AudioType" title="enum GstMpegtsIso639AudioType"><span class="type">GstMpegtsIso639AudioType</span></a> to set. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>][<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>][<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-mpegts-descriptor-parse-iso-639-language-idx.returns"></a><h4>Returns</h4>
+<p> <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if parsing succeeded, else <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a>.</p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-mpegts-descriptor-parse-iso-639-language-nb"></a><h3>gst_mpegts_descriptor_parse_iso_639_language_nb ()</h3>
+<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>
+gst_mpegts_descriptor_parse_iso_639_language_nb
+ (<em class="parameter"><code>const <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GstMpegtsDescriptor"><span class="type">GstMpegtsDescriptor</span></a> *descriptor</code></em>);</pre>
+<div class="refsect3">
+<a name="gst-mpegts-descriptor-parse-iso-639-language-nb.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>descriptor</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GST-MTS-DESC-ISO-639-LANGUAGE:CAPS"><code class="literal">GST_MTS_DESC_ISO_639_LANGUAGE</code></a> <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GstMpegtsDescriptor"><span class="type">GstMpegtsDescriptor</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-mpegts-descriptor-parse-iso-639-language-nb.returns"></a><h4>Returns</h4>
+<p> The number of languages in <em class="parameter"><code>descriptor</code></em>
+</p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-mpegts-iso-639-language-descriptor-free"></a><h3>gst_mpegts_iso_639_language_descriptor_free ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_mpegts_iso_639_language_descriptor_free
+ (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GstMpegtsISO639LanguageDescriptor" title="struct GstMpegtsISO639LanguageDescriptor"><span class="type">GstMpegtsISO639LanguageDescriptor</span></a> *desc</code></em>);</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-mpegts-descriptor-parse-logical-channel"></a><h3>gst_mpegts_descriptor_parse_logical_channel ()</h3>
+<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gst_mpegts_descriptor_parse_logical_channel
+ (<em class="parameter"><code>const <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GstMpegtsDescriptor"><span class="type">GstMpegtsDescriptor</span></a> *descriptor</code></em>,
+ <em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GstMpegtsLogicalChannelDescriptor" title="struct GstMpegtsLogicalChannelDescriptor"><span class="type">GstMpegtsLogicalChannelDescriptor</span></a> *res</code></em>);</pre>
+<p>Extracts the logical channels from <em class="parameter"><code>descriptor</code></em>
+.</p>
+<div class="refsect3">
+<a name="gst-mpegts-descriptor-parse-logical-channel.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>descriptor</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GST-MTS-DESC-DTG-LOGICAL-CHANNEL:CAPS"><code class="literal">GST_MTS_DESC_DTG_LOGICAL_CHANNEL</code></a> <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GstMpegtsDescriptor"><span class="type">GstMpegtsDescriptor</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>res</p></td>
+<td class="parameter_description"><p> the <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GstMpegtsLogicalChannelDescriptor" title="struct GstMpegtsLogicalChannelDescriptor"><span class="type">GstMpegtsLogicalChannelDescriptor</span></a> to fill. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>][<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-mpegts-descriptor-parse-logical-channel.returns"></a><h4>Returns</h4>
+<p> <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if parsing succeeded, else <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a>.</p>
+</div>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.other_details"></a><h2>Types and Values</h2>
+<div class="refsect2">
+<a name="GstMpegtsDescriptor-struct"></a><h3>struct GstMpegtsDescriptor</h3>
+<pre class="programlisting">struct GstMpegtsDescriptor {
+ guint8 tag;
+ guint8 tag_extension;
+ guint8 length;
+ guint8 *data;
+};
+</pre>
+<p>Mpeg-TS descriptor (ISO/IEC 13818-1).</p>
+<div class="refsect3">
+<a name="GstMpegtsDescriptor.members"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="300px" class="struct_members_name">
+<col class="struct_members_description">
+<col width="200px" class="struct_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstMpegtsDescriptor-struct.tag"></a>tag</code></em>;</p></td>
+<td class="struct_member_description"><p>the type of descriptor</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstMpegtsDescriptor-struct.tag-extension"></a>tag_extension</code></em>;</p></td>
+<td class="struct_member_description"><p>the extended type (if <em class="parameter"><code>descriptor_tag</code></em>
+is 0x7f)</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstMpegtsDescriptor-struct.length"></a>length</code></em>;</p></td>
+<td class="struct_member_description"><p>the length of the descriptor content (excluding tag/length field)</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> *<em class="structfield"><code><a name="GstMpegtsDescriptor-struct.data"></a>data</code></em>;</p></td>
+<td class="struct_member_description"><p>the full descriptor data (including tag, extension, length). The first
+two bytes are the <em class="parameter"><code>tag</code></em>
+and <em class="parameter"><code>tag_extension</code></em>
+.</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstMpegtsDescriptorType"></a><h3>enum GstMpegtsDescriptorType</h3>
+<p>The type of <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GstMpegtsDescriptor"><span class="type">GstMpegtsDescriptor</span></a></p>
+<p>These values correspond to the registered descriptor type from
+the base MPEG-TS specifications (ITU H.222.0 | ISO/IEC 13818-1).</p>
+<p>Consult the relevant specifications for more details.</p>
+<div class="refsect3">
+<a name="GstMpegtsDescriptorType.members"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="300px" class="enum_members_name">
+<col class="enum_members_description">
+<col width="200px" class="enum_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-DESC-RESERVED-00:CAPS"></a>GST_MTS_DESC_RESERVED_00</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-DESC-RESERVED-01:CAPS"></a>GST_MTS_DESC_RESERVED_01</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-DESC-VIDEO-STREAM:CAPS"></a>GST_MTS_DESC_VIDEO_STREAM</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-DESC-AUDIO-STREAM:CAPS"></a>GST_MTS_DESC_AUDIO_STREAM</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-DESC-HIERARCHY:CAPS"></a>GST_MTS_DESC_HIERARCHY</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-DESC-REGISTRATION:CAPS"></a>GST_MTS_DESC_REGISTRATION</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-DESC-DATA-STREAM-ALIGNMENT:CAPS"></a>GST_MTS_DESC_DATA_STREAM_ALIGNMENT</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-DESC-TARGET-BACKGROUND-GRID:CAPS"></a>GST_MTS_DESC_TARGET_BACKGROUND_GRID</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-DESC-VIDEO-WINDOW:CAPS"></a>GST_MTS_DESC_VIDEO_WINDOW</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-DESC-CA:CAPS"></a>GST_MTS_DESC_CA</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-DESC-ISO-639-LANGUAGE:CAPS"></a>GST_MTS_DESC_ISO_639_LANGUAGE</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-DESC-SYSTEM-CLOCK:CAPS"></a>GST_MTS_DESC_SYSTEM_CLOCK</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-DESC-MULTIPLEX-BUFFER-UTILISATION:CAPS"></a>GST_MTS_DESC_MULTIPLEX_BUFFER_UTILISATION</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-DESC-COPYRIGHT:CAPS"></a>GST_MTS_DESC_COPYRIGHT</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-DESC-MAXIMUM-BITRATE:CAPS"></a>GST_MTS_DESC_MAXIMUM_BITRATE</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-DESC-PRIVATE-DATA-INDICATOR:CAPS"></a>GST_MTS_DESC_PRIVATE_DATA_INDICATOR</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-DESC-SMOOTHING-BUFFER:CAPS"></a>GST_MTS_DESC_SMOOTHING_BUFFER</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-DESC-STD:CAPS"></a>GST_MTS_DESC_STD</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-DESC-IBP:CAPS"></a>GST_MTS_DESC_IBP</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-DESC-DSMCC-CAROUSEL-IDENTIFIER:CAPS"></a>GST_MTS_DESC_DSMCC_CAROUSEL_IDENTIFIER</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-DESC-DSMCC-ASSOCIATION-TAG:CAPS"></a>GST_MTS_DESC_DSMCC_ASSOCIATION_TAG</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-DESC-DSMCC-DEFERRED-ASSOCIATION-TAG:CAPS"></a>GST_MTS_DESC_DSMCC_DEFERRED_ASSOCIATION_TAG</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-DESC-DSMCC-NPT-REFERENCE:CAPS"></a>GST_MTS_DESC_DSMCC_NPT_REFERENCE</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-DESC-DSMCC-NPT-ENDPOINT:CAPS"></a>GST_MTS_DESC_DSMCC_NPT_ENDPOINT</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-DESC-DSMCC-STREAM-MODE:CAPS"></a>GST_MTS_DESC_DSMCC_STREAM_MODE</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-DESC-DSMCC-STREAM-EVENT:CAPS"></a>GST_MTS_DESC_DSMCC_STREAM_EVENT</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-DESC-MPEG4-VIDEO:CAPS"></a>GST_MTS_DESC_MPEG4_VIDEO</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-DESC-MPEG4-AUDIO:CAPS"></a>GST_MTS_DESC_MPEG4_AUDIO</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-DESC-IOD:CAPS"></a>GST_MTS_DESC_IOD</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-DESC-SL:CAPS"></a>GST_MTS_DESC_SL</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-DESC-FMC:CAPS"></a>GST_MTS_DESC_FMC</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-DESC-EXTERNAL-ES-ID:CAPS"></a>GST_MTS_DESC_EXTERNAL_ES_ID</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-DESC-MUX-CODE:CAPS"></a>GST_MTS_DESC_MUX_CODE</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-DESC-FMX-BUFFER-SIZE:CAPS"></a>GST_MTS_DESC_FMX_BUFFER_SIZE</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-DESC-MULTIPLEX-BUFFER:CAPS"></a>GST_MTS_DESC_MULTIPLEX_BUFFER</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-DESC-CONTENT-LABELING:CAPS"></a>GST_MTS_DESC_CONTENT_LABELING</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-DESC-METADATA-POINTER:CAPS"></a>GST_MTS_DESC_METADATA_POINTER</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-DESC-METADATA:CAPS"></a>GST_MTS_DESC_METADATA</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-DESC-METADATA-STD:CAPS"></a>GST_MTS_DESC_METADATA_STD</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-DESC-AVC-VIDEO:CAPS"></a>GST_MTS_DESC_AVC_VIDEO</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-DESC-IPMP:CAPS"></a>GST_MTS_DESC_IPMP</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-DESC-AVC-TIMING-AND-HRD:CAPS"></a>GST_MTS_DESC_AVC_TIMING_AND_HRD</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-DESC-MPEG2-AAC-AUDIO:CAPS"></a>GST_MTS_DESC_MPEG2_AAC_AUDIO</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-DESC-FLEX-MUX-TIMING:CAPS"></a>GST_MTS_DESC_FLEX_MUX_TIMING</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-DESC-MPEG4-TEXT:CAPS"></a>GST_MTS_DESC_MPEG4_TEXT</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-DESC-MPEG4-AUDIO-EXTENSION:CAPS"></a>GST_MTS_DESC_MPEG4_AUDIO_EXTENSION</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-DESC-AUXILIARY-VIDEO-STREAM:CAPS"></a>GST_MTS_DESC_AUXILIARY_VIDEO_STREAM</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-DESC-SVC-EXTENSION:CAPS"></a>GST_MTS_DESC_SVC_EXTENSION</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-DESC-MVC-EXTENSION:CAPS"></a>GST_MTS_DESC_MVC_EXTENSION</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-DESC-J2K-VIDEO:CAPS"></a>GST_MTS_DESC_J2K_VIDEO</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-DESC-MVC-OPERATION-POINT:CAPS"></a>GST_MTS_DESC_MVC_OPERATION_POINT</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-DESC-MPEG2-STEREOSCOPIC-VIDEO-FORMAT:CAPS"></a>GST_MTS_DESC_MPEG2_STEREOSCOPIC_VIDEO_FORMAT</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-DESC-STEREOSCOPIC-PROGRAM-INFO:CAPS"></a>GST_MTS_DESC_STEREOSCOPIC_PROGRAM_INFO</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-DESC-STEREOSCOPIC-VIDEO-INFO:CAPS"></a>GST_MTS_DESC_STEREOSCOPIC_VIDEO_INFO</p></td>
+<td> </td>
+<td> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstMpegtsMiscDescriptorType"></a><h3>enum GstMpegtsMiscDescriptorType</h3>
+<p>The type of <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GstMpegtsDescriptor"><span class="type">GstMpegtsDescriptor</span></a></p>
+<p>These values correspond to miscellaneous descriptor types that are
+not yet identified from known specifications.</p>
+<div class="refsect3">
+<a name="GstMpegtsMiscDescriptorType.members"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="300px" class="enum_members_name">
+<col class="enum_members_description">
+<col width="200px" class="enum_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-DESC-AC3-AUDIO-STREAM:CAPS"></a>GST_MTS_DESC_AC3_AUDIO_STREAM</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-DESC-DTG-LOGICAL-CHANNEL:CAPS"></a>GST_MTS_DESC_DTG_LOGICAL_CHANNEL</p></td>
+<td> </td>
+<td> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstMpegtsISO639LanguageDescriptor"></a><h3>struct GstMpegtsISO639LanguageDescriptor</h3>
+<pre class="programlisting">struct GstMpegtsISO639LanguageDescriptor {
+ guint nb_language;
+ gchar *language[64];
+ GstMpegtsIso639AudioType audio_type[64];
+};
+</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstMpegtsIso639AudioType"></a><h3>enum GstMpegtsIso639AudioType</h3>
+<div class="refsect3">
+<a name="GstMpegtsIso639AudioType.members"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="300px" class="enum_members_name">
+<col class="enum_members_description">
+<col width="200px" class="enum_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-AUDIO-TYPE-UNDEFINED:CAPS"></a>GST_MPEGTS_AUDIO_TYPE_UNDEFINED</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-AUDIO-TYPE-CLEAN-EFFECTS:CAPS"></a>GST_MPEGTS_AUDIO_TYPE_CLEAN_EFFECTS</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-AUDIO-TYPE-HEARING-IMPAIRED:CAPS"></a>GST_MPEGTS_AUDIO_TYPE_HEARING_IMPAIRED</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-AUDIO-TYPE-VISUAL-IMPAIRED-COMMENTARY:CAPS"></a>GST_MPEGTS_AUDIO_TYPE_VISUAL_IMPAIRED_COMMENTARY</p></td>
+<td> </td>
+<td> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstMpegtsLogicalChannel"></a><h3>struct GstMpegtsLogicalChannel</h3>
+<pre class="programlisting">struct GstMpegtsLogicalChannel {
+ guint16 service_id;
+ gboolean visible_service;
+ guint16 logical_channel_number;
+};
+</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstMpegtsLogicalChannelDescriptor"></a><h3>struct GstMpegtsLogicalChannelDescriptor</h3>
+<pre class="programlisting">struct GstMpegtsLogicalChannelDescriptor {
+ guint nb_channels;
+ GstMpegtsLogicalChannel channels[64];
+};
+</pre>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>Generated by GTK-Doc V1.25</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-bad-libs-Base-MPEG-TS-sections.html b/docs/libs/html/gst-plugins-bad-libs-Base-MPEG-TS-sections.html
new file mode 100644
index 0000000..c521b5a
--- /dev/null
+++ b/docs/libs/html/gst-plugins-bad-libs-Base-MPEG-TS-sections.html
@@ -0,0 +1,1475 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Base MPEG-TS sections: GStreamer Bad Plugins 1.0 Library Reference Manual</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
+<link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Library Reference Manual">
+<link rel="up" href="mpegts.html" title="Mpeg TS helper library">
+<link rel="prev" href="gst-plugins-bad-libs-Mpeg-ts-helper-library.html" title="Mpeg-ts helper library">
+<link rel="next" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html" title="Base MPEG-TS descriptors">
+<meta name="generator" content="GTK-Doc V1.25 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
+<td width="100%" align="left" class="shortcuts">
+<a href="#" class="shortcut">Top</a><span id="nav_description"> <span class="dim">|</span>
+ <a href="#gst-plugins-bad-libs-Base-MPEG-TS-sections.description" class="shortcut">Description</a></span><span id="nav_hierarchy"> <span class="dim">|</span>
+ <a href="#gst-plugins-bad-libs-Base-MPEG-TS-sections.object-hierarchy" class="shortcut">Object Hierarchy</a></span>
+</td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
+<td><a accesskey="u" href="mpegts.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
+<td><a accesskey="p" href="gst-plugins-bad-libs-Mpeg-ts-helper-library.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="gst-plugins-bad-libs-Base-MPEG-TS-sections"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-bad-libs-Base-MPEG-TS-sections.top_of_page"></a>Base MPEG-TS sections</span></h2>
+<p>Base MPEG-TS sections — Sections for ITU H.222.0 | ISO/IEC 13818-1</p>
+</td>
+<td class="gallery_image" valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="gst-plugins-bad-libs-Base-MPEG-TS-sections.functions"></a><h2>Functions</h2>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="functions_return">
+<col class="functions_name">
+</colgroup>
+<tbody>
+<tr>
+<td class="define_keyword">#define</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GST-MPEGTS-SECTION-TYPE:CAPS" title="GST_MPEGTS_SECTION_TYPE()">GST_MPEGTS_SECTION_TYPE</a><span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="/usr/share/gtk-doc/html/gstreamer-1.0GstMessage.html#GstMessage-struct"><span class="returnvalue">GstMessage</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#gst-message-new-mpegts-section" title="gst_message_new_mpegts_section ()">gst_message_new_mpegts_section</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsSection"><span class="returnvalue">GstMpegtsSection</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#gst-message-parse-mpegts-section" title="gst_message_parse_mpegts_section ()">gst_message_parse_mpegts_section</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#gst-mpegts-section-send-event" title="gst_mpegts_section_send_event ()">gst_mpegts_section_send_event</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsSection"><span class="returnvalue">GstMpegtsSection</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#gst-event-parse-mpegts-section" title="gst_event_parse_mpegts_section ()">gst_event_parse_mpegts_section</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="returnvalue">guint8</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#gst-mpegts-section-packetize" title="gst_mpegts_section_packetize ()">gst_mpegts_section_packetize</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsSection"><span class="returnvalue">GstMpegtsSection</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#gst-mpegts-section-new" title="gst_mpegts_section_new ()">gst_mpegts_section_new</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="define_keyword">#define</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#gst-mpegts-section-ref" title="gst_mpegts_section_ref()">gst_mpegts_section_ref</a><span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="define_keyword">#define</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#gst-mpegts-section-unref" title="gst_mpegts_section_unref()">gst_mpegts_section_unref</a><span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="/usr/share/gtk-doc/html/glibglib-Pointer-Arrays.html#GPtrArray"><span class="returnvalue">GPtrArray</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#gst-mpegts-section-get-pat" title="gst_mpegts_section_get_pat ()">gst_mpegts_section_get_pat</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="/usr/share/gtk-doc/html/glibglib-Pointer-Arrays.html#GPtrArray"><span class="returnvalue">GPtrArray</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#gst-mpegts-pat-new" title="gst_mpegts_pat_new ()">gst_mpegts_pat_new</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsPatProgram" title="struct GstMpegtsPatProgram"><span class="returnvalue">GstMpegtsPatProgram</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#gst-mpegts-pat-program-new" title="gst_mpegts_pat_program_new ()">gst_mpegts_pat_program_new</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsSection"><span class="returnvalue">GstMpegtsSection</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#gst-mpegts-section-from-pat" title="gst_mpegts_section_from_pat ()">gst_mpegts_section_from_pat</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">const <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsPMT" title="struct GstMpegtsPMT"><span class="returnvalue">GstMpegtsPMT</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#gst-mpegts-section-get-pmt" title="gst_mpegts_section_get_pmt ()">gst_mpegts_section_get_pmt</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsPMT" title="struct GstMpegtsPMT"><span class="returnvalue">GstMpegtsPMT</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#gst-mpegts-pmt-new" title="gst_mpegts_pmt_new ()">gst_mpegts_pmt_new</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsPMTStream" title="struct GstMpegtsPMTStream"><span class="returnvalue">GstMpegtsPMTStream</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#gst-mpegts-pmt-stream-new" title="gst_mpegts_pmt_stream_new ()">gst_mpegts_pmt_stream_new</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsSection"><span class="returnvalue">GstMpegtsSection</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#gst-mpegts-section-from-pmt" title="gst_mpegts_section_from_pmt ()">gst_mpegts_section_from_pmt</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="/usr/share/gtk-doc/html/glibglib-Pointer-Arrays.html#GPtrArray"><span class="returnvalue">GPtrArray</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#gst-mpegts-section-get-tsdt" title="gst_mpegts_section_get_tsdt ()">gst_mpegts_section_get_tsdt</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="/usr/share/gtk-doc/html/glibglib-Pointer-Arrays.html#GPtrArray"><span class="returnvalue">GPtrArray</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#gst-mpegts-section-get-cat" title="gst_mpegts_section_get_cat ()">gst_mpegts_section_get_cat</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<a name="GstMpegtsSection"></a><div class="refsect1">
+<a name="gst-plugins-bad-libs-Base-MPEG-TS-sections.other"></a><h2>Types and Values</h2>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="name">
+<col class="description">
+</colgroup>
+<tbody>
+<tr>
+<td class="datatype_keyword">struct</td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsSection-struct" title="struct GstMpegtsSection">GstMpegtsSection</a></td>
+</tr>
+<tr>
+<td class="datatype_keyword">enum</td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsSectionTableID" title="enum GstMpegtsSectionTableID">GstMpegtsSectionTableID</a></td>
+</tr>
+<tr>
+<td class="datatype_keyword">enum</td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsSectionType" title="enum GstMpegtsSectionType">GstMpegtsSectionType</a></td>
+</tr>
+<tr>
+<td class="datatype_keyword">struct</td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsPatProgram" title="struct GstMpegtsPatProgram">GstMpegtsPatProgram</a></td>
+</tr>
+<tr>
+<td class="datatype_keyword">struct</td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsPMT" title="struct GstMpegtsPMT">GstMpegtsPMT</a></td>
+</tr>
+<tr>
+<td class="datatype_keyword">struct</td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsPMTStream" title="struct GstMpegtsPMTStream">GstMpegtsPMTStream</a></td>
+</tr>
+<tr>
+<td class="datatype_keyword">enum</td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsStreamType" title="enum GstMpegtsStreamType">GstMpegtsStreamType</a></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-libs-Base-MPEG-TS-sections.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="screen"> <a href="https://developer.gnome.org/gobject/unstable/gobject-Boxed-Types.html">GBoxed</a>
+ <span class="lineart">╰──</span> GstMpegtsSection
+ <a href="https://developer.gnome.org/gobject/unstable/gobject-Enumeration-and-Flag-Types.html">GEnum</a>
+ <span class="lineart">├──</span> GstMpegtsSectionTableID
+ <span class="lineart">├──</span> GstMpegtsSectionType
+ <span class="lineart">╰──</span> GstMpegtsStreamType
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-libs-Base-MPEG-TS-sections.includes"></a><h2>Includes</h2>
+<pre class="synopsis">#include <gst/mpegts/mpegts.h>
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-libs-Base-MPEG-TS-sections.description"></a><h2>Description</h2>
+<p>For more details, refer to the ITU H.222.0 or ISO/IEC 13818-1 specifications
+and other specifications mentioned in the documentation.</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-libs-Base-MPEG-TS-sections.functions_details"></a><h2>Functions</h2>
+<div class="refsect2">
+<a name="GST-MPEGTS-SECTION-TYPE:CAPS"></a><h3>GST_MPEGTS_SECTION_TYPE()</h3>
+<pre class="programlisting">#define GST_MPEGTS_SECTION_TYPE(section) (GST_MPEGTS_SECTION (section)->section_type)
+</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-message-new-mpegts-section"></a><h3>gst_message_new_mpegts_section ()</h3>
+<pre class="programlisting"><a href="/usr/share/gtk-doc/html/gstreamer-1.0GstMessage.html#GstMessage-struct"><span class="returnvalue">GstMessage</span></a> *
+gst_message_new_mpegts_section (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/gstreamer-1.0GstObject.html#GstObject-struct"><span class="type">GstObject</span></a> *parent</code></em>,
+ <em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsSection"><span class="type">GstMpegtsSection</span></a> *section</code></em>);</pre>
+<p>Creates a new <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstMessage.html#GstMessage-struct"><span class="type">GstMessage</span></a> for a <em class="parameter"><code>GstMpegtsSection</code></em>
+.</p>
+<div class="refsect3">
+<a name="gst-message-new-mpegts-section.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>parent</p></td>
+<td class="parameter_description"><p> The creator of the message. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>section</p></td>
+<td class="parameter_description"><p> The <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsSection"><span class="type">GstMpegtsSection</span></a> to put in a message. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-message-new-mpegts-section.returns"></a><h4>Returns</h4>
+<p> The new <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstMessage.html#GstMessage-struct"><span class="type">GstMessage</span></a> to be posted, or <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if the
+section is not valid. </p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-message-parse-mpegts-section"></a><h3>gst_message_parse_mpegts_section ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsSection"><span class="returnvalue">GstMpegtsSection</span></a> *
+gst_message_parse_mpegts_section (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/gstreamer-1.0GstMessage.html#GstMessage-struct"><span class="type">GstMessage</span></a> *message</code></em>);</pre>
+<p>Returns the <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsSection"><span class="type">GstMpegtsSection</span></a> contained in a message.</p>
+<div class="refsect3">
+<a name="gst-message-parse-mpegts-section.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>message</p></td>
+<td class="parameter_description"><p>a <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstMessage.html#GstMessage-struct"><span class="type">GstMessage</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-message-parse-mpegts-section.returns"></a><h4>Returns</h4>
+<p> the contained <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsSection"><span class="type">GstMpegtsSection</span></a>, or <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. </p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-mpegts-section-send-event"></a><h3>gst_mpegts_section_send_event ()</h3>
+<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gst_mpegts_section_send_event (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsSection"><span class="type">GstMpegtsSection</span></a> *section</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#GstElement-struct"><span class="type">GstElement</span></a> *element</code></em>);</pre>
+<p>Creates a custom <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstEvent.html#GstEvent-struct"><span class="type">GstEvent</span></a> with a <em class="parameter"><code>GstMpegtsSection</code></em>
+.
+The <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstEvent.html#GstEvent-struct"><span class="type">GstEvent</span></a> is sent to the <em class="parameter"><code>element</code></em>
+ <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#GstElement-struct"><span class="type">GstElement</span></a>.</p>
+<div class="refsect3">
+<a name="gst-mpegts-section-send-event.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>element</p></td>
+<td class="parameter_description"><p> The <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#GstElement-struct"><span class="type">GstElement</span></a> to send to section event to. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>section</p></td>
+<td class="parameter_description"><p> The <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsSection"><span class="type">GstMpegtsSection</span></a> to put in the event. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-mpegts-section-send-event.returns"></a><h4>Returns</h4>
+<p> <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the event is sent</p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-event-parse-mpegts-section"></a><h3>gst_event_parse_mpegts_section ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsSection"><span class="returnvalue">GstMpegtsSection</span></a> *
+gst_event_parse_mpegts_section (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/gstreamer-1.0GstEvent.html#GstEvent-struct"><span class="type">GstEvent</span></a> *event</code></em>);</pre>
+<p>Extracts the <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsSection"><span class="type">GstMpegtsSection</span></a> contained in the <em class="parameter"><code>event</code></em>
+ <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstEvent.html#GstEvent-struct"><span class="type">GstEvent</span></a></p>
+<div class="refsect3">
+<a name="gst-event-parse-mpegts-section.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>event</p></td>
+<td class="parameter_description"><p> <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstEvent.html#GstEvent-struct"><span class="type">GstEvent</span></a> containing a <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsSection"><span class="type">GstMpegtsSection</span></a>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-event-parse-mpegts-section.returns"></a><h4>Returns</h4>
+<p> The extracted <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsSection"><span class="type">GstMpegtsSection</span></a>. </p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-mpegts-section-packetize"></a><h3>gst_mpegts_section_packetize ()</h3>
+<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="returnvalue">guint8</span></a> *
+gst_mpegts_section_packetize (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsSection"><span class="type">GstMpegtsSection</span></a> *section</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gsize"><span class="type">gsize</span></a> *output_size</code></em>);</pre>
+<p>If the data in <em class="parameter"><code>section</code></em>
+ has already been packetized, the data pointer is returned
+immediately. Otherwise, the data field is allocated and populated.</p>
+<div class="refsect3">
+<a name="gst-mpegts-section-packetize.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>section</p></td>
+<td class="parameter_description"><p> the <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsSection"><span class="type">GstMpegtsSection</span></a> that holds the data. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>output_size</p></td>
+<td class="parameter_description"><p> <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gsize"><span class="type">gsize</span></a> to hold the size of the data. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-mpegts-section-packetize.returns"></a><h4>Returns</h4>
+<p> pointer to section data, or <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> on fail. </p>
+<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-mpegts-section-new"></a><h3>gst_mpegts_section_new ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsSection"><span class="returnvalue">GstMpegtsSection</span></a> *
+gst_mpegts_section_new (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint16"><span class="type">guint16</span></a> pid</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> *data</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gsize"><span class="type">gsize</span></a> data_size</code></em>);</pre>
+<p>Creates a new <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsSection"><span class="type">GstMpegtsSection</span></a> from the provided <em class="parameter"><code>data</code></em>
+.</p>
+<p>Note: Ensuring <em class="parameter"><code>data</code></em>
+ is big enough to contain the full section is the
+responsibility of the caller. If it is not big enough, <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> will be
+returned.</p>
+<p>Note: it is the responsibility of the caller to ensure <em class="parameter"><code>data</code></em>
+ does point
+to the beginning of the section.</p>
+<div class="refsect3">
+<a name="gst-mpegts-section-new.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>pid</p></td>
+<td class="parameter_description"><p>the PID to which this section belongs</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>data</p></td>
+<td class="parameter_description"><p> a pointer to the beginning of the section (i.e. the first byte
+should contain the table_id field). </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>data_size</p></td>
+<td class="parameter_description"><p>size of the <em class="parameter"><code>data</code></em>
+argument.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-mpegts-section-new.returns"></a><h4>Returns</h4>
+<p> A new <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsSection"><span class="type">GstMpegtsSection</span></a> if the data was valid,
+else <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. </p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-mpegts-section-ref"></a><h3>gst_mpegts_section_ref()</h3>
+<pre class="programlisting">#define gst_mpegts_section_ref(section) ((GstMpegtsSection*) gst_mini_object_ref (GST_MINI_OBJECT_CAST (section)))
+</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-mpegts-section-unref"></a><h3>gst_mpegts_section_unref()</h3>
+<pre class="programlisting">#define gst_mpegts_section_unref(section) (gst_mini_object_unref (GST_MINI_OBJECT_CAST (section)))
+</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-mpegts-section-get-pat"></a><h3>gst_mpegts_section_get_pat ()</h3>
+<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Pointer-Arrays.html#GPtrArray"><span class="returnvalue">GPtrArray</span></a> *
+gst_mpegts_section_get_pat (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsSection"><span class="type">GstMpegtsSection</span></a> *section</code></em>);</pre>
+<p>Parses a Program Association Table (ITU H.222.0, ISO/IEC 13818-1).</p>
+<p>Returns the array of <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsPatProgram" title="struct GstMpegtsPatProgram"><span class="type">GstMpegtsPatProgram</span></a> contained in the section.</p>
+<p>Note: The PAT "transport_id" field corresponds to the "subtable_extension"
+field of the provided <em class="parameter"><code>section</code></em>
+.</p>
+<div class="refsect3">
+<a name="gst-mpegts-section-get-pat.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>section</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsSection"><span class="type">GstMpegtsSection</span></a> of type <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GST-MPEGTS-SECTION-PAT:CAPS"><code class="literal">GST_MPEGTS_SECTION_PAT</code></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-mpegts-section-get-pat.returns"></a><h4>Returns</h4>
+<p> The
+<a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsPatProgram" title="struct GstMpegtsPatProgram"><span class="type">GstMpegtsPatProgram</span></a> contained in the section, or <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if an error
+happened. Release with <a href="/usr/share/gtk-doc/html/glibglib-Pointer-Arrays.html#g-ptr-array-unref"><span class="type">g_ptr_array_unref</span></a> when done. </p>
+<p><span class="annotation">[<acronym title="Free data container after the code is done."><span class="acronym">transfer container</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> GstMpegtsPatProgram]</span></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-mpegts-pat-new"></a><h3>gst_mpegts_pat_new ()</h3>
+<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Pointer-Arrays.html#GPtrArray"><span class="returnvalue">GPtrArray</span></a> *
+gst_mpegts_pat_new (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<p>Allocates a new <a href="/usr/share/gtk-doc/html/glibglib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a> for <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsPatProgram" title="struct GstMpegtsPatProgram"><span class="type">GstMpegtsPatProgram</span></a></p>
+<div class="refsect3">
+<a name="gst-mpegts-pat-new.returns"></a><h4>Returns</h4>
+<p> A newly allocated <a href="/usr/share/gtk-doc/html/glibglib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a>. </p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> GstMpegtsPatProgram]</span></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-mpegts-pat-program-new"></a><h3>gst_mpegts_pat_program_new ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsPatProgram" title="struct GstMpegtsPatProgram"><span class="returnvalue">GstMpegtsPatProgram</span></a> *
+gst_mpegts_pat_program_new (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<p>Allocates a new <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsPatProgram" title="struct GstMpegtsPatProgram"><span class="type">GstMpegtsPatProgram</span></a>.</p>
+<div class="refsect3">
+<a name="gst-mpegts-pat-program-new.returns"></a><h4>Returns</h4>
+<p> A newly allocated <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsPatProgram" title="struct GstMpegtsPatProgram"><span class="type">GstMpegtsPatProgram</span></a>. </p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-mpegts-section-from-pat"></a><h3>gst_mpegts_section_from_pat ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsSection"><span class="returnvalue">GstMpegtsSection</span></a> *
+gst_mpegts_section_from_pat (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a> *programs</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint16"><span class="type">guint16</span></a> ts_id</code></em>);</pre>
+<p>Creates a PAT <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsSection"><span class="type">GstMpegtsSection</span></a> from the <em class="parameter"><code>programs</code></em>
+ array of <a href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsPatProgram"><span class="type">GstMpegtsPatPrograms</span></a></p>
+<div class="refsect3">
+<a name="gst-mpegts-section-from-pat.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>programs</p></td>
+<td class="parameter_description"><p> an array of <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsPatProgram" title="struct GstMpegtsPatProgram"><span class="type">GstMpegtsPatProgram</span></a>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> GstMpegtsPatProgram]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>ts_id</p></td>
+<td class="parameter_description"><p>Transport stream ID of the PAT</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-mpegts-section-from-pat.returns"></a><h4>Returns</h4>
+<p> a <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsSection"><span class="type">GstMpegtsSection</span></a>. </p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-mpegts-section-get-pmt"></a><h3>gst_mpegts_section_get_pmt ()</h3>
+<pre class="programlisting">const <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsPMT" title="struct GstMpegtsPMT"><span class="returnvalue">GstMpegtsPMT</span></a> *
+gst_mpegts_section_get_pmt (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsSection"><span class="type">GstMpegtsSection</span></a> *section</code></em>);</pre>
+<p>Returns the <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsPMT" title="struct GstMpegtsPMT"><span class="type">GstMpegtsPMT</span></a> contained in the <em class="parameter"><code>section</code></em>
+.</p>
+<div class="refsect3">
+<a name="gst-mpegts-section-get-pmt.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>section</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsSection"><span class="type">GstMpegtsSection</span></a> of type <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GST-MPEGTS-SECTION-PMT:CAPS"><code class="literal">GST_MPEGTS_SECTION_PMT</code></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-mpegts-section-get-pmt.returns"></a><h4>Returns</h4>
+<p> The <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsPMT" title="struct GstMpegtsPMT"><span class="type">GstMpegtsPMT</span></a> contained in the section, or <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if an error
+happened.</p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-mpegts-pmt-new"></a><h3>gst_mpegts_pmt_new ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsPMT" title="struct GstMpegtsPMT"><span class="returnvalue">GstMpegtsPMT</span></a> *
+gst_mpegts_pmt_new (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<p>Allocates and initializes a new <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsPMT" title="struct GstMpegtsPMT"><span class="type">GstMpegtsPMT</span></a>.</p>
+<div class="refsect3">
+<a name="gst-mpegts-pmt-new.returns"></a><h4>Returns</h4>
+<p> <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsPMT" title="struct GstMpegtsPMT"><span class="type">GstMpegtsPMT</span></a>. </p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-mpegts-pmt-stream-new"></a><h3>gst_mpegts_pmt_stream_new ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsPMTStream" title="struct GstMpegtsPMTStream"><span class="returnvalue">GstMpegtsPMTStream</span></a> *
+gst_mpegts_pmt_stream_new (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<p>Allocates and initializes a new <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsPMTStream" title="struct GstMpegtsPMTStream"><span class="type">GstMpegtsPMTStream</span></a>.</p>
+<div class="refsect3">
+<a name="gst-mpegts-pmt-stream-new.returns"></a><h4>Returns</h4>
+<p> <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsPMTStream" title="struct GstMpegtsPMTStream"><span class="type">GstMpegtsPMTStream</span></a>. </p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-mpegts-section-from-pmt"></a><h3>gst_mpegts_section_from_pmt ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsSection"><span class="returnvalue">GstMpegtsSection</span></a> *
+gst_mpegts_section_from_pmt (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsPMT" title="struct GstMpegtsPMT"><span class="type">GstMpegtsPMT</span></a> *pmt</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint16"><span class="type">guint16</span></a> pid</code></em>);</pre>
+<p>Creates a <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsSection"><span class="type">GstMpegtsSection</span></a> from <em class="parameter"><code>pmt</code></em>
+ that is bound to <em class="parameter"><code>pid</code></em>
+</p>
+<div class="refsect3">
+<a name="gst-mpegts-section-from-pmt.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>pmt</p></td>
+<td class="parameter_description"><p> a <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsPMT" title="struct GstMpegtsPMT"><span class="type">GstMpegtsPMT</span></a> to create a <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsSection"><span class="type">GstMpegtsSection</span></a> from. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>pid</p></td>
+<td class="parameter_description"><p>The PID that the <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsPMT" title="struct GstMpegtsPMT"><span class="type">GstMpegtsPMT</span></a> belongs to</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-mpegts-section-from-pmt.returns"></a><h4>Returns</h4>
+<p> <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsSection"><span class="type">GstMpegtsSection</span></a>. </p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-mpegts-section-get-tsdt"></a><h3>gst_mpegts_section_get_tsdt ()</h3>
+<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Pointer-Arrays.html#GPtrArray"><span class="returnvalue">GPtrArray</span></a> *
+gst_mpegts_section_get_tsdt (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsSection"><span class="type">GstMpegtsSection</span></a> *section</code></em>);</pre>
+<p>Returns the array of <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GstMpegtsDescriptor"><span class="type">GstMpegtsDescriptor</span></a> contained in the section</p>
+<div class="refsect3">
+<a name="gst-mpegts-section-get-tsdt.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>section</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsSection"><span class="type">GstMpegtsSection</span></a> of type <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GST-MPEGTS-SECTION-TSDT:CAPS"><code class="literal">GST_MPEGTS_SECTION_TSDT</code></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-mpegts-section-get-tsdt.returns"></a><h4>Returns</h4>
+<p> The
+<a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GstMpegtsDescriptor"><span class="type">GstMpegtsDescriptor</span></a> contained in the section, or <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if an error
+happened. Release with <a href="/usr/share/gtk-doc/html/glibglib-Arrays.html#g-array-unref"><span class="type">g_array_unref</span></a> when done. </p>
+<p><span class="annotation">[<acronym title="Free data container after the code is done."><span class="acronym">transfer container</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> GstMpegtsDescriptor]</span></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-mpegts-section-get-cat"></a><h3>gst_mpegts_section_get_cat ()</h3>
+<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Pointer-Arrays.html#GPtrArray"><span class="returnvalue">GPtrArray</span></a> *
+gst_mpegts_section_get_cat (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsSection"><span class="type">GstMpegtsSection</span></a> *section</code></em>);</pre>
+<p>Returns the array of <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GstMpegtsDescriptor"><span class="type">GstMpegtsDescriptor</span></a> contained in the Conditional
+Access Table.</p>
+<div class="refsect3">
+<a name="gst-mpegts-section-get-cat.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>section</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsSection"><span class="type">GstMpegtsSection</span></a> of type <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GST-MPEGTS-SECTION-CAT:CAPS"><code class="literal">GST_MPEGTS_SECTION_CAT</code></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-mpegts-section-get-cat.returns"></a><h4>Returns</h4>
+<p> The
+<a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GstMpegtsDescriptor"><span class="type">GstMpegtsDescriptor</span></a> contained in the section, or <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if an error
+happened. Release with <a href="/usr/share/gtk-doc/html/glibglib-Arrays.html#g-array-unref"><span class="type">g_array_unref</span></a> when done. </p>
+<p><span class="annotation">[<acronym title="Free data container after the code is done."><span class="acronym">transfer container</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> GstMpegtsDescriptor]</span></p>
+</div>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-libs-Base-MPEG-TS-sections.other_details"></a><h2>Types and Values</h2>
+<div class="refsect2">
+<a name="GstMpegtsSection-struct"></a><h3>struct GstMpegtsSection</h3>
+<pre class="programlisting">struct GstMpegtsSection {
+ GstMpegtsSectionType section_type;
+
+ guint16 pid;
+ guint8 table_id;
+
+ guint16 subtable_extension;
+ guint8 version_number;
+
+ gboolean current_next_indicator;
+
+ guint8 section_number;
+ guint8 last_section_number;
+
+ guint32 crc;
+};
+</pre>
+<p>Mpeg-TS Section Information (SI) (ISO/IEC 13818-1)</p>
+<div class="refsect3">
+<a name="GstMpegtsSection.members"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="300px" class="struct_members_name">
+<col class="struct_members_description">
+<col width="200px" class="struct_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="struct_member_name"><p><a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsSectionType" title="enum GstMpegtsSectionType"><span class="type">GstMpegtsSectionType</span></a> <em class="structfield"><code><a name="GstMpegtsSection-struct.section-type"></a>section_type</code></em>;</p></td>
+<td class="struct_member_description"><p>The type of section</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint16"><span class="type">guint16</span></a> <em class="structfield"><code><a name="GstMpegtsSection-struct.pid"></a>pid</code></em>;</p></td>
+<td class="struct_member_description"><p>The pid on which this section was found</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstMpegtsSection-struct.table-id"></a>table_id</code></em>;</p></td>
+<td class="struct_member_description"><p>The table id of this section</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint16"><span class="type">guint16</span></a> <em class="structfield"><code><a name="GstMpegtsSection-struct.subtable-extension"></a>subtable_extension</code></em>;</p></td>
+<td class="struct_member_description"><p>This meaning differs per section. See the documentation
+of the parsed section type for the meaning of this field</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstMpegtsSection-struct.version-number"></a>version_number</code></em>;</p></td>
+<td class="struct_member_description"><p>Version of the section.</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> <em class="structfield"><code><a name="GstMpegtsSection-struct.current-next-indicator"></a>current_next_indicator</code></em>;</p></td>
+<td class="struct_member_description"><p>Applies to current/next stream or not</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstMpegtsSection-struct.section-number"></a>section_number</code></em>;</p></td>
+<td class="struct_member_description"><p>Number of the section (if multiple)</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstMpegtsSection-struct.last-section-number"></a>last_section_number</code></em>;</p></td>
+<td class="struct_member_description"><p>Number of the last expected section (if multiple)</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint32"><span class="type">guint32</span></a> <em class="structfield"><code><a name="GstMpegtsSection-struct.crc"></a>crc</code></em>;</p></td>
+<td class="struct_member_description"><p>CRC</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstMpegtsSectionTableID"></a><h3>enum GstMpegtsSectionTableID</h3>
+<p>Values for a <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsSection"><span class="type">GstMpegtsSection</span></a> table_id</p>
+<p>These are the registered ITU H.222.0 | ISO/IEC 13818-1 table_id variants.</p>
+<p>see also <a class="link" href="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html#GstMpegtsSectionATSCTableID" title="enum GstMpegtsSectionATSCTableID"><span class="type">GstMpegtsSectionATSCTableID</span></a>, <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#GstMpegtsSectionDVBTableID" title="enum GstMpegtsSectionDVBTableID"><span class="type">GstMpegtsSectionDVBTableID</span></a>, and
+<span class="type">GstMpegtsSectionSCTETableID</span></p>
+<div class="refsect3">
+<a name="GstMpegtsSectionTableID.members"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="300px" class="enum_members_name">
+<col class="enum_members_description">
+<col width="200px" class="enum_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-TABLE-ID-PROGRAM-ASSOCIATION:CAPS"></a>GST_MTS_TABLE_ID_PROGRAM_ASSOCIATION</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-TABLE-ID-CONDITIONAL-ACCESS:CAPS"></a>GST_MTS_TABLE_ID_CONDITIONAL_ACCESS</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-TABLE-ID-TS-PROGRAM-MAP:CAPS"></a>GST_MTS_TABLE_ID_TS_PROGRAM_MAP</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-TABLE-ID-TS-DESCRIPTION:CAPS"></a>GST_MTS_TABLE_ID_TS_DESCRIPTION</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-TABLE-ID-14496-SCENE-DESCRIPTION:CAPS"></a>GST_MTS_TABLE_ID_14496_SCENE_DESCRIPTION</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-TABLE-ID-14496-OBJET-DESCRIPTOR:CAPS"></a>GST_MTS_TABLE_ID_14496_OBJET_DESCRIPTOR</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-TABLE-ID-METADATA:CAPS"></a>GST_MTS_TABLE_ID_METADATA</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-TABLE-ID-IPMP-CONTROL-INFORMATION:CAPS"></a>GST_MTS_TABLE_ID_IPMP_CONTROL_INFORMATION</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-TABLE-ID-DSM-CC-MULTIPROTO-ENCAPSULATED-DATA:CAPS"></a>GST_MTS_TABLE_ID_DSM_CC_MULTIPROTO_ENCAPSULATED_DATA</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-TABLE-ID-DSM-CC-U-N-MESSAGES:CAPS"></a>GST_MTS_TABLE_ID_DSM_CC_U_N_MESSAGES</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-TABLE-ID-DSM-CC-DOWNLOAD-DATA-MESSAGES:CAPS"></a>GST_MTS_TABLE_ID_DSM_CC_DOWNLOAD_DATA_MESSAGES</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-TABLE-ID-DSM-CC-STREAM-DESCRIPTORS:CAPS"></a>GST_MTS_TABLE_ID_DSM_CC_STREAM_DESCRIPTORS</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-TABLE-ID-DSM-CC-PRIVATE-DATA:CAPS"></a>GST_MTS_TABLE_ID_DSM_CC_PRIVATE_DATA</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-TABLE-ID-DSM-CC-ADDRESSABLE-SECTIONS:CAPS"></a>GST_MTS_TABLE_ID_DSM_CC_ADDRESSABLE_SECTIONS</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-TABLE-ID-UNSET:CAPS"></a>GST_MTS_TABLE_ID_UNSET</p></td>
+<td> </td>
+<td> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstMpegtsSectionType"></a><h3>enum GstMpegtsSectionType</h3>
+<p>Types of <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsSection"><span class="type">GstMpegtsSection</span></a> that the library handles.</p>
+<div class="refsect3">
+<a name="GstMpegtsSectionType.members"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="300px" class="enum_members_name">
+<col class="enum_members_description">
+<col width="200px" class="enum_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-SECTION-UNKNOWN:CAPS"></a>GST_MPEGTS_SECTION_UNKNOWN</p></td>
+<td class="enum_member_description">
+<p>Unknown section type</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-SECTION-PAT:CAPS"></a>GST_MPEGTS_SECTION_PAT</p></td>
+<td class="enum_member_description">
+<p>Program Association Table (ISO/IEC 13818-1)</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-SECTION-PMT:CAPS"></a>GST_MPEGTS_SECTION_PMT</p></td>
+<td class="enum_member_description">
+<p>Program Map Table (ISO/IEC 13818-1)</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-SECTION-CAT:CAPS"></a>GST_MPEGTS_SECTION_CAT</p></td>
+<td class="enum_member_description">
+<p>Conditional Access Table (ISO/IEC 13818-1)</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-SECTION-TSDT:CAPS"></a>GST_MPEGTS_SECTION_TSDT</p></td>
+<td class="enum_member_description">
+<p>Transport Stream Description Table (ISO/IEC 13818-1)</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-SECTION-EIT:CAPS"></a>GST_MPEGTS_SECTION_EIT</p></td>
+<td class="enum_member_description">
+<p>Event Information Table (EN 300 468)</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-SECTION-NIT:CAPS"></a>GST_MPEGTS_SECTION_NIT</p></td>
+<td class="enum_member_description">
+<p>Network Information Table (ISO/IEC 13818-1 / EN 300 468)</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-SECTION-BAT:CAPS"></a>GST_MPEGTS_SECTION_BAT</p></td>
+<td class="enum_member_description">
+<p>Bouquet Association Table ((EN 300 468)</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-SECTION-SDT:CAPS"></a>GST_MPEGTS_SECTION_SDT</p></td>
+<td class="enum_member_description">
+<p>Service Description Table (EN 300 468)</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-SECTION-TDT:CAPS"></a>GST_MPEGTS_SECTION_TDT</p></td>
+<td class="enum_member_description">
+<p>Time and Date Table (EN 300 468)</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-SECTION-TOT:CAPS"></a>GST_MPEGTS_SECTION_TOT</p></td>
+<td class="enum_member_description">
+<p>Time Offset Table (EN 300 468)</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-SECTION-ATSC-TVCT:CAPS"></a>GST_MPEGTS_SECTION_ATSC_TVCT</p></td>
+<td class="enum_member_description">
+<p>ATSC Terrestrial Virtual Channel Table (A65)</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-SECTION-ATSC-CVCT:CAPS"></a>GST_MPEGTS_SECTION_ATSC_CVCT</p></td>
+<td class="enum_member_description">
+<p>ATSC Cable Virtual Channel Table (A65)</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-SECTION-ATSC-MGT:CAPS"></a>GST_MPEGTS_SECTION_ATSC_MGT</p></td>
+<td class="enum_member_description">
+<p>ATSC Master Guide Table (A65)</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-SECTION-ATSC-ETT:CAPS"></a>GST_MPEGTS_SECTION_ATSC_ETT</p></td>
+<td class="enum_member_description">
+<p>ATSC Extended Text Table (A65)</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-SECTION-ATSC-EIT:CAPS"></a>GST_MPEGTS_SECTION_ATSC_EIT</p></td>
+<td class="enum_member_description">
+<p>ATSC Event Information Table (A65)</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-SECTION-ATSC-STT:CAPS"></a>GST_MPEGTS_SECTION_ATSC_STT</p></td>
+<td class="enum_member_description">
+<p>ATSC System Time Table (A65)</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstMpegtsPatProgram"></a><h3>struct GstMpegtsPatProgram</h3>
+<pre class="programlisting">struct GstMpegtsPatProgram {
+ guint16 program_number;
+ guint16 network_or_program_map_PID;
+};
+</pre>
+<p>A program entry from a Program Association Table (ITU H.222.0, ISO/IEC 13818-1).</p>
+<div class="refsect3">
+<a name="GstMpegtsPatProgram.members"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="300px" class="struct_members_name">
+<col class="struct_members_description">
+<col width="200px" class="struct_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint16"><span class="type">guint16</span></a> <em class="structfield"><code><a name="GstMpegtsPatProgram.program-number"></a>program_number</code></em>;</p></td>
+<td class="struct_member_description"><p>the program number</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint16"><span class="type">guint16</span></a> <em class="structfield"><code><a name="GstMpegtsPatProgram.network-or-program-map-PID"></a>network_or_program_map_PID</code></em>;</p></td>
+<td class="struct_member_description"><p>the network of program map PID</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstMpegtsPMT"></a><h3>struct GstMpegtsPMT</h3>
+<pre class="programlisting">struct GstMpegtsPMT {
+ guint16 pcr_pid;
+ guint16 program_number;
+
+ GPtrArray *descriptors;
+ GPtrArray *streams;
+};
+</pre>
+<p>Program Map Table (ISO/IEC 13818-1).</p>
+<p>The program_number is contained in the subtable_extension field of the
+container <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsSection"><span class="type">GstMpegtsSection</span></a>.</p>
+<div class="refsect3">
+<a name="GstMpegtsPMT.members"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="300px" class="struct_members_name">
+<col class="struct_members_description">
+<col width="200px" class="struct_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint16"><span class="type">guint16</span></a> <em class="structfield"><code><a name="GstMpegtsPMT.pcr-pid"></a>pcr_pid</code></em>;</p></td>
+<td class="struct_member_description"><p>PID of the stream containing PCR</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint16"><span class="type">guint16</span></a> <em class="structfield"><code><a name="GstMpegtsPMT.program-number"></a>program_number</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a> *<em class="structfield"><code><a name="GstMpegtsPMT.descriptors"></a>descriptors</code></em>;</p></td>
+<td class="struct_member_description"><p> array of <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GstMpegtsDescriptor"><span class="type">GstMpegtsDescriptor</span></a>. </p></td>
+<td class="struct_member_annotations"><span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> GstMpegtsDescriptor]</span></td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a> *<em class="structfield"><code><a name="GstMpegtsPMT.streams"></a>streams</code></em>;</p></td>
+<td class="struct_member_description"><p> Array of <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsPMTStream" title="struct GstMpegtsPMTStream"><span class="type">GstMpegtsPMTStream</span></a>. </p></td>
+<td class="struct_member_annotations"><span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> GstMpegtsPMTStream]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstMpegtsPMTStream"></a><h3>struct GstMpegtsPMTStream</h3>
+<pre class="programlisting">struct GstMpegtsPMTStream {
+ guint8 stream_type;
+ guint16 pid;
+
+ GPtrArray *descriptors;
+};
+</pre>
+<p>An individual stream definition.</p>
+<div class="refsect3">
+<a name="GstMpegtsPMTStream.members"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="300px" class="struct_members_name">
+<col class="struct_members_description">
+<col width="200px" class="struct_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstMpegtsPMTStream.stream-type"></a>stream_type</code></em>;</p></td>
+<td class="struct_member_description"><p>the type of stream. See <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsStreamType" title="enum GstMpegtsStreamType"><span class="type">GstMpegtsStreamType</span></a></p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint16"><span class="type">guint16</span></a> <em class="structfield"><code><a name="GstMpegtsPMTStream.pid"></a>pid</code></em>;</p></td>
+<td class="struct_member_description"><p>the PID of the stream</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a> *<em class="structfield"><code><a name="GstMpegtsPMTStream.descriptors"></a>descriptors</code></em>;</p></td>
+<td class="struct_member_description"><p> the descriptors of the
+stream. </p></td>
+<td class="struct_member_annotations"><span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> GstMpegtsDescriptor]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstMpegtsStreamType"></a><h3>enum GstMpegtsStreamType</h3>
+<p>Type of mpeg-ts stream type.</p>
+<p>These values correspond to the base standard registered types. Depending
+on the variant of mpeg-ts being used (Bluray, ATSC, DVB, ...), other
+types might also be used, but will not conflict with these.</p>
+<p>Corresponds to table 2-34 of ITU H.222.0 | ISO/IEC 13818-1</p>
+<div class="refsect3">
+<a name="GstMpegtsStreamType.members"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="300px" class="enum_members_name">
+<col class="enum_members_description">
+<col width="200px" class="enum_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-STREAM-TYPE-RESERVED-00:CAPS"></a>GST_MPEGTS_STREAM_TYPE_RESERVED_00</p></td>
+<td class="enum_member_description">
+<p>ITU-T | ISO/IEC Reserved</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-STREAM-TYPE-VIDEO-MPEG1:CAPS"></a>GST_MPEGTS_STREAM_TYPE_VIDEO_MPEG1</p></td>
+<td class="enum_member_description">
+<p>ISO/IEC 11172-2 Video</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-STREAM-TYPE-VIDEO-MPEG2:CAPS"></a>GST_MPEGTS_STREAM_TYPE_VIDEO_MPEG2</p></td>
+<td class="enum_member_description">
+<p>Rec. ITU-T H.262 | ISO/IEC 13818-2
+Video or ISO/IEC 11172-2 constrained parameter video stream</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-STREAM-TYPE-AUDIO-MPEG1:CAPS"></a>GST_MPEGTS_STREAM_TYPE_AUDIO_MPEG1</p></td>
+<td class="enum_member_description">
+<p>ISO/IEC 11172-3 Audio</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-STREAM-TYPE-AUDIO-MPEG2:CAPS"></a>GST_MPEGTS_STREAM_TYPE_AUDIO_MPEG2</p></td>
+<td class="enum_member_description">
+<p>ISO/IEC 13818-3 Audio</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-STREAM-TYPE-PRIVATE-SECTIONS:CAPS"></a>GST_MPEGTS_STREAM_TYPE_PRIVATE_SECTIONS</p></td>
+<td class="enum_member_description">
+<p>private sections</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-STREAM-TYPE-PRIVATE-PES-PACKETS:CAPS"></a>GST_MPEGTS_STREAM_TYPE_PRIVATE_PES_PACKETS</p></td>
+<td class="enum_member_description">
+<p>PES packets containing private data</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-STREAM-TYPE-MHEG:CAPS"></a>GST_MPEGTS_STREAM_TYPE_MHEG</p></td>
+<td class="enum_member_description">
+<p>ISO/IEC 13522 MHEG</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-STREAM-TYPE-DSM-CC:CAPS"></a>GST_MPEGTS_STREAM_TYPE_DSM_CC</p></td>
+<td class="enum_member_description">
+<p>Annex A DSM-CC</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-STREAM-TYPE-H-222-1:CAPS"></a>GST_MPEGTS_STREAM_TYPE_H_222_1</p></td>
+<td class="enum_member_description">
+<p>Rec. ITU-T H.222.1</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-STREAM-TYPE-DSMCC-A:CAPS"></a>GST_MPEGTS_STREAM_TYPE_DSMCC_A</p></td>
+<td class="enum_member_description">
+<p>ISO/IEC 13818-6 type A</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-STREAM-TYPE-DSMCC-B:CAPS"></a>GST_MPEGTS_STREAM_TYPE_DSMCC_B</p></td>
+<td class="enum_member_description">
+<p>ISO/IEC 13818-6 type B</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-STREAM-TYPE-DSMCC-C:CAPS"></a>GST_MPEGTS_STREAM_TYPE_DSMCC_C</p></td>
+<td class="enum_member_description">
+<p>ISO/IEC 13818-6 type C</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-STREAM-TYPE-DSMCC-D:CAPS"></a>GST_MPEGTS_STREAM_TYPE_DSMCC_D</p></td>
+<td class="enum_member_description">
+<p>ISO/IEC 13818-6 type D</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-STREAM-TYPE-AUXILIARY:CAPS"></a>GST_MPEGTS_STREAM_TYPE_AUXILIARY</p></td>
+<td class="enum_member_description">
+<p>auxiliary streams</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-STREAM-TYPE-AUDIO-AAC-ADTS:CAPS"></a>GST_MPEGTS_STREAM_TYPE_AUDIO_AAC_ADTS</p></td>
+<td class="enum_member_description">
+<p>ISO/IEC 13818-7 Audio with ADTS
+transport syntax</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-STREAM-TYPE-VIDEO-MPEG4:CAPS"></a>GST_MPEGTS_STREAM_TYPE_VIDEO_MPEG4</p></td>
+<td class="enum_member_description">
+<p>ISO/IEC 14496-2 Visual</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-STREAM-TYPE-AUDIO-AAC-LATM:CAPS"></a>GST_MPEGTS_STREAM_TYPE_AUDIO_AAC_LATM</p></td>
+<td class="enum_member_description">
+<p>ISO/IEC 14496-3 Audio with the LATM
+transport syntax as defined in ISO/IEC 14496-3</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-STREAM-TYPE-SL-FLEXMUX-PES-PACKETS:CAPS"></a>GST_MPEGTS_STREAM_TYPE_SL_FLEXMUX_PES_PACKETS</p></td>
+<td class="enum_member_description">
+<p>ISO/IEC 14496-1
+SL-packetized stream or FlexMux stream carried in PES packets</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-STREAM-TYPE-SL-FLEXMUX-SECTIONS:CAPS"></a>GST_MPEGTS_STREAM_TYPE_SL_FLEXMUX_SECTIONS</p></td>
+<td class="enum_member_description">
+<p>ISO/IEC 14496-1 SL-packetized
+stream or FlexMux stream carried in ISO/IEC 14496_sections</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-STREAM-TYPE-SYNCHRONIZED-DOWNLOAD:CAPS"></a>GST_MPEGTS_STREAM_TYPE_SYNCHRONIZED_DOWNLOAD</p></td>
+<td class="enum_member_description">
+<p>ISO/IEC 13818-6 Synchronized
+Download Protocol</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-STREAM-TYPE-METADATA-PES-PACKETS:CAPS"></a>GST_MPEGTS_STREAM_TYPE_METADATA_PES_PACKETS</p></td>
+<td class="enum_member_description">
+<p>Metadata carried in PES packets</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-STREAM-TYPE-METADATA-SECTIONS:CAPS"></a>GST_MPEGTS_STREAM_TYPE_METADATA_SECTIONS</p></td>
+<td class="enum_member_description">
+<p>Metadata carried in metadata_sections</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-STREAM-TYPE-METADATA-DATA-CAROUSEL:CAPS"></a>GST_MPEGTS_STREAM_TYPE_METADATA_DATA_CAROUSEL</p></td>
+<td class="enum_member_description">
+<p>Metadata carried in ISO/IEC
+13818-6 Data Carousel</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-STREAM-TYPE-METADATA-OBJECT-CAROUSEL:CAPS"></a>GST_MPEGTS_STREAM_TYPE_METADATA_OBJECT_CAROUSEL</p></td>
+<td class="enum_member_description">
+<p>Metadata carried in
+ISO/IEC 13818-6 Object Carousel</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-STREAM-TYPE-METADATA-SYNCHRONIZED-DOWNLOAD:CAPS"></a>GST_MPEGTS_STREAM_TYPE_METADATA_SYNCHRONIZED_DOWNLOAD</p></td>
+<td class="enum_member_description">
+<p>Metadata carried in
+ISO/IEC 13818-6 Synchronized Download Protocol</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-STREAM-TYPE-MPEG2-IPMP:CAPS"></a>GST_MPEGTS_STREAM_TYPE_MPEG2_IPMP</p></td>
+<td class="enum_member_description">
+<p>IPMP stream (defined in ISO/IEC 13818-11,
+MPEG-2 IPMP)</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-STREAM-TYPE-VIDEO-H264:CAPS"></a>GST_MPEGTS_STREAM_TYPE_VIDEO_H264</p></td>
+<td class="enum_member_description">
+<p>AVC video stream conforming to one or
+more profiles defined in Annex A of Rec. ITU-T H.264 | ISO/IEC 14496-10 or
+AVC video sub-bitstream of SVC as defined in 2.1.78 or MVC base view
+sub-bitstream, as defined in 2.1.85, or AVC video sub-bitstream of MVC, as
+defined in 2.1.88</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-STREAM-TYPE-AUDIO-AAC-CLEAN:CAPS"></a>GST_MPEGTS_STREAM_TYPE_AUDIO_AAC_CLEAN</p></td>
+<td class="enum_member_description">
+<p>ISO/IEC 14496-3 Audio, without
+using any additional transport syntax, such as DST, ALS and SLS</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-STREAM-TYPE-MPEG4-TIMED-TEXT:CAPS"></a>GST_MPEGTS_STREAM_TYPE_MPEG4_TIMED_TEXT</p></td>
+<td class="enum_member_description">
+<p>ISO/IEC 14496-17 Text</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-STREAM-TYPE-VIDEO-RVC:CAPS"></a>GST_MPEGTS_STREAM_TYPE_VIDEO_RVC</p></td>
+<td class="enum_member_description">
+<p>Auxiliary video stream as defined in
+ISO/IEC 23002-3</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-STREAM-TYPE-VIDEO-H264-SVC-SUB-BITSTREAM:CAPS"></a>GST_MPEGTS_STREAM_TYPE_VIDEO_H264_SVC_SUB_BITSTREAM</p></td>
+<td class="enum_member_description">
+<p>SVC video sub-bitstream
+of an AVC video stream conforming to one or more profiles defined in Annex G
+of Rec. ITU-T H.264 | ISO/IEC 14496-10</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-STREAM-TYPE-VIDEO-H264-MVC-SUB-BITSTREAM:CAPS"></a>GST_MPEGTS_STREAM_TYPE_VIDEO_H264_MVC_SUB_BITSTREAM</p></td>
+<td class="enum_member_description">
+<p>MVC video sub-bitstream
+of an AVC video stream conforming to one or more profiles defined in Annex H
+of Rec. ITU-T H.264 | ISO/IEC 14496-10</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-STREAM-TYPE-VIDEO-JP2K:CAPS"></a>GST_MPEGTS_STREAM_TYPE_VIDEO_JP2K</p></td>
+<td class="enum_member_description">
+<p>Video stream conforming to one or more
+profiles as defined in Rec. ITU-T T.800 | ISO/IEC 15444-1</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-STREAM-TYPE-VIDEO-MPEG2-STEREO-ADDITIONAL-VIEW:CAPS"></a>GST_MPEGTS_STREAM_TYPE_VIDEO_MPEG2_STEREO_ADDITIONAL_VIEW</p></td>
+<td class="enum_member_description">
+<p>Additional view
+Rec. ITU-T H.262 | ISO/IEC 13818-2 video stream for service-compatible
+stereoscopic 3D services</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-STREAM-TYPE-VIDEO-H264-STEREO-ADDITIONAL-VIEW:CAPS"></a>GST_MPEGTS_STREAM_TYPE_VIDEO_H264_STEREO_ADDITIONAL_VIEW</p></td>
+<td class="enum_member_description">
+<p>Additional view
+Rec. ITU-T H.264 | ISO/IEC 14496-10 video stream conforming to one or more
+profiles defined in Annex A for service-compatible stereoscopic 3D services</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-STREAM-TYPE-VIDEO-HEVC:CAPS"></a>GST_MPEGTS_STREAM_TYPE_VIDEO_HEVC</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-STREAM-TYPE-IPMP-STREAM:CAPS"></a>GST_MPEGTS_STREAM_TYPE_IPMP_STREAM</p></td>
+<td class="enum_member_description">
+<p>IPMP stream</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>Generated by GTK-Doc V1.25</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html b/docs/libs/html/gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html
new file mode 100644
index 0000000..7cff3fe
--- /dev/null
+++ b/docs/libs/html/gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html
@@ -0,0 +1,4033 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>DVB variants of MPEG-TS descriptors: GStreamer Bad Plugins 1.0 Library Reference Manual</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
+<link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Library Reference Manual">
+<link rel="up" href="mpegts.html" title="Mpeg TS helper library">
+<link rel="prev" href="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-descriptors.html" title="ATSC variants of MPEG-TS descriptors">
+<link rel="next" href="gst-plugins-bad-libs-ISDB-variants-of-MPEG-TS-descriptors.html" title="ISDB variants of MPEG-TS descriptors">
+<meta name="generator" content="GTK-Doc V1.25 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
+<td width="100%" align="left" class="shortcuts">
+<a href="#" class="shortcut">Top</a><span id="nav_description"> <span class="dim">|</span>
+ <a href="#gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.description" class="shortcut">Description</a></span><span id="nav_hierarchy"> <span class="dim">|</span>
+ <a href="#gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.object-hierarchy" class="shortcut">Object Hierarchy</a></span>
+</td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
+<td><a accesskey="u" href="mpegts.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
+<td><a accesskey="p" href="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-descriptors.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="gst-plugins-bad-libs-ISDB-variants-of-MPEG-TS-descriptors.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.top_of_page"></a>DVB variants of MPEG-TS descriptors</span></h2>
+<p>DVB variants of MPEG-TS descriptors — Descriptors for the various DVB specifications</p>
+</td>
+<td class="gallery_image" valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.functions"></a><h2>Functions</h2>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="functions_return">
+<col class="functions_name">
+</colgroup>
+<tbody>
+<tr>
+<td class="function_type">
+<a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#gst-mpegts-descriptor-parse-dvb-content" title="gst_mpegts_descriptor_parse_dvb_content ()">gst_mpegts_descriptor_parse_dvb_content</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#gst-mpegts-dvb-component-descriptor-free" title="gst_mpegts_dvb_component_descriptor_free ()">gst_mpegts_dvb_component_descriptor_free</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#gst-mpegts-descriptor-parse-dvb-component" title="gst_mpegts_descriptor_parse_dvb_component ()">gst_mpegts_descriptor_parse_dvb_component</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#gst-mpegts-extended-event-descriptor-free" title="gst_mpegts_extended_event_descriptor_free ()">gst_mpegts_extended_event_descriptor_free</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#gst-mpegts-descriptor-parse-dvb-extended-event" title="gst_mpegts_descriptor_parse_dvb_extended_event ()">gst_mpegts_descriptor_parse_dvb_extended_event</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#gst-mpegts-descriptor-parse-satellite-delivery-system" title="gst_mpegts_descriptor_parse_satellite_delivery_system ()">gst_mpegts_descriptor_parse_satellite_delivery_system</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#gst-mpegts-descriptor-parse-cable-delivery-system" title="gst_mpegts_descriptor_parse_cable_delivery_system ()">gst_mpegts_descriptor_parse_cable_delivery_system</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#gst-mpegts-descriptor-parse-terrestrial-delivery-system" title="gst_mpegts_descriptor_parse_terrestrial_delivery_system ()">gst_mpegts_descriptor_parse_terrestrial_delivery_system</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#gst-mpegts-t2-delivery-system-descriptor-free" title="gst_mpegts_t2_delivery_system_descriptor_free ()">gst_mpegts_t2_delivery_system_descriptor_free</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#gst-mpegts-descriptor-parse-dvb-t2-delivery-system" title="gst_mpegts_descriptor_parse_dvb_t2_delivery_system ()">gst_mpegts_descriptor_parse_dvb_t2_delivery_system</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#gst-mpegts-descriptor-parse-dvb-short-event" title="gst_mpegts_descriptor_parse_dvb_short_event ()">gst_mpegts_descriptor_parse_dvb_short_event</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#gst-mpegts-descriptor-parse-dvb-network-name" title="gst_mpegts_descriptor_parse_dvb_network_name ()">gst_mpegts_descriptor_parse_dvb_network_name</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GstMpegtsDescriptor"><span class="returnvalue">GstMpegtsDescriptor</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#gst-mpegts-descriptor-from-dvb-network-name" title="gst_mpegts_descriptor_from_dvb_network_name ()">gst_mpegts_descriptor_from_dvb_network_name</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#gst-mpegts-descriptor-parse-dvb-service" title="gst_mpegts_descriptor_parse_dvb_service ()">gst_mpegts_descriptor_parse_dvb_service</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GstMpegtsDescriptor"><span class="returnvalue">GstMpegtsDescriptor</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#gst-mpegts-descriptor-from-dvb-service" title="gst_mpegts_descriptor_from_dvb_service ()">gst_mpegts_descriptor_from_dvb_service</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#gst-mpegts-descriptor-parse-dvb-teletext-idx" title="gst_mpegts_descriptor_parse_dvb_teletext_idx ()">gst_mpegts_descriptor_parse_dvb_teletext_idx</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#gst-mpegts-descriptor-parse-dvb-teletext-nb" title="gst_mpegts_descriptor_parse_dvb_teletext_nb ()">gst_mpegts_descriptor_parse_dvb_teletext_nb</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#gst-mpegts-descriptor-parse-dvb-subtitling-idx" title="gst_mpegts_descriptor_parse_dvb_subtitling_idx ()">gst_mpegts_descriptor_parse_dvb_subtitling_idx</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#gst-mpegts-descriptor-parse-dvb-subtitling-nb" title="gst_mpegts_descriptor_parse_dvb_subtitling_nb ()">gst_mpegts_descriptor_parse_dvb_subtitling_nb</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GstMpegtsDescriptor"><span class="returnvalue">GstMpegtsDescriptor</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#gst-mpegts-descriptor-from-dvb-subtitling" title="gst_mpegts_descriptor_from_dvb_subtitling ()">gst_mpegts_descriptor_from_dvb_subtitling</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#gst-mpegts-dvb-linkage-descriptor-free" title="gst_mpegts_dvb_linkage_descriptor_free ()">gst_mpegts_dvb_linkage_descriptor_free</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">const <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsDVBLinkageMobileHandOver" title="struct GstMpegtsDVBLinkageMobileHandOver"><span class="returnvalue">GstMpegtsDVBLinkageMobileHandOver</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#gst-mpegts-dvb-linkage-descriptor-get-mobile-hand-over" title="gst_mpegts_dvb_linkage_descriptor_get_mobile_hand_over ()">gst_mpegts_dvb_linkage_descriptor_get_mobile_hand_over</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">const <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsDVBLinkageEvent" title="struct GstMpegtsDVBLinkageEvent"><span class="returnvalue">GstMpegtsDVBLinkageEvent</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#gst-mpegts-dvb-linkage-descriptor-get-event" title="gst_mpegts_dvb_linkage_descriptor_get_event ()">gst_mpegts_dvb_linkage_descriptor_get_event</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">const <a href="/usr/share/gtk-doc/html/glibglib-Pointer-Arrays.html#GPtrArray"><span class="returnvalue">GPtrArray</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#gst-mpegts-dvb-linkage-descriptor-get-extended-event" title="gst_mpegts_dvb_linkage_descriptor_get_extended_event ()">gst_mpegts_dvb_linkage_descriptor_get_extended_event</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#gst-mpegts-descriptor-parse-dvb-linkage" title="gst_mpegts_descriptor_parse_dvb_linkage ()">gst_mpegts_descriptor_parse_dvb_linkage</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#gst-mpegts-descriptor-parse-dvb-private-data-specifier" title="gst_mpegts_descriptor_parse_dvb_private_data_specifier ()">gst_mpegts_descriptor_parse_dvb_private_data_specifier</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#gst-mpegts-descriptor-parse-dvb-frequency-list" title="gst_mpegts_descriptor_parse_dvb_frequency_list ()">gst_mpegts_descriptor_parse_dvb_frequency_list</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#gst-mpegts-dvb-data-broadcast-descriptor-free" title="gst_mpegts_dvb_data_broadcast_descriptor_free ()">gst_mpegts_dvb_data_broadcast_descriptor_free</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#gst-mpegts-descriptor-parse-dvb-data-broadcast" title="gst_mpegts_descriptor_parse_dvb_data_broadcast ()">gst_mpegts_descriptor_parse_dvb_data_broadcast</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#gst-mpegts-descriptor-parse-dvb-scrambling" title="gst_mpegts_descriptor_parse_dvb_scrambling ()">gst_mpegts_descriptor_parse_dvb_scrambling</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#gst-mpegts-descriptor-parse-dvb-data-broadcast-id" title="gst_mpegts_descriptor_parse_dvb_data_broadcast_id ()">gst_mpegts_descriptor_parse_dvb_data_broadcast_id</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#gst-mpegts-descriptor-parse-dvb-parental-rating" title="gst_mpegts_descriptor_parse_dvb_parental_rating ()">gst_mpegts_descriptor_parse_dvb_parental_rating</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#gst-mpegts-descriptor-parse-dvb-stream-identifier" title="gst_mpegts_descriptor_parse_dvb_stream_identifier ()">gst_mpegts_descriptor_parse_dvb_stream_identifier</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#gst-mpegts-descriptor-parse-dvb-ca-identifier" title="gst_mpegts_descriptor_parse_dvb_ca_identifier ()">gst_mpegts_descriptor_parse_dvb_ca_identifier</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#gst-mpegts-descriptor-parse-dvb-service-list" title="gst_mpegts_descriptor_parse_dvb_service_list ()">gst_mpegts_descriptor_parse_dvb_service_list</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#gst-mpegts-descriptor-parse-dvb-stuffing" title="gst_mpegts_descriptor_parse_dvb_stuffing ()">gst_mpegts_descriptor_parse_dvb_stuffing</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#gst-mpegts-descriptor-parse-dvb-bouquet-name" title="gst_mpegts_descriptor_parse_dvb_bouquet_name ()">gst_mpegts_descriptor_parse_dvb_bouquet_name</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#gst-mpegts-descriptor-parse-dvb-multilingual-network-name" title="gst_mpegts_descriptor_parse_dvb_multilingual_network_name ()">gst_mpegts_descriptor_parse_dvb_multilingual_network_name</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#gst-mpegts-descriptor-parse-dvb-multilingual-bouquet-name" title="gst_mpegts_descriptor_parse_dvb_multilingual_bouquet_name ()">gst_mpegts_descriptor_parse_dvb_multilingual_bouquet_name</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#gst-mpegts-descriptor-parse-dvb-multilingual-service-name" title="gst_mpegts_descriptor_parse_dvb_multilingual_service_name ()">gst_mpegts_descriptor_parse_dvb_multilingual_service_name</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#gst-mpegts-descriptor-parse-dvb-multilingual-component" title="gst_mpegts_descriptor_parse_dvb_multilingual_component ()">gst_mpegts_descriptor_parse_dvb_multilingual_component</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.other"></a><h2>Types and Values</h2>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="name">
+<col class="description">
+</colgroup>
+<tbody>
+<tr>
+<td class="datatype_keyword">enum</td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsDVBDescriptorType" title="enum GstMpegtsDVBDescriptorType">GstMpegtsDVBDescriptorType</a></td>
+</tr>
+<tr>
+<td class="datatype_keyword">enum</td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsDVBExtendedDescriptorType" title="enum GstMpegtsDVBExtendedDescriptorType">GstMpegtsDVBExtendedDescriptorType</a></td>
+</tr>
+<tr>
+<td class="datatype_keyword">struct</td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsContent" title="struct GstMpegtsContent">GstMpegtsContent</a></td>
+</tr>
+<tr>
+<td class="datatype_keyword">struct</td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsComponentDescriptor" title="struct GstMpegtsComponentDescriptor">GstMpegtsComponentDescriptor</a></td>
+</tr>
+<tr>
+<td class="datatype_keyword">struct</td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsExtendedEventItem" title="struct GstMpegtsExtendedEventItem">GstMpegtsExtendedEventItem</a></td>
+</tr>
+<tr>
+<td class="datatype_keyword">struct</td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsExtendedEventDescriptor" title="struct GstMpegtsExtendedEventDescriptor">GstMpegtsExtendedEventDescriptor</a></td>
+</tr>
+<tr>
+<td class="datatype_keyword">struct</td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsSatelliteDeliverySystemDescriptor" title="struct GstMpegtsSatelliteDeliverySystemDescriptor">GstMpegtsSatelliteDeliverySystemDescriptor</a></td>
+</tr>
+<tr>
+<td class="datatype_keyword">enum</td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsDVBCodeRate" title="enum GstMpegtsDVBCodeRate">GstMpegtsDVBCodeRate</a></td>
+</tr>
+<tr>
+<td class="datatype_keyword">enum</td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsModulationType" title="enum GstMpegtsModulationType">GstMpegtsModulationType</a></td>
+</tr>
+<tr>
+<td class="datatype_keyword">enum</td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsSatellitePolarizationType" title="enum GstMpegtsSatellitePolarizationType">GstMpegtsSatellitePolarizationType</a></td>
+</tr>
+<tr>
+<td class="datatype_keyword">enum</td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsSatelliteRolloff" title="enum GstMpegtsSatelliteRolloff">GstMpegtsSatelliteRolloff</a></td>
+</tr>
+<tr>
+<td class="datatype_keyword">struct</td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsCableDeliverySystemDescriptor" title="struct GstMpegtsCableDeliverySystemDescriptor">GstMpegtsCableDeliverySystemDescriptor</a></td>
+</tr>
+<tr>
+<td class="datatype_keyword">enum</td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsCableOuterFECScheme" title="enum GstMpegtsCableOuterFECScheme">GstMpegtsCableOuterFECScheme</a></td>
+</tr>
+<tr>
+<td class="datatype_keyword">struct</td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsTerrestrialDeliverySystemDescriptor" title="struct GstMpegtsTerrestrialDeliverySystemDescriptor">GstMpegtsTerrestrialDeliverySystemDescriptor</a></td>
+</tr>
+<tr>
+<td class="datatype_keyword">enum</td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsTerrestrialTransmissionMode" title="enum GstMpegtsTerrestrialTransmissionMode">GstMpegtsTerrestrialTransmissionMode</a></td>
+</tr>
+<tr>
+<td class="datatype_keyword">enum</td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsTerrestrialGuardInterval" title="enum GstMpegtsTerrestrialGuardInterval">GstMpegtsTerrestrialGuardInterval</a></td>
+</tr>
+<tr>
+<td class="datatype_keyword">enum</td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsTerrestrialHierarchy" title="enum GstMpegtsTerrestrialHierarchy">GstMpegtsTerrestrialHierarchy</a></td>
+</tr>
+<tr>
+<td class="datatype_keyword">struct</td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsT2DeliverySystemCellExtension" title="struct GstMpegtsT2DeliverySystemCellExtension">GstMpegtsT2DeliverySystemCellExtension</a></td>
+</tr>
+<tr>
+<td class="datatype_keyword">struct</td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsT2DeliverySystemCell" title="struct GstMpegtsT2DeliverySystemCell">GstMpegtsT2DeliverySystemCell</a></td>
+</tr>
+<tr>
+<td class="datatype_keyword">struct</td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsT2DeliverySystemDescriptor" title="struct GstMpegtsT2DeliverySystemDescriptor">GstMpegtsT2DeliverySystemDescriptor</a></td>
+</tr>
+<tr>
+<td class="datatype_keyword">enum</td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsDVBServiceType" title="enum GstMpegtsDVBServiceType">GstMpegtsDVBServiceType</a></td>
+</tr>
+<tr>
+<td class="datatype_keyword">enum</td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsDVBTeletextType" title="enum GstMpegtsDVBTeletextType">GstMpegtsDVBTeletextType</a></td>
+</tr>
+<tr>
+<td class="datatype_keyword">enum</td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsDVBLinkageType" title="enum GstMpegtsDVBLinkageType">GstMpegtsDVBLinkageType</a></td>
+</tr>
+<tr>
+<td class="datatype_keyword">enum</td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsDVBLinkageHandOverType" title="enum GstMpegtsDVBLinkageHandOverType">GstMpegtsDVBLinkageHandOverType</a></td>
+</tr>
+<tr>
+<td class="datatype_keyword">struct</td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsDVBLinkageMobileHandOver" title="struct GstMpegtsDVBLinkageMobileHandOver">GstMpegtsDVBLinkageMobileHandOver</a></td>
+</tr>
+<tr>
+<td class="datatype_keyword">struct</td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsDVBLinkageEvent" title="struct GstMpegtsDVBLinkageEvent">GstMpegtsDVBLinkageEvent</a></td>
+</tr>
+<tr>
+<td class="datatype_keyword">struct</td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsDVBLinkageExtendedEvent" title="struct GstMpegtsDVBLinkageExtendedEvent">GstMpegtsDVBLinkageExtendedEvent</a></td>
+</tr>
+<tr>
+<td class="datatype_keyword">struct</td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsDVBLinkageDescriptor" title="struct GstMpegtsDVBLinkageDescriptor">GstMpegtsDVBLinkageDescriptor</a></td>
+</tr>
+<tr>
+<td class="datatype_keyword">struct</td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsDataBroadcastDescriptor" title="struct GstMpegtsDataBroadcastDescriptor">GstMpegtsDataBroadcastDescriptor</a></td>
+</tr>
+<tr>
+<td class="datatype_keyword">enum</td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsDVBScramblingModeType" title="enum GstMpegtsDVBScramblingModeType">GstMpegtsDVBScramblingModeType</a></td>
+</tr>
+<tr>
+<td class="datatype_keyword">struct</td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsDVBParentalRatingItem" title="struct GstMpegtsDVBParentalRatingItem">GstMpegtsDVBParentalRatingItem</a></td>
+</tr>
+<tr>
+<td class="datatype_keyword">struct</td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsDVBServiceListItem" title="struct GstMpegtsDVBServiceListItem">GstMpegtsDVBServiceListItem</a></td>
+</tr>
+<tr>
+<td class="datatype_keyword">struct</td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsDvbMultilingualNetworkNameItem" title="struct GstMpegtsDvbMultilingualNetworkNameItem">GstMpegtsDvbMultilingualNetworkNameItem</a></td>
+</tr>
+<tr>
+<td class="datatype_keyword">struct</td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsDvbMultilingualBouquetNameItem" title="struct GstMpegtsDvbMultilingualBouquetNameItem">GstMpegtsDvbMultilingualBouquetNameItem</a></td>
+</tr>
+<tr>
+<td class="datatype_keyword">struct</td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsDvbMultilingualServiceNameItem" title="struct GstMpegtsDvbMultilingualServiceNameItem">GstMpegtsDvbMultilingualServiceNameItem</a></td>
+</tr>
+<tr>
+<td class="datatype_keyword">struct</td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsDvbMultilingualComponentItem" title="struct GstMpegtsDvbMultilingualComponentItem">GstMpegtsDvbMultilingualComponentItem</a></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="screen"> <a href="https://developer.gnome.org/gobject/unstable/gobject-Enumeration-and-Flag-Types.html">GEnum</a>
+ <span class="lineart">├──</span> GstMpegtsCableOuterFECScheme
+ <span class="lineart">├──</span> GstMpegtsDVBCodeRate
+ <span class="lineart">├──</span> GstMpegtsDVBServiceType
+ <span class="lineart">├──</span> GstMpegtsModulationType
+ <span class="lineart">├──</span> GstMpegtsSatellitePolarizationType
+ <span class="lineart">╰──</span> GstMpegtsSatelliteRolloff
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.includes"></a><h2>Includes</h2>
+<pre class="synopsis">#include <gst/mpegts/mpegts.h>
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.description"></a><h2>Description</h2>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.functions_details"></a><h2>Functions</h2>
+<div class="refsect2">
+<a name="gst-mpegts-descriptor-parse-dvb-content"></a><h3>gst_mpegts_descriptor_parse_dvb_content ()</h3>
+<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gst_mpegts_descriptor_parse_dvb_content
+ (<em class="parameter"><code>const <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GstMpegtsDescriptor"><span class="type">GstMpegtsDescriptor</span></a> *descriptor</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a> **content</code></em>);</pre>
+<p>Extracts the DVB content information from <em class="parameter"><code>descriptor</code></em>
+.</p>
+<div class="refsect3">
+<a name="gst-mpegts-descriptor-parse-dvb-content.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>descriptor</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-DVB-CONTENT:CAPS"><code class="literal">GST_MTS_DESC_DVB_CONTENT</code></a> <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GstMpegtsDescriptor"><span class="type">GstMpegtsDescriptor</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>content</p></td>
+<td class="parameter_description"><p> <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsContent" title="struct GstMpegtsContent"><span class="type">GstMpegtsContent</span></a>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>][<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> GstMpegtsContent]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-mpegts-descriptor-parse-dvb-content.returns"></a><h4>Returns</h4>
+<p> <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the parsing happened correctly, else <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a>.</p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-mpegts-dvb-component-descriptor-free"></a><h3>gst_mpegts_dvb_component_descriptor_free ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_mpegts_dvb_component_descriptor_free
+ (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsComponentDescriptor" title="struct GstMpegtsComponentDescriptor"><span class="type">GstMpegtsComponentDescriptor</span></a> *source</code></em>);</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-mpegts-descriptor-parse-dvb-component"></a><h3>gst_mpegts_descriptor_parse_dvb_component ()</h3>
+<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gst_mpegts_descriptor_parse_dvb_component
+ (<em class="parameter"><code>const <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GstMpegtsDescriptor"><span class="type">GstMpegtsDescriptor</span></a> *descriptor</code></em>,
+ <em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsComponentDescriptor" title="struct GstMpegtsComponentDescriptor"><span class="type">GstMpegtsComponentDescriptor</span></a> **res</code></em>);</pre>
+<p>Extracts the DVB component information from <em class="parameter"><code>descriptor</code></em>
+.</p>
+<div class="refsect3">
+<a name="gst-mpegts-descriptor-parse-dvb-component.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>descriptor</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-DVB-COMPONENT:CAPS"><code class="literal">GST_MTS_DESC_DVB_COMPONENT</code></a> <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GstMpegtsDescriptor"><span class="type">GstMpegtsDescriptor</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>res</p></td>
+<td class="parameter_description"><p> the <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsComponentDescriptor" title="struct GstMpegtsComponentDescriptor"><span class="type">GstMpegtsComponentDescriptor</span></a> to fill. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>][<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-mpegts-descriptor-parse-dvb-component.returns"></a><h4>Returns</h4>
+<p> <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if parsing succeeded, else <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a>.</p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-mpegts-extended-event-descriptor-free"></a><h3>gst_mpegts_extended_event_descriptor_free ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_mpegts_extended_event_descriptor_free
+ (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsExtendedEventDescriptor" title="struct GstMpegtsExtendedEventDescriptor"><span class="type">GstMpegtsExtendedEventDescriptor</span></a> *source</code></em>);</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-mpegts-descriptor-parse-dvb-extended-event"></a><h3>gst_mpegts_descriptor_parse_dvb_extended_event ()</h3>
+<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gst_mpegts_descriptor_parse_dvb_extended_event
+ (<em class="parameter"><code>const <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GstMpegtsDescriptor"><span class="type">GstMpegtsDescriptor</span></a> *descriptor</code></em>,
+ <em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsExtendedEventDescriptor" title="struct GstMpegtsExtendedEventDescriptor"><span class="type">GstMpegtsExtendedEventDescriptor</span></a> **res</code></em>);</pre>
+<p>Extracts the DVB extended event information from <em class="parameter"><code>descriptor</code></em>
+.</p>
+<div class="refsect3">
+<a name="gst-mpegts-descriptor-parse-dvb-extended-event.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>descriptor</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-DVB-EXTENDED-EVENT:CAPS"><code class="literal">GST_MTS_DESC_DVB_EXTENDED_EVENT</code></a> <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GstMpegtsDescriptor"><span class="type">GstMpegtsDescriptor</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>res</p></td>
+<td class="parameter_description"><p> the <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsExtendedEventDescriptor" title="struct GstMpegtsExtendedEventDescriptor"><span class="type">GstMpegtsExtendedEventDescriptor</span></a> to fill. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>][<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-mpegts-descriptor-parse-dvb-extended-event.returns"></a><h4>Returns</h4>
+<p> <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if parsing succeeded, else <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a>.</p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-mpegts-descriptor-parse-satellite-delivery-system"></a><h3>gst_mpegts_descriptor_parse_satellite_delivery_system ()</h3>
+<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gst_mpegts_descriptor_parse_satellite_delivery_system
+ (<em class="parameter"><code>const <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GstMpegtsDescriptor"><span class="type">GstMpegtsDescriptor</span></a> *descriptor</code></em>,
+ <em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsSatelliteDeliverySystemDescriptor" title="struct GstMpegtsSatelliteDeliverySystemDescriptor"><span class="type">GstMpegtsSatelliteDeliverySystemDescriptor</span></a> *res</code></em>);</pre>
+<p>Extracts the satellite delivery system information from <em class="parameter"><code>descriptor</code></em>
+.</p>
+<div class="refsect3">
+<a name="gst-mpegts-descriptor-parse-satellite-delivery-system.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>descriptor</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-DVB-SATELLITE-DELIVERY-SYSTEM:CAPS"><code class="literal">GST_MTS_DESC_DVB_SATELLITE_DELIVERY_SYSTEM</code></a> <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GstMpegtsDescriptor"><span class="type">GstMpegtsDescriptor</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>res</p></td>
+<td class="parameter_description"><p> the <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsSatelliteDeliverySystemDescriptor" title="struct GstMpegtsSatelliteDeliverySystemDescriptor"><span class="type">GstMpegtsSatelliteDeliverySystemDescriptor</span></a> to fill. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>][<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-mpegts-descriptor-parse-satellite-delivery-system.returns"></a><h4>Returns</h4>
+<p> <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if parsing succeeded, else <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a>.</p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-mpegts-descriptor-parse-cable-delivery-system"></a><h3>gst_mpegts_descriptor_parse_cable_delivery_system ()</h3>
+<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gst_mpegts_descriptor_parse_cable_delivery_system
+ (<em class="parameter"><code>const <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GstMpegtsDescriptor"><span class="type">GstMpegtsDescriptor</span></a> *descriptor</code></em>,
+ <em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsCableDeliverySystemDescriptor" title="struct GstMpegtsCableDeliverySystemDescriptor"><span class="type">GstMpegtsCableDeliverySystemDescriptor</span></a> *res</code></em>);</pre>
+<p>Extracts the cable delivery system information from <em class="parameter"><code>descriptor</code></em>
+.</p>
+<div class="refsect3">
+<a name="gst-mpegts-descriptor-parse-cable-delivery-system.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>descriptor</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-DVB-CABLE-DELIVERY-SYSTEM:CAPS"><code class="literal">GST_MTS_DESC_DVB_CABLE_DELIVERY_SYSTEM</code></a> <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GstMpegtsDescriptor"><span class="type">GstMpegtsDescriptor</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>res</p></td>
+<td class="parameter_description"><p> the <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsCableDeliverySystemDescriptor" title="struct GstMpegtsCableDeliverySystemDescriptor"><span class="type">GstMpegtsCableDeliverySystemDescriptor</span></a> to fill. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>][<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-mpegts-descriptor-parse-cable-delivery-system.returns"></a><h4>Returns</h4>
+<p> <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if parsing succeeded, else <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a>.</p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-mpegts-descriptor-parse-terrestrial-delivery-system"></a><h3>gst_mpegts_descriptor_parse_terrestrial_delivery_system ()</h3>
+<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gst_mpegts_descriptor_parse_terrestrial_delivery_system
+ (<em class="parameter"><code>const <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GstMpegtsDescriptor"><span class="type">GstMpegtsDescriptor</span></a> *descriptor</code></em>,
+ <em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsTerrestrialDeliverySystemDescriptor" title="struct GstMpegtsTerrestrialDeliverySystemDescriptor"><span class="type">GstMpegtsTerrestrialDeliverySystemDescriptor</span></a> *res</code></em>);</pre>
+<p>Parses out the terrestrial delivery system from the <em class="parameter"><code>descriptor</code></em>
+.</p>
+<div class="refsect3">
+<a name="gst-mpegts-descriptor-parse-terrestrial-delivery-system.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>descriptor</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-DVB-TERRESTRIAL-DELIVERY-SYSTEM:CAPS"><code class="literal">GST_MTS_DESC_DVB_TERRESTRIAL_DELIVERY_SYSTEM</code></a> <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GstMpegtsDescriptor"><span class="type">GstMpegtsDescriptor</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>res</p></td>
+<td class="parameter_description"><p> <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsTerrestrialDeliverySystemDescriptor" title="struct GstMpegtsTerrestrialDeliverySystemDescriptor"><span class="type">GstMpegtsTerrestrialDeliverySystemDescriptor</span></a>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>][<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-mpegts-descriptor-parse-terrestrial-delivery-system.returns"></a><h4>Returns</h4>
+<p> <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the parsing happened correctly, else <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a>.</p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-mpegts-t2-delivery-system-descriptor-free"></a><h3>gst_mpegts_t2_delivery_system_descriptor_free ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_mpegts_t2_delivery_system_descriptor_free
+ (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsT2DeliverySystemDescriptor" title="struct GstMpegtsT2DeliverySystemDescriptor"><span class="type">GstMpegtsT2DeliverySystemDescriptor</span></a> *source</code></em>);</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-mpegts-descriptor-parse-dvb-t2-delivery-system"></a><h3>gst_mpegts_descriptor_parse_dvb_t2_delivery_system ()</h3>
+<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gst_mpegts_descriptor_parse_dvb_t2_delivery_system
+ (<em class="parameter"><code>const <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GstMpegtsDescriptor"><span class="type">GstMpegtsDescriptor</span></a> *descriptor</code></em>,
+ <em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsT2DeliverySystemDescriptor" title="struct GstMpegtsT2DeliverySystemDescriptor"><span class="type">GstMpegtsT2DeliverySystemDescriptor</span></a> **res</code></em>);</pre>
+<p>Parses out the DVB-T2 delivery system from the <em class="parameter"><code>descriptor</code></em>
+.</p>
+<div class="refsect3">
+<a name="gst-mpegts-descriptor-parse-dvb-t2-delivery-system.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>descriptor</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-EXT-DVB-T2-DELIVERY-SYSTEM:CAPS"><code class="literal">GST_MTS_DESC_EXT_DVB_T2_DELIVERY_SYSTEM</code></a> <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GstMpegtsDescriptor"><span class="type">GstMpegtsDescriptor</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>res</p></td>
+<td class="parameter_description"><p> <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsT2DeliverySystemDescriptor" title="struct GstMpegtsT2DeliverySystemDescriptor"><span class="type">GstMpegtsT2DeliverySystemDescriptor</span></a>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>][<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-mpegts-descriptor-parse-dvb-t2-delivery-system.returns"></a><h4>Returns</h4>
+<p> <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the parsing happened correctly, else <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a>.</p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-mpegts-descriptor-parse-dvb-short-event"></a><h3>gst_mpegts_descriptor_parse_dvb_short_event ()</h3>
+<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gst_mpegts_descriptor_parse_dvb_short_event
+ (<em class="parameter"><code>const <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GstMpegtsDescriptor"><span class="type">GstMpegtsDescriptor</span></a> *descriptor</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="type">gchar</span></a> **language_code</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="type">gchar</span></a> **event_name</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="type">gchar</span></a> **text</code></em>);</pre>
+<p>Extracts the DVB short event information from <em class="parameter"><code>descriptor</code></em>
+.</p>
+<div class="refsect3">
+<a name="gst-mpegts-descriptor-parse-dvb-short-event.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>descriptor</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-DVB-SHORT-EVENT:CAPS"><code class="literal">GST_MTS_DESC_DVB_SHORT_EVENT</code></a> <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GstMpegtsDescriptor"><span class="type">GstMpegtsDescriptor</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>language_code</p></td>
+<td class="parameter_description"><p> the language code. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>][<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>event_name</p></td>
+<td class="parameter_description"><p> the event name. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>][<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>text</p></td>
+<td class="parameter_description"><p> the event text. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>][<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-mpegts-descriptor-parse-dvb-short-event.returns"></a><h4>Returns</h4>
+<p> <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if parsing succeeded, else <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a>.</p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-mpegts-descriptor-parse-dvb-network-name"></a><h3>gst_mpegts_descriptor_parse_dvb_network_name ()</h3>
+<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gst_mpegts_descriptor_parse_dvb_network_name
+ (<em class="parameter"><code>const <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GstMpegtsDescriptor"><span class="type">GstMpegtsDescriptor</span></a> *descriptor</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="type">gchar</span></a> **name</code></em>);</pre>
+<p>Parses out the dvb network name from the <em class="parameter"><code>descriptor</code></em>
+:</p>
+<div class="refsect3">
+<a name="gst-mpegts-descriptor-parse-dvb-network-name.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>descriptor</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-DVB-NETWORK-NAME:CAPS"><code class="literal">GST_MTS_DESC_DVB_NETWORK_NAME</code></a> <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GstMpegtsDescriptor"><span class="type">GstMpegtsDescriptor</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>name</p></td>
+<td class="parameter_description"><p> the extracted name. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>][<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-mpegts-descriptor-parse-dvb-network-name.returns"></a><h4>Returns</h4>
+<p> <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the parsing happened correctly, else <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a>.</p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-mpegts-descriptor-from-dvb-network-name"></a><h3>gst_mpegts_descriptor_from_dvb_network_name ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GstMpegtsDescriptor"><span class="returnvalue">GstMpegtsDescriptor</span></a> *
+gst_mpegts_descriptor_from_dvb_network_name
+ (<em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *name</code></em>);</pre>
+<p>Creates a <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GstMpegtsDescriptor"><span class="type">GstMpegtsDescriptor</span></a> to be a <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-DVB-NETWORK-NAME:CAPS"><code class="literal">GST_MTS_DESC_DVB_NETWORK_NAME</code></a>,
+with the network name <em class="parameter"><code>name</code></em>
+. The data field of the <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GstMpegtsDescriptor"><span class="type">GstMpegtsDescriptor</span></a>
+will be allocated, and transferred to the caller.</p>
+<div class="refsect3">
+<a name="gst-mpegts-descriptor-from-dvb-network-name.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>name</p></td>
+<td class="parameter_description"><p>the network name to set</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-mpegts-descriptor-from-dvb-network-name.returns"></a><h4>Returns</h4>
+<p> the <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GstMpegtsDescriptor"><span class="type">GstMpegtsDescriptor</span></a> or <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> on fail. </p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-mpegts-descriptor-parse-dvb-service"></a><h3>gst_mpegts_descriptor_parse_dvb_service ()</h3>
+<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gst_mpegts_descriptor_parse_dvb_service
+ (<em class="parameter"><code>const <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GstMpegtsDescriptor"><span class="type">GstMpegtsDescriptor</span></a> *descriptor</code></em>,
+ <em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsDVBServiceType" title="enum GstMpegtsDVBServiceType"><span class="type">GstMpegtsDVBServiceType</span></a> *service_type</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="type">gchar</span></a> **service_name</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="type">gchar</span></a> **provider_name</code></em>);</pre>
+<p>Extracts the dvb service information from <em class="parameter"><code>descriptor</code></em>
+.</p>
+<div class="refsect3">
+<a name="gst-mpegts-descriptor-parse-dvb-service.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>descriptor</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-DVB-SERVICE:CAPS"><code class="literal">GST_MTS_DESC_DVB_SERVICE</code></a> <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GstMpegtsDescriptor"><span class="type">GstMpegtsDescriptor</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>service_type</p></td>
+<td class="parameter_description"><p> the service type. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>][<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>service_name</p></td>
+<td class="parameter_description"><p> the service name. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>][<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>provider_name</p></td>
+<td class="parameter_description"><p> the provider name. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>][<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-mpegts-descriptor-parse-dvb-service.returns"></a><h4>Returns</h4>
+<p> <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if parsing succeeded, else <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a>.</p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-mpegts-descriptor-from-dvb-service"></a><h3>gst_mpegts_descriptor_from_dvb_service ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GstMpegtsDescriptor"><span class="returnvalue">GstMpegtsDescriptor</span></a> *
+gst_mpegts_descriptor_from_dvb_service
+ (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsDVBServiceType" title="enum GstMpegtsDVBServiceType"><span class="type">GstMpegtsDVBServiceType</span></a> service_type</code></em>,
+ <em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *service_name</code></em>,
+ <em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *service_provider</code></em>);</pre>
+<p>Fills a <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GstMpegtsDescriptor"><span class="type">GstMpegtsDescriptor</span></a> to be a <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-DVB-SERVICE:CAPS"><code class="literal">GST_MTS_DESC_DVB_SERVICE</code></a>.
+The data field of the <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GstMpegtsDescriptor"><span class="type">GstMpegtsDescriptor</span></a> will be allocated,
+and transferred to the caller.</p>
+<div class="refsect3">
+<a name="gst-mpegts-descriptor-from-dvb-service.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>service_type</p></td>
+<td class="parameter_description"><p>Service type defined as a <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsDVBServiceType" title="enum GstMpegtsDVBServiceType"><span class="type">GstMpegtsDVBServiceType</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>service_name</p></td>
+<td class="parameter_description"><p> Name of the service. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>service_provider</p></td>
+<td class="parameter_description"><p> Name of the service provider. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-mpegts-descriptor-from-dvb-service.returns"></a><h4>Returns</h4>
+<p> the <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GstMpegtsDescriptor"><span class="type">GstMpegtsDescriptor</span></a> or <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> on fail. </p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-mpegts-descriptor-parse-dvb-teletext-idx"></a><h3>gst_mpegts_descriptor_parse_dvb_teletext_idx ()</h3>
+<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gst_mpegts_descriptor_parse_dvb_teletext_idx
+ (<em class="parameter"><code>const <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GstMpegtsDescriptor"><span class="type">GstMpegtsDescriptor</span></a> *descriptor</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="type">guint</span></a> idx</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="type">gchar</span></a> **language_code</code></em>,
+ <em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsDVBTeletextType" title="enum GstMpegtsDVBTeletextType"><span class="type">GstMpegtsDVBTeletextType</span></a> *teletext_type</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> *magazine_number</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> *page_number</code></em>);</pre>
+<p>Parses teletext number <em class="parameter"><code>idx</code></em>
+ in the <em class="parameter"><code>descriptor</code></em>
+. The language is in ISO639 format.</p>
+<div class="refsect3">
+<a name="gst-mpegts-descriptor-parse-dvb-teletext-idx.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>descriptor</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-DVB-TELETEXT:CAPS"><code class="literal">GST_MTS_DESC_DVB_TELETEXT</code></a> <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GstMpegtsDescriptor"><span class="type">GstMpegtsDescriptor</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>idx</p></td>
+<td class="parameter_description"><p>The id of the teletext to get</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>language_code</p></td>
+<td class="parameter_description"><p> a null-terminated string. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>][<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>teletext_type</p></td>
+<td class="parameter_description"><p> <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsDVBTeletextType" title="enum GstMpegtsDVBTeletextType"><span class="type">GstMpegtsDVBTeletextType</span></a>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>][<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>magazine_number</p></td>
+<td class="parameter_description"><p>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>][<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>page_number</p></td>
+<td class="parameter_description"><p>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>][<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-mpegts-descriptor-parse-dvb-teletext-idx.returns"></a><h4>Returns</h4>
+<p> FALSE on out-of-bounds and errors</p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-mpegts-descriptor-parse-dvb-teletext-nb"></a><h3>gst_mpegts_descriptor_parse_dvb_teletext_nb ()</h3>
+<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>
+gst_mpegts_descriptor_parse_dvb_teletext_nb
+ (<em class="parameter"><code>const <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GstMpegtsDescriptor"><span class="type">GstMpegtsDescriptor</span></a> *descriptor</code></em>);</pre>
+<p>Find the number of teletext entries in <em class="parameter"><code>descriptor</code></em>
+</p>
+<div class="refsect3">
+<a name="gst-mpegts-descriptor-parse-dvb-teletext-nb.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>descriptor</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-DVB-TELETEXT:CAPS"><code class="literal">GST_MTS_DESC_DVB_TELETEXT</code></a> <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GstMpegtsDescriptor"><span class="type">GstMpegtsDescriptor</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-mpegts-descriptor-parse-dvb-teletext-nb.returns"></a><h4>Returns</h4>
+<p> Number of teletext entries</p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-mpegts-descriptor-parse-dvb-subtitling-idx"></a><h3>gst_mpegts_descriptor_parse_dvb_subtitling_idx ()</h3>
+<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gst_mpegts_descriptor_parse_dvb_subtitling_idx
+ (<em class="parameter"><code>const <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GstMpegtsDescriptor"><span class="type">GstMpegtsDescriptor</span></a> *descriptor</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="type">guint</span></a> idx</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="type">gchar</span></a> **lang</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> *type</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint16"><span class="type">guint16</span></a> *composition_page_id</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint16"><span class="type">guint16</span></a> *ancillary_page_id</code></em>);</pre>
+<p>Extracts the DVB subtitling informatio from specific table id in <em class="parameter"><code>descriptor</code></em>
+.</p>
+<p>Note: Use <a href="/usr/share/gtk-doc/html/gst-plugins-base-libs-1.0gst-plugins-base-libs-gsttaglanguagecodes.html#gst-tag-get-language-code"><span class="type">gst_tag_get_language_code</span></a> if you want to get the the
+ISO 639-1 language code from the returned ISO 639-2 one.</p>
+<div class="refsect3">
+<a name="gst-mpegts-descriptor-parse-dvb-subtitling-idx.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>descriptor</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-DVB-SUBTITLING:CAPS"><code class="literal">GST_MTS_DESC_DVB_SUBTITLING</code></a> <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GstMpegtsDescriptor"><span class="type">GstMpegtsDescriptor</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>idx</p></td>
+<td class="parameter_description"><p>Table id of the entry to parse</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>lang</p></td>
+<td class="parameter_description"><p> the language code. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>][<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>type</p></td>
+<td class="parameter_description"><p> the type of subtitling. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>][<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>][<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>composition_page_id</p></td>
+<td class="parameter_description"><p> the composition page id. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>][<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>][<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>ancillary_page_id</p></td>
+<td class="parameter_description"><p> the ancillary page id. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>][<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>][<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-mpegts-descriptor-parse-dvb-subtitling-idx.returns"></a><h4>Returns</h4>
+<p> <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if parsing succeeded, else <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a>.</p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-mpegts-descriptor-parse-dvb-subtitling-nb"></a><h3>gst_mpegts_descriptor_parse_dvb_subtitling_nb ()</h3>
+<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>
+gst_mpegts_descriptor_parse_dvb_subtitling_nb
+ (<em class="parameter"><code>const <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GstMpegtsDescriptor"><span class="type">GstMpegtsDescriptor</span></a> *descriptor</code></em>);</pre>
+<div class="refsect3">
+<a name="gst-mpegts-descriptor-parse-dvb-subtitling-nb.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>descriptor</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-DVB-SUBTITLING:CAPS"><code class="literal">GST_MTS_DESC_DVB_SUBTITLING</code></a> <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GstMpegtsDescriptor"><span class="type">GstMpegtsDescriptor</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-mpegts-descriptor-parse-dvb-subtitling-nb.returns"></a><h4>Returns</h4>
+<p> The number of entries in <em class="parameter"><code>descriptor</code></em>
+</p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-mpegts-descriptor-from-dvb-subtitling"></a><h3>gst_mpegts_descriptor_from_dvb_subtitling ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GstMpegtsDescriptor"><span class="returnvalue">GstMpegtsDescriptor</span></a> *
+gst_mpegts_descriptor_from_dvb_subtitling
+ (<em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *lang</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> type</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint16"><span class="type">guint16</span></a> composition</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint16"><span class="type">guint16</span></a> ancillary</code></em>);</pre>
+<div class="refsect3">
+<a name="gst-mpegts-descriptor-from-dvb-subtitling.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>lang</p></td>
+<td class="parameter_description"><p> a string containing the ISO639 language. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>type</p></td>
+<td class="parameter_description"><p>subtitling type</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>composition</p></td>
+<td class="parameter_description"><p>composition page id</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>ancillary</p></td>
+<td class="parameter_description"><p>ancillary page id</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-mpegts-dvb-linkage-descriptor-free"></a><h3>gst_mpegts_dvb_linkage_descriptor_free ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_mpegts_dvb_linkage_descriptor_free
+ (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsDVBLinkageDescriptor" title="struct GstMpegtsDVBLinkageDescriptor"><span class="type">GstMpegtsDVBLinkageDescriptor</span></a> *source</code></em>);</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-mpegts-dvb-linkage-descriptor-get-mobile-hand-over"></a><h3>gst_mpegts_dvb_linkage_descriptor_get_mobile_hand_over ()</h3>
+<pre class="programlisting">const <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsDVBLinkageMobileHandOver" title="struct GstMpegtsDVBLinkageMobileHandOver"><span class="returnvalue">GstMpegtsDVBLinkageMobileHandOver</span></a> *
+gst_mpegts_dvb_linkage_descriptor_get_mobile_hand_over
+ (<em class="parameter"><code>const <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsDVBLinkageDescriptor" title="struct GstMpegtsDVBLinkageDescriptor"><span class="type">GstMpegtsDVBLinkageDescriptor</span></a> *desc</code></em>);</pre>
+<div class="refsect3">
+<a name="gst-mpegts-dvb-linkage-descriptor-get-mobile-hand-over.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>desc</p></td>
+<td class="parameter_description"><p>the <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsDVBLinkageDescriptor" title="struct GstMpegtsDVBLinkageDescriptor"><span class="type">GstMpegtsDVBLinkageDescriptor</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-mpegts-dvb-linkage-descriptor-get-mobile-hand-over.returns"></a><h4>Returns</h4>
+<p> The <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsDVBLinkageMobileHandOver" title="struct GstMpegtsDVBLinkageMobileHandOver"><span class="type">GstMpegtsDVBLinkageMobileHandOver</span></a> or <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if an error happened</p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-mpegts-dvb-linkage-descriptor-get-event"></a><h3>gst_mpegts_dvb_linkage_descriptor_get_event ()</h3>
+<pre class="programlisting">const <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsDVBLinkageEvent" title="struct GstMpegtsDVBLinkageEvent"><span class="returnvalue">GstMpegtsDVBLinkageEvent</span></a> *
+gst_mpegts_dvb_linkage_descriptor_get_event
+ (<em class="parameter"><code>const <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsDVBLinkageDescriptor" title="struct GstMpegtsDVBLinkageDescriptor"><span class="type">GstMpegtsDVBLinkageDescriptor</span></a> *desc</code></em>);</pre>
+<div class="refsect3">
+<a name="gst-mpegts-dvb-linkage-descriptor-get-event.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>desc</p></td>
+<td class="parameter_description"><p>the <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsDVBLinkageDescriptor" title="struct GstMpegtsDVBLinkageDescriptor"><span class="type">GstMpegtsDVBLinkageDescriptor</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-mpegts-dvb-linkage-descriptor-get-event.returns"></a><h4>Returns</h4>
+<p> The <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsDVBLinkageEvent" title="struct GstMpegtsDVBLinkageEvent"><span class="type">GstMpegtsDVBLinkageEvent</span></a> or <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if an error happened</p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-mpegts-dvb-linkage-descriptor-get-extended-event"></a><h3>gst_mpegts_dvb_linkage_descriptor_get_extended_event ()</h3>
+<pre class="programlisting">const <a href="/usr/share/gtk-doc/html/glibglib-Pointer-Arrays.html#GPtrArray"><span class="returnvalue">GPtrArray</span></a> *
+gst_mpegts_dvb_linkage_descriptor_get_extended_event
+ (<em class="parameter"><code>const <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsDVBLinkageDescriptor" title="struct GstMpegtsDVBLinkageDescriptor"><span class="type">GstMpegtsDVBLinkageDescriptor</span></a> *desc</code></em>);</pre>
+<div class="refsect3">
+<a name="gst-mpegts-dvb-linkage-descriptor-get-extended-event.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>desc</p></td>
+<td class="parameter_description"><p>the <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsDVBLinkageDescriptor" title="struct GstMpegtsDVBLinkageDescriptor"><span class="type">GstMpegtsDVBLinkageDescriptor</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-mpegts-dvb-linkage-descriptor-get-extended-event.returns"></a><h4>Returns</h4>
+<p> an <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsDVBLinkageExtendedEvent" title="struct GstMpegtsDVBLinkageExtendedEvent"><span class="type">GstMpegtsDVBLinkageExtendedEvent</span></a> array or <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if an error happened. </p>
+<p><span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> GstMpegtsDVBLinkageExtendedEvent]</span></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-mpegts-descriptor-parse-dvb-linkage"></a><h3>gst_mpegts_descriptor_parse_dvb_linkage ()</h3>
+<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gst_mpegts_descriptor_parse_dvb_linkage
+ (<em class="parameter"><code>const <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GstMpegtsDescriptor"><span class="type">GstMpegtsDescriptor</span></a> *descriptor</code></em>,
+ <em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsDVBLinkageDescriptor" title="struct GstMpegtsDVBLinkageDescriptor"><span class="type">GstMpegtsDVBLinkageDescriptor</span></a> **res</code></em>);</pre>
+<p>Extracts the DVB linkage information from <em class="parameter"><code>descriptor</code></em>
+.</p>
+<div class="refsect3">
+<a name="gst-mpegts-descriptor-parse-dvb-linkage.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>descriptor</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-DVB-LINKAGE:CAPS"><code class="literal">GST_MTS_DESC_DVB_LINKAGE</code></a> <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GstMpegtsDescriptor"><span class="type">GstMpegtsDescriptor</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>res</p></td>
+<td class="parameter_description"><p> the <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsDVBLinkageDescriptor" title="struct GstMpegtsDVBLinkageDescriptor"><span class="type">GstMpegtsDVBLinkageDescriptor</span></a> to fill. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>][<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-mpegts-descriptor-parse-dvb-linkage.returns"></a><h4>Returns</h4>
+<p> <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if parsing succeeded, else <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a>.</p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-mpegts-descriptor-parse-dvb-private-data-specifier"></a><h3>gst_mpegts_descriptor_parse_dvb_private_data_specifier ()</h3>
+<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gst_mpegts_descriptor_parse_dvb_private_data_specifier
+ (<em class="parameter"><code>const <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GstMpegtsDescriptor"><span class="type">GstMpegtsDescriptor</span></a> *descriptor</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint32"><span class="type">guint32</span></a> *private_data_specifier</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> **private_data</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> *length</code></em>);</pre>
+<p>Parses out the private data specifier from the <em class="parameter"><code>descriptor</code></em>
+.</p>
+<div class="refsect3">
+<a name="gst-mpegts-descriptor-parse-dvb-private-data-specifier.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>descriptor</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-DVB-PRIVATE-DATA-SPECIFIER:CAPS"><code class="literal">GST_MTS_DESC_DVB_PRIVATE_DATA_SPECIFIER</code></a> <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GstMpegtsDescriptor"><span class="type">GstMpegtsDescriptor</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>private_data_specifier</p></td>
+<td class="parameter_description"><p> the private data specifier id
+registered by http://www.dvbservices.com/. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>private_data</p></td>
+<td class="parameter_description"><p> additional data or NULL. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>][<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>length</p></td>
+<td class="parameter_description"><p> length of <code class="literal">private_data</code>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>][<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-mpegts-descriptor-parse-dvb-private-data-specifier.returns"></a><h4>Returns</h4>
+<p> <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the parsing happened correctly, else <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a>.</p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-mpegts-descriptor-parse-dvb-frequency-list"></a><h3>gst_mpegts_descriptor_parse_dvb_frequency_list ()</h3>
+<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gst_mpegts_descriptor_parse_dvb_frequency_list
+ (<em class="parameter"><code>const <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GstMpegtsDescriptor"><span class="type">GstMpegtsDescriptor</span></a> *descriptor</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> *offset</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Arrays.html#GArray"><span class="type">GArray</span></a> **list</code></em>);</pre>
+<p>Parses out a list of frequencies from the <em class="parameter"><code>descriptor</code></em>
+.</p>
+<div class="refsect3">
+<a name="gst-mpegts-descriptor-parse-dvb-frequency-list.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>descriptor</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-DVB-FREQUENCY-LIST:CAPS"><code class="literal">GST_MTS_DESC_DVB_FREQUENCY_LIST</code></a> <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GstMpegtsDescriptor"><span class="type">GstMpegtsDescriptor</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>offset</p></td>
+<td class="parameter_description"><p> <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> in Hz, <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> in kHz. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>list</p></td>
+<td class="parameter_description"><p> a list of all frequencies in Hz/kHz
+depending on <code class="literal">offset</code>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>][<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> guint32]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-mpegts-descriptor-parse-dvb-frequency-list.returns"></a><h4>Returns</h4>
+<p> <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the parsing happened correctly, else <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a>.</p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-mpegts-dvb-data-broadcast-descriptor-free"></a><h3>gst_mpegts_dvb_data_broadcast_descriptor_free ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_mpegts_dvb_data_broadcast_descriptor_free
+ (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsDataBroadcastDescriptor" title="struct GstMpegtsDataBroadcastDescriptor"><span class="type">GstMpegtsDataBroadcastDescriptor</span></a> *source</code></em>);</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-mpegts-descriptor-parse-dvb-data-broadcast"></a><h3>gst_mpegts_descriptor_parse_dvb_data_broadcast ()</h3>
+<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gst_mpegts_descriptor_parse_dvb_data_broadcast
+ (<em class="parameter"><code>const <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GstMpegtsDescriptor"><span class="type">GstMpegtsDescriptor</span></a> *descriptor</code></em>,
+ <em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsDataBroadcastDescriptor" title="struct GstMpegtsDataBroadcastDescriptor"><span class="type">GstMpegtsDataBroadcastDescriptor</span></a> **res</code></em>);</pre>
+<p>Parses out the data broadcast from the <em class="parameter"><code>descriptor</code></em>
+.</p>
+<div class="refsect3">
+<a name="gst-mpegts-descriptor-parse-dvb-data-broadcast.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>descriptor</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-DVB-DATA-BROADCAST:CAPS"><code class="literal">GST_MTS_DESC_DVB_DATA_BROADCAST</code></a> <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GstMpegtsDescriptor"><span class="type">GstMpegtsDescriptor</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>res</p></td>
+<td class="parameter_description"><p> <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsDataBroadcastDescriptor" title="struct GstMpegtsDataBroadcastDescriptor"><span class="type">GstMpegtsDataBroadcastDescriptor</span></a>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>][<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-mpegts-descriptor-parse-dvb-data-broadcast.returns"></a><h4>Returns</h4>
+<p> <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the parsing happened correctly, else <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a>.</p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-mpegts-descriptor-parse-dvb-scrambling"></a><h3>gst_mpegts_descriptor_parse_dvb_scrambling ()</h3>
+<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gst_mpegts_descriptor_parse_dvb_scrambling
+ (<em class="parameter"><code>const <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GstMpegtsDescriptor"><span class="type">GstMpegtsDescriptor</span></a> *descriptor</code></em>,
+ <em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsDVBScramblingModeType" title="enum GstMpegtsDVBScramblingModeType"><span class="type">GstMpegtsDVBScramblingModeType</span></a> *scrambling_mode</code></em>);</pre>
+<p>Parses out the scrambling mode from the <em class="parameter"><code>descriptor</code></em>
+.</p>
+<div class="refsect3">
+<a name="gst-mpegts-descriptor-parse-dvb-scrambling.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>descriptor</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-DVB-SCRAMBLING:CAPS"><code class="literal">GST_MTS_DESC_DVB_SCRAMBLING</code></a> <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GstMpegtsDescriptor"><span class="type">GstMpegtsDescriptor</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>scrambling_mode</p></td>
+<td class="parameter_description"><p> This 8-bit field identifies the selected
+mode of the scrambling algorithm (<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsDVBScramblingModeType" title="enum GstMpegtsDVBScramblingModeType"><span class="type">GstMpegtsDVBScramblingModeType</span></a>).
+The technical details of the scrambling algorithm are available only
+to bona-fide users upon signature of a Non Disclosure Agreement (NDA)
+administered by the DVB Common Scrambling Algorithm Custodian. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-mpegts-descriptor-parse-dvb-scrambling.returns"></a><h4>Returns</h4>
+<p> <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the parsing happened correctly, else <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a>.</p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-mpegts-descriptor-parse-dvb-data-broadcast-id"></a><h3>gst_mpegts_descriptor_parse_dvb_data_broadcast_id ()</h3>
+<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gst_mpegts_descriptor_parse_dvb_data_broadcast_id
+ (<em class="parameter"><code>const <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GstMpegtsDescriptor"><span class="type">GstMpegtsDescriptor</span></a> *descriptor</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint16"><span class="type">guint16</span></a> *data_broadcast_id</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> **id_selector_bytes</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> *len</code></em>);</pre>
+<p>Parses out the data broadcast id from the <em class="parameter"><code>descriptor</code></em>
+.</p>
+<div class="refsect3">
+<a name="gst-mpegts-descriptor-parse-dvb-data-broadcast-id.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>descriptor</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-DVB-DATA-BROADCAST-ID:CAPS"><code class="literal">GST_MTS_DESC_DVB_DATA_BROADCAST_ID</code></a> <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GstMpegtsDescriptor"><span class="type">GstMpegtsDescriptor</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>data_broadcast_id</p></td>
+<td class="parameter_description"><p> the data broadcast id. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>id_selector_bytes</p></td>
+<td class="parameter_description"><p> the selector bytes, if present. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>][<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>len</p></td>
+<td class="parameter_description"><p> the length of <span class="type">id_selector_bytes</span>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-mpegts-descriptor-parse-dvb-data-broadcast-id.returns"></a><h4>Returns</h4>
+<p> <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the parsing happened correctly, else <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a>.</p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-mpegts-descriptor-parse-dvb-parental-rating"></a><h3>gst_mpegts_descriptor_parse_dvb_parental_rating ()</h3>
+<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gst_mpegts_descriptor_parse_dvb_parental_rating
+ (<em class="parameter"><code>const <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GstMpegtsDescriptor"><span class="type">GstMpegtsDescriptor</span></a> *descriptor</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a> **rating</code></em>);</pre>
+<p>Extracts the DVB parental rating information from <em class="parameter"><code>descriptor</code></em>
+.</p>
+<div class="refsect3">
+<a name="gst-mpegts-descriptor-parse-dvb-parental-rating.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>descriptor</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-DVB-PARENTAL-RATING:CAPS"><code class="literal">GST_MTS_DESC_DVB_PARENTAL_RATING</code></a> <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GstMpegtsDescriptor"><span class="type">GstMpegtsDescriptor</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>rating</p></td>
+<td class="parameter_description"><p><a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsDVBParentalRatingItem" title="struct GstMpegtsDVBParentalRatingItem"><span class="type">GstMpegtsDVBParentalRatingItem</span></a>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>][<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> GstMpegtsDVBParentalRatingItem]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-mpegts-descriptor-parse-dvb-parental-rating.returns"></a><h4>Returns</h4>
+<p> <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the parsing happened correctly, else <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a>.</p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-mpegts-descriptor-parse-dvb-stream-identifier"></a><h3>gst_mpegts_descriptor_parse_dvb_stream_identifier ()</h3>
+<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gst_mpegts_descriptor_parse_dvb_stream_identifier
+ (<em class="parameter"><code>const <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GstMpegtsDescriptor"><span class="type">GstMpegtsDescriptor</span></a> *descriptor</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> *component_tag</code></em>);</pre>
+<p>Extracts the component tag from <em class="parameter"><code>descriptor</code></em>
+.</p>
+<div class="refsect3">
+<a name="gst-mpegts-descriptor-parse-dvb-stream-identifier.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>descriptor</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-DVB-CONTENT:CAPS"><code class="literal">GST_MTS_DESC_DVB_CONTENT</code></a> <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GstMpegtsDescriptor"><span class="type">GstMpegtsDescriptor</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>component_tag</p></td>
+<td class="parameter_description"><p> the component tag. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>][<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-mpegts-descriptor-parse-dvb-stream-identifier.returns"></a><h4>Returns</h4>
+<p> <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the parsing happended correctly, else <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a>.</p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-mpegts-descriptor-parse-dvb-ca-identifier"></a><h3>gst_mpegts_descriptor_parse_dvb_ca_identifier ()</h3>
+<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gst_mpegts_descriptor_parse_dvb_ca_identifier
+ (<em class="parameter"><code>const <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GstMpegtsDescriptor"><span class="type">GstMpegtsDescriptor</span></a> *descriptor</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Arrays.html#GArray"><span class="type">GArray</span></a> **list</code></em>);</pre>
+<p>Extracts ca id's from <em class="parameter"><code>descriptor</code></em>
+.</p>
+<div class="refsect3">
+<a name="gst-mpegts-descriptor-parse-dvb-ca-identifier.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>descriptor</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-DVB-CA-IDENTIFIER:CAPS"><code class="literal">GST_MTS_DESC_DVB_CA_IDENTIFIER</code></a> <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GstMpegtsDescriptor"><span class="type">GstMpegtsDescriptor</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>list</p></td>
+<td class="parameter_description"><p> a list of ca identifier.
+Edge entry identifies the CA system. Allocations of the value of this field
+are found in http://www.dvbservices.com. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>][<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> guint16]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-mpegts-descriptor-parse-dvb-ca-identifier.returns"></a><h4>Returns</h4>
+<p> <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the parsing happened correctly, else <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a>.</p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-mpegts-descriptor-parse-dvb-service-list"></a><h3>gst_mpegts_descriptor_parse_dvb_service_list ()</h3>
+<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gst_mpegts_descriptor_parse_dvb_service_list
+ (<em class="parameter"><code>const <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GstMpegtsDescriptor"><span class="type">GstMpegtsDescriptor</span></a> *descriptor</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a> **list</code></em>);</pre>
+<p>Parses out a list of services from the <em class="parameter"><code>descriptor</code></em>
+:</p>
+<div class="refsect3">
+<a name="gst-mpegts-descriptor-parse-dvb-service-list.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>descriptor</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-DVB-SERVICE-LIST:CAPS"><code class="literal">GST_MTS_DESC_DVB_SERVICE_LIST</code></a> <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GstMpegtsDescriptor"><span class="type">GstMpegtsDescriptor</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>list</p></td>
+<td class="parameter_description"><p>the list of services. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>][<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> GstMpegtsDVBServiceListItem]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-mpegts-descriptor-parse-dvb-service-list.returns"></a><h4>Returns</h4>
+<p> <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the parsing happened correctly, else <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a>.</p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-mpegts-descriptor-parse-dvb-stuffing"></a><h3>gst_mpegts_descriptor_parse_dvb_stuffing ()</h3>
+<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gst_mpegts_descriptor_parse_dvb_stuffing
+ (<em class="parameter"><code>const <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GstMpegtsDescriptor"><span class="type">GstMpegtsDescriptor</span></a> *descriptor</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> **stuffing_bytes</code></em>);</pre>
+<p>Parses out the stuffing bytes from the <em class="parameter"><code>descriptor</code></em>
+.</p>
+<div class="refsect3">
+<a name="gst-mpegts-descriptor-parse-dvb-stuffing.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>descriptor</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-DVB-STUFFING:CAPS"><code class="literal">GST_MTS_DESC_DVB_STUFFING</code></a> <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GstMpegtsDescriptor"><span class="type">GstMpegtsDescriptor</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>stuffing_bytes</p></td>
+<td class="parameter_description"><p> the stuffing bytes. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>][<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-mpegts-descriptor-parse-dvb-stuffing.returns"></a><h4>Returns</h4>
+<p> <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the parsing happened correctly, else <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a>.</p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-mpegts-descriptor-parse-dvb-bouquet-name"></a><h3>gst_mpegts_descriptor_parse_dvb_bouquet_name ()</h3>
+<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gst_mpegts_descriptor_parse_dvb_bouquet_name
+ (<em class="parameter"><code>const <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GstMpegtsDescriptor"><span class="type">GstMpegtsDescriptor</span></a> *descriptor</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="type">gchar</span></a> **bouquet_name</code></em>);</pre>
+<p>Extracts the bouquet name from <em class="parameter"><code>descriptor</code></em>
+.</p>
+<div class="refsect3">
+<a name="gst-mpegts-descriptor-parse-dvb-bouquet-name.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>bouquet_name</p></td>
+<td class="parameter_description"><p> the bouquet name. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>][<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-mpegts-descriptor-parse-dvb-bouquet-name.returns"></a><h4>Returns</h4>
+<p> <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if parsing succeeded, else <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a>.</p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-mpegts-descriptor-parse-dvb-multilingual-network-name"></a><h3>gst_mpegts_descriptor_parse_dvb_multilingual_network_name ()</h3>
+<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gst_mpegts_descriptor_parse_dvb_multilingual_network_name
+ (<em class="parameter"><code>const <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GstMpegtsDescriptor"><span class="type">GstMpegtsDescriptor</span></a> *descriptor</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a> **network_name_items</code></em>);</pre>
+<p>Parses out the multilingual network name from the <em class="parameter"><code>descriptor</code></em>
+.</p>
+<div class="refsect3">
+<a name="gst-mpegts-descriptor-parse-dvb-multilingual-network-name.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>descriptor</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-DVB-MULTILINGUAL-NETWORK-NAME:CAPS"><code class="literal">GST_MTS_DESC_DVB_MULTILINGUAL_NETWORK_NAME</code></a>
+<a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GstMpegtsDescriptor"><span class="type">GstMpegtsDescriptor</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>network_name_items</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsDvbMultilingualNetworkNameItem" title="struct GstMpegtsDvbMultilingualNetworkNameItem"><span class="type">GstMpegtsDvbMultilingualNetworkNameItem</span></a>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>][<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> GstMpegtsDvbMultilingualNetworkNameItem]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-mpegts-descriptor-parse-dvb-multilingual-network-name.returns"></a><h4>Returns</h4>
+<p> <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the parsing happened correctly, else <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a>.</p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-mpegts-descriptor-parse-dvb-multilingual-bouquet-name"></a><h3>gst_mpegts_descriptor_parse_dvb_multilingual_bouquet_name ()</h3>
+<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gst_mpegts_descriptor_parse_dvb_multilingual_bouquet_name
+ (<em class="parameter"><code>const <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GstMpegtsDescriptor"><span class="type">GstMpegtsDescriptor</span></a> *descriptor</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a> **bouquet_name_items</code></em>);</pre>
+<p>Parses out the multilingual bouquet name from the <em class="parameter"><code>descriptor</code></em>
+.</p>
+<div class="refsect3">
+<a name="gst-mpegts-descriptor-parse-dvb-multilingual-bouquet-name.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>descriptor</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-DVB-MULTILINGUAL-BOUQUET-NAME:CAPS"><code class="literal">GST_MTS_DESC_DVB_MULTILINGUAL_BOUQUET_NAME</code></a>
+<a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GstMpegtsDescriptor"><span class="type">GstMpegtsDescriptor</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>bouquet_name_items</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsDvbMultilingualBouquetNameItem" title="struct GstMpegtsDvbMultilingualBouquetNameItem"><span class="type">GstMpegtsDvbMultilingualBouquetNameItem</span></a>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>][<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> GstMpegtsDvbMultilingualBouquetNameItem]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-mpegts-descriptor-parse-dvb-multilingual-bouquet-name.returns"></a><h4>Returns</h4>
+<p> <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the parsing happened correctly, else <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a>.</p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-mpegts-descriptor-parse-dvb-multilingual-service-name"></a><h3>gst_mpegts_descriptor_parse_dvb_multilingual_service_name ()</h3>
+<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gst_mpegts_descriptor_parse_dvb_multilingual_service_name
+ (<em class="parameter"><code>const <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GstMpegtsDescriptor"><span class="type">GstMpegtsDescriptor</span></a> *descriptor</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a> **service_name_items</code></em>);</pre>
+<p>Parses out the multilingual service name from the <em class="parameter"><code>descriptor</code></em>
+.</p>
+<div class="refsect3">
+<a name="gst-mpegts-descriptor-parse-dvb-multilingual-service-name.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>descriptor</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-DVB-MULTILINGUAL-SERVICE-NAME:CAPS"><code class="literal">GST_MTS_DESC_DVB_MULTILINGUAL_SERVICE_NAME</code></a>
+<a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GstMpegtsDescriptor"><span class="type">GstMpegtsDescriptor</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>service_name_items</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsDvbMultilingualServiceNameItem" title="struct GstMpegtsDvbMultilingualServiceNameItem"><span class="type">GstMpegtsDvbMultilingualServiceNameItem</span></a>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>][<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> GstMpegtsDvbMultilingualServiceNameItem]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-mpegts-descriptor-parse-dvb-multilingual-service-name.returns"></a><h4>Returns</h4>
+<p> <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the parsing happened correctly, else <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a>.</p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-mpegts-descriptor-parse-dvb-multilingual-component"></a><h3>gst_mpegts_descriptor_parse_dvb_multilingual_component ()</h3>
+<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gst_mpegts_descriptor_parse_dvb_multilingual_component
+ (<em class="parameter"><code>const <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GstMpegtsDescriptor"><span class="type">GstMpegtsDescriptor</span></a> *descriptor</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> *component_tag</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a> **component_description_items</code></em>);</pre>
+<p>Parses out the multilingual component from the <em class="parameter"><code>descriptor</code></em>
+.</p>
+<div class="refsect3">
+<a name="gst-mpegts-descriptor-parse-dvb-multilingual-component.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>descriptor</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GST-MTS-DESC-DVB-MULTILINGUAL-COMPONENT:CAPS"><code class="literal">GST_MTS_DESC_DVB_MULTILINGUAL_COMPONENT</code></a>
+<a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GstMpegtsDescriptor"><span class="type">GstMpegtsDescriptor</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>component_tag</p></td>
+<td class="parameter_description"><p>the component tag</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>component_description_items</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsDvbMultilingualComponentItem" title="struct GstMpegtsDvbMultilingualComponentItem"><span class="type">GstMpegtsDvbMultilingualComponentItem</span></a>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>][<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> GstMpegtsDvbMultilingualComponentItem]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-mpegts-descriptor-parse-dvb-multilingual-component.returns"></a><h4>Returns</h4>
+<p> <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the parsing happened correctly, else <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a>.</p>
+</div>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.other_details"></a><h2>Types and Values</h2>
+<div class="refsect2">
+<a name="GstMpegtsDVBDescriptorType"></a><h3>enum GstMpegtsDVBDescriptorType</h3>
+<p>The type of <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GstMpegtsDescriptor"><span class="type">GstMpegtsDescriptor</span></a></p>
+<p>These values correspond to the registered descriptor type from
+the various DVB specifications.</p>
+<p>Consult the relevant specifications for more details.</p>
+<div class="refsect3">
+<a name="GstMpegtsDVBDescriptorType.members"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="300px" class="enum_members_name">
+<col class="enum_members_description">
+<col width="200px" class="enum_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-DESC-DVB-NETWORK-NAME:CAPS"></a>GST_MTS_DESC_DVB_NETWORK_NAME</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-DESC-DVB-SERVICE-LIST:CAPS"></a>GST_MTS_DESC_DVB_SERVICE_LIST</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-DESC-DVB-STUFFING:CAPS"></a>GST_MTS_DESC_DVB_STUFFING</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-DESC-DVB-SATELLITE-DELIVERY-SYSTEM:CAPS"></a>GST_MTS_DESC_DVB_SATELLITE_DELIVERY_SYSTEM</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-DESC-DVB-CABLE-DELIVERY-SYSTEM:CAPS"></a>GST_MTS_DESC_DVB_CABLE_DELIVERY_SYSTEM</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-DESC-DVB-VBI-DATA:CAPS"></a>GST_MTS_DESC_DVB_VBI_DATA</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-DESC-DVB-VBI-TELETEXT:CAPS"></a>GST_MTS_DESC_DVB_VBI_TELETEXT</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-DESC-DVB-BOUQUET-NAME:CAPS"></a>GST_MTS_DESC_DVB_BOUQUET_NAME</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-DESC-DVB-SERVICE:CAPS"></a>GST_MTS_DESC_DVB_SERVICE</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-DESC-DVB-COUNTRY-AVAILABILITY:CAPS"></a>GST_MTS_DESC_DVB_COUNTRY_AVAILABILITY</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-DESC-DVB-LINKAGE:CAPS"></a>GST_MTS_DESC_DVB_LINKAGE</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-DESC-DVB-NVOD-REFERENCE:CAPS"></a>GST_MTS_DESC_DVB_NVOD_REFERENCE</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-DESC-DVB-TIME-SHIFTED-SERVICE:CAPS"></a>GST_MTS_DESC_DVB_TIME_SHIFTED_SERVICE</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-DESC-DVB-SHORT-EVENT:CAPS"></a>GST_MTS_DESC_DVB_SHORT_EVENT</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-DESC-DVB-EXTENDED-EVENT:CAPS"></a>GST_MTS_DESC_DVB_EXTENDED_EVENT</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-DESC-DVB-TIME-SHIFTED-EVENT:CAPS"></a>GST_MTS_DESC_DVB_TIME_SHIFTED_EVENT</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-DESC-DVB-COMPONENT:CAPS"></a>GST_MTS_DESC_DVB_COMPONENT</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-DESC-DVB-MOSAIC:CAPS"></a>GST_MTS_DESC_DVB_MOSAIC</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-DESC-DVB-STREAM-IDENTIFIER:CAPS"></a>GST_MTS_DESC_DVB_STREAM_IDENTIFIER</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-DESC-DVB-CA-IDENTIFIER:CAPS"></a>GST_MTS_DESC_DVB_CA_IDENTIFIER</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-DESC-DVB-CONTENT:CAPS"></a>GST_MTS_DESC_DVB_CONTENT</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-DESC-DVB-PARENTAL-RATING:CAPS"></a>GST_MTS_DESC_DVB_PARENTAL_RATING</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-DESC-DVB-TELETEXT:CAPS"></a>GST_MTS_DESC_DVB_TELETEXT</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-DESC-DVB-TELEPHONE:CAPS"></a>GST_MTS_DESC_DVB_TELEPHONE</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-DESC-DVB-LOCAL-TIME-OFFSET:CAPS"></a>GST_MTS_DESC_DVB_LOCAL_TIME_OFFSET</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-DESC-DVB-SUBTITLING:CAPS"></a>GST_MTS_DESC_DVB_SUBTITLING</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-DESC-DVB-TERRESTRIAL-DELIVERY-SYSTEM:CAPS"></a>GST_MTS_DESC_DVB_TERRESTRIAL_DELIVERY_SYSTEM</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-DESC-DVB-MULTILINGUAL-NETWORK-NAME:CAPS"></a>GST_MTS_DESC_DVB_MULTILINGUAL_NETWORK_NAME</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-DESC-DVB-MULTILINGUAL-BOUQUET-NAME:CAPS"></a>GST_MTS_DESC_DVB_MULTILINGUAL_BOUQUET_NAME</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-DESC-DVB-MULTILINGUAL-SERVICE-NAME:CAPS"></a>GST_MTS_DESC_DVB_MULTILINGUAL_SERVICE_NAME</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-DESC-DVB-MULTILINGUAL-COMPONENT:CAPS"></a>GST_MTS_DESC_DVB_MULTILINGUAL_COMPONENT</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-DESC-DVB-PRIVATE-DATA-SPECIFIER:CAPS"></a>GST_MTS_DESC_DVB_PRIVATE_DATA_SPECIFIER</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-DESC-DVB-SERVICE-MOVE:CAPS"></a>GST_MTS_DESC_DVB_SERVICE_MOVE</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-DESC-DVB-SHORT-SMOOTHING-BUFFER:CAPS"></a>GST_MTS_DESC_DVB_SHORT_SMOOTHING_BUFFER</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-DESC-DVB-FREQUENCY-LIST:CAPS"></a>GST_MTS_DESC_DVB_FREQUENCY_LIST</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-DESC-DVB-PARTIAL-TRANSPORT-STREAM:CAPS"></a>GST_MTS_DESC_DVB_PARTIAL_TRANSPORT_STREAM</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-DESC-DVB-DATA-BROADCAST:CAPS"></a>GST_MTS_DESC_DVB_DATA_BROADCAST</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-DESC-DVB-SCRAMBLING:CAPS"></a>GST_MTS_DESC_DVB_SCRAMBLING</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-DESC-DVB-DATA-BROADCAST-ID:CAPS"></a>GST_MTS_DESC_DVB_DATA_BROADCAST_ID</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-DESC-DVB-TRANSPORT-STREAM:CAPS"></a>GST_MTS_DESC_DVB_TRANSPORT_STREAM</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-DESC-DVB-DSNG:CAPS"></a>GST_MTS_DESC_DVB_DSNG</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-DESC-DVB-PDC:CAPS"></a>GST_MTS_DESC_DVB_PDC</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-DESC-DVB-AC3:CAPS"></a>GST_MTS_DESC_DVB_AC3</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-DESC-DVB-ANCILLARY-DATA:CAPS"></a>GST_MTS_DESC_DVB_ANCILLARY_DATA</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-DESC-DVB-CELL-LIST:CAPS"></a>GST_MTS_DESC_DVB_CELL_LIST</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-DESC-DVB-CELL-FREQUENCY-LINK:CAPS"></a>GST_MTS_DESC_DVB_CELL_FREQUENCY_LINK</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-DESC-DVB-ANNOUNCEMENT-SUPPORT:CAPS"></a>GST_MTS_DESC_DVB_ANNOUNCEMENT_SUPPORT</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-DESC-DVB-APPLICATION-SIGNALLING:CAPS"></a>GST_MTS_DESC_DVB_APPLICATION_SIGNALLING</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-DESC-DVB-ADAPTATION-FIELD-DATA:CAPS"></a>GST_MTS_DESC_DVB_ADAPTATION_FIELD_DATA</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-DESC-DVB-SERVICE-IDENTIFIER:CAPS"></a>GST_MTS_DESC_DVB_SERVICE_IDENTIFIER</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-DESC-DVB-SERVICE-AVAILABILITY:CAPS"></a>GST_MTS_DESC_DVB_SERVICE_AVAILABILITY</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-DESC-DVB-DEFAULT-AUTHORITY:CAPS"></a>GST_MTS_DESC_DVB_DEFAULT_AUTHORITY</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-DESC-DVB-RELATED-CONTENT:CAPS"></a>GST_MTS_DESC_DVB_RELATED_CONTENT</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-DESC-DVB-TVA-ID:CAPS"></a>GST_MTS_DESC_DVB_TVA_ID</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-DESC-DVB-CONTENT-IDENTIFIER:CAPS"></a>GST_MTS_DESC_DVB_CONTENT_IDENTIFIER</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-DESC-DVB-TIMESLICE-FEC-IDENTIFIER:CAPS"></a>GST_MTS_DESC_DVB_TIMESLICE_FEC_IDENTIFIER</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-DESC-DVB-ECM-REPETITION-RATE:CAPS"></a>GST_MTS_DESC_DVB_ECM_REPETITION_RATE</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-DESC-DVB-S2-SATELLITE-DELIVERY-SYSTEM:CAPS"></a>GST_MTS_DESC_DVB_S2_SATELLITE_DELIVERY_SYSTEM</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-DESC-DVB-ENHANCED-AC3:CAPS"></a>GST_MTS_DESC_DVB_ENHANCED_AC3</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-DESC-DVB-DTS:CAPS"></a>GST_MTS_DESC_DVB_DTS</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-DESC-DVB-AAC:CAPS"></a>GST_MTS_DESC_DVB_AAC</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-DESC-DVB-XAIT-LOCATION:CAPS"></a>GST_MTS_DESC_DVB_XAIT_LOCATION</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-DESC-DVB-FTA-CONTENT-MANAGEMENT:CAPS"></a>GST_MTS_DESC_DVB_FTA_CONTENT_MANAGEMENT</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-DESC-DVB-EXTENSION:CAPS"></a>GST_MTS_DESC_DVB_EXTENSION</p></td>
+<td> </td>
+<td> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstMpegtsDVBExtendedDescriptorType"></a><h3>enum GstMpegtsDVBExtendedDescriptorType</h3>
+<p>The type of <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GstMpegtsDescriptor"><span class="type">GstMpegtsDescriptor</span></a></p>
+<p>These values correspond to the registered extended descriptor
+type from the various DVB specifications.</p>
+<p>Consult the relevant specifications for more details.</p>
+<div class="refsect3">
+<a name="GstMpegtsDVBExtendedDescriptorType.members"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="300px" class="enum_members_name">
+<col class="enum_members_description">
+<col width="200px" class="enum_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-DESC-EXT-DVB-IMAGE-ICON:CAPS"></a>GST_MTS_DESC_EXT_DVB_IMAGE_ICON</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-DESC-EXT-DVB-CPCM-DELIVERY-SIGNALLING:CAPS"></a>GST_MTS_DESC_EXT_DVB_CPCM_DELIVERY_SIGNALLING</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-DESC-EXT-DVB-CP:CAPS"></a>GST_MTS_DESC_EXT_DVB_CP</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-DESC-EXT-DVB-CP-IDENTIFIER:CAPS"></a>GST_MTS_DESC_EXT_DVB_CP_IDENTIFIER</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-DESC-EXT-DVB-T2-DELIVERY-SYSTEM:CAPS"></a>GST_MTS_DESC_EXT_DVB_T2_DELIVERY_SYSTEM</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-DESC-EXT-DVB-SH-DELIVERY-SYSTEM:CAPS"></a>GST_MTS_DESC_EXT_DVB_SH_DELIVERY_SYSTEM</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-DESC-EXT-DVB-SUPPLEMENTARY-AUDIO:CAPS"></a>GST_MTS_DESC_EXT_DVB_SUPPLEMENTARY_AUDIO</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-DESC-EXT-DVB-NETWORK-CHANGE-NOTIFY:CAPS"></a>GST_MTS_DESC_EXT_DVB_NETWORK_CHANGE_NOTIFY</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-DESC-EXT-DVB-MESSAGE:CAPS"></a>GST_MTS_DESC_EXT_DVB_MESSAGE</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-DESC-EXT-DVB-TARGET-REGION:CAPS"></a>GST_MTS_DESC_EXT_DVB_TARGET_REGION</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-DESC-EXT-DVB-TARGET-REGION-NAME:CAPS"></a>GST_MTS_DESC_EXT_DVB_TARGET_REGION_NAME</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-DESC-EXT-DVB-SERVICE-RELOCATED:CAPS"></a>GST_MTS_DESC_EXT_DVB_SERVICE_RELOCATED</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-DESC-EXT-DVB-XAIT-PID:CAPS"></a>GST_MTS_DESC_EXT_DVB_XAIT_PID</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-DESC-EXT-DVB-C2-DELIVERY-SYSTEM:CAPS"></a>GST_MTS_DESC_EXT_DVB_C2_DELIVERY_SYSTEM</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-DESC-EXT-DVB-DTS-HD-AUDIO-STREAM:CAPS"></a>GST_MTS_DESC_EXT_DVB_DTS_HD_AUDIO_STREAM</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-DESC-EXT-DVB-DTS-NEUTRAL:CAPS"></a>GST_MTS_DESC_EXT_DVB_DTS_NEUTRAL</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-DESC-EXT-DVB-VIDEO-DEPTH-RANGE:CAPS"></a>GST_MTS_DESC_EXT_DVB_VIDEO_DEPTH_RANGE</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-DESC-EXT-DVB-T2MI:CAPS"></a>GST_MTS_DESC_EXT_DVB_T2MI</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-DESC-EXT-DVB-URI-LINKAGE:CAPS"></a>GST_MTS_DESC_EXT_DVB_URI_LINKAGE</p></td>
+<td> </td>
+<td> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstMpegtsContent"></a><h3>struct GstMpegtsContent</h3>
+<pre class="programlisting">struct GstMpegtsContent {
+ GstMpegtsContentNibbleHi content_nibble_1;
+ guint8 content_nibble_2;
+ guint8 user_byte;
+};
+</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstMpegtsComponentDescriptor"></a><h3>struct GstMpegtsComponentDescriptor</h3>
+<pre class="programlisting">struct GstMpegtsComponentDescriptor {
+ guint8 stream_content;
+ guint8 component_type;
+ guint8 component_tag;
+ gchar *language_code;
+ gchar *text;
+};
+</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstMpegtsExtendedEventItem"></a><h3>struct GstMpegtsExtendedEventItem</h3>
+<pre class="programlisting">struct GstMpegtsExtendedEventItem {
+ gchar *item_description;
+ gchar *item;
+};
+</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstMpegtsExtendedEventDescriptor"></a><h3>struct GstMpegtsExtendedEventDescriptor</h3>
+<pre class="programlisting">struct GstMpegtsExtendedEventDescriptor {
+ guint8 descriptor_number;
+ guint8 last_descriptor_number;
+ gchar *language_code;
+ GPtrArray *items;
+ gchar *text;
+};
+</pre>
+<p>Extended Event Descriptor (EN 300 468 v.1.13.1)</p>
+<div class="refsect3">
+<a name="GstMpegtsExtendedEventDescriptor.members"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="300px" class="struct_members_name">
+<col class="struct_members_description">
+<col width="200px" class="struct_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstMpegtsExtendedEventDescriptor.descriptor-number"></a>descriptor_number</code></em>;</p></td>
+<td class="struct_member_description"> </td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstMpegtsExtendedEventDescriptor.last-descriptor-number"></a>last_descriptor_number</code></em>;</p></td>
+<td class="struct_member_description"> </td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *<em class="structfield"><code><a name="GstMpegtsExtendedEventDescriptor.language-code"></a>language_code</code></em>;</p></td>
+<td class="struct_member_description"><p>NULL terminated language code.</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a> *<em class="structfield"><code><a name="GstMpegtsExtendedEventDescriptor.items"></a>items</code></em>;</p></td>
+<td class="struct_member_description"><p> the <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsExtendedEventItem" title="struct GstMpegtsExtendedEventItem"><span class="type">GstMpegtsExtendedEventItem</span></a>. </p></td>
+<td class="struct_member_annotations"><span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> GstMpegtsExtendedEventItem]</span></td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *<em class="structfield"><code><a name="GstMpegtsExtendedEventDescriptor.text"></a>text</code></em>;</p></td>
+<td class="struct_member_description"> </td>
+<td class="struct_member_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstMpegtsSatelliteDeliverySystemDescriptor"></a><h3>struct GstMpegtsSatelliteDeliverySystemDescriptor</h3>
+<pre class="programlisting">struct GstMpegtsSatelliteDeliverySystemDescriptor {
+ guint32 frequency;
+ gfloat orbital_position;
+ gboolean west_east;
+ GstMpegtsSatellitePolarizationType polarization;
+
+ GstMpegtsSatelliteRolloff roll_off;
+ gboolean modulation_system;
+ GstMpegtsModulationType modulation_type;
+
+ guint32 symbol_rate;
+ GstMpegtsDVBCodeRate fec_inner;
+};
+</pre>
+<p>Satellite Delivery System Descriptor (EN 300 468 v.1.13.1)</p>
+<div class="refsect3">
+<a name="GstMpegtsSatelliteDeliverySystemDescriptor.members"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="300px" class="struct_members_name">
+<col class="struct_members_description">
+<col width="200px" class="struct_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint32"><span class="type">guint32</span></a> <em class="structfield"><code><a name="GstMpegtsSatelliteDeliverySystemDescriptor.frequency"></a>frequency</code></em>;</p></td>
+<td class="struct_member_description"><p>the frequency in kHz (kiloHertz)</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gfloat"><span class="type">gfloat</span></a> <em class="structfield"><code><a name="GstMpegtsSatelliteDeliverySystemDescriptor.orbital-position"></a>orbital_position</code></em>;</p></td>
+<td class="struct_member_description"><p>the orbital position in degrees</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> <em class="structfield"><code><a name="GstMpegtsSatelliteDeliverySystemDescriptor.west-east"></a>west_east</code></em>;</p></td>
+<td class="struct_member_description"><p>If <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a>, the satellite is in the eastern part of the orbit,
+else in the western part.</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsSatellitePolarizationType" title="enum GstMpegtsSatellitePolarizationType"><span class="type">GstMpegtsSatellitePolarizationType</span></a> <em class="structfield"><code><a name="GstMpegtsSatelliteDeliverySystemDescriptor.polarization"></a>polarization</code></em>;</p></td>
+<td class="struct_member_description"><p>The polarization of the transmitted signal</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsSatelliteRolloff" title="enum GstMpegtsSatelliteRolloff"><span class="type">GstMpegtsSatelliteRolloff</span></a> <em class="structfield"><code><a name="GstMpegtsSatelliteDeliverySystemDescriptor.roll-off"></a>roll_off</code></em>;</p></td>
+<td class="struct_member_description"><p>Roll-off factor used in DVB-S2</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> <em class="structfield"><code><a name="GstMpegtsSatelliteDeliverySystemDescriptor.modulation-system"></a>modulation_system</code></em>;</p></td>
+<td class="struct_member_description"><p>modulation system, <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if DVB-S2, else DVB-S</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsModulationType" title="enum GstMpegtsModulationType"><span class="type">GstMpegtsModulationType</span></a> <em class="structfield"><code><a name="GstMpegtsSatelliteDeliverySystemDescriptor.modulation-type"></a>modulation_type</code></em>;</p></td>
+<td class="struct_member_description"><p>Modulation scheme used</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint32"><span class="type">guint32</span></a> <em class="structfield"><code><a name="GstMpegtsSatelliteDeliverySystemDescriptor.symbol-rate"></a>symbol_rate</code></em>;</p></td>
+<td class="struct_member_description"><p>Symbol rate (in symbols per second)</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsDVBCodeRate" title="enum GstMpegtsDVBCodeRate"><span class="type">GstMpegtsDVBCodeRate</span></a> <em class="structfield"><code><a name="GstMpegtsSatelliteDeliverySystemDescriptor.fec-inner"></a>fec_inner</code></em>;</p></td>
+<td class="struct_member_description"><p>inner FEC scheme used</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstMpegtsDVBCodeRate"></a><h3>enum GstMpegtsDVBCodeRate</h3>
+<div class="refsect3">
+<a name="GstMpegtsDVBCodeRate.members"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="300px" class="enum_members_name">
+<col class="enum_members_description">
+<col width="200px" class="enum_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-FEC-NONE:CAPS"></a>GST_MPEGTS_FEC_NONE</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-FEC-1-2:CAPS"></a>GST_MPEGTS_FEC_1_2</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-FEC-2-3:CAPS"></a>GST_MPEGTS_FEC_2_3</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-FEC-3-4:CAPS"></a>GST_MPEGTS_FEC_3_4</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-FEC-4-5:CAPS"></a>GST_MPEGTS_FEC_4_5</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-FEC-5-6:CAPS"></a>GST_MPEGTS_FEC_5_6</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-FEC-6-7:CAPS"></a>GST_MPEGTS_FEC_6_7</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-FEC-7-8:CAPS"></a>GST_MPEGTS_FEC_7_8</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-FEC-8-9:CAPS"></a>GST_MPEGTS_FEC_8_9</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-FEC-AUTO:CAPS"></a>GST_MPEGTS_FEC_AUTO</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-FEC-3-5:CAPS"></a>GST_MPEGTS_FEC_3_5</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-FEC-9-10:CAPS"></a>GST_MPEGTS_FEC_9_10</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-FEC-2-5:CAPS"></a>GST_MPEGTS_FEC_2_5</p></td>
+<td> </td>
+<td> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstMpegtsModulationType"></a><h3>enum GstMpegtsModulationType</h3>
+<div class="refsect3">
+<a name="GstMpegtsModulationType.members"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="300px" class="enum_members_name">
+<col class="enum_members_description">
+<col width="200px" class="enum_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-MODULATION-QPSK:CAPS"></a>GST_MPEGTS_MODULATION_QPSK</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-MODULATION-QAM-16:CAPS"></a>GST_MPEGTS_MODULATION_QAM_16</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-MODULATION-QAM-32:CAPS"></a>GST_MPEGTS_MODULATION_QAM_32</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-MODULATION-QAM-64:CAPS"></a>GST_MPEGTS_MODULATION_QAM_64</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-MODULATION-QAM-128:CAPS"></a>GST_MPEGTS_MODULATION_QAM_128</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-MODULATION-QAM-256:CAPS"></a>GST_MPEGTS_MODULATION_QAM_256</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-MODULATION-QAM-AUTO:CAPS"></a>GST_MPEGTS_MODULATION_QAM_AUTO</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-MODULATION-VSB-8:CAPS"></a>GST_MPEGTS_MODULATION_VSB_8</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-MODULATION-VSB-16:CAPS"></a>GST_MPEGTS_MODULATION_VSB_16</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-MODULATION-PSK-8:CAPS"></a>GST_MPEGTS_MODULATION_PSK_8</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-MODULATION-APSK-16:CAPS"></a>GST_MPEGTS_MODULATION_APSK_16</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-MODULATION-APSK-32:CAPS"></a>GST_MPEGTS_MODULATION_APSK_32</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-MODULATION-DQPSK:CAPS"></a>GST_MPEGTS_MODULATION_DQPSK</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-MODULATION-QAM-4-NR-:CAPS"></a>GST_MPEGTS_MODULATION_QAM_4_NR_</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-MODULATION-NONE:CAPS"></a>GST_MPEGTS_MODULATION_NONE</p></td>
+<td> </td>
+<td> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstMpegtsSatellitePolarizationType"></a><h3>enum GstMpegtsSatellitePolarizationType</h3>
+<div class="refsect3">
+<a name="GstMpegtsSatellitePolarizationType.members"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="300px" class="enum_members_name">
+<col class="enum_members_description">
+<col width="200px" class="enum_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-POLARIZATION-LINEAR-HORIZONTAL:CAPS"></a>GST_MPEGTS_POLARIZATION_LINEAR_HORIZONTAL</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-POLARIZATION-LINEAR-VERTICAL:CAPS"></a>GST_MPEGTS_POLARIZATION_LINEAR_VERTICAL</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-POLARIZATION-CIRCULAR-LEFT:CAPS"></a>GST_MPEGTS_POLARIZATION_CIRCULAR_LEFT</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-POLARIZATION-CIRCULAR-RIGHT:CAPS"></a>GST_MPEGTS_POLARIZATION_CIRCULAR_RIGHT</p></td>
+<td> </td>
+<td> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstMpegtsSatelliteRolloff"></a><h3>enum GstMpegtsSatelliteRolloff</h3>
+<div class="refsect3">
+<a name="GstMpegtsSatelliteRolloff.members"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="300px" class="enum_members_name">
+<col class="enum_members_description">
+<col width="200px" class="enum_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-ROLLOFF-35:CAPS"></a>GST_MPEGTS_ROLLOFF_35</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-ROLLOFF-20:CAPS"></a>GST_MPEGTS_ROLLOFF_20</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-ROLLOFF-25:CAPS"></a>GST_MPEGTS_ROLLOFF_25</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-ROLLOFF-RESERVED:CAPS"></a>GST_MPEGTS_ROLLOFF_RESERVED</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-ROLLOFF-AUTO:CAPS"></a>GST_MPEGTS_ROLLOFF_AUTO</p></td>
+<td> </td>
+<td> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstMpegtsCableDeliverySystemDescriptor"></a><h3>struct GstMpegtsCableDeliverySystemDescriptor</h3>
+<pre class="programlisting">struct GstMpegtsCableDeliverySystemDescriptor {
+ guint32 frequency;
+ GstMpegtsCableOuterFECScheme outer_fec;
+ GstMpegtsModulationType modulation;
+
+ guint32 symbol_rate;
+ GstMpegtsDVBCodeRate fec_inner;
+};
+</pre>
+<p>Cable Delivery System Descriptor (EN 300 468 v.1.13.1)</p>
+<div class="refsect3">
+<a name="GstMpegtsCableDeliverySystemDescriptor.members"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="300px" class="struct_members_name">
+<col class="struct_members_description">
+<col width="200px" class="struct_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint32"><span class="type">guint32</span></a> <em class="structfield"><code><a name="GstMpegtsCableDeliverySystemDescriptor.frequency"></a>frequency</code></em>;</p></td>
+<td class="struct_member_description"><p>the frequency in Hz (Hertz)</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsCableOuterFECScheme" title="enum GstMpegtsCableOuterFECScheme"><span class="type">GstMpegtsCableOuterFECScheme</span></a> <em class="structfield"><code><a name="GstMpegtsCableDeliverySystemDescriptor.outer-fec"></a>outer_fec</code></em>;</p></td>
+<td class="struct_member_description"><p>the outer FEC scheme used</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsModulationType" title="enum GstMpegtsModulationType"><span class="type">GstMpegtsModulationType</span></a> <em class="structfield"><code><a name="GstMpegtsCableDeliverySystemDescriptor.modulation"></a>modulation</code></em>;</p></td>
+<td class="struct_member_description"><p>Modulation scheme used</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint32"><span class="type">guint32</span></a> <em class="structfield"><code><a name="GstMpegtsCableDeliverySystemDescriptor.symbol-rate"></a>symbol_rate</code></em>;</p></td>
+<td class="struct_member_description"><p>Symbol rate (in symbols per second)</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsDVBCodeRate" title="enum GstMpegtsDVBCodeRate"><span class="type">GstMpegtsDVBCodeRate</span></a> <em class="structfield"><code><a name="GstMpegtsCableDeliverySystemDescriptor.fec-inner"></a>fec_inner</code></em>;</p></td>
+<td class="struct_member_description"><p>inner FEC scheme used</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstMpegtsCableOuterFECScheme"></a><h3>enum GstMpegtsCableOuterFECScheme</h3>
+<div class="refsect3">
+<a name="GstMpegtsCableOuterFECScheme.members"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="300px" class="enum_members_name">
+<col class="enum_members_description">
+<col width="200px" class="enum_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-CABLE-OUTER-FEC-UNDEFINED:CAPS"></a>GST_MPEGTS_CABLE_OUTER_FEC_UNDEFINED</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-CABLE-OUTER-FEC-NONE:CAPS"></a>GST_MPEGTS_CABLE_OUTER_FEC_NONE</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-CABLE-OUTER-FEC-RS-204-188:CAPS"></a>GST_MPEGTS_CABLE_OUTER_FEC_RS_204_188</p></td>
+<td> </td>
+<td> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstMpegtsTerrestrialDeliverySystemDescriptor"></a><h3>struct GstMpegtsTerrestrialDeliverySystemDescriptor</h3>
+<pre class="programlisting">struct GstMpegtsTerrestrialDeliverySystemDescriptor {
+ guint32 frequency;
+ guint32 bandwidth;
+ gboolean priority;
+ gboolean time_slicing;
+ gboolean mpe_fec;
+ GstMpegtsModulationType constellation;
+ GstMpegtsTerrestrialHierarchy hierarchy;
+ GstMpegtsDVBCodeRate code_rate_hp;
+ GstMpegtsDVBCodeRate code_rate_lp;
+ GstMpegtsTerrestrialGuardInterval guard_interval;
+ GstMpegtsTerrestrialTransmissionMode transmission_mode;
+ gboolean other_frequency;
+};
+</pre>
+<p>Terrestrial Delivery System Descriptor (EN 300 468 v.1.13.1)</p>
+<div class="refsect3">
+<a name="GstMpegtsTerrestrialDeliverySystemDescriptor.members"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="300px" class="struct_members_name">
+<col class="struct_members_description">
+<col width="200px" class="struct_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint32"><span class="type">guint32</span></a> <em class="structfield"><code><a name="GstMpegtsTerrestrialDeliverySystemDescriptor.frequency"></a>frequency</code></em>;</p></td>
+<td class="struct_member_description"><p>the frequency in Hz (Hertz)</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint32"><span class="type">guint32</span></a> <em class="structfield"><code><a name="GstMpegtsTerrestrialDeliverySystemDescriptor.bandwidth"></a>bandwidth</code></em>;</p></td>
+<td class="struct_member_description"><p>the bandwidth in Hz (Hertz)</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> <em class="structfield"><code><a name="GstMpegtsTerrestrialDeliverySystemDescriptor.priority"></a>priority</code></em>;</p></td>
+<td class="struct_member_description"><p><a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> High Priority <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> Low Priority</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> <em class="structfield"><code><a name="GstMpegtsTerrestrialDeliverySystemDescriptor.time-slicing"></a>time_slicing</code></em>;</p></td>
+<td class="struct_member_description"><p><a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> no time slicing <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> time slicing</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> <em class="structfield"><code><a name="GstMpegtsTerrestrialDeliverySystemDescriptor.mpe-fec"></a>mpe_fec</code></em>;</p></td>
+<td class="struct_member_description"><p><a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> no mpe-fec is used <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> mpe-fec is use</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsModulationType" title="enum GstMpegtsModulationType"><span class="type">GstMpegtsModulationType</span></a> <em class="structfield"><code><a name="GstMpegtsTerrestrialDeliverySystemDescriptor.constellation"></a>constellation</code></em>;</p></td>
+<td class="struct_member_description"><p>the constallation</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsTerrestrialHierarchy" title="enum GstMpegtsTerrestrialHierarchy"><span class="type">GstMpegtsTerrestrialHierarchy</span></a> <em class="structfield"><code><a name="GstMpegtsTerrestrialDeliverySystemDescriptor.hierarchy"></a>hierarchy</code></em>;</p></td>
+<td class="struct_member_description"><p>the hierarchy</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsDVBCodeRate" title="enum GstMpegtsDVBCodeRate"><span class="type">GstMpegtsDVBCodeRate</span></a> <em class="structfield"><code><a name="GstMpegtsTerrestrialDeliverySystemDescriptor.code-rate-hp"></a>code_rate_hp</code></em>;</p></td>
+<td class="struct_member_description"> </td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsDVBCodeRate" title="enum GstMpegtsDVBCodeRate"><span class="type">GstMpegtsDVBCodeRate</span></a> <em class="structfield"><code><a name="GstMpegtsTerrestrialDeliverySystemDescriptor.code-rate-lp"></a>code_rate_lp</code></em>;</p></td>
+<td class="struct_member_description"> </td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsTerrestrialGuardInterval" title="enum GstMpegtsTerrestrialGuardInterval"><span class="type">GstMpegtsTerrestrialGuardInterval</span></a> <em class="structfield"><code><a name="GstMpegtsTerrestrialDeliverySystemDescriptor.guard-interval"></a>guard_interval</code></em>;</p></td>
+<td class="struct_member_description"> </td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsTerrestrialTransmissionMode" title="enum GstMpegtsTerrestrialTransmissionMode"><span class="type">GstMpegtsTerrestrialTransmissionMode</span></a> <em class="structfield"><code><a name="GstMpegtsTerrestrialDeliverySystemDescriptor.transmission-mode"></a>transmission_mode</code></em>;</p></td>
+<td class="struct_member_description"> </td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> <em class="structfield"><code><a name="GstMpegtsTerrestrialDeliverySystemDescriptor.other-frequency"></a>other_frequency</code></em>;</p></td>
+<td class="struct_member_description"><p><a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> more frequency are use, else not</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstMpegtsTerrestrialTransmissionMode"></a><h3>enum GstMpegtsTerrestrialTransmissionMode</h3>
+<div class="refsect3">
+<a name="GstMpegtsTerrestrialTransmissionMode.members"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="300px" class="enum_members_name">
+<col class="enum_members_description">
+<col width="200px" class="enum_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-TRANSMISSION-MODE-2K:CAPS"></a>GST_MPEGTS_TRANSMISSION_MODE_2K</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-TRANSMISSION-MODE-8K:CAPS"></a>GST_MPEGTS_TRANSMISSION_MODE_8K</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-TRANSMISSION-MODE-AUTO:CAPS"></a>GST_MPEGTS_TRANSMISSION_MODE_AUTO</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-TRANSMISSION-MODE-4K:CAPS"></a>GST_MPEGTS_TRANSMISSION_MODE_4K</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-TRANSMISSION-MODE-1K:CAPS"></a>GST_MPEGTS_TRANSMISSION_MODE_1K</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-TRANSMISSION-MODE-16K:CAPS"></a>GST_MPEGTS_TRANSMISSION_MODE_16K</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-TRANSMISSION-MODE-32K:CAPS"></a>GST_MPEGTS_TRANSMISSION_MODE_32K</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-TRANSMISSION-MODE-C1:CAPS"></a>GST_MPEGTS_TRANSMISSION_MODE_C1</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-TRANSMISSION-MODE-C3780:CAPS"></a>GST_MPEGTS_TRANSMISSION_MODE_C3780</p></td>
+<td> </td>
+<td> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstMpegtsTerrestrialGuardInterval"></a><h3>enum GstMpegtsTerrestrialGuardInterval</h3>
+<div class="refsect3">
+<a name="GstMpegtsTerrestrialGuardInterval.members"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="300px" class="enum_members_name">
+<col class="enum_members_description">
+<col width="200px" class="enum_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-GUARD-INTERVAL-1-32:CAPS"></a>GST_MPEGTS_GUARD_INTERVAL_1_32</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-GUARD-INTERVAL-1-16:CAPS"></a>GST_MPEGTS_GUARD_INTERVAL_1_16</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-GUARD-INTERVAL-1-8:CAPS"></a>GST_MPEGTS_GUARD_INTERVAL_1_8</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-GUARD-INTERVAL-1-4:CAPS"></a>GST_MPEGTS_GUARD_INTERVAL_1_4</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-GUARD-INTERVAL-AUTO:CAPS"></a>GST_MPEGTS_GUARD_INTERVAL_AUTO</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-GUARD-INTERVAL-1-128:CAPS"></a>GST_MPEGTS_GUARD_INTERVAL_1_128</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-GUARD-INTERVAL-19-128:CAPS"></a>GST_MPEGTS_GUARD_INTERVAL_19_128</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-GUARD-INTERVAL-19-256:CAPS"></a>GST_MPEGTS_GUARD_INTERVAL_19_256</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-GUARD-INTERVAL-PN420:CAPS"></a>GST_MPEGTS_GUARD_INTERVAL_PN420</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-GUARD-INTERVAL-PN595:CAPS"></a>GST_MPEGTS_GUARD_INTERVAL_PN595</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-GUARD-INTERVAL-PN945:CAPS"></a>GST_MPEGTS_GUARD_INTERVAL_PN945</p></td>
+<td> </td>
+<td> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstMpegtsTerrestrialHierarchy"></a><h3>enum GstMpegtsTerrestrialHierarchy</h3>
+<div class="refsect3">
+<a name="GstMpegtsTerrestrialHierarchy.members"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="300px" class="enum_members_name">
+<col class="enum_members_description">
+<col width="200px" class="enum_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-HIERARCHY-NONE:CAPS"></a>GST_MPEGTS_HIERARCHY_NONE</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-HIERARCHY-1:CAPS"></a>GST_MPEGTS_HIERARCHY_1</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-HIERARCHY-2:CAPS"></a>GST_MPEGTS_HIERARCHY_2</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-HIERARCHY-4:CAPS"></a>GST_MPEGTS_HIERARCHY_4</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-HIERARCHY-AUTO:CAPS"></a>GST_MPEGTS_HIERARCHY_AUTO</p></td>
+<td> </td>
+<td> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstMpegtsT2DeliverySystemCellExtension"></a><h3>struct GstMpegtsT2DeliverySystemCellExtension</h3>
+<pre class="programlisting">struct GstMpegtsT2DeliverySystemCellExtension {
+ guint8 cell_id_extension;
+ guint32 transposer_frequency;
+};
+</pre>
+<div class="refsect3">
+<a name="GstMpegtsT2DeliverySystemCellExtension.members"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="300px" class="struct_members_name">
+<col class="struct_members_description">
+<col width="200px" class="struct_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstMpegtsT2DeliverySystemCellExtension.cell-id-extension"></a>cell_id_extension</code></em>;</p></td>
+<td class="struct_member_description"><p>id of the sub cell</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint32"><span class="type">guint32</span></a> <em class="structfield"><code><a name="GstMpegtsT2DeliverySystemCellExtension.transposer-frequency"></a>transposer_frequency</code></em>;</p></td>
+<td class="struct_member_description"><p>centre frequency of the sub cell in Hz</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstMpegtsT2DeliverySystemCell"></a><h3>struct GstMpegtsT2DeliverySystemCell</h3>
+<pre class="programlisting">struct GstMpegtsT2DeliverySystemCell {
+ guint16 cell_id;
+ GArray *centre_frequencies;
+ GPtrArray *sub_cells;
+};
+</pre>
+<div class="refsect3">
+<a name="GstMpegtsT2DeliverySystemCell.members"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="300px" class="struct_members_name">
+<col class="struct_members_description">
+<col width="200px" class="struct_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint16"><span class="type">guint16</span></a> <em class="structfield"><code><a name="GstMpegtsT2DeliverySystemCell.cell-id"></a>cell_id</code></em>;</p></td>
+<td class="struct_member_description"><p>id of the cell</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Arrays.html#GArray"><span class="type">GArray</span></a> *<em class="structfield"><code><a name="GstMpegtsT2DeliverySystemCell.centre-frequencies"></a>centre_frequencies</code></em>;</p></td>
+<td class="struct_member_description"><p> centre frequencies in Hz. </p></td>
+<td class="struct_member_annotations"><span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> guint32]</span></td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a> *<em class="structfield"><code><a name="GstMpegtsT2DeliverySystemCell.sub-cells"></a>sub_cells</code></em>;</p></td>
+<td class="struct_member_description"><p>. </p></td>
+<td class="struct_member_annotations"><span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> GstMpegtsT2DeliverySystemCellExtension]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstMpegtsT2DeliverySystemDescriptor"></a><h3>struct GstMpegtsT2DeliverySystemDescriptor</h3>
+<pre class="programlisting">struct GstMpegtsT2DeliverySystemDescriptor {
+ guint8 plp_id;
+ guint16 t2_system_id;
+ /* FIXME: */
+ guint8 siso_miso;
+ guint32 bandwidth;
+ GstMpegtsTerrestrialGuardInterval guard_interval;
+ GstMpegtsTerrestrialTransmissionMode transmission_mode;
+ gboolean other_frequency;
+ gboolean tfs;
+ GPtrArray *cells;
+};
+</pre>
+<p>describe DVB-T2 transmissions according to EN 302 755</p>
+<div class="refsect3">
+<a name="GstMpegtsT2DeliverySystemDescriptor.members"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="300px" class="struct_members_name">
+<col class="struct_members_description">
+<col width="200px" class="struct_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstMpegtsT2DeliverySystemDescriptor.plp-id"></a>plp_id</code></em>;</p></td>
+<td class="struct_member_description"> </td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint16"><span class="type">guint16</span></a> <em class="structfield"><code><a name="GstMpegtsT2DeliverySystemDescriptor.t2-system-id"></a>t2_system_id</code></em>;</p></td>
+<td class="struct_member_description"> </td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstMpegtsT2DeliverySystemDescriptor.siso-miso"></a>siso_miso</code></em>;</p></td>
+<td class="struct_member_description"> </td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint32"><span class="type">guint32</span></a> <em class="structfield"><code><a name="GstMpegtsT2DeliverySystemDescriptor.bandwidth"></a>bandwidth</code></em>;</p></td>
+<td class="struct_member_description"> </td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsTerrestrialGuardInterval" title="enum GstMpegtsTerrestrialGuardInterval"><span class="type">GstMpegtsTerrestrialGuardInterval</span></a> <em class="structfield"><code><a name="GstMpegtsT2DeliverySystemDescriptor.guard-interval"></a>guard_interval</code></em>;</p></td>
+<td class="struct_member_description"> </td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsTerrestrialTransmissionMode" title="enum GstMpegtsTerrestrialTransmissionMode"><span class="type">GstMpegtsTerrestrialTransmissionMode</span></a> <em class="structfield"><code><a name="GstMpegtsT2DeliverySystemDescriptor.transmission-mode"></a>transmission_mode</code></em>;</p></td>
+<td class="struct_member_description"> </td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> <em class="structfield"><code><a name="GstMpegtsT2DeliverySystemDescriptor.other-frequency"></a>other_frequency</code></em>;</p></td>
+<td class="struct_member_description"> </td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> <em class="structfield"><code><a name="GstMpegtsT2DeliverySystemDescriptor.tfs"></a>tfs</code></em>;</p></td>
+<td class="struct_member_description"> </td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a> *<em class="structfield"><code><a name="GstMpegtsT2DeliverySystemDescriptor.cells"></a>cells</code></em>;</p></td>
+<td class="struct_member_description"><p>. </p></td>
+<td class="struct_member_annotations"><span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> GstMpegtsT2DeliverySystemCell]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstMpegtsDVBServiceType"></a><h3>enum GstMpegtsDVBServiceType</h3>
+<p>The type of service of a channel.</p>
+<p>As specified in Table 87 of ETSI EN 300 468 v1.13.1</p>
+<div class="refsect3">
+<a name="GstMpegtsDVBServiceType.members"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="300px" class="enum_members_name">
+<col class="enum_members_description">
+<col width="200px" class="enum_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="enum_member_name"><p><a name="GST-DVB-SERVICE-RESERVED-00:CAPS"></a>GST_DVB_SERVICE_RESERVED_00</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-DVB-SERVICE-DIGITAL-TELEVISION:CAPS"></a>GST_DVB_SERVICE_DIGITAL_TELEVISION</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-DVB-SERVICE-DIGITAL-RADIO-SOUND:CAPS"></a>GST_DVB_SERVICE_DIGITAL_RADIO_SOUND</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-DVB-SERVICE-TELETEXT:CAPS"></a>GST_DVB_SERVICE_TELETEXT</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-DVB-SERVICE-NVOD-REFERENCE:CAPS"></a>GST_DVB_SERVICE_NVOD_REFERENCE</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-DVB-SERVICE-NVOD-TIME-SHIFTED:CAPS"></a>GST_DVB_SERVICE_NVOD_TIME_SHIFTED</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-DVB-SERVICE-MOSAIC:CAPS"></a>GST_DVB_SERVICE_MOSAIC</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-DVB-SERVICE-FM-RADIO:CAPS"></a>GST_DVB_SERVICE_FM_RADIO</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-DVB-SERVICE-DVB-SRM:CAPS"></a>GST_DVB_SERVICE_DVB_SRM</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-DVB-SERVICE-RESERVED-09:CAPS"></a>GST_DVB_SERVICE_RESERVED_09</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-DVB-SERVICE-ADVANCED-CODEC-DIGITAL-RADIO-SOUND:CAPS"></a>GST_DVB_SERVICE_ADVANCED_CODEC_DIGITAL_RADIO_SOUND</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-DVB-SERVICE-ADVANCED-CODEC-MOSAIC:CAPS"></a>GST_DVB_SERVICE_ADVANCED_CODEC_MOSAIC</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-DVB-SERVICE-DATA-BROADCAST:CAPS"></a>GST_DVB_SERVICE_DATA_BROADCAST</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-DVB-SERVICE-RESERVED-0D-COMMON-INTERFACE:CAPS"></a>GST_DVB_SERVICE_RESERVED_0D_COMMON_INTERFACE</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-DVB-SERVICE-RCS-MAP:CAPS"></a>GST_DVB_SERVICE_RCS_MAP</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-DVB-SERVICE-RCS-FLS:CAPS"></a>GST_DVB_SERVICE_RCS_FLS</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-DVB-SERVICE-DVB-MHP:CAPS"></a>GST_DVB_SERVICE_DVB_MHP</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-DVB-SERVICE-MPEG2-HD-DIGITAL-TELEVISION:CAPS"></a>GST_DVB_SERVICE_MPEG2_HD_DIGITAL_TELEVISION</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-DVB-SERVICE-ADVANCED-CODEC-SD-DIGITAL-TELEVISION:CAPS"></a>GST_DVB_SERVICE_ADVANCED_CODEC_SD_DIGITAL_TELEVISION</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-DVB-SERVICE-ADVANCED-CODEC-SD-NVOD-TIME-SHIFTED:CAPS"></a>GST_DVB_SERVICE_ADVANCED_CODEC_SD_NVOD_TIME_SHIFTED</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-DVB-SERVICE-ADVANCED-CODEC-SD-NVOD-REFERENCE:CAPS"></a>GST_DVB_SERVICE_ADVANCED_CODEC_SD_NVOD_REFERENCE</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-DVB-SERVICE-ADVANCED-CODEC-HD-DIGITAL-TELEVISION:CAPS"></a>GST_DVB_SERVICE_ADVANCED_CODEC_HD_DIGITAL_TELEVISION</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-DVB-SERVICE-ADVANCED-CODEC-HD-NVOD-TIME-SHIFTED:CAPS"></a>GST_DVB_SERVICE_ADVANCED_CODEC_HD_NVOD_TIME_SHIFTED</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-DVB-SERVICE-ADVANCED-CODEC-HD-NVOD-REFERENCE:CAPS"></a>GST_DVB_SERVICE_ADVANCED_CODEC_HD_NVOD_REFERENCE</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-DVB-SERVICE-ADVANCED-CODEC-STEREO-HD-DIGITAL-TELEVISION:CAPS"></a>GST_DVB_SERVICE_ADVANCED_CODEC_STEREO_HD_DIGITAL_TELEVISION</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-DVB-SERVICE-ADVANCED-CODEC-STEREO-HD-NVOD-TIME-SHIFTED:CAPS"></a>GST_DVB_SERVICE_ADVANCED_CODEC_STEREO_HD_NVOD_TIME_SHIFTED</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-DVB-SERVICE-ADVANCED-CODEC-STEREO-HD-NVOD-REFERENCE:CAPS"></a>GST_DVB_SERVICE_ADVANCED_CODEC_STEREO_HD_NVOD_REFERENCE</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-DVB-SERVICE-RESERVED-FF:CAPS"></a>GST_DVB_SERVICE_RESERVED_FF</p></td>
+<td> </td>
+<td> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstMpegtsDVBTeletextType"></a><h3>enum GstMpegtsDVBTeletextType</h3>
+<p>The type of teletext page.</p>
+<p>As specified in Table 100 of ETSI EN 300 468 v1.13.1</p>
+<div class="refsect3">
+<a name="GstMpegtsDVBTeletextType.members"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="300px" class="enum_members_name">
+<col class="enum_members_description">
+<col width="200px" class="enum_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="enum_member_name"><p><a name="INITIAL-PAGE:CAPS"></a>INITIAL_PAGE</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="SUBTITLE-PAGE:CAPS"></a>SUBTITLE_PAGE</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="ADDITIONAL-INFO-PAGE:CAPS"></a>ADDITIONAL_INFO_PAGE</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="PROGRAMME-SCHEDULE-PAGE:CAPS"></a>PROGRAMME_SCHEDULE_PAGE</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="HEARING-IMPAIRED-PAGE:CAPS"></a>HEARING_IMPAIRED_PAGE</p></td>
+<td> </td>
+<td> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstMpegtsDVBLinkageType"></a><h3>enum GstMpegtsDVBLinkageType</h3>
+<p>Linkage Type (EN 300 468 v.1.13.1)</p>
+<div class="refsect3">
+<a name="GstMpegtsDVBLinkageType.members"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="300px" class="enum_members_name">
+<col class="enum_members_description">
+<col width="200px" class="enum_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-DVB-LINKAGE-RESERVED-00:CAPS"></a>GST_MPEGTS_DVB_LINKAGE_RESERVED_00</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-DVB-LINKAGE-INFORMATION:CAPS"></a>GST_MPEGTS_DVB_LINKAGE_INFORMATION</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-DVB-LINKAGE-EPG:CAPS"></a>GST_MPEGTS_DVB_LINKAGE_EPG</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-DVB-LINKAGE-CA-REPLACEMENT:CAPS"></a>GST_MPEGTS_DVB_LINKAGE_CA_REPLACEMENT</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-DVB-LINKAGE-TS-CONTAINING-COMPLETE-SI:CAPS"></a>GST_MPEGTS_DVB_LINKAGE_TS_CONTAINING_COMPLETE_SI</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-DVB-LINKAGE-SERVICE-REPLACEMENT:CAPS"></a>GST_MPEGTS_DVB_LINKAGE_SERVICE_REPLACEMENT</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-DVB-LINKAGE-DATA-BROADCAST:CAPS"></a>GST_MPEGTS_DVB_LINKAGE_DATA_BROADCAST</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-DVB-LINKAGE-RCS-MAP:CAPS"></a>GST_MPEGTS_DVB_LINKAGE_RCS_MAP</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-DVB-LINKAGE-MOBILE-HAND-OVER:CAPS"></a>GST_MPEGTS_DVB_LINKAGE_MOBILE_HAND_OVER</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-DVB-LINKAGE-SYSTEM-SOFTWARE-UPDATE:CAPS"></a>GST_MPEGTS_DVB_LINKAGE_SYSTEM_SOFTWARE_UPDATE</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-DVB-LINKAGE-TS-CONTAINING-SSU:CAPS"></a>GST_MPEGTS_DVB_LINKAGE_TS_CONTAINING_SSU</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-DVB-LINKAGE-IP-MAC-NOTIFICATION:CAPS"></a>GST_MPEGTS_DVB_LINKAGE_IP_MAC_NOTIFICATION</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-DVB-LINKAGE-TS-CONTAINING-INT:CAPS"></a>GST_MPEGTS_DVB_LINKAGE_TS_CONTAINING_INT</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-DVB-LINKAGE-EVENT:CAPS"></a>GST_MPEGTS_DVB_LINKAGE_EVENT</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-DVB-LINKAGE-EXTENDED-EVENT:CAPS"></a>GST_MPEGTS_DVB_LINKAGE_EXTENDED_EVENT</p></td>
+<td> </td>
+<td> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstMpegtsDVBLinkageHandOverType"></a><h3>enum GstMpegtsDVBLinkageHandOverType</h3>
+<div class="refsect3">
+<a name="GstMpegtsDVBLinkageHandOverType.members"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="300px" class="enum_members_name">
+<col class="enum_members_description">
+<col width="200px" class="enum_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-DVB-LINKAGE-HAND-OVER-RESERVED:CAPS"></a>GST_MPEGTS_DVB_LINKAGE_HAND_OVER_RESERVED</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-DVB-LINKAGE-HAND-OVER-IDENTICAL:CAPS"></a>GST_MPEGTS_DVB_LINKAGE_HAND_OVER_IDENTICAL</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-DVB-LINKAGE-HAND-OVER-LOCAL-VARIATION:CAPS"></a>GST_MPEGTS_DVB_LINKAGE_HAND_OVER_LOCAL_VARIATION</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-DVB-LINKAGE-HAND-OVER-ASSOCIATED:CAPS"></a>GST_MPEGTS_DVB_LINKAGE_HAND_OVER_ASSOCIATED</p></td>
+<td> </td>
+<td> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstMpegtsDVBLinkageMobileHandOver"></a><h3>struct GstMpegtsDVBLinkageMobileHandOver</h3>
+<pre class="programlisting">struct GstMpegtsDVBLinkageMobileHandOver {
+ GstMpegtsDVBLinkageHandOverType hand_over_type;
+ /* 0 = NIT, 1 = SDT */
+ gboolean origin_type;
+ guint16 network_id;
+ guint16 initial_service_id;
+};
+</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstMpegtsDVBLinkageEvent"></a><h3>struct GstMpegtsDVBLinkageEvent</h3>
+<pre class="programlisting">struct GstMpegtsDVBLinkageEvent {
+ guint16 target_event_id;
+ gboolean target_listed;
+ gboolean event_simulcast;
+};
+</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstMpegtsDVBLinkageExtendedEvent"></a><h3>struct GstMpegtsDVBLinkageExtendedEvent</h3>
+<pre class="programlisting">struct GstMpegtsDVBLinkageExtendedEvent {
+ guint16 target_event_id;
+ gboolean target_listed;
+ gboolean event_simulcast;
+ /* FIXME: */
+ guint8 link_type;
+ /* FIXME: */
+ guint8 target_id_type;
+ gboolean original_network_id_flag;
+ gboolean service_id_flag;
+ /* if (target_id_type == 3) */
+ guint16 user_defined_id;
+ /* else */
+ guint16 target_transport_stream_id;
+ guint16 target_original_network_id;
+ guint16 target_service_id;
+};
+</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstMpegtsDVBLinkageDescriptor"></a><h3>struct GstMpegtsDVBLinkageDescriptor</h3>
+<pre class="programlisting">struct GstMpegtsDVBLinkageDescriptor {
+ guint16 transport_stream_id;
+ guint16 original_network_id;
+ guint16 service_id;
+ GstMpegtsDVBLinkageType linkage_type;
+ guint8 private_data_length;
+ guint8 *private_data_bytes;
+};
+</pre>
+<div class="refsect3">
+<a name="GstMpegtsDVBLinkageDescriptor.members"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="300px" class="struct_members_name">
+<col class="struct_members_description">
+<col width="200px" class="struct_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint16"><span class="type">guint16</span></a> <em class="structfield"><code><a name="GstMpegtsDVBLinkageDescriptor.transport-stream-id"></a>transport_stream_id</code></em>;</p></td>
+<td class="struct_member_description"><p>the transport id</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint16"><span class="type">guint16</span></a> <em class="structfield"><code><a name="GstMpegtsDVBLinkageDescriptor.original-network-id"></a>original_network_id</code></em>;</p></td>
+<td class="struct_member_description"><p>the original network id</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint16"><span class="type">guint16</span></a> <em class="structfield"><code><a name="GstMpegtsDVBLinkageDescriptor.service-id"></a>service_id</code></em>;</p></td>
+<td class="struct_member_description"><p>the service id</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsDVBLinkageType" title="enum GstMpegtsDVBLinkageType"><span class="type">GstMpegtsDVBLinkageType</span></a> <em class="structfield"><code><a name="GstMpegtsDVBLinkageDescriptor.linkage-type"></a>linkage_type</code></em>;</p></td>
+<td class="struct_member_description"><p>the type which <code class="literal">linkage_data</code> has</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstMpegtsDVBLinkageDescriptor.private-data-length"></a>private_data_length</code></em>;</p></td>
+<td class="struct_member_description"><p>the length for <code class="literal">private_data_bytes</code></p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> *<em class="structfield"><code><a name="GstMpegtsDVBLinkageDescriptor.private-data-bytes"></a>private_data_bytes</code></em>;</p></td>
+<td class="struct_member_description"><p>additional data bytes</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstMpegtsDataBroadcastDescriptor"></a><h3>struct GstMpegtsDataBroadcastDescriptor</h3>
+<pre class="programlisting">struct GstMpegtsDataBroadcastDescriptor {
+ guint16 data_broadcast_id;
+ guint8 component_tag;
+ guint8 length;
+ guint8 *selector_bytes;
+ gchar *language_code;
+ gchar *text;
+};
+</pre>
+<div class="refsect3">
+<a name="GstMpegtsDataBroadcastDescriptor.members"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="300px" class="struct_members_name">
+<col class="struct_members_description">
+<col width="200px" class="struct_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint16"><span class="type">guint16</span></a> <em class="structfield"><code><a name="GstMpegtsDataBroadcastDescriptor.data-broadcast-id"></a>data_broadcast_id</code></em>;</p></td>
+<td class="struct_member_description"><p>the data broadcast id</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstMpegtsDataBroadcastDescriptor.component-tag"></a>component_tag</code></em>;</p></td>
+<td class="struct_member_description"><p>the component tag</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstMpegtsDataBroadcastDescriptor.length"></a>length</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> *<em class="structfield"><code><a name="GstMpegtsDataBroadcastDescriptor.selector-bytes"></a>selector_bytes</code></em>;</p></td>
+<td class="struct_member_description"><p>the selector byte field</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *<em class="structfield"><code><a name="GstMpegtsDataBroadcastDescriptor.language-code"></a>language_code</code></em>;</p></td>
+<td class="struct_member_description"><p>language of <em class="parameter"><code>text</code></em>
+</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *<em class="structfield"><code><a name="GstMpegtsDataBroadcastDescriptor.text"></a>text</code></em>;</p></td>
+<td class="struct_member_description"><p>description of data broadcast</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstMpegtsDVBScramblingModeType"></a><h3>enum GstMpegtsDVBScramblingModeType</h3>
+<div class="refsect3">
+<a name="GstMpegtsDVBScramblingModeType.members"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="300px" class="enum_members_name">
+<col class="enum_members_description">
+<col width="200px" class="enum_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-DVB-SCRAMBLING-MODE-RESERVED:CAPS"></a>GST_MPEGTS_DVB_SCRAMBLING_MODE_RESERVED</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-DVB-SCRAMBLING-MODE-CSA1:CAPS"></a>GST_MPEGTS_DVB_SCRAMBLING_MODE_CSA1</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-DVB-SCRAMBLING-MODE-CSA2:CAPS"></a>GST_MPEGTS_DVB_SCRAMBLING_MODE_CSA2</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-DVB-SCRAMBLING-MODE-CSA3-STANDARD:CAPS"></a>GST_MPEGTS_DVB_SCRAMBLING_MODE_CSA3_STANDARD</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-DVB-SCRAMBLING-MODE-CSA3-MINIMAL-ENHANCED:CAPS"></a>GST_MPEGTS_DVB_SCRAMBLING_MODE_CSA3_MINIMAL_ENHANCED</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-DVB-SCRAMBLING-MODE-CSA3-FULL-ENHANCED:CAPS"></a>GST_MPEGTS_DVB_SCRAMBLING_MODE_CSA3_FULL_ENHANCED</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-DVB-SCRAMBLING-MODE-CISSA:CAPS"></a>GST_MPEGTS_DVB_SCRAMBLING_MODE_CISSA</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-DVB-SCRAMBLING-MODE-ATIS-0:CAPS"></a>GST_MPEGTS_DVB_SCRAMBLING_MODE_ATIS_0</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-DVB-SCRAMBLING-MODE-ATIS-F:CAPS"></a>GST_MPEGTS_DVB_SCRAMBLING_MODE_ATIS_F</p></td>
+<td> </td>
+<td> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstMpegtsDVBParentalRatingItem"></a><h3>struct GstMpegtsDVBParentalRatingItem</h3>
+<pre class="programlisting">struct GstMpegtsDVBParentalRatingItem {
+ gchar *country_code;
+ guint8 rating;
+};
+</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstMpegtsDVBServiceListItem"></a><h3>struct GstMpegtsDVBServiceListItem</h3>
+<pre class="programlisting">struct GstMpegtsDVBServiceListItem {
+ guint16 service_id;
+ GstMpegtsDVBServiceType type;
+};
+</pre>
+<div class="refsect3">
+<a name="GstMpegtsDVBServiceListItem.members"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="300px" class="struct_members_name">
+<col class="struct_members_description">
+<col width="200px" class="struct_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint16"><span class="type">guint16</span></a> <em class="structfield"><code><a name="GstMpegtsDVBServiceListItem.service-id"></a>service_id</code></em>;</p></td>
+<td class="struct_member_description"><p>the id of a service</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsDVBServiceType" title="enum GstMpegtsDVBServiceType"><span class="type">GstMpegtsDVBServiceType</span></a> <em class="structfield"><code><a name="GstMpegtsDVBServiceListItem.type"></a>type</code></em>;</p></td>
+<td class="struct_member_description"><p>the type of a service</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstMpegtsDvbMultilingualNetworkNameItem"></a><h3>struct GstMpegtsDvbMultilingualNetworkNameItem</h3>
+<pre class="programlisting">struct GstMpegtsDvbMultilingualNetworkNameItem {
+ gchar *language_code;
+ gchar *network_name;
+};
+</pre>
+<p>a multilingual network name entry</p>
+<div class="refsect3">
+<a name="GstMpegtsDvbMultilingualNetworkNameItem.members"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="300px" class="struct_members_name">
+<col class="struct_members_description">
+<col width="200px" class="struct_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *<em class="structfield"><code><a name="GstMpegtsDvbMultilingualNetworkNameItem.language-code"></a>language_code</code></em>;</p></td>
+<td class="struct_member_description"><p>the ISO 639 language code</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *<em class="structfield"><code><a name="GstMpegtsDvbMultilingualNetworkNameItem.network-name"></a>network_name</code></em>;</p></td>
+<td class="struct_member_description"><p>the network name</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstMpegtsDvbMultilingualBouquetNameItem"></a><h3>struct GstMpegtsDvbMultilingualBouquetNameItem</h3>
+<pre class="programlisting">struct GstMpegtsDvbMultilingualBouquetNameItem {
+ gchar *language_code;
+ gchar *bouquet_name;
+};
+</pre>
+<p>a multilingual bouquet name entry</p>
+<div class="refsect3">
+<a name="GstMpegtsDvbMultilingualBouquetNameItem.members"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="300px" class="struct_members_name">
+<col class="struct_members_description">
+<col width="200px" class="struct_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *<em class="structfield"><code><a name="GstMpegtsDvbMultilingualBouquetNameItem.language-code"></a>language_code</code></em>;</p></td>
+<td class="struct_member_description"><p>the ISO 639 language code</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *<em class="structfield"><code><a name="GstMpegtsDvbMultilingualBouquetNameItem.bouquet-name"></a>bouquet_name</code></em>;</p></td>
+<td class="struct_member_description"><p>the bouquet name</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstMpegtsDvbMultilingualServiceNameItem"></a><h3>struct GstMpegtsDvbMultilingualServiceNameItem</h3>
+<pre class="programlisting">struct GstMpegtsDvbMultilingualServiceNameItem {
+ gchar *language_code;
+ gchar *provider_name;
+ gchar *service_name;
+};
+</pre>
+<p>a multilingual service name entry</p>
+<div class="refsect3">
+<a name="GstMpegtsDvbMultilingualServiceNameItem.members"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="300px" class="struct_members_name">
+<col class="struct_members_description">
+<col width="200px" class="struct_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *<em class="structfield"><code><a name="GstMpegtsDvbMultilingualServiceNameItem.language-code"></a>language_code</code></em>;</p></td>
+<td class="struct_member_description"><p>the ISO 639 language code</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *<em class="structfield"><code><a name="GstMpegtsDvbMultilingualServiceNameItem.provider-name"></a>provider_name</code></em>;</p></td>
+<td class="struct_member_description"><p>the provider name</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *<em class="structfield"><code><a name="GstMpegtsDvbMultilingualServiceNameItem.service-name"></a>service_name</code></em>;</p></td>
+<td class="struct_member_description"><p>the service name</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstMpegtsDvbMultilingualComponentItem"></a><h3>struct GstMpegtsDvbMultilingualComponentItem</h3>
+<pre class="programlisting">struct GstMpegtsDvbMultilingualComponentItem {
+ gchar *language_code;
+ gchar *description;
+};
+</pre>
+<div class="refsect3">
+<a name="GstMpegtsDvbMultilingualComponentItem.members"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="300px" class="struct_members_name">
+<col class="struct_members_description">
+<col width="200px" class="struct_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *<em class="structfield"><code><a name="GstMpegtsDvbMultilingualComponentItem.language-code"></a>language_code</code></em>;</p></td>
+<td class="struct_member_description"><p>the ISO 639 language code</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *<em class="structfield"><code><a name="GstMpegtsDvbMultilingualComponentItem.description"></a>description</code></em>;</p></td>
+<td class="struct_member_description"><p>the component description</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>Generated by GTK-Doc V1.25</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html b/docs/libs/html/gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html
new file mode 100644
index 0000000..10563a6
--- /dev/null
+++ b/docs/libs/html/gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html
@@ -0,0 +1,1131 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>DVB variants of MPEG-TS sections: GStreamer Bad Plugins 1.0 Library Reference Manual</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
+<link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Library Reference Manual">
+<link rel="up" href="mpegts.html" title="Mpeg TS helper library">
+<link rel="prev" href="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html" title="ATSC variants of MPEG-TS sections">
+<link rel="next" href="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-descriptors.html" title="ATSC variants of MPEG-TS descriptors">
+<meta name="generator" content="GTK-Doc V1.25 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
+<td width="100%" align="left" class="shortcuts">
+<a href="#" class="shortcut">Top</a><span id="nav_description"> <span class="dim">|</span>
+ <a href="#gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.description" class="shortcut">Description</a></span><span id="nav_hierarchy"> <span class="dim">|</span>
+ <a href="#gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.object-hierarchy" class="shortcut">Object Hierarchy</a></span>
+</td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
+<td><a accesskey="u" href="mpegts.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
+<td><a accesskey="p" href="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-descriptors.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.top_of_page"></a>DVB variants of MPEG-TS sections</span></h2>
+<p>DVB variants of MPEG-TS sections — Sections for the various DVB specifications</p>
+</td>
+<td class="gallery_image" valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.functions"></a><h2>Functions</h2>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="functions_return">
+<col class="functions_name">
+</colgroup>
+<tbody>
+<tr>
+<td class="function_type">const <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#GstMpegtsNIT" title="struct GstMpegtsNIT"><span class="returnvalue">GstMpegtsNIT</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#gst-mpegts-section-get-nit" title="gst_mpegts_section_get_nit ()">gst_mpegts_section_get_nit</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#GstMpegtsNIT" title="struct GstMpegtsNIT"><span class="returnvalue">GstMpegtsNIT</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#gst-mpegts-nit-new" title="gst_mpegts_nit_new ()">gst_mpegts_nit_new</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#GstMpegtsNITStream" title="struct GstMpegtsNITStream"><span class="returnvalue">GstMpegtsNITStream</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#gst-mpegts-nit-stream-new" title="gst_mpegts_nit_stream_new ()">gst_mpegts_nit_stream_new</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsSection"><span class="returnvalue">GstMpegtsSection</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#gst-mpegts-section-from-nit" title="gst_mpegts_section_from_nit ()">gst_mpegts_section_from_nit</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">const <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#GstMpegtsBAT" title="struct GstMpegtsBAT"><span class="returnvalue">GstMpegtsBAT</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#gst-mpegts-section-get-bat" title="gst_mpegts_section_get_bat ()">gst_mpegts_section_get_bat</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">const <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#GstMpegtsSDT" title="struct GstMpegtsSDT"><span class="returnvalue">GstMpegtsSDT</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#gst-mpegts-section-get-sdt" title="gst_mpegts_section_get_sdt ()">gst_mpegts_section_get_sdt</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#GstMpegtsSDT" title="struct GstMpegtsSDT"><span class="returnvalue">GstMpegtsSDT</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#gst-mpegts-sdt-new" title="gst_mpegts_sdt_new ()">gst_mpegts_sdt_new</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#GstMpegtsSDTService" title="struct GstMpegtsSDTService"><span class="returnvalue">GstMpegtsSDTService</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#gst-mpegts-sdt-service-new" title="gst_mpegts_sdt_service_new ()">gst_mpegts_sdt_service_new</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsSection"><span class="returnvalue">GstMpegtsSection</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#gst-mpegts-section-from-sdt" title="gst_mpegts_section_from_sdt ()">gst_mpegts_section_from_sdt</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">const <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#GstMpegtsEIT" title="struct GstMpegtsEIT"><span class="returnvalue">GstMpegtsEIT</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#gst-mpegts-section-get-eit" title="gst_mpegts_section_get_eit ()">gst_mpegts_section_get_eit</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="/usr/share/gtk-doc/html/gstreamer-1.0GstDateTime.html#GstDateTime-struct"><span class="returnvalue">GstDateTime</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#gst-mpegts-section-get-tdt" title="gst_mpegts_section_get_tdt ()">gst_mpegts_section_get_tdt</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">const <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#GstMpegtsTOT" title="struct GstMpegtsTOT"><span class="returnvalue">GstMpegtsTOT</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#gst-mpegts-section-get-tot" title="gst_mpegts_section_get_tot ()">gst_mpegts_section_get_tot</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.other"></a><h2>Types and Values</h2>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="name">
+<col class="description">
+</colgroup>
+<tbody>
+<tr>
+<td class="datatype_keyword">enum</td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#GstMpegtsSectionDVBTableID" title="enum GstMpegtsSectionDVBTableID">GstMpegtsSectionDVBTableID</a></td>
+</tr>
+<tr>
+<td class="datatype_keyword">struct</td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#GstMpegtsNIT" title="struct GstMpegtsNIT">GstMpegtsNIT</a></td>
+</tr>
+<tr>
+<td class="datatype_keyword">struct</td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#GstMpegtsNITStream" title="struct GstMpegtsNITStream">GstMpegtsNITStream</a></td>
+</tr>
+<tr>
+<td class="datatype_keyword">struct</td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#GstMpegtsBAT" title="struct GstMpegtsBAT">GstMpegtsBAT</a></td>
+</tr>
+<tr>
+<td class="datatype_keyword">struct</td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#GstMpegtsBATStream" title="struct GstMpegtsBATStream">GstMpegtsBATStream</a></td>
+</tr>
+<tr>
+<td class="datatype_keyword">struct</td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#GstMpegtsSDT" title="struct GstMpegtsSDT">GstMpegtsSDT</a></td>
+</tr>
+<tr>
+<td class="datatype_keyword">struct</td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#GstMpegtsSDTService" title="struct GstMpegtsSDTService">GstMpegtsSDTService</a></td>
+</tr>
+<tr>
+<td class="datatype_keyword">struct</td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#GstMpegtsEIT" title="struct GstMpegtsEIT">GstMpegtsEIT</a></td>
+</tr>
+<tr>
+<td class="datatype_keyword">struct</td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#GstMpegtsEITEvent" title="struct GstMpegtsEITEvent">GstMpegtsEITEvent</a></td>
+</tr>
+<tr>
+<td class="datatype_keyword">enum</td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#GstMpegtsRunningStatus" title="enum GstMpegtsRunningStatus">GstMpegtsRunningStatus</a></td>
+</tr>
+<tr>
+<td class="datatype_keyword">struct</td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#GstMpegtsTOT" title="struct GstMpegtsTOT">GstMpegtsTOT</a></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="screen"> <a href="https://developer.gnome.org/gobject/unstable/gobject-Enumeration-and-Flag-Types.html">GEnum</a>
+ <span class="lineart">╰──</span> GstMpegtsRunningStatus
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.includes"></a><h2>Includes</h2>
+<pre class="synopsis">#include <gst/mpegts/mpegts.h>
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.description"></a><h2>Description</h2>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.functions_details"></a><h2>Functions</h2>
+<div class="refsect2">
+<a name="gst-mpegts-section-get-nit"></a><h3>gst_mpegts_section_get_nit ()</h3>
+<pre class="programlisting">const <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#GstMpegtsNIT" title="struct GstMpegtsNIT"><span class="returnvalue">GstMpegtsNIT</span></a> *
+gst_mpegts_section_get_nit (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsSection"><span class="type">GstMpegtsSection</span></a> *section</code></em>);</pre>
+<p>Returns the <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#GstMpegtsNIT" title="struct GstMpegtsNIT"><span class="type">GstMpegtsNIT</span></a> contained in the <em class="parameter"><code>section</code></em>
+.</p>
+<div class="refsect3">
+<a name="gst-mpegts-section-get-nit.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>section</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsSection"><span class="type">GstMpegtsSection</span></a> of type <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GST-MPEGTS-SECTION-NIT:CAPS"><code class="literal">GST_MPEGTS_SECTION_NIT</code></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-mpegts-section-get-nit.returns"></a><h4>Returns</h4>
+<p> The <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#GstMpegtsNIT" title="struct GstMpegtsNIT"><span class="type">GstMpegtsNIT</span></a> contained in the section, or <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if an error
+happened.</p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-mpegts-nit-new"></a><h3>gst_mpegts_nit_new ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#GstMpegtsNIT" title="struct GstMpegtsNIT"><span class="returnvalue">GstMpegtsNIT</span></a> *
+gst_mpegts_nit_new (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<p>Allocates and initializes a <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#GstMpegtsNIT" title="struct GstMpegtsNIT"><span class="type">GstMpegtsNIT</span></a>.</p>
+<div class="refsect3">
+<a name="gst-mpegts-nit-new.returns"></a><h4>Returns</h4>
+<p> A newly allocated <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#GstMpegtsNIT" title="struct GstMpegtsNIT"><span class="type">GstMpegtsNIT</span></a>. </p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-mpegts-nit-stream-new"></a><h3>gst_mpegts_nit_stream_new ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#GstMpegtsNITStream" title="struct GstMpegtsNITStream"><span class="returnvalue">GstMpegtsNITStream</span></a> *
+gst_mpegts_nit_stream_new (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<p>Allocates and initializes a <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#GstMpegtsNITStream" title="struct GstMpegtsNITStream"><span class="type">GstMpegtsNITStream</span></a></p>
+<div class="refsect3">
+<a name="gst-mpegts-nit-stream-new.returns"></a><h4>Returns</h4>
+<p> A newly allocated <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#GstMpegtsNITStream" title="struct GstMpegtsNITStream"><span class="type">GstMpegtsNITStream</span></a>. </p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-mpegts-section-from-nit"></a><h3>gst_mpegts_section_from_nit ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsSection"><span class="returnvalue">GstMpegtsSection</span></a> *
+gst_mpegts_section_from_nit (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#GstMpegtsNIT" title="struct GstMpegtsNIT"><span class="type">GstMpegtsNIT</span></a> *nit</code></em>);</pre>
+<p>Ownership of <em class="parameter"><code>nit</code></em>
+ is taken. The data in <em class="parameter"><code>nit</code></em>
+ is managed by the <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsSection"><span class="type">GstMpegtsSection</span></a></p>
+<div class="refsect3">
+<a name="gst-mpegts-section-from-nit.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>nit</p></td>
+<td class="parameter_description"><p> a <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#GstMpegtsNIT" title="struct GstMpegtsNIT"><span class="type">GstMpegtsNIT</span></a> to create the <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsSection"><span class="type">GstMpegtsSection</span></a> from. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-mpegts-section-from-nit.returns"></a><h4>Returns</h4>
+<p> the <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsSection"><span class="type">GstMpegtsSection</span></a>. </p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-mpegts-section-get-bat"></a><h3>gst_mpegts_section_get_bat ()</h3>
+<pre class="programlisting">const <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#GstMpegtsBAT" title="struct GstMpegtsBAT"><span class="returnvalue">GstMpegtsBAT</span></a> *
+gst_mpegts_section_get_bat (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsSection"><span class="type">GstMpegtsSection</span></a> *section</code></em>);</pre>
+<p>Returns the <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#GstMpegtsBAT" title="struct GstMpegtsBAT"><span class="type">GstMpegtsBAT</span></a> contained in the <em class="parameter"><code>section</code></em>
+.</p>
+<div class="refsect3">
+<a name="gst-mpegts-section-get-bat.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>section</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsSection"><span class="type">GstMpegtsSection</span></a> of type <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GST-MPEGTS-SECTION-BAT:CAPS"><code class="literal">GST_MPEGTS_SECTION_BAT</code></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-mpegts-section-get-bat.returns"></a><h4>Returns</h4>
+<p> The <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#GstMpegtsBAT" title="struct GstMpegtsBAT"><span class="type">GstMpegtsBAT</span></a> contained in the section, or <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if an error
+happened.</p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-mpegts-section-get-sdt"></a><h3>gst_mpegts_section_get_sdt ()</h3>
+<pre class="programlisting">const <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#GstMpegtsSDT" title="struct GstMpegtsSDT"><span class="returnvalue">GstMpegtsSDT</span></a> *
+gst_mpegts_section_get_sdt (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsSection"><span class="type">GstMpegtsSection</span></a> *section</code></em>);</pre>
+<p>Returns the <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#GstMpegtsSDT" title="struct GstMpegtsSDT"><span class="type">GstMpegtsSDT</span></a> contained in the <em class="parameter"><code>section</code></em>
+.</p>
+<div class="refsect3">
+<a name="gst-mpegts-section-get-sdt.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>section</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsSection"><span class="type">GstMpegtsSection</span></a> of type <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GST-MPEGTS-SECTION-SDT:CAPS"><code class="literal">GST_MPEGTS_SECTION_SDT</code></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-mpegts-section-get-sdt.returns"></a><h4>Returns</h4>
+<p> The <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#GstMpegtsSDT" title="struct GstMpegtsSDT"><span class="type">GstMpegtsSDT</span></a> contained in the section, or <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if an error
+happened.</p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-mpegts-sdt-new"></a><h3>gst_mpegts_sdt_new ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#GstMpegtsSDT" title="struct GstMpegtsSDT"><span class="returnvalue">GstMpegtsSDT</span></a> *
+gst_mpegts_sdt_new (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<p>Allocates and initializes a <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#GstMpegtsSDT" title="struct GstMpegtsSDT"><span class="type">GstMpegtsSDT</span></a>.</p>
+<div class="refsect3">
+<a name="gst-mpegts-sdt-new.returns"></a><h4>Returns</h4>
+<p> A newly allocated <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#GstMpegtsSDT" title="struct GstMpegtsSDT"><span class="type">GstMpegtsSDT</span></a>. </p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-mpegts-sdt-service-new"></a><h3>gst_mpegts_sdt_service_new ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#GstMpegtsSDTService" title="struct GstMpegtsSDTService"><span class="returnvalue">GstMpegtsSDTService</span></a> *
+gst_mpegts_sdt_service_new (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<p>Allocates and initializes a <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#GstMpegtsSDTService" title="struct GstMpegtsSDTService"><span class="type">GstMpegtsSDTService</span></a>.</p>
+<div class="refsect3">
+<a name="gst-mpegts-sdt-service-new.returns"></a><h4>Returns</h4>
+<p> A newly allocated <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#GstMpegtsSDTService" title="struct GstMpegtsSDTService"><span class="type">GstMpegtsSDTService</span></a>. </p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-mpegts-section-from-sdt"></a><h3>gst_mpegts_section_from_sdt ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsSection"><span class="returnvalue">GstMpegtsSection</span></a> *
+gst_mpegts_section_from_sdt (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#GstMpegtsSDT" title="struct GstMpegtsSDT"><span class="type">GstMpegtsSDT</span></a> *sdt</code></em>);</pre>
+<p>Ownership of <em class="parameter"><code>sdt</code></em>
+ is taken. The data in <em class="parameter"><code>sdt</code></em>
+ is managed by the <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsSection"><span class="type">GstMpegtsSection</span></a></p>
+<div class="refsect3">
+<a name="gst-mpegts-section-from-sdt.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>sdt</p></td>
+<td class="parameter_description"><p> a <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#GstMpegtsSDT" title="struct GstMpegtsSDT"><span class="type">GstMpegtsSDT</span></a> to create the <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsSection"><span class="type">GstMpegtsSection</span></a> from. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-mpegts-section-from-sdt.returns"></a><h4>Returns</h4>
+<p> the <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsSection"><span class="type">GstMpegtsSection</span></a>. </p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-mpegts-section-get-eit"></a><h3>gst_mpegts_section_get_eit ()</h3>
+<pre class="programlisting">const <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#GstMpegtsEIT" title="struct GstMpegtsEIT"><span class="returnvalue">GstMpegtsEIT</span></a> *
+gst_mpegts_section_get_eit (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsSection"><span class="type">GstMpegtsSection</span></a> *section</code></em>);</pre>
+<p>Returns the <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#GstMpegtsEIT" title="struct GstMpegtsEIT"><span class="type">GstMpegtsEIT</span></a> contained in the <em class="parameter"><code>section</code></em>
+.</p>
+<div class="refsect3">
+<a name="gst-mpegts-section-get-eit.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>section</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsSection"><span class="type">GstMpegtsSection</span></a> of type <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GST-MPEGTS-SECTION-EIT:CAPS"><code class="literal">GST_MPEGTS_SECTION_EIT</code></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-mpegts-section-get-eit.returns"></a><h4>Returns</h4>
+<p> The <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#GstMpegtsEIT" title="struct GstMpegtsEIT"><span class="type">GstMpegtsEIT</span></a> contained in the section, or <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if an error
+happened.</p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-mpegts-section-get-tdt"></a><h3>gst_mpegts_section_get_tdt ()</h3>
+<pre class="programlisting"><a href="/usr/share/gtk-doc/html/gstreamer-1.0GstDateTime.html#GstDateTime-struct"><span class="returnvalue">GstDateTime</span></a> *
+gst_mpegts_section_get_tdt (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsSection"><span class="type">GstMpegtsSection</span></a> *section</code></em>);</pre>
+<p>Returns the <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstDateTime.html#GstDateTime-struct"><span class="type">GstDateTime</span></a> of the TDT</p>
+<div class="refsect3">
+<a name="gst-mpegts-section-get-tdt.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>section</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsSection"><span class="type">GstMpegtsSection</span></a> of type <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GST-MPEGTS-SECTION-TDT:CAPS"><code class="literal">GST_MPEGTS_SECTION_TDT</code></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-mpegts-section-get-tdt.returns"></a><h4>Returns</h4>
+<p> The <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstDateTime.html#GstDateTime-struct"><span class="type">GstDateTime</span></a> contained in the section, or <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>
+if an error happened. Release with <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstDateTime.html#gst-date-time-unref"><span class="type">gst_date_time_unref</span></a> when done.</p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-mpegts-section-get-tot"></a><h3>gst_mpegts_section_get_tot ()</h3>
+<pre class="programlisting">const <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#GstMpegtsTOT" title="struct GstMpegtsTOT"><span class="returnvalue">GstMpegtsTOT</span></a> *
+gst_mpegts_section_get_tot (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsSection"><span class="type">GstMpegtsSection</span></a> *section</code></em>);</pre>
+<p>Returns the <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#GstMpegtsTOT" title="struct GstMpegtsTOT"><span class="type">GstMpegtsTOT</span></a> contained in the <em class="parameter"><code>section</code></em>
+.</p>
+<div class="refsect3">
+<a name="gst-mpegts-section-get-tot.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>section</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsSection"><span class="type">GstMpegtsSection</span></a> of type <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GST-MPEGTS-SECTION-TOT:CAPS"><code class="literal">GST_MPEGTS_SECTION_TOT</code></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-mpegts-section-get-tot.returns"></a><h4>Returns</h4>
+<p> The <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#GstMpegtsTOT" title="struct GstMpegtsTOT"><span class="type">GstMpegtsTOT</span></a> contained in the section, or <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if an error
+happened.</p>
+</div>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.other_details"></a><h2>Types and Values</h2>
+<div class="refsect2">
+<a name="GstMpegtsSectionDVBTableID"></a><h3>enum GstMpegtsSectionDVBTableID</h3>
+<p>Values for a <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsSection"><span class="type">GstMpegtsSection</span></a> table_id.</p>
+<p>These are the registered DVB table_id variants.</p>
+<p>see also: <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsSectionTableID" title="enum GstMpegtsSectionTableID"><span class="type">GstMpegtsSectionTableID</span></a></p>
+<div class="refsect3">
+<a name="GstMpegtsSectionDVBTableID.members"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="300px" class="enum_members_name">
+<col class="enum_members_description">
+<col width="200px" class="enum_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-TABLE-ID-NETWORK-INFORMATION-ACTUAL-NETWORK:CAPS"></a>GST_MTS_TABLE_ID_NETWORK_INFORMATION_ACTUAL_NETWORK</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-TABLE-ID-NETWORK-INFORMATION-OTHER-NETWORK:CAPS"></a>GST_MTS_TABLE_ID_NETWORK_INFORMATION_OTHER_NETWORK</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-TABLE-ID-SERVICE-DESCRIPTION-ACTUAL-TS:CAPS"></a>GST_MTS_TABLE_ID_SERVICE_DESCRIPTION_ACTUAL_TS</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-TABLE-ID-SERVICE-DESCRIPTION-OTHER-TS:CAPS"></a>GST_MTS_TABLE_ID_SERVICE_DESCRIPTION_OTHER_TS</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-TABLE-ID-BOUQUET-ASSOCIATION:CAPS"></a>GST_MTS_TABLE_ID_BOUQUET_ASSOCIATION</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-TABLE-ID-EVENT-INFORMATION-ACTUAL-TS-PRESENT:CAPS"></a>GST_MTS_TABLE_ID_EVENT_INFORMATION_ACTUAL_TS_PRESENT</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-TABLE-ID-EVENT-INFORMATION-OTHER-TS-PRESENT:CAPS"></a>GST_MTS_TABLE_ID_EVENT_INFORMATION_OTHER_TS_PRESENT</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-TABLE-ID-EVENT-INFORMATION-ACTUAL-TS-SCHEDULE-1:CAPS"></a>GST_MTS_TABLE_ID_EVENT_INFORMATION_ACTUAL_TS_SCHEDULE_1</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-TABLE-ID-EVENT-INFORMATION-ACTUAL-TS-SCHEDULE-N:CAPS"></a>GST_MTS_TABLE_ID_EVENT_INFORMATION_ACTUAL_TS_SCHEDULE_N</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-TABLE-ID-EVENT-INFORMATION-OTHER-TS-SCHEDULE-1:CAPS"></a>GST_MTS_TABLE_ID_EVENT_INFORMATION_OTHER_TS_SCHEDULE_1</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-TABLE-ID-EVENT-INFORMATION-OTHER-TS-SCHEDULE-N:CAPS"></a>GST_MTS_TABLE_ID_EVENT_INFORMATION_OTHER_TS_SCHEDULE_N</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-TABLE-ID-TIME-DATE:CAPS"></a>GST_MTS_TABLE_ID_TIME_DATE</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-TABLE-ID-RUNNING-STATUS:CAPS"></a>GST_MTS_TABLE_ID_RUNNING_STATUS</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-TABLE-ID-STUFFING:CAPS"></a>GST_MTS_TABLE_ID_STUFFING</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-TABLE-ID-TIME-OFFSET:CAPS"></a>GST_MTS_TABLE_ID_TIME_OFFSET</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-TABLE-ID-APPLICATION-INFORMATION-TABLE:CAPS"></a>GST_MTS_TABLE_ID_APPLICATION_INFORMATION_TABLE</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-TABLE-ID-CONTAINER:CAPS"></a>GST_MTS_TABLE_ID_CONTAINER</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-TABLE-ID-RELATED-CONTENT:CAPS"></a>GST_MTS_TABLE_ID_RELATED_CONTENT</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-TABLE-ID-CONTENT-IDENTIFIER:CAPS"></a>GST_MTS_TABLE_ID_CONTENT_IDENTIFIER</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-TABLE-ID-MPE-FEC:CAPS"></a>GST_MTS_TABLE_ID_MPE_FEC</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-TABLE-ID-RESOLUTION-NOTIFICATION:CAPS"></a>GST_MTS_TABLE_ID_RESOLUTION_NOTIFICATION</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-TABLE-ID-MPE-IFEC:CAPS"></a>GST_MTS_TABLE_ID_MPE_IFEC</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-TABLE-ID-DISCONTINUITY-INFORMATION:CAPS"></a>GST_MTS_TABLE_ID_DISCONTINUITY_INFORMATION</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-TABLE-ID-SELECTION-INFORMATION:CAPS"></a>GST_MTS_TABLE_ID_SELECTION_INFORMATION</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-TABLE-ID-CA-MESSAGE-ECM-0:CAPS"></a>GST_MTS_TABLE_ID_CA_MESSAGE_ECM_0</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-TABLE-ID-CA-MESSAGE-ECM-1:CAPS"></a>GST_MTS_TABLE_ID_CA_MESSAGE_ECM_1</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-TABLE-ID-CA-MESSAGE-SYSTEM-PRIVATE-1:CAPS"></a>GST_MTS_TABLE_ID_CA_MESSAGE_SYSTEM_PRIVATE_1</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-TABLE-ID-CA-MESSAGE-SYSTEM-PRIVATE-N:CAPS"></a>GST_MTS_TABLE_ID_CA_MESSAGE_SYSTEM_PRIVATE_N</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-TABLE-ID-SCT:CAPS"></a>GST_MTS_TABLE_ID_SCT</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-TABLE-ID-FCT:CAPS"></a>GST_MTS_TABLE_ID_FCT</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-TABLE-ID-TCT:CAPS"></a>GST_MTS_TABLE_ID_TCT</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-TABLE-ID-SPT:CAPS"></a>GST_MTS_TABLE_ID_SPT</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-TABLE-ID-CMT:CAPS"></a>GST_MTS_TABLE_ID_CMT</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-TABLE-ID-TBTP:CAPS"></a>GST_MTS_TABLE_ID_TBTP</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-TABLE-ID-PCR-PACKET-PAYLOAD:CAPS"></a>GST_MTS_TABLE_ID_PCR_PACKET_PAYLOAD</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-TABLE-ID-TRANSMISSION-MODE-SUPPORT-PAYLOAD:CAPS"></a>GST_MTS_TABLE_ID_TRANSMISSION_MODE_SUPPORT_PAYLOAD</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-TABLE-ID-TIM:CAPS"></a>GST_MTS_TABLE_ID_TIM</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MTS-TABLE-ID-LL-FEC-PARITY-DATA-TABLE:CAPS"></a>GST_MTS_TABLE_ID_LL_FEC_PARITY_DATA_TABLE</p></td>
+<td> </td>
+<td> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstMpegtsNIT"></a><h3>struct GstMpegtsNIT</h3>
+<pre class="programlisting">struct GstMpegtsNIT {
+ gboolean actual_network;
+ guint16 network_id;
+
+ GPtrArray *descriptors;
+
+ GPtrArray *streams;
+};
+</pre>
+<p>Network Information Table (ISO/IEC 13818-1 / EN 300 468)</p>
+<div class="refsect3">
+<a name="GstMpegtsNIT.members"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="300px" class="struct_members_name">
+<col class="struct_members_description">
+<col width="200px" class="struct_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> <em class="structfield"><code><a name="GstMpegtsNIT.actual-network"></a>actual_network</code></em>;</p></td>
+<td class="struct_member_description"><p>Whether this NIT corresponds to the actual stream</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint16"><span class="type">guint16</span></a> <em class="structfield"><code><a name="GstMpegtsNIT.network-id"></a>network_id</code></em>;</p></td>
+<td class="struct_member_description"><p>ID of the network that this NIT describes</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a> *<em class="structfield"><code><a name="GstMpegtsNIT.descriptors"></a>descriptors</code></em>;</p></td>
+<td class="struct_member_description"><p> the global descriptors. </p></td>
+<td class="struct_member_annotations"><span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> GstMpegtsDescriptor]</span></td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a> *<em class="structfield"><code><a name="GstMpegtsNIT.streams"></a>streams</code></em>;</p></td>
+<td class="struct_member_description"><p> the streams. </p></td>
+<td class="struct_member_annotations"><span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> GstMpegtsNITStream]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstMpegtsNITStream"></a><h3>struct GstMpegtsNITStream</h3>
+<pre class="programlisting">struct GstMpegtsNITStream {
+ guint16 transport_stream_id;
+ guint16 original_network_id;
+
+ GPtrArray *descriptors;
+};
+</pre>
+<div class="refsect3">
+<a name="GstMpegtsNITStream.members"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="300px" class="struct_members_name">
+<col class="struct_members_description">
+<col width="200px" class="struct_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint16"><span class="type">guint16</span></a> <em class="structfield"><code><a name="GstMpegtsNITStream.transport-stream-id"></a>transport_stream_id</code></em>;</p></td>
+<td class="struct_member_description"> </td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint16"><span class="type">guint16</span></a> <em class="structfield"><code><a name="GstMpegtsNITStream.original-network-id"></a>original_network_id</code></em>;</p></td>
+<td class="struct_member_description"> </td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a> *<em class="structfield"><code><a name="GstMpegtsNITStream.descriptors"></a>descriptors</code></em>;</p></td>
+<td class="struct_member_description"><p>. </p></td>
+<td class="struct_member_annotations"><span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> GstMpegtsDescriptor]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstMpegtsBAT"></a><h3>struct GstMpegtsBAT</h3>
+<pre class="programlisting">struct GstMpegtsBAT {
+ GPtrArray *descriptors;
+
+ GPtrArray *streams;
+};
+</pre>
+<p>DVB Bouquet Association Table (EN 300 468)</p>
+<div class="refsect3">
+<a name="GstMpegtsBAT.members"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="300px" class="struct_members_name">
+<col class="struct_members_description">
+<col width="200px" class="struct_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a> *<em class="structfield"><code><a name="GstMpegtsBAT.descriptors"></a>descriptors</code></em>;</p></td>
+<td class="struct_member_description"><p>. </p></td>
+<td class="struct_member_annotations"><span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> GstMpegtsDescriptor]</span></td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a> *<em class="structfield"><code><a name="GstMpegtsBAT.streams"></a>streams</code></em>;</p></td>
+<td class="struct_member_description"><p>. </p></td>
+<td class="struct_member_annotations"><span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> GstMpegtsBATStream]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstMpegtsBATStream"></a><h3>struct GstMpegtsBATStream</h3>
+<pre class="programlisting">struct GstMpegtsBATStream {
+ guint16 transport_stream_id;
+ guint16 original_network_id;
+
+ GPtrArray *descriptors;
+};
+</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstMpegtsSDT"></a><h3>struct GstMpegtsSDT</h3>
+<pre class="programlisting">struct GstMpegtsSDT {
+ guint16 original_network_id;
+ gboolean actual_ts;
+ guint16 transport_stream_id;
+
+ GPtrArray *services;
+};
+</pre>
+<p>Service Description Table (EN 300 468)</p>
+<div class="refsect3">
+<a name="GstMpegtsSDT.members"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="300px" class="struct_members_name">
+<col class="struct_members_description">
+<col width="200px" class="struct_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint16"><span class="type">guint16</span></a> <em class="structfield"><code><a name="GstMpegtsSDT.original-network-id"></a>original_network_id</code></em>;</p></td>
+<td class="struct_member_description"><p>Network ID of the originating delivery system</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> <em class="structfield"><code><a name="GstMpegtsSDT.actual-ts"></a>actual_ts</code></em>;</p></td>
+<td class="struct_member_description"><p>True if the table describes this transport stream</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint16"><span class="type">guint16</span></a> <em class="structfield"><code><a name="GstMpegtsSDT.transport-stream-id"></a>transport_stream_id</code></em>;</p></td>
+<td class="struct_member_description"><p>ID of this transport stream</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a> *<em class="structfield"><code><a name="GstMpegtsSDT.services"></a>services</code></em>;</p></td>
+<td class="struct_member_description"><p> List of services. </p></td>
+<td class="struct_member_annotations"><span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> GstMpegtsSDTService]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstMpegtsSDTService"></a><h3>struct GstMpegtsSDTService</h3>
+<pre class="programlisting">struct GstMpegtsSDTService {
+ guint16 service_id;
+
+ gboolean EIT_schedule_flag;
+ gboolean EIT_present_following_flag;
+ GstMpegtsRunningStatus running_status;
+ gboolean free_CA_mode;
+
+ GPtrArray *descriptors;
+};
+</pre>
+<div class="refsect3">
+<a name="GstMpegtsSDTService.members"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="300px" class="struct_members_name">
+<col class="struct_members_description">
+<col width="200px" class="struct_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint16"><span class="type">guint16</span></a> <em class="structfield"><code><a name="GstMpegtsSDTService.service-id"></a>service_id</code></em>;</p></td>
+<td class="struct_member_description"><p>The program number this table belongs to</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> <em class="structfield"><code><a name="GstMpegtsSDTService.EIT-schedule-flag"></a>EIT_schedule_flag</code></em>;</p></td>
+<td class="struct_member_description"><p>EIT schedule information is present in this transport stream</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> <em class="structfield"><code><a name="GstMpegtsSDTService.EIT-present-following-flag"></a>EIT_present_following_flag</code></em>;</p></td>
+<td class="struct_member_description"><p>EIT present/following information is present in this transport stream</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#GstMpegtsRunningStatus" title="enum GstMpegtsRunningStatus"><span class="type">GstMpegtsRunningStatus</span></a> <em class="structfield"><code><a name="GstMpegtsSDTService.running-status"></a>running_status</code></em>;</p></td>
+<td class="struct_member_description"><p>Status of this service</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> <em class="structfield"><code><a name="GstMpegtsSDTService.free-CA-mode"></a>free_CA_mode</code></em>;</p></td>
+<td class="struct_member_description"><p>True if one or more streams is controlled by a CA system</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a> *<em class="structfield"><code><a name="GstMpegtsSDTService.descriptors"></a>descriptors</code></em>;</p></td>
+<td class="struct_member_description"><p> List of descriptors. </p></td>
+<td class="struct_member_annotations"><span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> GstMpegtsDescriptor]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstMpegtsEIT"></a><h3>struct GstMpegtsEIT</h3>
+<pre class="programlisting">struct GstMpegtsEIT {
+ guint16 transport_stream_id;
+ guint16 original_network_id;
+ guint8 segment_last_section_number;
+ guint8 last_table_id;
+
+ gboolean actual_stream;
+ gboolean present_following;
+
+ GPtrArray *events;
+};
+</pre>
+<p>Event Information Table (EN 300 468)</p>
+<div class="refsect3">
+<a name="GstMpegtsEIT.members"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="300px" class="struct_members_name">
+<col class="struct_members_description">
+<col width="200px" class="struct_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint16"><span class="type">guint16</span></a> <em class="structfield"><code><a name="GstMpegtsEIT.transport-stream-id"></a>transport_stream_id</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint16"><span class="type">guint16</span></a> <em class="structfield"><code><a name="GstMpegtsEIT.original-network-id"></a>original_network_id</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstMpegtsEIT.segment-last-section-number"></a>segment_last_section_number</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstMpegtsEIT.last-table-id"></a>last_table_id</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> <em class="structfield"><code><a name="GstMpegtsEIT.actual-stream"></a>actual_stream</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> <em class="structfield"><code><a name="GstMpegtsEIT.present-following"></a>present_following</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a> *<em class="structfield"><code><a name="GstMpegtsEIT.events"></a>events</code></em>;</p></td>
+<td class="struct_member_description"><p> List of events. </p></td>
+<td class="struct_member_annotations"><span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> GstMpegtsEITEvent]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstMpegtsEITEvent"></a><h3>struct GstMpegtsEITEvent</h3>
+<pre class="programlisting">struct GstMpegtsEITEvent {
+ guint16 event_id;
+
+ GstDateTime *start_time;
+ guint32 duration;
+
+ GstMpegtsRunningStatus running_status;
+ gboolean free_CA_mode;
+
+ GPtrArray *descriptors;
+};
+</pre>
+<p>Event from a <em class="parameter"><code>GstMpegtsEIT</code></em>
+</p>
+<div class="refsect3">
+<a name="GstMpegtsEITEvent.members"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="300px" class="struct_members_name">
+<col class="struct_members_description">
+<col width="200px" class="struct_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint16"><span class="type">guint16</span></a> <em class="structfield"><code><a name="GstMpegtsEITEvent.event-id"></a>event_id</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/gstreamer-1.0GstDateTime.html#GstDateTime-struct"><span class="type">GstDateTime</span></a> *<em class="structfield"><code><a name="GstMpegtsEITEvent.start-time"></a>start_time</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint32"><span class="type">guint32</span></a> <em class="structfield"><code><a name="GstMpegtsEITEvent.duration"></a>duration</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#GstMpegtsRunningStatus" title="enum GstMpegtsRunningStatus"><span class="type">GstMpegtsRunningStatus</span></a> <em class="structfield"><code><a name="GstMpegtsEITEvent.running-status"></a>running_status</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> <em class="structfield"><code><a name="GstMpegtsEITEvent.free-CA-mode"></a>free_CA_mode</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a> *<em class="structfield"><code><a name="GstMpegtsEITEvent.descriptors"></a>descriptors</code></em>;</p></td>
+<td class="struct_member_description"><p> List of descriptors. </p></td>
+<td class="struct_member_annotations"><span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> GstMpegtsDescriptor]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstMpegtsRunningStatus"></a><h3>enum GstMpegtsRunningStatus</h3>
+<p>Running status of a service.</p>
+<p>Corresponds to table 6 of ETSI EN 300 468 (v1.13.0)</p>
+<div class="refsect3">
+<a name="GstMpegtsRunningStatus.members"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="300px" class="enum_members_name">
+<col class="enum_members_description">
+<col width="200px" class="enum_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-RUNNING-STATUS-UNDEFINED:CAPS"></a>GST_MPEGTS_RUNNING_STATUS_UNDEFINED</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-RUNNING-STATUS-NOT-RUNNING:CAPS"></a>GST_MPEGTS_RUNNING_STATUS_NOT_RUNNING</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-RUNNING-STATUS-STARTS-IN-FEW-SECONDS:CAPS"></a>GST_MPEGTS_RUNNING_STATUS_STARTS_IN_FEW_SECONDS</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-RUNNING-STATUS-PAUSING:CAPS"></a>GST_MPEGTS_RUNNING_STATUS_PAUSING</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-RUNNING-STATUS-RUNNING:CAPS"></a>GST_MPEGTS_RUNNING_STATUS_RUNNING</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-MPEGTS-RUNNING-STATUS-OFF-AIR:CAPS"></a>GST_MPEGTS_RUNNING_STATUS_OFF_AIR</p></td>
+<td> </td>
+<td> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstMpegtsTOT"></a><h3>struct GstMpegtsTOT</h3>
+<pre class="programlisting">struct GstMpegtsTOT {
+ GstDateTime *utc_time;
+
+ GPtrArray *descriptors;
+};
+</pre>
+<p>Time Offset Table (EN 300 468)</p>
+<div class="refsect3">
+<a name="GstMpegtsTOT.members"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="300px" class="struct_members_name">
+<col class="struct_members_description">
+<col width="200px" class="struct_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/gstreamer-1.0GstDateTime.html#GstDateTime-struct"><span class="type">GstDateTime</span></a> *<em class="structfield"><code><a name="GstMpegtsTOT.utc-time"></a>utc_time</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a> *<em class="structfield"><code><a name="GstMpegtsTOT.descriptors"></a>descriptors</code></em>;</p></td>
+<td class="struct_member_description"><p> List of descriptors. </p></td>
+<td class="struct_member_annotations"><span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> GstMpegtsDescriptor]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>Generated by GTK-Doc V1.25</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-bad-libs-GstAggregator.html b/docs/libs/html/gst-plugins-bad-libs-GstAggregator.html
index 594b1b0..ca5e940 100644
--- a/docs/libs/html/gst-plugins-bad-libs-GstAggregator.html
+++ b/docs/libs/html/gst-plugins-bad-libs-GstAggregator.html
@@ -27,7 +27,8 @@
<div class="refnamediv"><table width="100%"><tr>
<td valign="top">
<h2><span class="refentrytitle"><a name="gst-plugins-bad-libs-GstAggregator.top_of_page"></a>GstAggregator</span></h2>
-<p>GstAggregator</p>
+<p>GstAggregator — manages a set of pads with the purpose of
+aggregating their buffers.</p>
</td>
<td class="gallery_image" valign="top" align="right"></td>
</tr></table></div>
@@ -95,6 +96,42 @@
</div>
<div class="refsect1">
<a name="gst-plugins-bad-libs-GstAggregator.description"></a><h2>Description</h2>
+<p>Manages a set of pads with the purpose of aggregating their buffers.
+Control is given to the subclass when all pads have data.</p>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
+<li class="listitem"><p>
+ Base class for mixers and muxers. Subclasses should at least implement
+ the <a class="link" href="gst-plugins-bad-libs-GstAggregator.html#GstAggregatorClass.aggregate"><code class="function">GstAggregatorClass.aggregate()</code></a> virtual method.
+ </p></li>
+<li class="listitem"><p>
+ When data is queued on all pads, tha aggregate vmethod is called.
+ </p></li>
+<li class="listitem"><p>
+ One can peek at the data on any given GstAggregatorPad with the
+ <a class="link" href="gst-plugins-bad-libs-GstAggregatorPad.html#gst-aggregator-pad-get-buffer" title="gst_aggregator_pad_get_buffer ()"><code class="function">gst_aggregator_pad_get_buffer()</code></a> method, and take ownership of it
+ with the <a class="link" href="gst-plugins-bad-libs-GstAggregatorPad.html#gst-aggregator-pad-steal-buffer" title="gst_aggregator_pad_steal_buffer ()"><code class="function">gst_aggregator_pad_steal_buffer()</code></a> method. When a buffer
+ has been taken with <code class="function">steal_buffer()</code>, a new buffer can be queued
+ on that pad.
+ </p></li>
+<li class="listitem"><p>
+ If the subclass wishes to push a buffer downstream in its aggregate
+ implementation, it should do so through the
+ <a class="link" href="gst-plugins-bad-libs-GstAggregator.html#gst-aggregator-finish-buffer" title="gst_aggregator_finish_buffer ()"><code class="function">gst_aggregator_finish_buffer()</code></a> method. This method will take care
+ of sending and ordering mandatory events such as stream start, caps
+ and segment.
+ </p></li>
+<li class="listitem"><p>
+ Same goes for EOS events, which should not be pushed directly by the
+ subclass, it should instead return GST_FLOW_EOS in its aggregate
+ implementation.
+ </p></li>
+<li class="listitem"><p>
+ Note that the aggregator logic regarding gap event handling is to turn
+ these into gap buffers with matching PTS and duration. It will also
+ flag these buffers with GST_BUFFER_FLAG_GAP and GST_BUFFER_FLAG_DROPPABLE
+ to ease their identification and subsequent processing.
+ </p></li>
+</ul></div>
</div>
<div class="refsect1">
<a name="gst-plugins-bad-libs-GstAggregator.functions_details"></a><h2>Functions</h2>
@@ -103,6 +140,31 @@
<pre class="programlisting"><a href="/usr/share/gtk-doc/html/gstreamer-1.0GstPad.html#GstFlowReturn"><span class="returnvalue">GstFlowReturn</span></a>
gst_aggregator_finish_buffer (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-GstAggregator.html#GstAggregator" title="struct GstAggregator"><span class="type">GstAggregator</span></a> *agg</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/gstreamer-1.0GstBuffer.html#GstBuffer-struct"><span class="type">GstBuffer</span></a> *buffer</code></em>);</pre>
+<p>This method will push the provided output buffer downstream. If needed,
+mandatory events such as stream-start, caps, and segment events will be
+sent before pushing the buffer.</p>
+<div class="refsect3">
+<a name="gst-aggregator-finish-buffer.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>self</p></td>
+<td class="parameter_description"><p>The <a class="link" href="gst-plugins-bad-libs-GstAggregator.html#GstAggregator" title="struct GstAggregator"><span class="type">GstAggregator</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>buffer</p></td>
+<td class="parameter_description"><p> the <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstBuffer.html#GstBuffer-struct"><span class="type">GstBuffer</span></a> to push. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
</div>
<hr>
<div class="refsect2">
@@ -110,6 +172,29 @@
<pre class="programlisting"><span class="returnvalue">void</span>
gst_aggregator_set_src_caps (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-GstAggregator.html#GstAggregator" title="struct GstAggregator"><span class="type">GstAggregator</span></a> *agg</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/gstreamer-1.0GstCaps.html#GstCaps-struct"><span class="type">GstCaps</span></a> *caps</code></em>);</pre>
+<p>Sets the caps to be used on the src pad.</p>
+<div class="refsect3">
+<a name="gst-aggregator-set-src-caps.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>self</p></td>
+<td class="parameter_description"><p>The <a class="link" href="gst-plugins-bad-libs-GstAggregator.html#GstAggregator" title="struct GstAggregator"><span class="type">GstAggregator</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>caps</p></td>
+<td class="parameter_description"><p>The <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstCaps.html#GstCaps-struct"><span class="type">GstCaps</span></a> to set on the src pad.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
</div>
<hr>
<div class="refsect2">
@@ -118,12 +203,68 @@
gst_aggregator_iterate_sinkpads (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-GstAggregator.html#GstAggregator" title="struct GstAggregator"><span class="type">GstAggregator</span></a> *self</code></em>,
<em class="parameter"><code><span class="type">GstAggregatorPadForeachFunc</span> func</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);</pre>
+<p>Iterate the sinkpads of aggregator to call a function on them.</p>
+<p>This method guarantees that <em class="parameter"><code>func</code></em>
+ will be called only once for each
+sink pad.</p>
+<div class="refsect3">
+<a name="gst-aggregator-iterate-sinkpads.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>self</p></td>
+<td class="parameter_description"><p>The <a class="link" href="gst-plugins-bad-libs-GstAggregator.html#GstAggregator" title="struct GstAggregator"><span class="type">GstAggregator</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>func</p></td>
+<td class="parameter_description"><p> The function to call. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="The callback is valid only during the call to the method."><span class="acronym">scope call</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>user_data</p></td>
+<td class="parameter_description"><p> The data to pass to <em class="parameter"><code>func</code></em>
+. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="This parameter is a 'user_data', for callbacks; many bindings can pass NULL here."><span class="acronym">closure</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
</div>
<hr>
<div class="refsect2">
<a name="gst-aggregator-get-latency"></a><h3>gst_aggregator_get_latency ()</h3>
<pre class="programlisting"><a href="/usr/share/gtk-doc/html/gstreamer-1.0GstClock.html#GstClockTime"><span class="returnvalue">GstClockTime</span></a>
gst_aggregator_get_latency (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-GstAggregator.html#GstAggregator" title="struct GstAggregator"><span class="type">GstAggregator</span></a> *self</code></em>);</pre>
+<p>Retrieves the latency values reported by <em class="parameter"><code>self</code></em>
+ in response to the latency
+query, or <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstClock.html#GST-CLOCK-TIME-NONE:CAPS"><code class="literal">GST_CLOCK_TIME_NONE</code></a> if there is not live source connected and the element
+will not wait for the clock.</p>
+<p>Typically only called by subclasses.</p>
+<div class="refsect3">
+<a name="gst-aggregator-get-latency.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>self</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-GstAggregator.html#GstAggregator" title="struct GstAggregator"><span class="type">GstAggregator</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-aggregator-get-latency.returns"></a><h4>Returns</h4>
+<p> The latency or <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstClock.html#GST-CLOCK-TIME-NONE:CAPS"><code class="literal">GST_CLOCK_TIME_NONE</code></a> if the element does not sync</p>
+</div>
</div>
</div>
<div class="refsect1">
@@ -139,6 +280,34 @@
GstSegment segment;
};
</pre>
+<p>Aggregator base class object structure.</p>
+<div class="refsect3">
+<a name="GstAggregator.members"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="300px" class="struct_members_name">
+<col class="struct_members_description">
+<col width="200px" class="struct_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#GstElement-struct"><span class="type">GstElement</span></a> <em class="structfield"><code><a name="GstAggregator.parent"></a>parent</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/gstreamer-1.0GstPad.html#GstPad-struct"><span class="type">GstPad</span></a> *<em class="structfield"><code><a name="GstAggregator.srcpad"></a>srcpad</code></em>;</p></td>
+<td class="struct_member_description"><p>the aggregator's source pad</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/gstreamer-1.0GstSegment.html#GstSegment-struct"><span class="type">GstSegment</span></a> <em class="structfield"><code><a name="GstAggregator.segment"></a>segment</code></em>;</p></td>
+<td class="struct_member_description"><p>the output segment</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
</div>
<hr>
<div class="refsect2">
@@ -190,9 +359,132 @@
const GstCaps * caps);
};
</pre>
+<p>The aggregator base class will handle in a thread-safe way all manners of
+concurrent flushes, seeks, pad additions and removals, leaving to the
+subclass the responsibility of clipping buffers, and aggregating buffers in
+the way the implementor sees fit.</p>
+<p>It will also take care of event ordering (stream-start, segment, eos).</p>
+<p>Basically, a basic implementation will override <em class="parameter"><code>aggregate</code></em>
+, and call
+_finish_buffer from inside that function.</p>
+<div class="refsect3">
+<a name="GstAggregatorClass.members"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="300px" class="struct_members_name">
+<col class="struct_members_description">
+<col width="200px" class="struct_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/gobjectgobject-Type-Information.html#GType"><span class="type">GType</span></a> <em class="structfield"><code><a name="GstAggregatorClass.sinkpads-type"></a>sinkpads_type</code></em>;</p></td>
+<td class="struct_member_description"><p>Optional.
+The type of the pads that should be created when
+GstElement.request_new_pad is called.</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><em class="structfield"><code><a name="GstAggregatorClass.flush"></a>flush</code></em> ()</p></td>
+<td class="struct_member_description"><p>Optional.
+Called after a succesful flushing seek, once all the flush
+stops have been received. Flush pad-specific data in
+<a class="link" href="gst-plugins-bad-libs-GstAggregatorPad.html#GstAggregatorPad" title="struct GstAggregatorPad"><span class="type">GstAggregatorPad</span></a>->flush.</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><em class="structfield"><code><a name="GstAggregatorClass.clip"></a>clip</code></em> ()</p></td>
+<td class="struct_member_description"><p>Optional.
+Called when a buffer is received on a sink pad, the task
+of clipping it and translating it to the current segment
+falls on the subclass.</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><em class="structfield"><code><a name="GstAggregatorClass.sink-event"></a>sink_event</code></em> ()</p></td>
+<td class="struct_member_description"><p>Optional.
+Called when an event is received on a sink pad, the subclass
+should always chain up.</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><em class="structfield"><code><a name="GstAggregatorClass.sink-query"></a>sink_query</code></em> ()</p></td>
+<td class="struct_member_description"><p>Optional.
+Called when a query is received on a sink pad, the subclass
+should always chain up.</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><em class="structfield"><code><a name="GstAggregatorClass.src-event"></a>src_event</code></em> ()</p></td>
+<td class="struct_member_description"><p>Optional.
+Called when an event is received on the src pad, the subclass
+should always chain up.</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><em class="structfield"><code><a name="GstAggregatorClass.src-query"></a>src_query</code></em> ()</p></td>
+<td class="struct_member_description"><p>Optional.
+Called when a query is received on the src pad, the subclass
+should always chain up.</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><em class="structfield"><code><a name="GstAggregatorClass.src-activate"></a>src_activate</code></em> ()</p></td>
+<td class="struct_member_description"><p>Optional.
+Called when the src pad is activated, it will start/stop its
+pad task right after that call.</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><em class="structfield"><code><a name="GstAggregatorClass.aggregate"></a>aggregate</code></em> ()</p></td>
+<td class="struct_member_description"><p>Mandatory.
+Called when buffers are queued on all sinkpads. Classes
+should iterate the GstElement->sinkpads and peek or steal
+buffers from the <a href="gst-plugins-bad-libs-GstAggregatorPad.html#GstAggregatorPad"><span class="type">GstAggregatorPads</span></a>. If the subclass returns
+GST_FLOW_EOS, sending of the eos event will be taken care
+of. Once / if a buffer has been constructed from the
+aggregated buffers, the subclass should call _finish_buffer.</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><em class="structfield"><code><a name="GstAggregatorClass.stop"></a>stop</code></em> ()</p></td>
+<td class="struct_member_description"><p>Optional.
+Called when the element goes from PAUSED to READY.
+The subclass should free all resources and reset its state.</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><em class="structfield"><code><a name="GstAggregatorClass.start"></a>start</code></em> ()</p></td>
+<td class="struct_member_description"><p>Optional.
+Called when the element goes from READY to PAUSED.
+The subclass should get ready to process
+aggregated buffers.</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><em class="structfield"><code><a name="GstAggregatorClass.get-next-time"></a>get_next_time</code></em> ()</p></td>
+<td class="struct_member_description"><p>Optional.
+Called when the element needs to know the running time of the next
+rendered buffer for live pipelines. This causes deadline
+based aggregation to occur. Defaults to returning
+GST_CLOCK_TIME_NONE causing the element to wait for buffers
+on all sink pads before aggregating.</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><em class="structfield"><code><a name="GstAggregatorClass.create-new-pad"></a>create_new_pad</code></em> ()</p></td>
+<td> </td>
+<td> </td>
+</tr>
+</tbody>
+</table></div>
</div>
</div>
</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-libs-GstAggregator.see-also"></a><h2>See Also</h2>
+<p>gstcollectpads for historical reasons.</p>
+</div>
+</div>
<div class="footer">
<hr>Generated by GTK-Doc V1.25</div>
</body>
diff --git a/docs/libs/html/gst-plugins-bad-libs-GstAggregatorPad.html b/docs/libs/html/gst-plugins-bad-libs-GstAggregatorPad.html
index 8b474f87..e3564ee 100644
--- a/docs/libs/html/gst-plugins-bad-libs-GstAggregatorPad.html
+++ b/docs/libs/html/gst-plugins-bad-libs-GstAggregatorPad.html
@@ -102,18 +102,87 @@
<a name="gst-aggregator-pad-steal-buffer"></a><h3>gst_aggregator_pad_steal_buffer ()</h3>
<pre class="programlisting"><a href="/usr/share/gtk-doc/html/gstreamer-1.0GstBuffer.html#GstBuffer-struct"><span class="returnvalue">GstBuffer</span></a> *
gst_aggregator_pad_steal_buffer (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-GstAggregatorPad.html#GstAggregatorPad" title="struct GstAggregatorPad"><span class="type">GstAggregatorPad</span></a> *pad</code></em>);</pre>
+<p>Steal the ref to the buffer currently queued in <em class="parameter"><code>pad</code></em>
+.</p>
+<div class="refsect3">
+<a name="gst-aggregator-pad-steal-buffer.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>pad</p></td>
+<td class="parameter_description"><p>the pad to get buffer from</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-aggregator-pad-steal-buffer.returns"></a><h4>Returns</h4>
+<p> The buffer in <em class="parameter"><code>pad</code></em>
+or NULL if no buffer was
+queued. You should unref the buffer after usage. </p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
+</div>
</div>
<hr>
<div class="refsect2">
<a name="gst-aggregator-pad-get-buffer"></a><h3>gst_aggregator_pad_get_buffer ()</h3>
<pre class="programlisting"><a href="/usr/share/gtk-doc/html/gstreamer-1.0GstBuffer.html#GstBuffer-struct"><span class="returnvalue">GstBuffer</span></a> *
gst_aggregator_pad_get_buffer (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-GstAggregatorPad.html#GstAggregatorPad" title="struct GstAggregatorPad"><span class="type">GstAggregatorPad</span></a> *pad</code></em>);</pre>
+<div class="refsect3">
+<a name="gst-aggregator-pad-get-buffer.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>pad</p></td>
+<td class="parameter_description"><p>the pad to get buffer from</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-aggregator-pad-get-buffer.returns"></a><h4>Returns</h4>
+<p> A reference to the buffer in <em class="parameter"><code>pad</code></em>
+or
+NULL if no buffer was queued. You should unref the buffer after
+usage. </p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
+</div>
</div>
<hr>
<div class="refsect2">
<a name="gst-aggregator-pad-drop-buffer"></a><h3>gst_aggregator_pad_drop_buffer ()</h3>
<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
gst_aggregator_pad_drop_buffer (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-GstAggregatorPad.html#GstAggregatorPad" title="struct GstAggregatorPad"><span class="type">GstAggregatorPad</span></a> *pad</code></em>);</pre>
+<p>Drop the buffer currently queued in <em class="parameter"><code>pad</code></em>
+.</p>
+<div class="refsect3">
+<a name="gst-aggregator-pad-drop-buffer.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>pad</p></td>
+<td class="parameter_description"><p>the pad where to drop any pending buffer</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-aggregator-pad-drop-buffer.returns"></a><h4>Returns</h4>
+<p> TRUE if there was a buffer queued in <em class="parameter"><code>pad</code></em>
+, or FALSE if not.</p>
+</div>
</div>
<hr>
<div class="refsect2">
@@ -140,6 +209,44 @@
gpointer _gst_reserved[GST_PADDING];
};
</pre>
+<p>The implementation the GstPad to use with <a class="link" href="gst-plugins-bad-libs-GstAggregator.html#GstAggregator" title="struct GstAggregator"><span class="type">GstAggregator</span></a></p>
+<div class="refsect3">
+<a name="GstAggregatorPad.members"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="300px" class="struct_members_name">
+<col class="struct_members_description">
+<col width="200px" class="struct_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/gstreamer-1.0GstPad.html#GstPad-struct"><span class="type">GstPad</span></a> <em class="structfield"><code><a name="GstAggregatorPad.parent"></a>parent</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/gstreamer-1.0GstSegment.html#GstSegment-struct"><span class="type">GstSegment</span></a> <em class="structfield"><code><a name="GstAggregatorPad.segment"></a>segment</code></em>;</p></td>
+<td class="struct_member_description"><p>last segment received.</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/gstreamer-1.0GstSegment.html#GstSegment-struct"><span class="type">GstSegment</span></a> <em class="structfield"><code><a name="GstAggregatorPad.clip-segment"></a>clip_segment</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><span class="type">GstAggregatorPadPrivate</span> *<em class="structfield"><code><a name="GstAggregatorPad.priv"></a>priv</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> <em class="structfield"><code><a name="GstAggregatorPad.-gst-reserved"></a>_gst_reserved</code></em>[GST_PADDING];</p></td>
+<td> </td>
+<td> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
</div>
<hr>
<div class="refsect2">
@@ -150,6 +257,24 @@
GstFlowReturn (*flush) (GstAggregatorPad * aggpad, GstAggregator * aggregator);
};
</pre>
+<div class="refsect3">
+<a name="GstAggregatorPadClass.members"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="300px" class="struct_members_name">
+<col class="struct_members_description">
+<col width="200px" class="struct_members_annotations">
+</colgroup>
+<tbody><tr>
+<td class="struct_member_name"><p><em class="structfield"><code><a name="GstAggregatorPadClass.flush"></a>flush</code></em> ()</p></td>
+<td class="struct_member_description"><p>Optional
+Called when the pad has received a flush stop, this is the place
+to flush any information specific to the pad, it allows for individual
+pads to be flushed while others might not be.</p></td>
+<td class="struct_member_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
</div>
</div>
</div>
diff --git a/docs/libs/html/gst-plugins-bad-libs-GstGLAPI.html b/docs/libs/html/gst-plugins-bad-libs-GstGLAPI.html
index cb4eca1..d83958b 100644
--- a/docs/libs/html/gst-plugins-bad-libs-GstGLAPI.html
+++ b/docs/libs/html/gst-plugins-bad-libs-GstGLAPI.html
@@ -118,24 +118,104 @@
<a name="gst-gl-api-to-string"></a><h3>gst_gl_api_to_string ()</h3>
<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *
gst_gl_api_to_string (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-GstGLAPI.html#GstGLAPI" title="enum GstGLAPI"><span class="type">GstGLAPI</span></a> api</code></em>);</pre>
+<div class="refsect3">
+<a name="gst-gl-api-to-string.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>api</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-GstGLAPI.html#GstGLAPI" title="enum GstGLAPI"><span class="type">GstGLAPI</span></a> to stringify</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-gl-api-to-string.returns"></a><h4>Returns</h4>
+<p> A space seperated string of the OpenGL api's enabled in <em class="parameter"><code>api</code></em>
+</p>
+</div>
</div>
<hr>
<div class="refsect2">
<a name="gst-gl-api-from-string"></a><h3>gst_gl_api_from_string ()</h3>
<pre class="programlisting"><a class="link" href="gst-plugins-bad-libs-GstGLAPI.html#GstGLAPI" title="enum GstGLAPI"><span class="returnvalue">GstGLAPI</span></a>
gst_gl_api_from_string (<em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *api_s</code></em>);</pre>
+<div class="refsect3">
+<a name="gst-gl-api-from-string.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>api_s</p></td>
+<td class="parameter_description"><p>a space seperated string of OpenGL apis</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-gl-api-from-string.returns"></a><h4>Returns</h4>
+<p> The <a class="link" href="gst-plugins-bad-libs-GstGLAPI.html#GstGLAPI" title="enum GstGLAPI"><span class="type">GstGLAPI</span></a> represented by <em class="parameter"><code>api_s</code></em>
+</p>
+</div>
</div>
<hr>
<div class="refsect2">
<a name="gst-gl-platform-to-string"></a><h3>gst_gl_platform_to_string ()</h3>
<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *
gst_gl_platform_to_string (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-GstGLAPI.html#GstGLPlatform" title="enum GstGLPlatform"><span class="type">GstGLPlatform</span></a> platform</code></em>);</pre>
+<div class="refsect3">
+<a name="gst-gl-platform-to-string.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>platform</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-GstGLAPI.html#GstGLPlatform" title="enum GstGLPlatform"><span class="type">GstGLPlatform</span></a> to stringify</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-gl-platform-to-string.returns"></a><h4>Returns</h4>
+<p> A space seperated string of the OpenGL platforms enabled in <em class="parameter"><code>platform</code></em>
+</p>
+</div>
</div>
<hr>
<div class="refsect2">
<a name="gst-gl-platform-from-string"></a><h3>gst_gl_platform_from_string ()</h3>
<pre class="programlisting"><a class="link" href="gst-plugins-bad-libs-GstGLAPI.html#GstGLPlatform" title="enum GstGLPlatform"><span class="returnvalue">GstGLPlatform</span></a>
gst_gl_platform_from_string (<em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *platform_s</code></em>);</pre>
+<div class="refsect3">
+<a name="gst-gl-platform-from-string.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>platform_s</p></td>
+<td class="parameter_description"><p>a space seperated string of OpenGL platformss</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-gl-platform-from-string.returns"></a><h4>Returns</h4>
+<p> The <a class="link" href="gst-plugins-bad-libs-GstGLAPI.html#GstGLPlatform" title="enum GstGLPlatform"><span class="type">GstGLPlatform</span></a> represented by <em class="parameter"><code>platform_s</code></em>
+</p>
+</div>
</div>
</div>
<div class="refsect1">
@@ -153,33 +233,46 @@
<tbody>
<tr>
<td class="enum_member_name"><p><a name="GST-GL-API-NONE:CAPS"></a>GST_GL_API_NONE</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>no API</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-GL-API-OPENGL:CAPS"></a>GST_GL_API_OPENGL</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>Desktop OpenGL up to and including 3.1. The
+ compatibility profile when the OpenGL version is >= 3.2</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-GL-API-OPENGL3:CAPS"></a>GST_GL_API_OPENGL3</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>Desktop OpenGL >= 3.2 core profile</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-GL-API-GLES1:CAPS"></a>GST_GL_API_GLES1</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>OpenGL ES 1.x</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-GL-API-GLES2:CAPS"></a>GST_GL_API_GLES2</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>OpenGL ES 2.x and 3.x</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-GL-API-ANY:CAPS"></a>GST_GL_API_ANY</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>Any OpenGL API</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
</tbody>
</table></div>
@@ -199,38 +292,53 @@
<tbody>
<tr>
<td class="enum_member_name"><p><a name="GST-GL-PLATFORM-NONE:CAPS"></a>GST_GL_PLATFORM_NONE</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>no platform</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-GL-PLATFORM-EGL:CAPS"></a>GST_GL_PLATFORM_EGL</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>the EGL platform used primarily with the X11, wayland
+ and android window systems as well as on embedded Linux</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-GL-PLATFORM-GLX:CAPS"></a>GST_GL_PLATFORM_GLX</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>the GLX platform used primarily with the X11 window system</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-GL-PLATFORM-WGL:CAPS"></a>GST_GL_PLATFORM_WGL</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>the WGL platform used primarily on Windows</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-GL-PLATFORM-CGL:CAPS"></a>GST_GL_PLATFORM_CGL</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>the CGL platform used primarily on OS X</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-GL-PLATFORM-EAGL:CAPS"></a>GST_GL_PLATFORM_EAGL</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>the EAGL platform used primarily on iOS</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-GL-PLATFORM-ANY:CAPS"></a>GST_GL_PLATFORM_ANY</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>any OpenGL platform</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
</tbody>
</table></div>
@@ -241,24 +349,28 @@
<a name="GST-GL-API-GLES1-NAME:CAPS"></a><h3>GST_GL_API_GLES1_NAME</h3>
<pre class="programlisting">#define GST_GL_API_GLES1_NAME "gles1"
</pre>
+<p>The name for <a class="link" href="gst-plugins-bad-libs-GstGLAPI.html#GST-GL-API-GLES1:CAPS"><code class="literal">GST_GL_API_GLES1</code></a> used in various places</p>
</div>
<hr>
<div class="refsect2">
<a name="GST-GL-API-GLES2-NAME:CAPS"></a><h3>GST_GL_API_GLES2_NAME</h3>
<pre class="programlisting">#define GST_GL_API_GLES2_NAME "gles2"
</pre>
+<p>The name for <a class="link" href="gst-plugins-bad-libs-GstGLAPI.html#GST-GL-API-GLES2:CAPS"><code class="literal">GST_GL_API_GLES2</code></a> used in various places</p>
</div>
<hr>
<div class="refsect2">
<a name="GST-GL-API-OPENGL3-NAME:CAPS"></a><h3>GST_GL_API_OPENGL3_NAME</h3>
<pre class="programlisting">#define GST_GL_API_OPENGL3_NAME "opengl3"
</pre>
+<p>The name for <a class="link" href="gst-plugins-bad-libs-GstGLAPI.html#GST-GL-API-OPENGL3:CAPS"><code class="literal">GST_GL_API_OPENGL3</code></a> used in various places</p>
</div>
<hr>
<div class="refsect2">
<a name="GST-GL-API-OPENGL-NAME:CAPS"></a><h3>GST_GL_API_OPENGL_NAME</h3>
<pre class="programlisting">#define GST_GL_API_OPENGL_NAME "opengl"
</pre>
+<p>The name for <a class="link" href="gst-plugins-bad-libs-GstGLAPI.html#GST-GL-API-OPENGL:CAPS"><code class="literal">GST_GL_API_OPENGL</code></a> used in various places</p>
</div>
</div>
</div>
diff --git a/docs/libs/html/gst-plugins-bad-libs-GstGLBuffer.html b/docs/libs/html/gst-plugins-bad-libs-GstGLBuffer.html
index 9ef90bd..7ef9099 100644
--- a/docs/libs/html/gst-plugins-bad-libs-GstGLBuffer.html
+++ b/docs/libs/html/gst-plugins-bad-libs-GstGLBuffer.html
@@ -28,7 +28,7 @@
<div class="refnamediv"><table width="100%"><tr>
<td valign="top">
<h2><span class="refentrytitle"><a name="gst-plugins-bad-libs-GstGLBuffer.top_of_page"></a>GstGLBuffer</span></h2>
-<p>GstGLBuffer</p>
+<p>GstGLBuffer — memory subclass for GL buffers</p>
</td>
<td class="gallery_image" valign="top" align="right"></td>
</tr></table></div>
@@ -126,6 +126,9 @@
</div>
<div class="refsect1">
<a name="gst-plugins-bad-libs-GstGLBuffer.description"></a><h2>Description</h2>
+<p>GstGLBuffer is a <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstMemory.html#GstMemory-struct"><span class="type">GstMemory</span></a> subclass providing support for the mapping of
+GL buffers. </p>
+<p>Data is uploaded or downloaded from the GPU as is necessary.</p>
</div>
<div class="refsect1">
<a name="gst-plugins-bad-libs-GstGLBuffer.functions_details"></a><h2>Functions</h2>
@@ -133,12 +136,36 @@
<a name="gst-gl-buffer-init-once"></a><h3>gst_gl_buffer_init_once ()</h3>
<pre class="programlisting"><span class="returnvalue">void</span>
gst_gl_buffer_init_once (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<p>Initializes the GL Buffer allocator. It is safe to call this function
+multiple times. This must be called before any other <a class="link" href="gst-plugins-bad-libs-GstGLBuffer.html#GstGLBuffer" title="GstGLBuffer"><span class="type">GstGLBuffer</span></a> operation.</p>
+<p class="since">Since: 1.8</p>
</div>
<hr>
<div class="refsect2">
<a name="gst-is-gl-buffer"></a><h3>gst_is_gl_buffer ()</h3>
<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
gst_is_gl_buffer (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/gstreamer-1.0GstMemory.html#GstMemory-struct"><span class="type">GstMemory</span></a> *mem</code></em>);</pre>
+<div class="refsect3">
+<a name="gst-is-gl-buffer.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>mem</p></td>
+<td class="parameter_description"><p>a <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstMemory.html#GstMemory-struct"><span class="type">GstMemory</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-is-gl-buffer.returns"></a><h4>Returns</h4>
+<p> whether the memory at <em class="parameter"><code>mem</code></em>
+is a <a class="link" href="gst-plugins-bad-libs-GstGLBuffer.html#GstGLBuffer" title="GstGLBuffer"><span class="type">GstGLBuffer</span></a></p>
+</div>
+<p class="since">Since: 1.8</p>
</div>
<hr>
<div class="refsect2">
@@ -159,6 +186,50 @@
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/gstreamer-1.0GstAllocator.html#GstAllocationParams-struct"><span class="type">GstAllocationParams</span></a> *alloc_params</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="type">guint</span></a> gl_target</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="type">guint</span></a> gl_usage</code></em>);</pre>
+<div class="refsect3">
+<a name="gst-gl-buffer-allocation-params-new.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>context</p></td>
+<td class="parameter_description"><p>a <a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>alloc_size</p></td>
+<td class="parameter_description"><p>the size in bytes to allocate</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>alloc_params</p></td>
+<td class="parameter_description"><p> the <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstAllocator.html#GstAllocationParams-struct"><span class="type">GstAllocationParams</span></a> for <em class="parameter"><code>tex_id</code></em>
+. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>gl_target</p></td>
+<td class="parameter_description"><p>the OpenGL target to allocate</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>gl_usage</p></td>
+<td class="parameter_description"><p>the OpenGL usage hint to allocate with</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-gl-buffer-allocation-params-new.returns"></a><h4>Returns</h4>
+<p> a new <a class="link" href="gst-plugins-bad-libs-GstGLBuffer.html#GstGLBufferAllocationParams" title="struct GstGLBufferAllocationParams"><span class="type">GstGLBufferAllocationParams</span></a> for allocating OpenGL buffer
+objects</p>
+</div>
+<p class="since">Since: 1.8</p>
</div>
</div>
<div class="refsect1">
@@ -173,6 +244,39 @@
guint usage_hints; /* XXX: put this in the allocator? */
} GstGLBuffer;
</pre>
+<p>Represents information about a GL buffer</p>
+<div class="refsect3">
+<a name="GstGLBuffer.members"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="300px" class="struct_members_name">
+<col class="struct_members_description">
+<col width="200px" class="struct_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="struct_member_name"><p><a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemory" title="GstGLBaseMemory"><span class="type">GstGLBaseMemory</span></a> <em class="structfield"><code><a name="GstGLBuffer.mem"></a>mem</code></em>;</p></td>
+<td class="struct_member_description"><p>the parent object</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="type">guint</span></a> <em class="structfield"><code><a name="GstGLBuffer.id"></a>id</code></em>;</p></td>
+<td class="struct_member_description"><p>the buffer id for this memory</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="type">guint</span></a> <em class="structfield"><code><a name="GstGLBuffer.target"></a>target</code></em>;</p></td>
+<td class="struct_member_description"><p>the OpenGL target of this texture for binding purposes</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="type">guint</span></a> <em class="structfield"><code><a name="GstGLBuffer.usage-hints"></a>usage_hints</code></em>;</p></td>
+<td class="struct_member_description"><p>the OpenGL usage hints this buffer was created with</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
</div>
<hr>
<div class="refsect2">
@@ -184,6 +288,33 @@
guint gl_usage;
};
</pre>
+<div class="refsect3">
+<a name="GstGLBufferAllocationParams.members"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="300px" class="struct_members_name">
+<col class="struct_members_description">
+<col width="200px" class="struct_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="struct_member_name"><p><a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLAllocationParams" title="struct GstGLAllocationParams"><span class="type">GstGLAllocationParams</span></a> <em class="structfield"><code><a name="GstGLBufferAllocationParams.parent"></a>parent</code></em>;</p></td>
+<td class="struct_member_description"><p>parent object</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="type">guint</span></a> <em class="structfield"><code><a name="GstGLBufferAllocationParams.gl-target"></a>gl_target</code></em>;</p></td>
+<td class="struct_member_description"><p>the OpenGL target to bind the buffer to</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="type">guint</span></a> <em class="structfield"><code><a name="GstGLBufferAllocationParams.gl-usage"></a>gl_usage</code></em>;</p></td>
+<td class="struct_member_description"><p>the OpenGL usage hint to create the buffer with</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
</div>
<hr>
<div class="refsect2">
@@ -195,6 +326,7 @@
<div class="refsect2">
<a name="GstGLBufferAllocator-struct"></a><h3>GstGLBufferAllocator</h3>
<pre class="programlisting">typedef struct _GstGLBufferAllocator GstGLBufferAllocator;</pre>
+<p>Opaque <span class="type">GstGLAllocator</span> struct</p>
</div>
<hr>
<div class="refsect2">
@@ -203,12 +335,14 @@
GstGLBaseMemoryAllocatorClass parent_class;
} GstGLBufferAllocatorClass;
</pre>
+<p>The <a class="link" href="gst-plugins-bad-libs-GstGLBuffer.html#GstGLBufferAllocatorClass" title="GstGLBufferAllocatorClass"><span class="type">GstGLBufferAllocatorClass</span></a> only contains private data</p>
</div>
<hr>
<div class="refsect2">
<a name="GST-GL-BUFFER-ALLOCATOR-NAME:CAPS"></a><h3>GST_GL_BUFFER_ALLOCATOR_NAME</h3>
<pre class="programlisting">#define GST_GL_BUFFER_ALLOCATOR_NAME "GLBuffer"
</pre>
+<p>The name of the GL buffer allocator</p>
</div>
<hr>
<div class="refsect2">
@@ -217,6 +351,10 @@
</pre>
</div>
</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-libs-GstGLBuffer.see-also"></a><h2>See Also</h2>
+<p><a href="/usr/share/gtk-doc/html/gstreamer-1.0GstMemory.html#GstMemory-struct"><span class="type">GstMemory</span></a>, <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstAllocator.html#GstAllocator-struct"><span class="type">GstAllocator</span></a></p>
+</div>
</div>
<div class="footer">
<hr>Generated by GTK-Doc V1.25</div>
diff --git a/docs/libs/html/gst-plugins-bad-libs-GstGLContextEGL.html b/docs/libs/html/gst-plugins-bad-libs-GstGLContextEGL.html
index 04e867e..2f8ad01 100644
--- a/docs/libs/html/gst-plugins-bad-libs-GstGLContextEGL.html
+++ b/docs/libs/html/gst-plugins-bad-libs-GstGLContextEGL.html
@@ -116,12 +116,17 @@
EGLSurface egl_surface;
EGLConfig egl_config;
+ gint egl_major;
+ gint egl_minor;
+
GstGLAPI gl_api;
const gchar *egl_exts;
- EGLImageKHR (*eglCreateImage) (EGLDisplay dpy, EGLContext ctx, EGLenum target,
+ EGLImageKHR (*eglCreateImageKHR) (EGLDisplay dpy, EGLContext ctx, EGLenum target,
EGLClientBuffer buffer, const EGLint *attrib_list);
+ EGLImageKHR (*eglCreateImage) (EGLDisplay dpy, EGLContext ctx, EGLenum target,
+ EGLClientBuffer buffer, const EGLAttrib *attrib_list);
EGLBoolean (*eglDestroyImage) (EGLDisplay dpy, EGLImageKHR image);
/* Cached handle */
diff --git a/docs/libs/html/gst-plugins-bad-libs-GstGLMemory.html b/docs/libs/html/gst-plugins-bad-libs-GstGLMemory.html
index 2368c1e..996f1fd 100644
--- a/docs/libs/html/gst-plugins-bad-libs-GstGLMemory.html
+++ b/docs/libs/html/gst-plugins-bad-libs-GstGLMemory.html
@@ -28,7 +28,7 @@
<div class="refnamediv"><table width="100%"><tr>
<td valign="top">
<h2><span class="refentrytitle"><a name="gst-plugins-bad-libs-GstGLMemory.top_of_page"></a>GstGLMemory</span></h2>
-<p>GstGLMemory</p>
+<p>GstGLMemory — memory subclass for GL textures</p>
</td>
<td class="gallery_image" valign="top" align="right"></td>
</tr></table></div>
@@ -263,6 +263,11 @@
</div>
<div class="refsect1">
<a name="gst-plugins-bad-libs-GstGLMemory.description"></a><h2>Description</h2>
+<p>GstGLMemory is a <a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemory" title="GstGLBaseMemory"><span class="type">GstGLBaseMemory</span></a> subclass providing support for the mapping of
+OpenGL textures. </p>
+<p><a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#GstGLMemory" title="GstGLMemory"><span class="type">GstGLMemory</span></a> is created or wrapped through <a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#gst-gl-base-memory-alloc" title="gst_gl_base_memory_alloc ()"><code class="function">gst_gl_base_memory_alloc()</code></a>
+with <a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#GstGLVideoAllocationParams" title="struct GstGLVideoAllocationParams"><span class="type">GstGLVideoAllocationParams</span></a>.</p>
+<p>Data is uploaded or downloaded from the GPU as is necessary.</p>
</div>
<div class="refsect1">
<a name="gst-plugins-bad-libs-GstGLMemory.functions_details"></a><h2>Functions</h2>
@@ -272,6 +277,32 @@
gst_gl_video_allocation_params_copy_data
(<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#GstGLVideoAllocationParams" title="struct GstGLVideoAllocationParams"><span class="type">GstGLVideoAllocationParams</span></a> *src_vid</code></em>,
<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#GstGLVideoAllocationParams" title="struct GstGLVideoAllocationParams"><span class="type">GstGLVideoAllocationParams</span></a> *dest_vid</code></em>);</pre>
+<p>Copy and set any dynamically allocated resources in <em class="parameter"><code>dest_vid</code></em>
+. Intended
+for subclass usage only to chain up at the end of a subclass copy function.</p>
+<div class="refsect3">
+<a name="gst-gl-video-allocation-params-copy-data.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>src_vid</p></td>
+<td class="parameter_description"><p>source <a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#GstGLVideoAllocationParams" title="struct GstGLVideoAllocationParams"><span class="type">GstGLVideoAllocationParams</span></a> to copy from</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>dest_vid</p></td>
+<td class="parameter_description"><p>destination <a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#GstGLVideoAllocationParams" title="struct GstGLVideoAllocationParams"><span class="type">GstGLVideoAllocationParams</span></a> to copy into</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 1.8</p>
</div>
<hr>
<div class="refsect2">
@@ -279,6 +310,24 @@
<pre class="programlisting"><span class="returnvalue">void</span>
gst_gl_video_allocation_params_free_data
(<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#GstGLVideoAllocationParams" title="struct GstGLVideoAllocationParams"><span class="type">GstGLVideoAllocationParams</span></a> *params</code></em>);</pre>
+<p>Unset and free any dynamically allocated resources. Intended for subclass
+usage only to chain up at the end of a subclass free function.</p>
+<div class="refsect3">
+<a name="gst-gl-video-allocation-params-free-data.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>params</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#GstGLVideoAllocationParams" title="struct GstGLVideoAllocationParams"><span class="type">GstGLVideoAllocationParams</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<p class="since">Since: 1.8</p>
</div>
<hr>
<div class="refsect2">
@@ -301,6 +350,111 @@
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> gl_handle</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Datasets.html#GDestroyNotify"><span class="type">GDestroyNotify</span></a> notify</code></em>);</pre>
+<p>Intended for subclass usage</p>
+<div class="refsect3">
+<a name="gst-gl-video-allocation-params-init-full.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>params</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#GstGLVideoAllocationParams" title="struct GstGLVideoAllocationParams"><span class="type">GstGLVideoAllocationParams</span></a> to initialize</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>struct_size</p></td>
+<td class="parameter_description"><p>the size of the struct in <em class="parameter"><code>params</code></em>
+</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>alloc_flags</p></td>
+<td class="parameter_description"><p>some allocation flags</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>copy</p></td>
+<td class="parameter_description"><p>a copy function</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>free</p></td>
+<td class="parameter_description"><p>a free function</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>context</p></td>
+<td class="parameter_description"><p>a <a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>alloc_params</p></td>
+<td class="parameter_description"><p> the <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstAllocator.html#GstAllocationParams-struct"><span class="type">GstAllocationParams</span></a> for <em class="parameter"><code>wrapped_data</code></em>
+. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>v_info</p></td>
+<td class="parameter_description"><p>the <a href="/usr/share/gtk-doc/html/gst-plugins-base-libs-1.0gst-plugins-base-libs-gstvideo.html#GstVideoInfo"><span class="type">GstVideoInfo</span></a> for <em class="parameter"><code>wrapped_data</code></em>
+</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>plane</p></td>
+<td class="parameter_description"><p>the video plane <em class="parameter"><code>wrapped_data</code></em>
+represents</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>valign</p></td>
+<td class="parameter_description"><p> any <a href="/usr/share/gtk-doc/html/gst-plugins-base-libs-1.0gst-plugins-base-libs-gstvideo.html#GstVideoAlignment"><span class="type">GstVideoAlignment</span></a> applied to symem mappings of <em class="parameter"><code>wrapped_data</code></em>
+. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>target</p></td>
+<td class="parameter_description"><p>the <a class="link" href="gst-plugins-bad-libs-OpenGL-Formats.html#GstGLTextureTarget" title="enum GstGLTextureTarget"><span class="type">GstGLTextureTarget</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>tex_type</p></td>
+<td class="parameter_description"><p>the <span class="type">GstVideoGLTextureType</span></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>wrapped_data</p></td>
+<td class="parameter_description"><p> the optional data pointer to wrap. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>gl_handle</p></td>
+<td class="parameter_description"><p>the optional OpenGL handle to wrap or 0</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 to call <em class="parameter"><code>notify</code></em>
+with. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>notify</p></td>
+<td class="parameter_description"><p> a <a href="/usr/share/gtk-doc/html/glibglib-Datasets.html#GDestroyNotify"><span class="type">GDestroyNotify</span></a>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-gl-video-allocation-params-init-full.returns"></a><h4>Returns</h4>
+<p> initializes <em class="parameter"><code>params</code></em>
+with the parameters specified</p>
+</div>
+<p class="since">Since: 1.8</p>
</div>
<hr>
<div class="refsect2">
@@ -313,6 +467,59 @@
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/gst-plugins-base-libs-1.0gst-plugins-base-libs-gstvideo.html#GstVideoAlignment"><span class="type">GstVideoAlignment</span></a> *valign</code></em>,
<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-OpenGL-Formats.html#GstGLTextureTarget" title="enum GstGLTextureTarget"><span class="type">GstGLTextureTarget</span></a> target</code></em>,
<em class="parameter"><code><span class="type">GstVideoGLTextureType</span> tex_type</code></em>);</pre>
+<div class="refsect3">
+<a name="gst-gl-video-allocation-params-new.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>context</p></td>
+<td class="parameter_description"><p>a <a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>alloc_params</p></td>
+<td class="parameter_description"><p> the <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstAllocator.html#GstAllocationParams-struct"><span class="type">GstAllocationParams</span></a> for sysmem mappings of the texture. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>v_info</p></td>
+<td class="parameter_description"><p>the <a href="/usr/share/gtk-doc/html/gst-plugins-base-libs-1.0gst-plugins-base-libs-gstvideo.html#GstVideoInfo"><span class="type">GstVideoInfo</span></a> for the texture</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>plane</p></td>
+<td class="parameter_description"><p>the video plane of <em class="parameter"><code>v_info</code></em>
+to allocate</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>valign</p></td>
+<td class="parameter_description"><p> any <a href="/usr/share/gtk-doc/html/gst-plugins-base-libs-1.0gst-plugins-base-libs-gstvideo.html#GstVideoAlignment"><span class="type">GstVideoAlignment</span></a> applied to symem mappings of the texture. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>target</p></td>
+<td class="parameter_description"><p>the <a class="link" href="gst-plugins-bad-libs-OpenGL-Formats.html#GstGLTextureTarget" title="enum GstGLTextureTarget"><span class="type">GstGLTextureTarget</span></a> for the created textures</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>target</p></td>
+<td class="parameter_description"><p>the <span class="type">GstVideoGLTextureType</span> for the created textures</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-gl-video-allocation-params-new.returns"></a><h4>Returns</h4>
+<p> a new <a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#GstGLVideoAllocationParams" title="struct GstGLVideoAllocationParams"><span class="type">GstGLVideoAllocationParams</span></a> for allocating <a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#GstGLMemory" title="GstGLMemory"><span class="type">GstGLMemory</span></a>'s</p>
+</div>
+<p class="since">Since: 1.8</p>
</div>
<hr>
<div class="refsect2">
@@ -329,6 +536,81 @@
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> wrapped_data</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Datasets.html#GDestroyNotify"><span class="type">GDestroyNotify</span></a> notify</code></em>);</pre>
+<div class="refsect3">
+<a name="gst-gl-video-allocation-params-new-wrapped-data.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>context</p></td>
+<td class="parameter_description"><p>a <a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>alloc_params</p></td>
+<td class="parameter_description"><p> the <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstAllocator.html#GstAllocationParams-struct"><span class="type">GstAllocationParams</span></a> for <em class="parameter"><code>wrapped_data</code></em>
+. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>v_info</p></td>
+<td class="parameter_description"><p>the <a href="/usr/share/gtk-doc/html/gst-plugins-base-libs-1.0gst-plugins-base-libs-gstvideo.html#GstVideoInfo"><span class="type">GstVideoInfo</span></a> for <em class="parameter"><code>wrapped_data</code></em>
+</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>plane</p></td>
+<td class="parameter_description"><p>the video plane <em class="parameter"><code>wrapped_data</code></em>
+represents</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>valign</p></td>
+<td class="parameter_description"><p> any <a href="/usr/share/gtk-doc/html/gst-plugins-base-libs-1.0gst-plugins-base-libs-gstvideo.html#GstVideoAlignment"><span class="type">GstVideoAlignment</span></a> applied to symem mappings of <em class="parameter"><code>wrapped_data</code></em>
+. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>target</p></td>
+<td class="parameter_description"><p>the <a class="link" href="gst-plugins-bad-libs-OpenGL-Formats.html#GstGLTextureTarget" title="enum GstGLTextureTarget"><span class="type">GstGLTextureTarget</span></a> for <em class="parameter"><code>wrapped_data</code></em>
+</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>tex_type</p></td>
+<td class="parameter_description"><p>the <span class="type">GstVideoGLTextureType</span> for <em class="parameter"><code>wrapped_data</code></em>
+</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>wrapped_data</p></td>
+<td class="parameter_description"><p>the data pointer to wrap</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 to call <em class="parameter"><code>notify</code></em>
+with. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>notify</p></td>
+<td class="parameter_description"><p> a <a href="/usr/share/gtk-doc/html/glibglib-Datasets.html#GDestroyNotify"><span class="type">GDestroyNotify</span></a>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-gl-video-allocation-params-new-wrapped-data.returns"></a><h4>Returns</h4>
+<p> a new <a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#GstGLVideoAllocationParams" title="struct GstGLVideoAllocationParams"><span class="type">GstGLVideoAllocationParams</span></a> for wrapping <em class="parameter"><code>wrapped_data</code></em>
+</p>
+</div>
+<p class="since">Since: 1.8</p>
</div>
<hr>
<div class="refsect2">
@@ -345,6 +627,85 @@
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> gl_handle</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Datasets.html#GDestroyNotify"><span class="type">GDestroyNotify</span></a> notify</code></em>);</pre>
+<p><em class="parameter"><code>gl_handle</code></em>
+ is defined by the specific OpenGL handle being wrapped
+For <a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#GstGLMemory" title="GstGLMemory"><span class="type">GstGLMemory</span></a> and <a class="link" href="gst-plugins-bad-libs-gstglmemorypbo.html#GstGLMemoryPBO" title="GstGLMemoryPBO"><span class="type">GstGLMemoryPBO</span></a> it is an OpenGL texture id.
+Other memory types may define it to require a different type of parameter.</p>
+<div class="refsect3">
+<a name="gst-gl-video-allocation-params-new-wrapped-gl-handle.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>context</p></td>
+<td class="parameter_description"><p>a <a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>alloc_params</p></td>
+<td class="parameter_description"><p> the <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstAllocator.html#GstAllocationParams-struct"><span class="type">GstAllocationParams</span></a> for <em class="parameter"><code>tex_id</code></em>
+. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>v_info</p></td>
+<td class="parameter_description"><p>the <a href="/usr/share/gtk-doc/html/gst-plugins-base-libs-1.0gst-plugins-base-libs-gstvideo.html#GstVideoInfo"><span class="type">GstVideoInfo</span></a> for <em class="parameter"><code>tex_id</code></em>
+</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>plane</p></td>
+<td class="parameter_description"><p>the video plane <em class="parameter"><code>tex_id</code></em>
+represents</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>valign</p></td>
+<td class="parameter_description"><p> any <a href="/usr/share/gtk-doc/html/gst-plugins-base-libs-1.0gst-plugins-base-libs-gstvideo.html#GstVideoAlignment"><span class="type">GstVideoAlignment</span></a> applied to symem mappings of <em class="parameter"><code>tex_id</code></em>
+. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>target</p></td>
+<td class="parameter_description"><p>the <a class="link" href="gst-plugins-bad-libs-OpenGL-Formats.html#GstGLTextureTarget" title="enum GstGLTextureTarget"><span class="type">GstGLTextureTarget</span></a> for <em class="parameter"><code>tex_id</code></em>
+</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>tex_type</p></td>
+<td class="parameter_description"><p>the <span class="type">GstVideoGLTextureType</span> for <em class="parameter"><code>tex_id</code></em>
+</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>gl_handle</p></td>
+<td class="parameter_description"><p>the GL handle to wrap</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 to call <em class="parameter"><code>notify</code></em>
+with. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>notify</p></td>
+<td class="parameter_description"><p> a <a href="/usr/share/gtk-doc/html/glibglib-Datasets.html#GDestroyNotify"><span class="type">GDestroyNotify</span></a>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-gl-video-allocation-params-new-wrapped-gl-handle.returns"></a><h4>Returns</h4>
+<p> a new <a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#GstGLVideoAllocationParams" title="struct GstGLVideoAllocationParams"><span class="type">GstGLVideoAllocationParams</span></a> for wrapping <em class="parameter"><code>gl_handle</code></em>
+</p>
+</div>
+<p class="since">Since: 1.8</p>
</div>
<hr>
<div class="refsect2">
@@ -361,18 +722,117 @@
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="type">guint</span></a> tex_id</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Datasets.html#GDestroyNotify"><span class="type">GDestroyNotify</span></a> notify</code></em>);</pre>
+<div class="refsect3">
+<a name="gst-gl-video-allocation-params-new-wrapped-texture.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>context</p></td>
+<td class="parameter_description"><p>a <a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>alloc_params</p></td>
+<td class="parameter_description"><p> the <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstAllocator.html#GstAllocationParams-struct"><span class="type">GstAllocationParams</span></a> for <em class="parameter"><code>tex_id</code></em>
+. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>v_info</p></td>
+<td class="parameter_description"><p>the <a href="/usr/share/gtk-doc/html/gst-plugins-base-libs-1.0gst-plugins-base-libs-gstvideo.html#GstVideoInfo"><span class="type">GstVideoInfo</span></a> for <em class="parameter"><code>tex_id</code></em>
+</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>plane</p></td>
+<td class="parameter_description"><p>the video plane <em class="parameter"><code>tex_id</code></em>
+represents</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>valign</p></td>
+<td class="parameter_description"><p> any <a href="/usr/share/gtk-doc/html/gst-plugins-base-libs-1.0gst-plugins-base-libs-gstvideo.html#GstVideoAlignment"><span class="type">GstVideoAlignment</span></a> applied to symem mappings of <em class="parameter"><code>tex_id</code></em>
+. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>target</p></td>
+<td class="parameter_description"><p>the <a class="link" href="gst-plugins-bad-libs-OpenGL-Formats.html#GstGLTextureTarget" title="enum GstGLTextureTarget"><span class="type">GstGLTextureTarget</span></a> for <em class="parameter"><code>tex_id</code></em>
+</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>tex_type</p></td>
+<td class="parameter_description"><p>the <span class="type">GstGLTextureType</span> for <em class="parameter"><code>tex_id</code></em>
+</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>tex_id</p></td>
+<td class="parameter_description"><p>the GL texture to wrap</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 to call <em class="parameter"><code>notify</code></em>
+with. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>notify</p></td>
+<td class="parameter_description"><p> a <a href="/usr/share/gtk-doc/html/glibglib-Datasets.html#GDestroyNotify"><span class="type">GDestroyNotify</span></a>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-gl-video-allocation-params-new-wrapped-texture.returns"></a><h4>Returns</h4>
+<p> a new <a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#GstGLVideoAllocationParams" title="struct GstGLVideoAllocationParams"><span class="type">GstGLVideoAllocationParams</span></a> for wrapping <em class="parameter"><code>tex_id</code></em>
+</p>
+</div>
+<p class="since">Since: 1.8</p>
</div>
<hr>
<div class="refsect2">
<a name="gst-gl-memory-allocator-get-default"></a><h3>gst_gl_memory_allocator_get_default ()</h3>
<pre class="programlisting"><a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#GstGLMemoryAllocator"><span class="returnvalue">GstGLMemoryAllocator</span></a> *
gst_gl_memory_allocator_get_default (<em class="parameter"><code><a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a> *context</code></em>);</pre>
+<div class="refsect3">
+<a name="gst-gl-memory-allocator-get-default.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>context</p></td>
+<td class="parameter_description"><p>a <a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-gl-memory-allocator-get-default.returns"></a><h4>Returns</h4>
+<p> the default <a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#GstGLMemoryAllocator"><span class="type">GstGLMemoryAllocator</span></a> supported by <em class="parameter"><code>context</code></em>
+</p>
+</div>
+<p class="since">Since: 1.8</p>
</div>
<hr>
<div class="refsect2">
<a name="gst-gl-memory-init-once"></a><h3>gst_gl_memory_init_once ()</h3>
<pre class="programlisting"><span class="returnvalue">void</span>
gst_gl_memory_init_once (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<p>Initializes the GL Base Texture allocator. It is safe to call this function
+multiple times. This must be called before any other GstGLMemory operation.</p>
+<p class="since">Since: 1.4</p>
</div>
<hr>
<div class="refsect2">
@@ -390,12 +850,107 @@
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/gst-plugins-base-libs-1.0gst-plugins-base-libs-gstvideo.html#GstVideoAlignment"><span class="type">GstVideoAlignment</span></a> *valign</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Datasets.html#GDestroyNotify"><span class="type">GDestroyNotify</span></a> notify</code></em>);</pre>
+<p>Initializes <em class="parameter"><code>mem</code></em>
+ with the required parameters. <em class="parameter"><code>info</code></em>
+ is assumed to have
+already have been modified with <a href="/usr/share/gtk-doc/html/gst-plugins-base-libs-1.0gst-plugins-base-libs-gstvideo.html#gst-video-info-align"><code class="function">gst_video_info_align()</code></a>.</p>
+<div class="refsect3">
+<a name="gst-gl-memory-init.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>mem</p></td>
+<td class="parameter_description"><p>the <a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemory" title="GstGLBaseMemory"><span class="type">GstGLBaseMemory</span></a> to initialize</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>allocator</p></td>
+<td class="parameter_description"><p>the <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstAllocator.html#GstAllocator-struct"><span class="type">GstAllocator</span></a> to initialize with</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>parent</p></td>
+<td class="parameter_description"><p> the parent <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstMemory.html#GstMemory-struct"><span class="type">GstMemory</span></a> to initialize with. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>context</p></td>
+<td class="parameter_description"><p>the <a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a> to initialize with</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>target</p></td>
+<td class="parameter_description"><p>the <a class="link" href="gst-plugins-bad-libs-OpenGL-Formats.html#GstGLTextureTarget" title="enum GstGLTextureTarget"><span class="type">GstGLTextureTarget</span></a> for this <a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#GstGLMemory" title="GstGLMemory"><span class="type">GstGLMemory</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>params</p></td>
+<td class="parameter_description"><p> the <em class="parameter"><code>GstAllocationParams</code></em>
+to initialize with. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>info</p></td>
+<td class="parameter_description"><p>the <a href="/usr/share/gtk-doc/html/gst-plugins-base-libs-1.0gst-plugins-base-libs-gstvideo.html#GstVideoInfo"><span class="type">GstVideoInfo</span></a> for this <a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#GstGLMemory" title="GstGLMemory"><span class="type">GstGLMemory</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>plane</p></td>
+<td class="parameter_description"><p>the plane number (starting from 0) for this <a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#GstGLMemory" title="GstGLMemory"><span class="type">GstGLMemory</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>valign</p></td>
+<td class="parameter_description"><p> optional <a href="/usr/share/gtk-doc/html/gst-plugins-base-libs-1.0gst-plugins-base-libs-gstvideo.html#GstVideoAlignment"><span class="type">GstVideoAlignment</span></a> parameters. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>notify</p></td>
+<td class="parameter_description"><p> a <a href="/usr/share/gtk-doc/html/glibglib-Datasets.html#GDestroyNotify"><span class="type">GDestroyNotify</span></a>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>user_data</p></td>
+<td class="parameter_description"><p> user data to call <em class="parameter"><code>notify</code></em>
+with. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 1.8</p>
</div>
<hr>
<div class="refsect2">
<a name="gst-is-gl-memory"></a><h3>gst_is_gl_memory ()</h3>
<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
gst_is_gl_memory (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/gstreamer-1.0GstMemory.html#GstMemory-struct"><span class="type">GstMemory</span></a> *mem</code></em>);</pre>
+<div class="refsect3">
+<a name="gst-is-gl-memory.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>mem</p></td>
+<td class="parameter_description"><p>a <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstMemory.html#GstMemory-struct"><span class="type">GstMemory</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-is-gl-memory.returns"></a><h4>Returns</h4>
+<p> whether the memory at <em class="parameter"><code>mem</code></em>
+is a <a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#GstGLMemory" title="GstGLMemory"><span class="type">GstGLMemory</span></a></p>
+</div>
+<p class="since">Since: 1.4</p>
</div>
<hr>
<div class="refsect2">
@@ -407,6 +962,63 @@
<em class="parameter"><code><span class="type">GstVideoGLTextureType</span> tex_type</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint"><span class="type">gint</span></a> width</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint"><span class="type">gint</span></a> height</code></em>);</pre>
+<p>Copies <em class="parameter"><code>gl_mem</code></em>
+ into the texture specfified by <em class="parameter"><code>tex_id</code></em>
+. The format of <em class="parameter"><code>tex_id</code></em>
+
+is specified by <em class="parameter"><code>tex_type</code></em>
+, <em class="parameter"><code>width</code></em>
+ and <em class="parameter"><code>height</code></em>
+.</p>
+<div class="refsect3">
+<a name="gst-gl-memory-copy-into.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>gl_mem</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#GstGLMemory" title="GstGLMemory"><span class="type">GstGLMemory</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>tex_id</p></td>
+<td class="parameter_description"><p>OpenGL texture id</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>target</p></td>
+<td class="parameter_description"><p>the <a class="link" href="gst-plugins-bad-libs-OpenGL-Formats.html#GstGLTextureTarget" title="enum GstGLTextureTarget"><span class="type">GstGLTextureTarget</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>tex_type</p></td>
+<td class="parameter_description"><p>the <span class="type">GstVideoGLTextureType</span></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>width</p></td>
+<td class="parameter_description"><p>width of <em class="parameter"><code>tex_id</code></em>
+</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>height</p></td>
+<td class="parameter_description"><p>height of <em class="parameter"><code>tex_id</code></em>
+</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-gl-memory-copy-into.returns"></a><h4>Returns</h4>
+<p> Whether the copy suceeded</p>
+</div>
+<p class="since">Since: 1.8</p>
</div>
<hr>
<div class="refsect2">
@@ -425,6 +1037,40 @@
<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
gst_gl_memory_read_pixels (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#GstGLMemory" title="GstGLMemory"><span class="type">GstGLMemory</span></a> *gl_mem</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> read_pointer</code></em>);</pre>
+<p>Reads the texture in <a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#GstGLMemory" title="GstGLMemory"><span class="type">GstGLMemory</span></a> into <em class="parameter"><code>read_pointer</code></em>
+ if no buffer is bound
+to <code class="literal">GL_PIXEL_PACK_BUFFER</code>. Otherwise <em class="parameter"><code>read_pointer</code></em>
+ is the byte offset into
+the currently bound <code class="literal">GL_PIXEL_PACK_BUFFER</code> buffer to store the result of
+glReadPixels. See the OpenGL specification for glReadPixels for more
+details.</p>
+<div class="refsect3">
+<a name="gst-gl-memory-read-pixels.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>gl_mem</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#GstGLMemory" title="GstGLMemory"><span class="type">GstGLMemory</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>read_pointer</p></td>
+<td class="parameter_description"><p>the data pointer to pass to glReadPixels</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-gl-memory-read-pixels.returns"></a><h4>Returns</h4>
+<p> whether theread operation succeeded</p>
+</div>
+<p class="since">Since: 1.8</p>
</div>
<hr>
<div class="refsect2">
@@ -432,36 +1078,166 @@
<pre class="programlisting"><span class="returnvalue">void</span>
gst_gl_memory_texsubimage (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#GstGLMemory" title="GstGLMemory"><span class="type">GstGLMemory</span></a> *gl_mem</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> read_pointer</code></em>);</pre>
+<p>See <a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#gst-gl-memory-read-pixels" title="gst_gl_memory_read_pixels ()"><code class="function">gst_gl_memory_read_pixels()</code></a> for what <em class="parameter"><code>read_pointer</code></em>
+ signifies.</p>
+<div class="refsect3">
+<a name="gst-gl-memory-texsubimage.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>gl_mem</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#GstGLMemory" title="GstGLMemory"><span class="type">GstGLMemory</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>read_pointer</p></td>
+<td class="parameter_description"><p>the data pointer to pass to glTexSubImage</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 1.8</p>
</div>
<hr>
<div class="refsect2">
<a name="gst-gl-memory-get-texture-height"></a><h3>gst_gl_memory_get_texture_height ()</h3>
<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint"><span class="returnvalue">gint</span></a>
gst_gl_memory_get_texture_height (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#GstGLMemory" title="GstGLMemory"><span class="type">GstGLMemory</span></a> *gl_mem</code></em>);</pre>
+<div class="refsect3">
+<a name="gst-gl-memory-get-texture-height.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>gl_mem</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#GstGLMemory" title="GstGLMemory"><span class="type">GstGLMemory</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-gl-memory-get-texture-height.returns"></a><h4>Returns</h4>
+<p> the texture height of <em class="parameter"><code>gl_mem</code></em>
+</p>
+</div>
+<p class="since">Since: 1.8</p>
</div>
<hr>
<div class="refsect2">
<a name="gst-gl-memory-get-texture-id"></a><h3>gst_gl_memory_get_texture_id ()</h3>
<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>
gst_gl_memory_get_texture_id (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#GstGLMemory" title="GstGLMemory"><span class="type">GstGLMemory</span></a> *gl_mem</code></em>);</pre>
+<div class="refsect3">
+<a name="gst-gl-memory-get-texture-id.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>gl_mem</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#GstGLMemory" title="GstGLMemory"><span class="type">GstGLMemory</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-gl-memory-get-texture-id.returns"></a><h4>Returns</h4>
+<p> the OpenGL texture handle of <em class="parameter"><code>gl_mem</code></em>
+</p>
+</div>
+<p class="since">Since: 1.8</p>
</div>
<hr>
<div class="refsect2">
<a name="gst-gl-memory-get-texture-target"></a><h3>gst_gl_memory_get_texture_target ()</h3>
<pre class="programlisting"><a class="link" href="gst-plugins-bad-libs-OpenGL-Formats.html#GstGLTextureTarget" title="enum GstGLTextureTarget"><span class="returnvalue">GstGLTextureTarget</span></a>
gst_gl_memory_get_texture_target (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#GstGLMemory" title="GstGLMemory"><span class="type">GstGLMemory</span></a> *gl_mem</code></em>);</pre>
+<div class="refsect3">
+<a name="gst-gl-memory-get-texture-target.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>gl_mem</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#GstGLMemory" title="GstGLMemory"><span class="type">GstGLMemory</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-gl-memory-get-texture-target.returns"></a><h4>Returns</h4>
+<p> the <a class="link" href="gst-plugins-bad-libs-OpenGL-Formats.html#GstGLTextureTarget" title="enum GstGLTextureTarget"><span class="type">GstGLTextureTarget</span></a> of <em class="parameter"><code>gl_mem</code></em>
+</p>
+</div>
+<p class="since">Since: 1.8</p>
</div>
<hr>
<div class="refsect2">
<a name="gst-gl-memory-get-texture-type"></a><h3>gst_gl_memory_get_texture_type ()</h3>
<pre class="programlisting"><span class="returnvalue">GstVideoGLTextureType</span>
gst_gl_memory_get_texture_type (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#GstGLMemory" title="GstGLMemory"><span class="type">GstGLMemory</span></a> *gl_mem</code></em>);</pre>
+<div class="refsect3">
+<a name="gst-gl-memory-get-texture-type.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>gl_mem</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#GstGLMemory" title="GstGLMemory"><span class="type">GstGLMemory</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-gl-memory-get-texture-type.returns"></a><h4>Returns</h4>
+<p> the <span class="type">GstVideoGLTextureType</span> of <em class="parameter"><code>gl_mem</code></em>
+</p>
+</div>
+<p class="since">Since: 1.8</p>
</div>
<hr>
<div class="refsect2">
<a name="gst-gl-memory-get-texture-width"></a><h3>gst_gl_memory_get_texture_width ()</h3>
<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint"><span class="returnvalue">gint</span></a>
gst_gl_memory_get_texture_width (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#GstGLMemory" title="GstGLMemory"><span class="type">GstGLMemory</span></a> *gl_mem</code></em>);</pre>
+<div class="refsect3">
+<a name="gst-gl-memory-get-texture-width.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>gl_mem</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#GstGLMemory" title="GstGLMemory"><span class="type">GstGLMemory</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-gl-memory-get-texture-width.returns"></a><h4>Returns</h4>
+<p> the texture width of <em class="parameter"><code>gl_mem</code></em>
+</p>
+</div>
+<p class="since">Since: 1.8</p>
</div>
<hr>
<div class="refsect2">
@@ -473,6 +1249,44 @@
<em class="parameter"><code><span class="type">GstVideoGLTextureType</span> *tex_types</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> *wrapped_data</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gsize"><span class="type">gsize</span></a> n_wrapped_pointers</code></em>);</pre>
+<div class="refsect3">
+<a name="gst-gl-memory-setup-buffer.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>allocator</p></td>
+<td class="parameter_description"><p>the <em class="parameter"><code>GstGLMemoryAllocator</code></em>
+to allocate from</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>buffer</p></td>
+<td class="parameter_description"><p>a <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstBuffer.html#GstBuffer-struct"><span class="type">GstBuffer</span></a> to setup</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>params</p></td>
+<td class="parameter_description"><p>the <a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#GstGLVideoAllocationParams" title="struct GstGLVideoAllocationParams"><span class="type">GstGLVideoAllocationParams</span></a> to allocate with</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>tex_types</p></td>
+<td class="parameter_description"><p> a list of <span class="type">GstVideoGLTextureType</span>'s to allocate with. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-gl-memory-setup-buffer.returns"></a><h4>Returns</h4>
+<p> whether the buffer was correctly setup</p>
+</div>
+<p class="since">Since: 1.8</p>
</div>
</div>
<div class="refsect1">
@@ -505,6 +1319,7 @@
<div class="refsect2">
<a name="GstGLMemoryAllocator-struct"></a><h3>GstGLMemoryAllocator</h3>
<pre class="programlisting">typedef struct _GstGLMemoryAllocator GstGLMemoryAllocator;</pre>
+<p>Opaque <a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#GstGLMemoryAllocator"><span class="type">GstGLMemoryAllocator</span></a> struct</p>
</div>
<hr>
<div class="refsect2">
@@ -517,6 +1332,7 @@
GstGLBaseMemoryAllocatorUnmapFunction unmap;
} GstGLMemoryAllocatorClass;
</pre>
+<p>The <a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#GstGLMemoryAllocatorClass" title="GstGLMemoryAllocatorClass"><span class="type">GstGLMemoryAllocatorClass</span></a> only contains private data</p>
</div>
<hr>
<div class="refsect2">
@@ -533,14 +1349,74 @@
gfloat tex_scaling[2];
} GstGLMemory;
</pre>
+<p>Represents information about a GL texture</p>
+<div class="refsect3">
+<a name="GstGLMemory.members"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="300px" class="struct_members_name">
+<col class="struct_members_description">
+<col width="200px" class="struct_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="struct_member_name"><p><a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemory" title="GstGLBaseMemory"><span class="type">GstGLBaseMemory</span></a> <em class="structfield"><code><a name="GstGLMemory.mem"></a>mem</code></em>;</p></td>
+<td class="struct_member_description"><p>the parent object</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="type">guint</span></a> <em class="structfield"><code><a name="GstGLMemory.tex-id"></a>tex_id</code></em>;</p></td>
+<td class="struct_member_description"><p>the GL texture id for this memory</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a class="link" href="gst-plugins-bad-libs-OpenGL-Formats.html#GstGLTextureTarget" title="enum GstGLTextureTarget"><span class="type">GstGLTextureTarget</span></a> <em class="structfield"><code><a name="GstGLMemory.tex-target"></a>tex_target</code></em>;</p></td>
+<td class="struct_member_description"><p>the GL texture target for this memory</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><span class="type">GstVideoGLTextureType</span> <em class="structfield"><code><a name="GstGLMemory.tex-type"></a>tex_type</code></em>;</p></td>
+<td class="struct_member_description"><p>the texture type</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/gst-plugins-base-libs-1.0gst-plugins-base-libs-gstvideo.html#GstVideoInfo"><span class="type">GstVideoInfo</span></a> <em class="structfield"><code><a name="GstGLMemory.info"></a>info</code></em>;</p></td>
+<td class="struct_member_description"><p>the texture's <a href="/usr/share/gtk-doc/html/gst-plugins-base-libs-1.0gst-plugins-base-libs-gstvideo.html#GstVideoInfo"><span class="type">GstVideoInfo</span></a></p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/gst-plugins-base-libs-1.0gst-plugins-base-libs-gstvideo.html#GstVideoAlignment"><span class="type">GstVideoAlignment</span></a> <em class="structfield"><code><a name="GstGLMemory.valign"></a>valign</code></em>;</p></td>
+<td class="struct_member_description"><p>data alignment for system memory mapping</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="type">guint</span></a> <em class="structfield"><code><a name="GstGLMemory.plane"></a>plane</code></em>;</p></td>
+<td class="struct_member_description"><p>data plane in <em class="parameter"><code>info</code></em>
+</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gfloat"><span class="type">gfloat</span></a> <em class="structfield"><code><a name="GstGLMemory.tex-scaling"></a>tex_scaling</code></em>[2];</p></td>
+<td class="struct_member_description"><p>GL shader scaling parameters for <em class="parameter"><code>valign</code></em>
+and/or width/height</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
</div>
<hr>
<div class="refsect2">
<a name="GST-GL-MEMORY-ALLOCATOR-NAME:CAPS"></a><h3>GST_GL_MEMORY_ALLOCATOR_NAME</h3>
<pre class="programlisting">#define GST_GL_MEMORY_ALLOCATOR_NAME "GLMemory"
</pre>
+<p>The name of the GL memory allocator</p>
</div>
</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-libs-GstGLMemory.see-also"></a><h2>See Also</h2>
+<p><a href="/usr/share/gtk-doc/html/gstreamer-1.0GstMemory.html#GstMemory-struct"><span class="type">GstMemory</span></a>, <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstAllocator.html#GstAllocator-struct"><span class="type">GstAllocator</span></a>, <a class="link" href="GstGLBufferPool.html" title="GstGLBufferPool"><span class="type">GstGLBufferPool</span></a></p>
+</div>
</div>
<div class="footer">
<hr>Generated by GTK-Doc V1.25</div>
diff --git a/docs/libs/html/gst-plugins-bad-libs-GstGLSL.html b/docs/libs/html/gst-plugins-bad-libs-GstGLSL.html
index 8a05c20..7352290 100644
--- a/docs/libs/html/gst-plugins-bad-libs-GstGLSL.html
+++ b/docs/libs/html/gst-plugins-bad-libs-GstGLSL.html
@@ -7,7 +7,7 @@
<link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Library Reference Manual">
<link rel="up" href="gl.html" title="OpenGL Helper Library">
<link rel="prev" href="GstGLShader.html" title="GstGLShader">
-<link rel="next" href=".html" title="">
+<link rel="next" href=".html" title="GstGLSLStage">
<meta name="generator" content="GTK-Doc V1.25 (XML mode)">
<link rel="stylesheet" href="style.css" type="text/css">
</head>
@@ -27,7 +27,7 @@
<div class="refnamediv"><table width="100%"><tr>
<td valign="top">
<h2><span class="refentrytitle"><a name="gst-plugins-bad-libs-GstGLSL.top_of_page"></a>GstGLSL</span></h2>
-<p>GstGLSL</p>
+<p>GstGLSL — helpers for dealing with OpenGL shaders</p>
</td>
<td class="gallery_image" valign="top" align="right"></td>
</tr></table></div>
@@ -408,6 +408,10 @@
</div>
</div>
</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-libs-GstGLSL.see-also"></a><h2>See Also</h2>
+<p><a class="link" href=".html#GstGLSLStage"><span class="type">GstGLSLStage</span></a>, <a class="link" href="GstGLShader.html" title="GstGLShader"><span class="type">GstGLShader</span></a></p>
+</div>
</div>
<div class="footer">
<hr>Generated by GTK-Doc V1.25</div>
diff --git a/docs/libs/html/gst-plugins-bad-libs-GstGLSyncMeta.html b/docs/libs/html/gst-plugins-bad-libs-GstGLSyncMeta.html
index 665f20c..32a5453 100644
--- a/docs/libs/html/gst-plugins-bad-libs-GstGLSyncMeta.html
+++ b/docs/libs/html/gst-plugins-bad-libs-GstGLSyncMeta.html
@@ -6,7 +6,7 @@
<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
<link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Library Reference Manual">
<link rel="up" href="gl.html" title="OpenGL Helper Library">
-<link rel="prev" href=".html" title="">
+<link rel="prev" href=".html" title="GstGLSLStage">
<link rel="next" href="GstGLUpload.html" title="GstGLUpload">
<meta name="generator" content="GTK-Doc V1.25 (XML mode)">
<link rel="stylesheet" href="style.css" type="text/css">
diff --git a/docs/libs/html/gst-plugins-bad-libs-GstGLWindowX11.html b/docs/libs/html/gst-plugins-bad-libs-GstGLWindowX11.html
index b60238a..1aa6750 100644
--- a/docs/libs/html/gst-plugins-bad-libs-GstGLWindowX11.html
+++ b/docs/libs/html/gst-plugins-bad-libs-GstGLWindowX11.html
@@ -7,7 +7,7 @@
<link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Library Reference Manual">
<link rel="up" href="gl.html" title="OpenGL Helper Library">
<link rel="prev" href="gst-plugins-bad-libs-GstGLWindowWin32.html" title="GstGLWindowWin32">
-<link rel="next" href="gst-plugins-bad-libs-gstgldebug.html" title="OpenGL Debugging">
+<link rel="next" href="gst-plugins-bad-libs-OpenGL-debugging.html" title="OpenGL debugging">
<meta name="generator" content="GTK-Doc V1.25 (XML mode)">
<link rel="stylesheet" href="style.css" type="text/css">
</head>
@@ -20,7 +20,7 @@
<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
<td><a accesskey="u" href="gl.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
<td><a accesskey="p" href="gst-plugins-bad-libs-GstGLWindowWin32.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="gst-plugins-bad-libs-gstgldebug.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+<td><a accesskey="n" href="gst-plugins-bad-libs-OpenGL-debugging.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
</tr></table>
<div class="refentry">
<a name="gst-plugins-bad-libs-GstGLWindowX11"></a><div class="titlepage"></div>
@@ -114,12 +114,18 @@
<a name="gst-gl-window-x11-trap-x-errors"></a><h3>gst_gl_window_x11_trap_x_errors ()</h3>
<pre class="programlisting"><span class="returnvalue">void</span>
gst_gl_window_x11_trap_x_errors (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<p>Traps every X error until <a class="link" href="gst-plugins-bad-libs-GstGLWindowX11.html#gst-gl-window-x11-untrap-x-errors" title="gst_gl_window_x11_untrap_x_errors ()"><code class="function">gst_gl_window_x11_untrap_x_errors()</code></a> is called.</p>
</div>
<hr>
<div class="refsect2">
<a name="gst-gl-window-x11-untrap-x-errors"></a><h3>gst_gl_window_x11_untrap_x_errors ()</h3>
<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint"><span class="returnvalue">gint</span></a>
gst_gl_window_x11_untrap_x_errors (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<p>Removes the X error trap and returns the current status.</p>
+<div class="refsect3">
+<a name="gst-gl-window-x11-untrap-x-errors.returns"></a><h4>Returns</h4>
+<p> the trapped error code, or 0 for success</p>
+</div>
</div>
</div>
<div class="refsect1">
@@ -129,6 +135,7 @@
<pre class="programlisting">struct GstGLWindowX11 {
};
</pre>
+<p>Opaque <a class="link" href="gst-plugins-bad-libs-GstGLWindowX11.html#GstGLWindowX11" title="struct GstGLWindowX11"><span class="type">GstGLWindowX11</span></a> object</p>
</div>
<hr>
<div class="refsect2">
@@ -136,6 +143,7 @@
<pre class="programlisting">struct GstGLWindowX11Class {
};
</pre>
+<p>Opaque <a class="link" href="gst-plugins-bad-libs-GstGLWindowX11.html#GstGLWindowX11Class" title="struct GstGLWindowX11Class"><span class="type">GstGLWindowX11Class</span></a> object</p>
</div>
</div>
</div>
diff --git a/docs/libs/html/gst-plugins-bad-libs-GstInsertbin.html b/docs/libs/html/gst-plugins-bad-libs-GstInsertbin.html
index 99ca08f..453c1b0 100644
--- a/docs/libs/html/gst-plugins-bad-libs-GstInsertbin.html
+++ b/docs/libs/html/gst-plugins-bad-libs-GstInsertbin.html
@@ -30,7 +30,7 @@
<div class="refnamediv"><table width="100%"><tr>
<td valign="top">
<h2><span class="refentrytitle"><a name="gst-plugins-bad-libs-GstInsertbin.top_of_page"></a>GstInsertbin</span></h2>
-<p>GstInsertbin</p>
+<p>GstInsertbin — A <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstBin.html#GstBin-struct"><span class="type">GstBin</span></a> to insertally link filter-like elements.</p>
</td>
<td class="gallery_image" valign="top" align="right"></td>
</tr></table></div>
@@ -175,6 +175,16 @@
</div>
<div class="refsect1">
<a name="gst-plugins-bad-libs-GstInsertbin.description"></a><h2>Description</h2>
+<p>This element is a <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstBin.html#GstBin-struct"><span class="type">GstBin</span></a> that has a single source and sink pad. It allows
+the user (the application) to easily add and remove filter-like element
+(that has a single source and sink pad), to the pipeline while it is running.
+It features a fully asynchronous API inspired by GLib's GAsyncResult based
+APIs.</p>
+<p>Each operation (addition or removal) can take a callback, this callback
+is guaranteed to be called. Unlike GIO, there is no guarantee about where
+this callback will be called from, it could be called before the action
+returns or it could be called later from another thread. The signature of
+this callback <a class="link" href="gst-plugins-bad-libs-GstInsertbin.html#GstInsertBinCallback" title="GstInsertBinCallback ()"><code class="function">GstInsertBinCallback()</code></a>.</p>
</div>
<div class="refsect1">
<a name="gst-plugins-bad-libs-GstInsertbin.functions_details"></a><h2>Functions</h2>
@@ -185,12 +195,68 @@
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#GstElement-struct"><span class="type">GstElement</span></a> *element</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> success</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);</pre>
+<p>This is the prototype of callbacks to be called when the operation completes.
+It could be called at any time, including as a re-entrant call while the
+operation is requested.</p>
+<div class="refsect3">
+<a name="GstInsertBinCallback.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>insertbin</p></td>
+<td class="parameter_description"><p>A <a class="link" href="gst-plugins-bad-libs-GstInsertbin.html#GstInsertBin"><span class="type">GstInsertBin</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>element</p></td>
+<td class="parameter_description"><p>The <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#GstElement-struct"><span class="type">GstElement</span></a> on which the operation was performed</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>success</p></td>
+<td class="parameter_description"><p><a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the operation was successful</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>user_data</p></td>
+<td class="parameter_description"><p>The user data passed</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
</div>
<hr>
<div class="refsect2">
<a name="gst-insert-bin-new"></a><h3>gst_insert_bin_new ()</h3>
<pre class="programlisting"><a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#GstElement-struct"><span class="returnvalue">GstElement</span></a> *
gst_insert_bin_new (<em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *name</code></em>);</pre>
+<p>Creates a new <a class="link" href="gst-plugins-bad-libs-GstInsertbin.html#GstInsertBin"><span class="type">GstInsertBin</span></a></p>
+<div class="refsect3">
+<a name="gst-insert-bin-new.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>name</p></td>
+<td class="parameter_description"><p> The name of the new <a class="link" href="gst-plugins-bad-libs-GstInsertbin.html#GstInsertBin"><span class="type">GstInsertBin</span></a> element (or <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>). </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-insert-bin-new.returns"></a><h4>Returns</h4>
+<p> The new <a class="link" href="gst-plugins-bad-libs-GstInsertbin.html#GstInsertBin"><span class="type">GstInsertBin</span></a></p>
+</div>
+<p class="since">Since: 1.2</p>
</div>
<hr>
<div class="refsect2">
@@ -200,6 +266,38 @@
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#GstElement-struct"><span class="type">GstElement</span></a> *element</code></em>,
<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-GstInsertbin.html#GstInsertBinCallback" title="GstInsertBinCallback ()"><span class="type">GstInsertBinCallback</span></a> callback</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);</pre>
+<p>This action signal adds the filter like element after any other element
+in the bin.</p>
+<p>Same as the <a class="link" href="gst-plugins-bad-libs-GstInsertbin.html#GstInsertBin-append" title="The “append” signal"><span class="type">“append”</span></a> signal.</p>
+<div class="refsect3">
+<a name="gst-insert-bin-append.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>element</p></td>
+<td class="parameter_description"><p>the <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#GstElement-struct"><span class="type">GstElement</span></a> to add</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>callback</p></td>
+<td class="parameter_description"><p> the callback to call when the element has been
+added or not, or <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="The callback is valid until first called."><span class="acronym">scope async</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>user_data</p></td>
+<td class="parameter_description"><p>The data to pass to the callback</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 1.2</p>
</div>
<hr>
<div class="refsect2">
@@ -209,6 +307,38 @@
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#GstElement-struct"><span class="type">GstElement</span></a> *element</code></em>,
<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-GstInsertbin.html#GstInsertBinCallback" title="GstInsertBinCallback ()"><span class="type">GstInsertBinCallback</span></a> callback</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);</pre>
+<p>This action signal adds the filter like element before any other element
+in the bin.</p>
+<p>Same as the <a class="link" href="gst-plugins-bad-libs-GstInsertbin.html#GstInsertBin-prepend" title="The “prepend” signal"><span class="type">“prepend”</span></a> signal.</p>
+<div class="refsect3">
+<a name="gst-insert-bin-prepend.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>element</p></td>
+<td class="parameter_description"><p>the <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#GstElement-struct"><span class="type">GstElement</span></a> to add</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>callback</p></td>
+<td class="parameter_description"><p> the callback to call when the element has been
+added or not, or <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="The callback is valid until first called."><span class="acronym">scope async</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>user_data</p></td>
+<td class="parameter_description"><p>The data to pass to the callback</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 1.2</p>
</div>
<hr>
<div class="refsect2">
@@ -219,6 +349,45 @@
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#GstElement-struct"><span class="type">GstElement</span></a> *sibling</code></em>,
<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-GstInsertbin.html#GstInsertBinCallback" title="GstInsertBinCallback ()"><span class="type">GstInsertBinCallback</span></a> callback</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);</pre>
+<p>This action signal adds the filter like element after the <em class="parameter"><code>sibling</code></em>
+
+element in the bin.</p>
+<p>Same as the <a class="link" href="gst-plugins-bad-libs-GstInsertbin.html#GstInsertBin-insert-after" title="The “insert-after” signal"><span class="type">“insert-after”</span></a> signal.</p>
+<div class="refsect3">
+<a name="gst-insert-bin-insert-after.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>element</p></td>
+<td class="parameter_description"><p>the <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#GstElement-struct"><span class="type">GstElement</span></a> to add</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>sibling</p></td>
+<td class="parameter_description"><p>the <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#GstElement-struct"><span class="type">GstElement</span></a> to add <em class="parameter"><code>element</code></em>
+after</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>callback</p></td>
+<td class="parameter_description"><p> the callback to call when the element has been
+added or not, or <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="The callback is valid until first called."><span class="acronym">scope async</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>user_data</p></td>
+<td class="parameter_description"><p>The data to pass to the callback</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 1.2</p>
</div>
<hr>
<div class="refsect2">
@@ -229,6 +398,45 @@
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#GstElement-struct"><span class="type">GstElement</span></a> *sibling</code></em>,
<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-GstInsertbin.html#GstInsertBinCallback" title="GstInsertBinCallback ()"><span class="type">GstInsertBinCallback</span></a> callback</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);</pre>
+<p>This action signal adds the filter like element before the <em class="parameter"><code>sibling</code></em>
+
+element in the bin.</p>
+<p>Same as the <a class="link" href="gst-plugins-bad-libs-GstInsertbin.html#GstInsertBin-insert-before" title="The “insert-before” signal"><span class="type">“insert-before”</span></a> signal.</p>
+<div class="refsect3">
+<a name="gst-insert-bin-insert-before.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>element</p></td>
+<td class="parameter_description"><p>the <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#GstElement-struct"><span class="type">GstElement</span></a> to add</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>sibling</p></td>
+<td class="parameter_description"><p>the <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#GstElement-struct"><span class="type">GstElement</span></a> to add <em class="parameter"><code>element</code></em>
+before</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>callback</p></td>
+<td class="parameter_description"><p> the callback to call when the element has been
+added or not, or <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="The callback is valid until first called."><span class="acronym">scope async</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>user_data</p></td>
+<td class="parameter_description"><p>The data to pass to the callback</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 1.2</p>
</div>
<hr>
<div class="refsect2">
@@ -238,6 +446,37 @@
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#GstElement-struct"><span class="type">GstElement</span></a> *element</code></em>,
<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-GstInsertbin.html#GstInsertBinCallback" title="GstInsertBinCallback ()"><span class="type">GstInsertBinCallback</span></a> callback</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);</pre>
+<p>This action signal removed the filter like element from the bin.</p>
+<p>Same as the <a class="link" href="gst-plugins-bad-libs-GstInsertbin.html#GstInsertBin-remove" title="The “remove” signal"><span class="type">“remove”</span></a> signal.</p>
+<div class="refsect3">
+<a name="gst-insert-bin-remove.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>element</p></td>
+<td class="parameter_description"><p>the <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#GstElement-struct"><span class="type">GstElement</span></a> to remove</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>callback</p></td>
+<td class="parameter_description"><p> the callback to call when the element has been
+removed or not, or <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="The callback is valid until first called."><span class="acronym">scope async</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>user_data</p></td>
+<td class="parameter_description"><p>The data to pass to the callback</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 1.2</p>
</div>
</div>
<div class="refsect1">
@@ -245,6 +484,7 @@
<div class="refsect2">
<a name="GstInsertBin-struct"></a><h3>struct GstInsertBin</h3>
<pre class="programlisting">struct GstInsertBin;</pre>
+<p>The object structure.</p>
</div>
<hr>
<div class="refsect2">
@@ -253,6 +493,7 @@
GstBinClass parent_class;
};
</pre>
+<p>The object class structure.</p>
</div>
</div>
<div class="refsect1">
@@ -260,57 +501,276 @@
<div class="refsect2">
<a name="GstInsertBin-append"></a><h3>The <code class="literal">“append”</code> signal</h3>
<pre class="programlisting"><span class="returnvalue">void</span>
-user_function (<a class="link" href="gst-plugins-bad-libs-GstInsertbin.html#GstInsertBin"><span class="type">GstInsertBin</span></a> *gstinsertbin,
- <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#GstElement-struct"><span class="type">GstElement</span></a> *arg1,
- <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> arg2,
- <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> arg3,
+user_function (<a class="link" href="gst-plugins-bad-libs-GstInsertbin.html#GstInsertBin"><span class="type">GstInsertBin</span></a> *element,
+ <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#GstElement-struct"><span class="type">GstElement</span></a> *callback,
+ <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data,
+ <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data2,
<a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data)</pre>
+<p>This action signal adds the filter like element after any other element
+in the bin.</p>
+<p>Same as <a class="link" href="gst-plugins-bad-libs-GstInsertbin.html#gst-insert-bin-append" title="gst_insert_bin_append ()"><code class="function">gst_insert_bin_append()</code></a></p>
+<div class="refsect3">
+<a name="GstInsertBin-append.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>element</p></td>
+<td class="parameter_description"><p>the <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#GstElement-struct"><span class="type">GstElement</span></a> to add</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>callback</p></td>
+<td class="parameter_description"><p>the callback to call when the element has been added or not, or
+<a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>user_data</p></td>
+<td class="parameter_description"><p>The data to pass to the callback</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>user_data2</p></td>
+<td class="parameter_description"><p>The user data of the signal (ignored)</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: <a href="/usr/share/gtk-doc/html/gobjectgobject-Signals.html#G-SIGNAL-ACTION:CAPS">Action</a></p>
</div>
<hr>
<div class="refsect2">
<a name="GstInsertBin-insert-after"></a><h3>The <code class="literal">“insert-after”</code> signal</h3>
<pre class="programlisting"><span class="returnvalue">void</span>
-user_function (<a class="link" href="gst-plugins-bad-libs-GstInsertbin.html#GstInsertBin"><span class="type">GstInsertBin</span></a> *gstinsertbin,
- <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#GstElement-struct"><span class="type">GstElement</span></a> *arg1,
- <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#GstElement-struct"><span class="type">GstElement</span></a> *arg2,
- <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> arg3,
- <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> arg4,
+user_function (<a class="link" href="gst-plugins-bad-libs-GstInsertbin.html#GstInsertBin"><span class="type">GstInsertBin</span></a> *element,
+ <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#GstElement-struct"><span class="type">GstElement</span></a> *sibling,
+ <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#GstElement-struct"><span class="type">GstElement</span></a> *callback,
+ <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data,
+ <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data2,
<a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data)</pre>
+<p>This action signal adds the filter like element after the <em class="parameter"><code>sibling</code></em>
+
+element in the bin.
+element in the bin.</p>
+<p>Same as <a class="link" href="gst-plugins-bad-libs-GstInsertbin.html#gst-insert-bin-insert-after" title="gst_insert_bin_insert_after ()"><code class="function">gst_insert_bin_insert_after()</code></a></p>
+<div class="refsect3">
+<a name="GstInsertBin-insert-after.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>element</p></td>
+<td class="parameter_description"><p>the <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#GstElement-struct"><span class="type">GstElement</span></a> to add</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>sibling</p></td>
+<td class="parameter_description"><p>the <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#GstElement-struct"><span class="type">GstElement</span></a> to add <em class="parameter"><code>element</code></em>
+after</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>callback</p></td>
+<td class="parameter_description"><p>the callback to call when the element has been added or not, or
+<a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>user_data</p></td>
+<td class="parameter_description"><p>The data to pass to the callback</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>user_data2</p></td>
+<td class="parameter_description"><p>The user data of the signal (ignored)</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: <a href="/usr/share/gtk-doc/html/gobjectgobject-Signals.html#G-SIGNAL-ACTION:CAPS">Action</a></p>
</div>
<hr>
<div class="refsect2">
<a name="GstInsertBin-insert-before"></a><h3>The <code class="literal">“insert-before”</code> signal</h3>
<pre class="programlisting"><span class="returnvalue">void</span>
-user_function (<a class="link" href="gst-plugins-bad-libs-GstInsertbin.html#GstInsertBin"><span class="type">GstInsertBin</span></a> *gstinsertbin,
- <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#GstElement-struct"><span class="type">GstElement</span></a> *arg1,
- <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#GstElement-struct"><span class="type">GstElement</span></a> *arg2,
- <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> arg3,
- <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> arg4,
+user_function (<a class="link" href="gst-plugins-bad-libs-GstInsertbin.html#GstInsertBin"><span class="type">GstInsertBin</span></a> *element,
+ <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#GstElement-struct"><span class="type">GstElement</span></a> *sibling,
+ <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#GstElement-struct"><span class="type">GstElement</span></a> *callback,
+ <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data,
+ <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data2,
<a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data)</pre>
+<p>This action signal adds the filter like element before the <em class="parameter"><code>sibling</code></em>
+
+element in the bin.</p>
+<p>Same as <a class="link" href="gst-plugins-bad-libs-GstInsertbin.html#gst-insert-bin-insert-before" title="gst_insert_bin_insert_before ()"><code class="function">gst_insert_bin_insert_before()</code></a></p>
+<div class="refsect3">
+<a name="GstInsertBin-insert-before.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>element</p></td>
+<td class="parameter_description"><p>the <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#GstElement-struct"><span class="type">GstElement</span></a> to add</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>sibling</p></td>
+<td class="parameter_description"><p>the <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#GstElement-struct"><span class="type">GstElement</span></a> to add <em class="parameter"><code>element</code></em>
+before</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>callback</p></td>
+<td class="parameter_description"><p>the callback to call when the element has been added or not, or
+<a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>user_data</p></td>
+<td class="parameter_description"><p>The data to pass to the callback</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>user_data2</p></td>
+<td class="parameter_description"><p>The user data of the signal (ignored)</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: <a href="/usr/share/gtk-doc/html/gobjectgobject-Signals.html#G-SIGNAL-ACTION:CAPS">Action</a></p>
</div>
<hr>
<div class="refsect2">
<a name="GstInsertBin-prepend"></a><h3>The <code class="literal">“prepend”</code> signal</h3>
<pre class="programlisting"><span class="returnvalue">void</span>
-user_function (<a class="link" href="gst-plugins-bad-libs-GstInsertbin.html#GstInsertBin"><span class="type">GstInsertBin</span></a> *gstinsertbin,
- <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#GstElement-struct"><span class="type">GstElement</span></a> *arg1,
- <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> arg2,
- <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> arg3,
+user_function (<a class="link" href="gst-plugins-bad-libs-GstInsertbin.html#GstInsertBin"><span class="type">GstInsertBin</span></a> *element,
+ <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#GstElement-struct"><span class="type">GstElement</span></a> *callback,
+ <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data,
+ <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data2,
<a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data)</pre>
+<p>This action signal adds the filter like element before any other element
+in the bin.</p>
+<p>Same as <a class="link" href="gst-plugins-bad-libs-GstInsertbin.html#gst-insert-bin-prepend" title="gst_insert_bin_prepend ()"><code class="function">gst_insert_bin_prepend()</code></a></p>
+<div class="refsect3">
+<a name="GstInsertBin-prepend.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>element</p></td>
+<td class="parameter_description"><p>the <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#GstElement-struct"><span class="type">GstElement</span></a> to add</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>callback</p></td>
+<td class="parameter_description"><p>the callback to call when the element has been added or not, or
+<a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>user_data</p></td>
+<td class="parameter_description"><p>The data to pass to the callback</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>user_data2</p></td>
+<td class="parameter_description"><p>The user data of the signal (ignored)</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: <a href="/usr/share/gtk-doc/html/gobjectgobject-Signals.html#G-SIGNAL-ACTION:CAPS">Action</a></p>
</div>
<hr>
<div class="refsect2">
<a name="GstInsertBin-remove"></a><h3>The <code class="literal">“remove”</code> signal</h3>
<pre class="programlisting"><span class="returnvalue">void</span>
-user_function (<a class="link" href="gst-plugins-bad-libs-GstInsertbin.html#GstInsertBin"><span class="type">GstInsertBin</span></a> *gstinsertbin,
- <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#GstElement-struct"><span class="type">GstElement</span></a> *arg1,
- <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> arg2,
- <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> arg3,
+user_function (<a class="link" href="gst-plugins-bad-libs-GstInsertbin.html#GstInsertBin"><span class="type">GstInsertBin</span></a> *element,
+ <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#GstElement-struct"><span class="type">GstElement</span></a> *callback,
+ <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data,
+ <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data2,
<a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data)</pre>
+<p>This action signal removed the filter like element from the bin.</p>
+<p>Same as <a class="link" href="gst-plugins-bad-libs-GstInsertbin.html#gst-insert-bin-remove" title="gst_insert_bin_remove ()"><code class="function">gst_insert_bin_remove()</code></a></p>
+<div class="refsect3">
+<a name="GstInsertBin-remove.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>element</p></td>
+<td class="parameter_description"><p>the <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#GstElement-struct"><span class="type">GstElement</span></a> to remove</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>callback</p></td>
+<td class="parameter_description"><p>the callback to call when the element has been removed or not,
+or <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>user_data</p></td>
+<td class="parameter_description"><p>The data to pass to the callback</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>user_data2</p></td>
+<td class="parameter_description"><p>The user data of the signal (ignored)</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: <a href="/usr/share/gtk-doc/html/gobjectgobject-Signals.html#G-SIGNAL-ACTION:CAPS">Action</a></p>
</div>
</div>
diff --git a/docs/libs/html/gst-plugins-bad-libs-GstPhotography.html b/docs/libs/html/gst-plugins-bad-libs-GstPhotography.html
index 9fd47fb..81781f0 100644
--- a/docs/libs/html/gst-plugins-bad-libs-GstPhotography.html
+++ b/docs/libs/html/gst-plugins-bad-libs-GstPhotography.html
@@ -27,11 +27,28 @@
<div class="refnamediv"><table width="100%"><tr>
<td valign="top">
<h2><span class="refentrytitle"><a name="gst-plugins-bad-libs-GstPhotography.top_of_page"></a>GstPhotography</span></h2>
-<p>GstPhotography</p>
+<p>GstPhotography — Interface for digital image capture elements</p>
</td>
<td class="gallery_image" valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
+<a name="gst-plugins-bad-libs-GstPhotography.stability-level"></a><h2>Stability Level</h2>
+<acronym title="Unstable interfaces are experimental or transitional. They are typically used to
+give outside developers early access to new or rapidly changing technology, or
+to provide an interim solution to a problem where a more general solution is
+anticipated. No claims are made about either source or binary compatibility from
+one minor release to the next.
+
+The Unstable interface level is a warning that these interfaces are subject to
+change without warning and should not be used in unbundled products.
+
+Given such caveats, customer impact need not be a factor when considering
+incompatible changes to an Unstable interface in a major or minor release.
+Nonetheless, when such changes are introduced, the changes should still be
+mentioned in the release notes for the affected release.
+"><span class="acronym">Unstable</span></acronym>, unless otherwise indicated
+</div>
+<div class="refsect1">
<a name="gst-plugins-bad-libs-GstPhotography.functions"></a><h2>Functions</h2>
<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
@@ -407,6 +424,11 @@
</div>
<div class="refsect1">
<a name="gst-plugins-bad-libs-GstPhotography.description"></a><h2>Description</h2>
+<p>The interface allows access to some common digital image capture parameters.</p>
+<div class="note">
+ The GstPhotography interface is unstable API and may change in future.
+ One can define GST_USE_UNSTABLE_API to acknowledge and avoid this warning.
+</div>
</div>
<div class="refsect1">
<a name="gst-plugins-bad-libs-GstPhotography.functions_details"></a><h2>Functions</h2>
@@ -415,6 +437,34 @@
<pre class="programlisting"><span class="returnvalue">void</span>
<span class="c_punctuation">(</span>*GstPhotographyCapturePrepared<span class="c_punctuation">)</span> (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> data</code></em>,
<em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstCaps.html#GstCaps-struct"><span class="type">GstCaps</span></a> *configured_caps</code></em>);</pre>
+<p>This callback will be called when the element has finished preparations
+and is ready for image capture. The next buffer that element produces
+will be of <em class="parameter"><code>configured_caps</code></em>
+ format, so this callback allows the application
+to e.g. reconfigure capsfilters in pipeline if any.</p>
+<div class="refsect3">
+<a name="GstPhotographyCapturePrepared.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>data</p></td>
+<td class="parameter_description"><p>user data that has been given, when registering the callback</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>configured_caps</p></td>
+<td class="parameter_description"><p><a href="/usr/share/gtk-doc/html/gstreamer-1.0GstCaps.html#GstCaps-struct"><span class="type">GstCaps</span></a> defining the configured capture format.
+Ownership of these caps stays in the element.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
</div>
<hr>
<div class="refsect2">
@@ -422,6 +472,33 @@
<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
gst_photography_get_ev_compensation (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-GstPhotography.html#GstPhotography" title="GstPhotography"><span class="type">GstPhotography</span></a> *photo</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gfloat"><span class="type">gfloat</span></a> *ev_comp</code></em>);</pre>
+<p>Get the ev compensation value for the <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#GstElement-struct"><span class="type">GstElement</span></a></p>
+<div class="refsect3">
+<a name="gst-photography-get-ev-compensation.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>photo</p></td>
+<td class="parameter_description"><p><a class="link" href="gst-plugins-bad-libs-GstPhotography.html#GstPhotography" title="GstPhotography"><span class="type">GstPhotography</span></a> interface of a <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#GstElement-struct"><span class="type">GstElement</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>ev_comp</p></td>
+<td class="parameter_description"><p>ev compensation value to get</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-photography-get-ev-compensation.returns"></a><h4>Returns</h4>
+<p> <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if getting the value succeeded, <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> otherwise</p>
+</div>
</div>
<hr>
<div class="refsect2">
@@ -429,6 +506,33 @@
<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
gst_photography_get_iso_speed (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-GstPhotography.html#GstPhotography" title="GstPhotography"><span class="type">GstPhotography</span></a> *photo</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="type">guint</span></a> *iso_speed</code></em>);</pre>
+<p>Get the ISO value (light sensivity) for the <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#GstElement-struct"><span class="type">GstElement</span></a></p>
+<div class="refsect3">
+<a name="gst-photography-get-iso-speed.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>photo</p></td>
+<td class="parameter_description"><p><a class="link" href="gst-plugins-bad-libs-GstPhotography.html#GstPhotography" title="GstPhotography"><span class="type">GstPhotography</span></a> interface of a <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#GstElement-struct"><span class="type">GstElement</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>iso_speed</p></td>
+<td class="parameter_description"><p>ISO speed value to get</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-photography-get-iso-speed.returns"></a><h4>Returns</h4>
+<p> <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if getting the value succeeded, <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> otherwise</p>
+</div>
</div>
<hr>
<div class="refsect2">
@@ -436,6 +540,33 @@
<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
gst_photography_get_aperture (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-GstPhotography.html#GstPhotography" title="GstPhotography"><span class="type">GstPhotography</span></a> *photo</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="type">guint</span></a> *aperture</code></em>);</pre>
+<p>Get the aperture value for the <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#GstElement-struct"><span class="type">GstElement</span></a></p>
+<div class="refsect3">
+<a name="gst-photography-get-aperture.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>photo</p></td>
+<td class="parameter_description"><p><a class="link" href="gst-plugins-bad-libs-GstPhotography.html#GstPhotography" title="GstPhotography"><span class="type">GstPhotography</span></a> interface of a <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#GstElement-struct"><span class="type">GstElement</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>aperture</p></td>
+<td class="parameter_description"><p>aperture value to get</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-photography-get-aperture.returns"></a><h4>Returns</h4>
+<p> <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if getting the value succeeded, <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> otherwise</p>
+</div>
</div>
<hr>
<div class="refsect2">
@@ -443,6 +574,33 @@
<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
gst_photography_get_exposure (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-GstPhotography.html#GstPhotography" title="GstPhotography"><span class="type">GstPhotography</span></a> *photo</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint32"><span class="type">guint32</span></a> *exposure</code></em>);</pre>
+<p>Get the fixed exposure time (in us) for the <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#GstElement-struct"><span class="type">GstElement</span></a></p>
+<div class="refsect3">
+<a name="gst-photography-get-exposure.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>photo</p></td>
+<td class="parameter_description"><p><a class="link" href="gst-plugins-bad-libs-GstPhotography.html#GstPhotography" title="GstPhotography"><span class="type">GstPhotography</span></a> interface of a <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#GstElement-struct"><span class="type">GstElement</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>exposure</p></td>
+<td class="parameter_description"><p>exposure time to get</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-photography-get-exposure.returns"></a><h4>Returns</h4>
+<p> <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if getting the value succeeded, <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> otherwise</p>
+</div>
</div>
<hr>
<div class="refsect2">
@@ -451,6 +609,33 @@
gst_photography_get_white_balance_mode
(<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-GstPhotography.html#GstPhotography" title="GstPhotography"><span class="type">GstPhotography</span></a> *photo</code></em>,
<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-GstPhotography.html#GstPhotographyWhiteBalanceMode" title="enum GstPhotographyWhiteBalanceMode"><span class="type">GstPhotographyWhiteBalanceMode</span></a> *wb_mode</code></em>);</pre>
+<p>Get the white balance mode for the <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#GstElement-struct"><span class="type">GstElement</span></a></p>
+<div class="refsect3">
+<a name="gst-photography-get-white-balance-mode.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>photo</p></td>
+<td class="parameter_description"><p><a class="link" href="gst-plugins-bad-libs-GstPhotography.html#GstPhotography" title="GstPhotography"><span class="type">GstPhotography</span></a> interface of a <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#GstElement-struct"><span class="type">GstElement</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>wb_mode</p></td>
+<td class="parameter_description"><p><a class="link" href="gst-plugins-bad-libs-GstPhotography.html#GstPhotographyWhiteBalanceMode" title="enum GstPhotographyWhiteBalanceMode"><span class="type">GstPhotographyWhiteBalanceMode</span></a> to get</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-photography-get-white-balance-mode.returns"></a><h4>Returns</h4>
+<p> <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if getting the value succeeded, <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> otherwise</p>
+</div>
</div>
<hr>
<div class="refsect2">
@@ -458,6 +643,33 @@
<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
gst_photography_get_color_tone_mode (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-GstPhotography.html#GstPhotography" title="GstPhotography"><span class="type">GstPhotography</span></a> *photo</code></em>,
<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-GstPhotography.html#GstPhotographyColorToneMode" title="enum GstPhotographyColorToneMode"><span class="type">GstPhotographyColorToneMode</span></a> *tone_mode</code></em>);</pre>
+<p>Get the color tone mode for the <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#GstElement-struct"><span class="type">GstElement</span></a></p>
+<div class="refsect3">
+<a name="gst-photography-get-color-tone-mode.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>photo</p></td>
+<td class="parameter_description"><p><a class="link" href="gst-plugins-bad-libs-GstPhotography.html#GstPhotography" title="GstPhotography"><span class="type">GstPhotography</span></a> interface of a <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#GstElement-struct"><span class="type">GstElement</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>tone_mode</p></td>
+<td class="parameter_description"><p><a class="link" href="gst-plugins-bad-libs-GstPhotography.html#GstPhotographyColorToneMode" title="enum GstPhotographyColorToneMode"><span class="type">GstPhotographyColorToneMode</span></a> to get</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-photography-get-color-tone-mode.returns"></a><h4>Returns</h4>
+<p> <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if getting the value succeeded, <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> otherwise</p>
+</div>
</div>
<hr>
<div class="refsect2">
@@ -465,6 +677,33 @@
<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
gst_photography_get_scene_mode (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-GstPhotography.html#GstPhotography" title="GstPhotography"><span class="type">GstPhotography</span></a> *photo</code></em>,
<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-GstPhotography.html#GstPhotographySceneMode" title="enum GstPhotographySceneMode"><span class="type">GstPhotographySceneMode</span></a> *scene_mode</code></em>);</pre>
+<p>Get the scene mode for the <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#GstElement-struct"><span class="type">GstElement</span></a></p>
+<div class="refsect3">
+<a name="gst-photography-get-scene-mode.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>photo</p></td>
+<td class="parameter_description"><p><a class="link" href="gst-plugins-bad-libs-GstPhotography.html#GstPhotography" title="GstPhotography"><span class="type">GstPhotography</span></a> interface of a <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#GstElement-struct"><span class="type">GstElement</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>scene_mode</p></td>
+<td class="parameter_description"><p><a class="link" href="gst-plugins-bad-libs-GstPhotography.html#GstPhotographySceneMode" title="enum GstPhotographySceneMode"><span class="type">GstPhotographySceneMode</span></a> to get</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-photography-get-scene-mode.returns"></a><h4>Returns</h4>
+<p> <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if getting the value succeeded, <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> otherwise</p>
+</div>
</div>
<hr>
<div class="refsect2">
@@ -472,6 +711,33 @@
<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
gst_photography_get_flash_mode (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-GstPhotography.html#GstPhotography" title="GstPhotography"><span class="type">GstPhotography</span></a> *photo</code></em>,
<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-GstPhotography.html#GstPhotographyFlashMode" title="enum GstPhotographyFlashMode"><span class="type">GstPhotographyFlashMode</span></a> *flash_mode</code></em>);</pre>
+<p>Get the flash mode for the <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#GstElement-struct"><span class="type">GstElement</span></a></p>
+<div class="refsect3">
+<a name="gst-photography-get-flash-mode.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>photo</p></td>
+<td class="parameter_description"><p><a class="link" href="gst-plugins-bad-libs-GstPhotography.html#GstPhotography" title="GstPhotography"><span class="type">GstPhotography</span></a> interface of a <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#GstElement-struct"><span class="type">GstElement</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>flash_mode</p></td>
+<td class="parameter_description"><p><a class="link" href="gst-plugins-bad-libs-GstPhotography.html#GstPhotographyFlashMode" title="enum GstPhotographyFlashMode"><span class="type">GstPhotographyFlashMode</span></a> to get</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-photography-get-flash-mode.returns"></a><h4>Returns</h4>
+<p> <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if getting the value succeeded, <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> otherwise</p>
+</div>
</div>
<hr>
<div class="refsect2">
@@ -479,6 +745,33 @@
<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
gst_photography_get_flicker_mode (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-GstPhotography.html#GstPhotography" title="GstPhotography"><span class="type">GstPhotography</span></a> *photo</code></em>,
<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-GstPhotography.html#GstPhotographyFlickerReductionMode" title="enum GstPhotographyFlickerReductionMode"><span class="type">GstPhotographyFlickerReductionMode</span></a> *mode</code></em>);</pre>
+<p>Get the flicker mode value for the <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#GstElement-struct"><span class="type">GstElement</span></a></p>
+<div class="refsect3">
+<a name="gst-photography-get-flicker-mode.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>photo</p></td>
+<td class="parameter_description"><p><a class="link" href="gst-plugins-bad-libs-GstPhotography.html#GstPhotography" title="GstPhotography"><span class="type">GstPhotography</span></a> interface of a <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#GstElement-struct"><span class="type">GstElement</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>flicker_mode</p></td>
+<td class="parameter_description"><p>flicker mode value to get</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-photography-get-flicker-mode.returns"></a><h4>Returns</h4>
+<p> <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if getting the value succeeded, <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> otherwise</p>
+</div>
</div>
<hr>
<div class="refsect2">
@@ -486,6 +779,33 @@
<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
gst_photography_get_focus_mode (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-GstPhotography.html#GstPhotography" title="GstPhotography"><span class="type">GstPhotography</span></a> *photo</code></em>,
<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-GstPhotography.html#GstPhotographyFocusMode" title="enum GstPhotographyFocusMode"><span class="type">GstPhotographyFocusMode</span></a> *mode</code></em>);</pre>
+<p>Get the focus mode value for the <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#GstElement-struct"><span class="type">GstElement</span></a></p>
+<div class="refsect3">
+<a name="gst-photography-get-focus-mode.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>photo</p></td>
+<td class="parameter_description"><p><a class="link" href="gst-plugins-bad-libs-GstPhotography.html#GstPhotography" title="GstPhotography"><span class="type">GstPhotography</span></a> interface of a <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#GstElement-struct"><span class="type">GstElement</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>focus_mode</p></td>
+<td class="parameter_description"><p>focus_mode value to get</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-photography-get-focus-mode.returns"></a><h4>Returns</h4>
+<p> <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if getting the value succeeded, <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> otherwise</p>
+</div>
</div>
<hr>
<div class="refsect2">
@@ -493,6 +813,33 @@
<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
gst_photography_get_noise_reduction (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-GstPhotography.html#GstPhotography" title="GstPhotography"><span class="type">GstPhotography</span></a> *photo</code></em>,
<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-GstPhotography.html#GstPhotographyNoiseReduction" title="enum GstPhotographyNoiseReduction"><span class="type">GstPhotographyNoiseReduction</span></a> *noise_reduction</code></em>);</pre>
+<p>Get the noise reduction mode for the <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#GstElement-struct"><span class="type">GstElement</span></a></p>
+<div class="refsect3">
+<a name="gst-photography-get-noise-reduction.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>photo</p></td>
+<td class="parameter_description"><p><a class="link" href="gst-plugins-bad-libs-GstPhotography.html#GstPhotography" title="GstPhotography"><span class="type">GstPhotography</span></a> interface of a <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#GstElement-struct"><span class="type">GstElement</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>noise_reduction</p></td>
+<td class="parameter_description"><p><span class="type">GstPhotographyNoiseReductionMode</span> to get</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-photography-get-noise-reduction.returns"></a><h4>Returns</h4>
+<p> <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if getting the value succeeded, <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> otherwise</p>
+</div>
</div>
<hr>
<div class="refsect2">
@@ -500,6 +847,33 @@
<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
gst_photography_get_zoom (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-GstPhotography.html#GstPhotography" title="GstPhotography"><span class="type">GstPhotography</span></a> *photo</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gfloat"><span class="type">gfloat</span></a> *zoom</code></em>);</pre>
+<p>Get the zoom value for the <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#GstElement-struct"><span class="type">GstElement</span></a></p>
+<div class="refsect3">
+<a name="gst-photography-get-zoom.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>photo</p></td>
+<td class="parameter_description"><p><a class="link" href="gst-plugins-bad-libs-GstPhotography.html#GstPhotography" title="GstPhotography"><span class="type">GstPhotography</span></a> interface of a <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#GstElement-struct"><span class="type">GstElement</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>zoom</p></td>
+<td class="parameter_description"><p>zoom value to get</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-photography-get-zoom.returns"></a><h4>Returns</h4>
+<p> <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if getting the value succeeded, <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> otherwise</p>
+</div>
</div>
<hr>
<div class="refsect2">
@@ -507,6 +881,33 @@
<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
gst_photography_set_ev_compensation (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-GstPhotography.html#GstPhotography" title="GstPhotography"><span class="type">GstPhotography</span></a> *photo</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gfloat"><span class="type">gfloat</span></a> ev_comp</code></em>);</pre>
+<p>Set the ev compensation value for the <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#GstElement-struct"><span class="type">GstElement</span></a></p>
+<div class="refsect3">
+<a name="gst-photography-set-ev-compensation.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>photo</p></td>
+<td class="parameter_description"><p><a class="link" href="gst-plugins-bad-libs-GstPhotography.html#GstPhotography" title="GstPhotography"><span class="type">GstPhotography</span></a> interface of a <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#GstElement-struct"><span class="type">GstElement</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>ev_comp</p></td>
+<td class="parameter_description"><p>ev compensation value to set</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-photography-set-ev-compensation.returns"></a><h4>Returns</h4>
+<p> <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if setting the value succeeded, <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> otherwise</p>
+</div>
</div>
<hr>
<div class="refsect2">
@@ -514,6 +915,33 @@
<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
gst_photography_set_iso_speed (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-GstPhotography.html#GstPhotography" title="GstPhotography"><span class="type">GstPhotography</span></a> *photo</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="type">guint</span></a> iso_speed</code></em>);</pre>
+<p>Set the ISO value (light sensivity) for the <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#GstElement-struct"><span class="type">GstElement</span></a></p>
+<div class="refsect3">
+<a name="gst-photography-set-iso-speed.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>photo</p></td>
+<td class="parameter_description"><p><a class="link" href="gst-plugins-bad-libs-GstPhotography.html#GstPhotography" title="GstPhotography"><span class="type">GstPhotography</span></a> interface of a <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#GstElement-struct"><span class="type">GstElement</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>iso_speed</p></td>
+<td class="parameter_description"><p>ISO speed value to set</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-photography-set-iso-speed.returns"></a><h4>Returns</h4>
+<p> <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if setting the value succeeded, <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> otherwise</p>
+</div>
</div>
<hr>
<div class="refsect2">
@@ -521,6 +949,33 @@
<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
gst_photography_set_aperture (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-GstPhotography.html#GstPhotography" title="GstPhotography"><span class="type">GstPhotography</span></a> *photo</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="type">guint</span></a> aperture</code></em>);</pre>
+<p>Set the aperture value for the <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#GstElement-struct"><span class="type">GstElement</span></a></p>
+<div class="refsect3">
+<a name="gst-photography-set-aperture.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>photo</p></td>
+<td class="parameter_description"><p><a class="link" href="gst-plugins-bad-libs-GstPhotography.html#GstPhotography" title="GstPhotography"><span class="type">GstPhotography</span></a> interface of a <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#GstElement-struct"><span class="type">GstElement</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>aperture</p></td>
+<td class="parameter_description"><p>aperture value to set</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-photography-set-aperture.returns"></a><h4>Returns</h4>
+<p> <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if setting the value succeeded, <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> otherwise</p>
+</div>
</div>
<hr>
<div class="refsect2">
@@ -528,6 +983,33 @@
<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
gst_photography_set_exposure (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-GstPhotography.html#GstPhotography" title="GstPhotography"><span class="type">GstPhotography</span></a> *photo</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="type">guint</span></a> exposure</code></em>);</pre>
+<p>Set the fixed exposure time (in us) for the <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#GstElement-struct"><span class="type">GstElement</span></a></p>
+<div class="refsect3">
+<a name="gst-photography-set-exposure.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>photo</p></td>
+<td class="parameter_description"><p><a class="link" href="gst-plugins-bad-libs-GstPhotography.html#GstPhotography" title="GstPhotography"><span class="type">GstPhotography</span></a> interface of a <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#GstElement-struct"><span class="type">GstElement</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>exposure</p></td>
+<td class="parameter_description"><p>exposure time to set</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-photography-set-exposure.returns"></a><h4>Returns</h4>
+<p> <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if setting the value succeeded, <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> otherwise</p>
+</div>
</div>
<hr>
<div class="refsect2">
@@ -536,6 +1018,33 @@
gst_photography_set_white_balance_mode
(<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-GstPhotography.html#GstPhotography" title="GstPhotography"><span class="type">GstPhotography</span></a> *photo</code></em>,
<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-GstPhotography.html#GstPhotographyWhiteBalanceMode" title="enum GstPhotographyWhiteBalanceMode"><span class="type">GstPhotographyWhiteBalanceMode</span></a> wb_mode</code></em>);</pre>
+<p>Set the white balance mode for the <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#GstElement-struct"><span class="type">GstElement</span></a></p>
+<div class="refsect3">
+<a name="gst-photography-set-white-balance-mode.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>photo</p></td>
+<td class="parameter_description"><p><a class="link" href="gst-plugins-bad-libs-GstPhotography.html#GstPhotography" title="GstPhotography"><span class="type">GstPhotography</span></a> interface of a <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#GstElement-struct"><span class="type">GstElement</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>wb_mode</p></td>
+<td class="parameter_description"><p><a class="link" href="gst-plugins-bad-libs-GstPhotography.html#GstPhotographyWhiteBalanceMode" title="enum GstPhotographyWhiteBalanceMode"><span class="type">GstPhotographyWhiteBalanceMode</span></a> to set</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-photography-set-white-balance-mode.returns"></a><h4>Returns</h4>
+<p> <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if setting the value succeeded, <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> otherwise</p>
+</div>
</div>
<hr>
<div class="refsect2">
@@ -543,6 +1052,33 @@
<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
gst_photography_set_color_tone_mode (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-GstPhotography.html#GstPhotography" title="GstPhotography"><span class="type">GstPhotography</span></a> *photo</code></em>,
<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-GstPhotography.html#GstPhotographyColorToneMode" title="enum GstPhotographyColorToneMode"><span class="type">GstPhotographyColorToneMode</span></a> tone_mode</code></em>);</pre>
+<p>Set the color tone mode for the <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#GstElement-struct"><span class="type">GstElement</span></a></p>
+<div class="refsect3">
+<a name="gst-photography-set-color-tone-mode.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>photo</p></td>
+<td class="parameter_description"><p><a class="link" href="gst-plugins-bad-libs-GstPhotography.html#GstPhotography" title="GstPhotography"><span class="type">GstPhotography</span></a> interface of a <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#GstElement-struct"><span class="type">GstElement</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>tone_mode</p></td>
+<td class="parameter_description"><p><a class="link" href="gst-plugins-bad-libs-GstPhotography.html#GstPhotographyColorToneMode" title="enum GstPhotographyColorToneMode"><span class="type">GstPhotographyColorToneMode</span></a> to set</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-photography-set-color-tone-mode.returns"></a><h4>Returns</h4>
+<p> <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if setting the value succeeded, <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> otherwise</p>
+</div>
</div>
<hr>
<div class="refsect2">
@@ -550,6 +1086,33 @@
<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
gst_photography_set_scene_mode (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-GstPhotography.html#GstPhotography" title="GstPhotography"><span class="type">GstPhotography</span></a> *photo</code></em>,
<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-GstPhotography.html#GstPhotographySceneMode" title="enum GstPhotographySceneMode"><span class="type">GstPhotographySceneMode</span></a> scene_mode</code></em>);</pre>
+<p>Set the scene mode for the <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#GstElement-struct"><span class="type">GstElement</span></a></p>
+<div class="refsect3">
+<a name="gst-photography-set-scene-mode.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>photo</p></td>
+<td class="parameter_description"><p><a class="link" href="gst-plugins-bad-libs-GstPhotography.html#GstPhotography" title="GstPhotography"><span class="type">GstPhotography</span></a> interface of a <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#GstElement-struct"><span class="type">GstElement</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>scene_mode</p></td>
+<td class="parameter_description"><p><a class="link" href="gst-plugins-bad-libs-GstPhotography.html#GstPhotographySceneMode" title="enum GstPhotographySceneMode"><span class="type">GstPhotographySceneMode</span></a> to set</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-photography-set-scene-mode.returns"></a><h4>Returns</h4>
+<p> <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if setting the value succeeded, <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> otherwise</p>
+</div>
</div>
<hr>
<div class="refsect2">
@@ -557,6 +1120,33 @@
<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
gst_photography_set_flash_mode (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-GstPhotography.html#GstPhotography" title="GstPhotography"><span class="type">GstPhotography</span></a> *photo</code></em>,
<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-GstPhotography.html#GstPhotographyFlashMode" title="enum GstPhotographyFlashMode"><span class="type">GstPhotographyFlashMode</span></a> flash_mode</code></em>);</pre>
+<p>Set the flash mode for the <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#GstElement-struct"><span class="type">GstElement</span></a></p>
+<div class="refsect3">
+<a name="gst-photography-set-flash-mode.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>photo</p></td>
+<td class="parameter_description"><p><a class="link" href="gst-plugins-bad-libs-GstPhotography.html#GstPhotography" title="GstPhotography"><span class="type">GstPhotography</span></a> interface of a <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#GstElement-struct"><span class="type">GstElement</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>flash_mode</p></td>
+<td class="parameter_description"><p><a class="link" href="gst-plugins-bad-libs-GstPhotography.html#GstPhotographyFlashMode" title="enum GstPhotographyFlashMode"><span class="type">GstPhotographyFlashMode</span></a> to set</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-photography-set-flash-mode.returns"></a><h4>Returns</h4>
+<p> <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if setting the value succeeded, <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> otherwise</p>
+</div>
</div>
<hr>
<div class="refsect2">
@@ -564,6 +1154,33 @@
<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
gst_photography_set_flicker_mode (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-GstPhotography.html#GstPhotography" title="GstPhotography"><span class="type">GstPhotography</span></a> *photo</code></em>,
<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-GstPhotography.html#GstPhotographyFlickerReductionMode" title="enum GstPhotographyFlickerReductionMode"><span class="type">GstPhotographyFlickerReductionMode</span></a> mode</code></em>);</pre>
+<p>Set the flicker mode value for the <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#GstElement-struct"><span class="type">GstElement</span></a>.</p>
+<div class="refsect3">
+<a name="gst-photography-set-flicker-mode.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>photo</p></td>
+<td class="parameter_description"><p><a class="link" href="gst-plugins-bad-libs-GstPhotography.html#GstPhotography" title="GstPhotography"><span class="type">GstPhotography</span></a> interface of a <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#GstElement-struct"><span class="type">GstElement</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>flicker_mode</p></td>
+<td class="parameter_description"><p>flicker mode value to set</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-photography-set-flicker-mode.returns"></a><h4>Returns</h4>
+<p> <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if setting the value succeeded, <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> otherwise</p>
+</div>
</div>
<hr>
<div class="refsect2">
@@ -571,6 +1188,33 @@
<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
gst_photography_set_focus_mode (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-GstPhotography.html#GstPhotography" title="GstPhotography"><span class="type">GstPhotography</span></a> *photo</code></em>,
<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-GstPhotography.html#GstPhotographyFocusMode" title="enum GstPhotographyFocusMode"><span class="type">GstPhotographyFocusMode</span></a> mode</code></em>);</pre>
+<p>Set the focus mode value for the <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#GstElement-struct"><span class="type">GstElement</span></a>.</p>
+<div class="refsect3">
+<a name="gst-photography-set-focus-mode.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>photo</p></td>
+<td class="parameter_description"><p><a class="link" href="gst-plugins-bad-libs-GstPhotography.html#GstPhotography" title="GstPhotography"><span class="type">GstPhotography</span></a> interface of a <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#GstElement-struct"><span class="type">GstElement</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>focus_mode</p></td>
+<td class="parameter_description"><p>focus mode value to set</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-photography-set-focus-mode.returns"></a><h4>Returns</h4>
+<p> <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if setting the value succeeded, <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> otherwise</p>
+</div>
</div>
<hr>
<div class="refsect2">
@@ -578,6 +1222,33 @@
<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
gst_photography_set_noise_reduction (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-GstPhotography.html#GstPhotography" title="GstPhotography"><span class="type">GstPhotography</span></a> *photo</code></em>,
<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-GstPhotography.html#GstPhotographyNoiseReduction" title="enum GstPhotographyNoiseReduction"><span class="type">GstPhotographyNoiseReduction</span></a> noise_reduction</code></em>);</pre>
+<p>Set the noise reduction mode for the <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#GstElement-struct"><span class="type">GstElement</span></a></p>
+<div class="refsect3">
+<a name="gst-photography-set-noise-reduction.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>photo</p></td>
+<td class="parameter_description"><p><a class="link" href="gst-plugins-bad-libs-GstPhotography.html#GstPhotography" title="GstPhotography"><span class="type">GstPhotography</span></a> interface of a <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#GstElement-struct"><span class="type">GstElement</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>noise_reduction</p></td>
+<td class="parameter_description"><p><span class="type">GstPhotographyNoiseReductionMode</span> to set</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-photography-set-noise-reduction.returns"></a><h4>Returns</h4>
+<p> <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if setting the value succeeded, <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> otherwise</p>
+</div>
</div>
<hr>
<div class="refsect2">
@@ -585,12 +1256,61 @@
<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
gst_photography_set_zoom (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-GstPhotography.html#GstPhotography" title="GstPhotography"><span class="type">GstPhotography</span></a> *photo</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gfloat"><span class="type">gfloat</span></a> zoom</code></em>);</pre>
+<p>Set the zoom value for the <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#GstElement-struct"><span class="type">GstElement</span></a>.
+E.g. 1.0 to get original image and 3.0 for 3x zoom and so on.</p>
+<div class="refsect3">
+<a name="gst-photography-set-zoom.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>photo</p></td>
+<td class="parameter_description"><p><a class="link" href="gst-plugins-bad-libs-GstPhotography.html#GstPhotography" title="GstPhotography"><span class="type">GstPhotography</span></a> interface of a <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#GstElement-struct"><span class="type">GstElement</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>zoom</p></td>
+<td class="parameter_description"><p>zoom value to set</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-photography-set-zoom.returns"></a><h4>Returns</h4>
+<p> <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if setting the value succeeded, <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> otherwise</p>
+</div>
</div>
<hr>
<div class="refsect2">
<a name="gst-photography-get-capabilities"></a><h3>gst_photography_get_capabilities ()</h3>
<pre class="programlisting"><a class="link" href="gst-plugins-bad-libs-GstPhotography.html#GstPhotographyCaps" title="enum GstPhotographyCaps"><span class="returnvalue">GstPhotographyCaps</span></a>
gst_photography_get_capabilities (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-GstPhotography.html#GstPhotography" title="GstPhotography"><span class="type">GstPhotography</span></a> *photo</code></em>);</pre>
+<p>Get <a class="link" href="gst-plugins-bad-libs-GstPhotography.html#GstPhotographyCaps" title="enum GstPhotographyCaps"><span class="type">GstPhotographyCaps</span></a> bitmask value that indicates what photography
+interface features the <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#GstElement-struct"><span class="type">GstElement</span></a> supports</p>
+<div class="refsect3">
+<a name="gst-photography-get-capabilities.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>photo</p></td>
+<td class="parameter_description"><p><a class="link" href="gst-plugins-bad-libs-GstPhotography.html#GstPhotography" title="GstPhotography"><span class="type">GstPhotography</span></a> interface of a <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#GstElement-struct"><span class="type">GstElement</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-photography-get-capabilities.returns"></a><h4>Returns</h4>
+<p> <a class="link" href="gst-plugins-bad-libs-GstPhotography.html#GstPhotographyCaps" title="enum GstPhotographyCaps"><span class="type">GstPhotographyCaps</span></a> value</p>
+</div>
</div>
<hr>
<div class="refsect2">
@@ -600,6 +1320,47 @@
<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-GstPhotography.html#GstPhotographyCapturePrepared" title="GstPhotographyCapturePrepared ()"><span class="type">GstPhotographyCapturePrepared</span></a> func</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/gstreamer-1.0GstCaps.html#GstCaps-struct"><span class="type">GstCaps</span></a> *capture_caps</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);</pre>
+<p>Start preparations for capture. Preparations can take indeterminate
+amount of time and <em class="parameter"><code>func</code></em>
+ callback is called after preparations are
+done. Image capture will begin after callback returns.</p>
+<div class="refsect3">
+<a name="gst-photography-prepare-for-capture.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>photo</p></td>
+<td class="parameter_description"><p><a class="link" href="gst-plugins-bad-libs-GstPhotography.html#GstPhotography" title="GstPhotography"><span class="type">GstPhotography</span></a> interface of a <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#GstElement-struct"><span class="type">GstElement</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>func</p></td>
+<td class="parameter_description"><p>callback that is called after capturing has been prepared</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>capture_caps</p></td>
+<td class="parameter_description"><p><a href="/usr/share/gtk-doc/html/gstreamer-1.0GstCaps.html#GstCaps-struct"><span class="type">GstCaps</span></a> defining the desired format of the captured image</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 that will be passed to the callback <em class="parameter"><code>func</code></em>
+</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-photography-prepare-for-capture.returns"></a><h4>Returns</h4>
+<p> <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if preparations were started (caps were OK), otherwise <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a>.</p>
+</div>
</div>
<hr>
<div class="refsect2">
@@ -607,6 +1368,30 @@
<pre class="programlisting"><span class="returnvalue">void</span>
gst_photography_set_autofocus (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-GstPhotography.html#GstPhotography" title="GstPhotography"><span class="type">GstPhotography</span></a> *photo</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> on</code></em>);</pre>
+<p>Start or stop autofocusing. <a class="link" href="gst-plugins-bad-libs-GstPhotography.html#GST-PHOTOGRAPHY-AUTOFOCUS-DONE:CAPS" title="GST_PHOTOGRAPHY_AUTOFOCUS_DONE"><code class="literal">GST_PHOTOGRAPHY_AUTOFOCUS_DONE</code></a>
+message is posted to bus when autofocusing has finished.</p>
+<div class="refsect3">
+<a name="gst-photography-set-autofocus.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>photo</p></td>
+<td class="parameter_description"><p><a class="link" href="gst-plugins-bad-libs-GstPhotography.html#GstPhotography" title="GstPhotography"><span class="type">GstPhotography</span></a> interface of a <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#GstElement-struct"><span class="type">GstElement</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>on</p></td>
+<td class="parameter_description"><p><a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> to start autofocusing, <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> to stop autofocusing</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
</div>
<hr>
<div class="refsect2">
@@ -614,6 +1399,33 @@
<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
gst_photography_set_config (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-GstPhotography.html#GstPhotography" title="GstPhotography"><span class="type">GstPhotography</span></a> *photo</code></em>,
<em class="parameter"><code><span class="type">GstPhotographySettings</span> *config</code></em>);</pre>
+<p>Set all configuration settings at once.</p>
+<div class="refsect3">
+<a name="gst-photography-set-config.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>photo</p></td>
+<td class="parameter_description"><p><a class="link" href="gst-plugins-bad-libs-GstPhotography.html#GstPhotography" title="GstPhotography"><span class="type">GstPhotography</span></a> interface of a <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#GstElement-struct"><span class="type">GstElement</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>config</p></td>
+<td class="parameter_description"><p><span class="type">GstPhotographySettings</span> containg the configuration</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-photography-set-config.returns"></a><h4>Returns</h4>
+<p> TRUE if configuration was set successfully, otherwise FALSE.</p>
+</div>
</div>
<hr>
<div class="refsect2">
@@ -621,6 +1433,33 @@
<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
gst_photography_get_config (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-GstPhotography.html#GstPhotography" title="GstPhotography"><span class="type">GstPhotography</span></a> *photo</code></em>,
<em class="parameter"><code><span class="type">GstPhotographySettings</span> *config</code></em>);</pre>
+<p>Get all configuration settings at once.</p>
+<div class="refsect3">
+<a name="gst-photography-get-config.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>photo</p></td>
+<td class="parameter_description"><p><a class="link" href="gst-plugins-bad-libs-GstPhotography.html#GstPhotography" title="GstPhotography"><span class="type">GstPhotography</span></a> interface of a <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#GstElement-struct"><span class="type">GstElement</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>config</p></td>
+<td class="parameter_description"><p><span class="type">GstPhotographySettings</span> containg the configuration</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-photography-get-config.returns"></a><h4>Returns</h4>
+<p> TRUE if configuration was got successfully, otherwise FALSE.</p>
+</div>
</div>
</div>
<div class="refsect1">
@@ -628,10 +1467,12 @@
<div class="refsect2">
<a name="GstPhotography"></a><h3>GstPhotography</h3>
<pre class="programlisting">typedef struct _GstPhotography GstPhotography;</pre>
+<p>Opaque <a class="link" href="gst-plugins-bad-libs-GstPhotography.html#GstPhotography" title="GstPhotography"><span class="type">GstPhotography</span></a> data structure.</p>
</div>
<hr>
<div class="refsect2">
<a name="GstPhotographyNoiseReduction"></a><h3>enum GstPhotographyNoiseReduction</h3>
+<p>Noise Reduction features of a photography capture or filter element.</p>
<div class="refsect3">
<a name="GstPhotographyNoiseReduction.members"></a><h4>Members</h4>
<div class="informaltable"><table class="informaltable" width="100%" border="0">
@@ -643,28 +1484,45 @@
<tbody>
<tr>
<td class="enum_member_name"><p><a name="GST-PHOTOGRAPHY-NOISE-REDUCTION-BAYER:CAPS"></a>GST_PHOTOGRAPHY_NOISE_REDUCTION_BAYER</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>Adaptive noise reduction on Bayer
+format</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-PHOTOGRAPHY-NOISE-REDUCTION-YCC:CAPS"></a>GST_PHOTOGRAPHY_NOISE_REDUCTION_YCC</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>reduces the noise on Y and 2-chroma
+images.</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-PHOTOGRAPHY-NOISE-REDUCTION-TEMPORAL:CAPS"></a>GST_PHOTOGRAPHY_NOISE_REDUCTION_TEMPORAL</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>Multi-frame adaptive NR,
+provided for the video mode</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-PHOTOGRAPHY-NOISE-REDUCTION-FIXED:CAPS"></a>GST_PHOTOGRAPHY_NOISE_REDUCTION_FIXED</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>Fixed Pattern Noise refers to noise
+that does not change between frames. The noise is removed from the sensor
+image, by subtracting a previously-captured black image in memory.</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-PHOTOGRAPHY-NOISE-REDUCTION-EXTRA:CAPS"></a>GST_PHOTOGRAPHY_NOISE_REDUCTION_EXTRA</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>Extra Noise Reduction. In the case
+of high-ISO capturing, some noise remains after YCC NR. XNR reduces this
+remaining noise.</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
</tbody>
</table></div>
@@ -673,6 +1531,7 @@
<hr>
<div class="refsect2">
<a name="GstPhotographyWhiteBalanceMode"></a><h3>enum GstPhotographyWhiteBalanceMode</h3>
+<p>Modes for white balance control.</p>
<div class="refsect3">
<a name="GstPhotographyWhiteBalanceMode.members"></a><h4>Members</h4>
<div class="informaltable"><table class="informaltable" width="100%" border="0">
@@ -684,48 +1543,67 @@
<tbody>
<tr>
<td class="enum_member_name"><p><a name="GST-PHOTOGRAPHY-WB-MODE-AUTO:CAPS"></a>GST_PHOTOGRAPHY_WB_MODE_AUTO</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>Choose white balance mode automatically</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-PHOTOGRAPHY-WB-MODE-DAYLIGHT:CAPS"></a>GST_PHOTOGRAPHY_WB_MODE_DAYLIGHT</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>Mode for daylight conditions</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-PHOTOGRAPHY-WB-MODE-CLOUDY:CAPS"></a>GST_PHOTOGRAPHY_WB_MODE_CLOUDY</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>Mode for cloudy conditions</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-PHOTOGRAPHY-WB-MODE-SUNSET:CAPS"></a>GST_PHOTOGRAPHY_WB_MODE_SUNSET</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>Mode for sunset conditions</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-PHOTOGRAPHY-WB-MODE-TUNGSTEN:CAPS"></a>GST_PHOTOGRAPHY_WB_MODE_TUNGSTEN</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>Mode for tungsten lighting</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-PHOTOGRAPHY-WB-MODE-FLUORESCENT:CAPS"></a>GST_PHOTOGRAPHY_WB_MODE_FLUORESCENT</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>Mode for fluorescent lighting</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-PHOTOGRAPHY-WB-MODE-MANUAL:CAPS"></a>GST_PHOTOGRAPHY_WB_MODE_MANUAL</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>Disable automatic white balance adjustment
+and keep current values.</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-PHOTOGRAPHY-WB-MODE-WARM-FLUORESCENT:CAPS"></a>GST_PHOTOGRAPHY_WB_MODE_WARM_FLUORESCENT</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>Mode for warm fluorescent lighting (Since 1.2)</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-PHOTOGRAPHY-WB-MODE-SHADE:CAPS"></a>GST_PHOTOGRAPHY_WB_MODE_SHADE</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>Mode for shade lighting (Since 1.2)</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
</tbody>
</table></div>
@@ -734,6 +1612,7 @@
<hr>
<div class="refsect2">
<a name="GstPhotographyColorToneMode"></a><h3>enum GstPhotographyColorToneMode</h3>
+<p>Modes for special color effects.</p>
<div class="refsect3">
<a name="GstPhotographyColorToneMode.members"></a><h4>Members</h4>
<div class="informaltable"><table class="informaltable" width="100%" border="0">
@@ -745,83 +1624,115 @@
<tbody>
<tr>
<td class="enum_member_name"><p><a name="GST-PHOTOGRAPHY-COLOR-TONE-MODE-NORMAL:CAPS"></a>GST_PHOTOGRAPHY_COLOR_TONE_MODE_NORMAL</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>No effects</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-PHOTOGRAPHY-COLOR-TONE-MODE-SEPIA:CAPS"></a>GST_PHOTOGRAPHY_COLOR_TONE_MODE_SEPIA</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>Sepia</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-PHOTOGRAPHY-COLOR-TONE-MODE-NEGATIVE:CAPS"></a>GST_PHOTOGRAPHY_COLOR_TONE_MODE_NEGATIVE</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>Negative</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-PHOTOGRAPHY-COLOR-TONE-MODE-GRAYSCALE:CAPS"></a>GST_PHOTOGRAPHY_COLOR_TONE_MODE_GRAYSCALE</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>Grayscale</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-PHOTOGRAPHY-COLOR-TONE-MODE-NATURAL:CAPS"></a>GST_PHOTOGRAPHY_COLOR_TONE_MODE_NATURAL</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>Natural</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-PHOTOGRAPHY-COLOR-TONE-MODE-VIVID:CAPS"></a>GST_PHOTOGRAPHY_COLOR_TONE_MODE_VIVID</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>Vivid</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-PHOTOGRAPHY-COLOR-TONE-MODE-COLORSWAP:CAPS"></a>GST_PHOTOGRAPHY_COLOR_TONE_MODE_COLORSWAP</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>Colorswap</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-PHOTOGRAPHY-COLOR-TONE-MODE-SOLARIZE:CAPS"></a>GST_PHOTOGRAPHY_COLOR_TONE_MODE_SOLARIZE</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>Solarize</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-PHOTOGRAPHY-COLOR-TONE-MODE-OUT-OF-FOCUS:CAPS"></a>GST_PHOTOGRAPHY_COLOR_TONE_MODE_OUT_OF_FOCUS</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>Out of focus</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-PHOTOGRAPHY-COLOR-TONE-MODE-SKY-BLUE:CAPS"></a>GST_PHOTOGRAPHY_COLOR_TONE_MODE_SKY_BLUE</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>Sky blue</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-PHOTOGRAPHY-COLOR-TONE-MODE-GRASS-GREEN:CAPS"></a>GST_PHOTOGRAPHY_COLOR_TONE_MODE_GRASS_GREEN</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>Grass green</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-PHOTOGRAPHY-COLOR-TONE-MODE-SKIN-WHITEN:CAPS"></a>GST_PHOTOGRAPHY_COLOR_TONE_MODE_SKIN_WHITEN</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>Skin whiten</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-PHOTOGRAPHY-COLOR-TONE-MODE-POSTERIZE:CAPS"></a>GST_PHOTOGRAPHY_COLOR_TONE_MODE_POSTERIZE</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>Posterize (Since 1.2)</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-PHOTOGRAPHY-COLOR-TONE-MODE-WHITEBOARD:CAPS"></a>GST_PHOTOGRAPHY_COLOR_TONE_MODE_WHITEBOARD</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>Whiteboard (Since 1.2)</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-PHOTOGRAPHY-COLOR-TONE-MODE-BLACKBOARD:CAPS"></a>GST_PHOTOGRAPHY_COLOR_TONE_MODE_BLACKBOARD</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>Blackboard (Since 1.2)</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-PHOTOGRAPHY-COLOR-TONE-MODE-AQUA:CAPS"></a>GST_PHOTOGRAPHY_COLOR_TONE_MODE_AQUA</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>Aqua (Since 1.2)</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
</tbody>
</table></div>
@@ -830,6 +1741,8 @@
<hr>
<div class="refsect2">
<a name="GstPhotographySceneMode"></a><h3>enum GstPhotographySceneMode</h3>
+<p>Each mode contains preset <a class="link" href="gst-plugins-bad-libs-GstPhotography.html#GstPhotography" title="GstPhotography"><span class="type">GstPhotography</span></a> options in order to produce
+good capturing result in certain scene.</p>
<div class="refsect3">
<a name="GstPhotographySceneMode.members"></a><h4>Members</h4>
<div class="informaltable"><table class="informaltable" width="100%" border="0">
@@ -841,93 +1754,135 @@
<tbody>
<tr>
<td class="enum_member_name"><p><a name="GST-PHOTOGRAPHY-SCENE-MODE-MANUAL:CAPS"></a>GST_PHOTOGRAPHY_SCENE_MODE_MANUAL</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>Set individual options manually</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-PHOTOGRAPHY-SCENE-MODE-CLOSEUP:CAPS"></a>GST_PHOTOGRAPHY_SCENE_MODE_CLOSEUP</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>Mode for close objects</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-PHOTOGRAPHY-SCENE-MODE-PORTRAIT:CAPS"></a>GST_PHOTOGRAPHY_SCENE_MODE_PORTRAIT</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>Mode for portraits</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-PHOTOGRAPHY-SCENE-MODE-LANDSCAPE:CAPS"></a>GST_PHOTOGRAPHY_SCENE_MODE_LANDSCAPE</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>Mode for landscapes</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-PHOTOGRAPHY-SCENE-MODE-SPORT:CAPS"></a>GST_PHOTOGRAPHY_SCENE_MODE_SPORT</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>Mode for scene with fast motion</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-PHOTOGRAPHY-SCENE-MODE-NIGHT:CAPS"></a>GST_PHOTOGRAPHY_SCENE_MODE_NIGHT</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>Mode for night conditions</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-PHOTOGRAPHY-SCENE-MODE-AUTO:CAPS"></a>GST_PHOTOGRAPHY_SCENE_MODE_AUTO</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>Choose scene mode automatically</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-PHOTOGRAPHY-SCENE-MODE-ACTION:CAPS"></a>GST_PHOTOGRAPHY_SCENE_MODE_ACTION</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>Take photos of fast moving
+ objects (Since 1.2)</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-PHOTOGRAPHY-SCENE-MODE-NIGHT-PORTRAIT:CAPS"></a>GST_PHOTOGRAPHY_SCENE_MODE_NIGHT_PORTRAIT</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>Take people pictures
+ at night (Since 1.2)</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-PHOTOGRAPHY-SCENE-MODE-THEATRE:CAPS"></a>GST_PHOTOGRAPHY_SCENE_MODE_THEATRE</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>Take photos in a theater (Since 1.2)</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-PHOTOGRAPHY-SCENE-MODE-BEACH:CAPS"></a>GST_PHOTOGRAPHY_SCENE_MODE_BEACH</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>Take pictures on the beach (Since 1.2)</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-PHOTOGRAPHY-SCENE-MODE-SNOW:CAPS"></a>GST_PHOTOGRAPHY_SCENE_MODE_SNOW</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>Take pictures on the snow (Since 1.2)</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-PHOTOGRAPHY-SCENE-MODE-SUNSET:CAPS"></a>GST_PHOTOGRAPHY_SCENE_MODE_SUNSET</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>Take sunset photos (Since 1.2)</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-PHOTOGRAPHY-SCENE-MODE-STEADY-PHOTO:CAPS"></a>GST_PHOTOGRAPHY_SCENE_MODE_STEADY_PHOTO</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>Avoid blurry pictures
+ (for example, due to hand shake) (Since 1.2)</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-PHOTOGRAPHY-SCENE-MODE-FIREWORKS:CAPS"></a>GST_PHOTOGRAPHY_SCENE_MODE_FIREWORKS</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>For shooting firework
+ displays (Since 1.2)</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-PHOTOGRAPHY-SCENE-MODE-PARTY:CAPS"></a>GST_PHOTOGRAPHY_SCENE_MODE_PARTY</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>Take indoor low-light shot (Since 1.2)</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-PHOTOGRAPHY-SCENE-MODE-CANDLELIGHT:CAPS"></a>GST_PHOTOGRAPHY_SCENE_MODE_CANDLELIGHT</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>Capture the naturally warm color
+ of scenes lit by candles (Since 1.2)</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-PHOTOGRAPHY-SCENE-MODE-BARCODE:CAPS"></a>GST_PHOTOGRAPHY_SCENE_MODE_BARCODE</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>Applications are looking for
+ a barcode (Since 1.2)</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
</tbody>
</table></div>
@@ -936,6 +1891,7 @@
<hr>
<div class="refsect2">
<a name="GstPhotographyFlashMode"></a><h3>enum GstPhotographyFlashMode</h3>
+<p>Modes for flash control.</p>
<div class="refsect3">
<a name="GstPhotographyFlashMode.members"></a><h4>Members</h4>
<div class="informaltable"><table class="informaltable" width="100%" border="0">
@@ -947,28 +1903,40 @@
<tbody>
<tr>
<td class="enum_member_name"><p><a name="GST-PHOTOGRAPHY-FLASH-MODE-AUTO:CAPS"></a>GST_PHOTOGRAPHY_FLASH_MODE_AUTO</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>Fire flash automatically according to
+lighting conditions.</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-PHOTOGRAPHY-FLASH-MODE-OFF:CAPS"></a>GST_PHOTOGRAPHY_FLASH_MODE_OFF</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>Never fire flash</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-PHOTOGRAPHY-FLASH-MODE-ON:CAPS"></a>GST_PHOTOGRAPHY_FLASH_MODE_ON</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>Always fire flash</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-PHOTOGRAPHY-FLASH-MODE-FILL-IN:CAPS"></a>GST_PHOTOGRAPHY_FLASH_MODE_FILL_IN</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>Fill in flash</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-PHOTOGRAPHY-FLASH-MODE-RED-EYE:CAPS"></a>GST_PHOTOGRAPHY_FLASH_MODE_RED_EYE</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>Flash mode for reducing chance of
+capturing red eyes</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
</tbody>
</table></div>
@@ -977,6 +1945,7 @@
<hr>
<div class="refsect2">
<a name="GstPhotographyFlickerReductionMode"></a><h3>enum GstPhotographyFlickerReductionMode</h3>
+<p>Reduce flicker in video caused by light source fluctuation.</p>
<div class="refsect3">
<a name="GstPhotographyFlickerReductionMode.members"></a><h4>Members</h4>
<div class="informaltable"><table class="informaltable" width="100%" border="0">
@@ -988,23 +1957,31 @@
<tbody>
<tr>
<td class="enum_member_name"><p><a name="GST-PHOTOGRAPHY-FLICKER-REDUCTION-OFF:CAPS"></a>GST_PHOTOGRAPHY_FLICKER_REDUCTION_OFF</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>Disable flicker reduction</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-PHOTOGRAPHY-FLICKER-REDUCTION-50HZ:CAPS"></a>GST_PHOTOGRAPHY_FLICKER_REDUCTION_50HZ</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>50Hz flicker reduction</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-PHOTOGRAPHY-FLICKER-REDUCTION-60HZ:CAPS"></a>GST_PHOTOGRAPHY_FLICKER_REDUCTION_60HZ</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>60Hz flicker reduction</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-PHOTOGRAPHY-FLICKER-REDUCTION-AUTO:CAPS"></a>GST_PHOTOGRAPHY_FLICKER_REDUCTION_AUTO</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>Choose mode automatically</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
</tbody>
</table></div>
@@ -1013,6 +1990,7 @@
<hr>
<div class="refsect2">
<a name="GstPhotographyFocusMode"></a><h3>enum GstPhotographyFocusMode</h3>
+<p>Choose mode for focusing algorithm.</p>
<div class="refsect3">
<a name="GstPhotographyFocusMode.members"></a><h4>Members</h4>
<div class="informaltable"><table class="informaltable" width="100%" border="0">
@@ -1024,48 +2002,70 @@
<tbody>
<tr>
<td class="enum_member_name"><p><a name="GST-PHOTOGRAPHY-FOCUS-MODE-AUTO:CAPS"></a>GST_PHOTOGRAPHY_FOCUS_MODE_AUTO</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>Choose focus mode automatically</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-PHOTOGRAPHY-FOCUS-MODE-MACRO:CAPS"></a>GST_PHOTOGRAPHY_FOCUS_MODE_MACRO</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>Mode for focusing objects close to lens</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-PHOTOGRAPHY-FOCUS-MODE-PORTRAIT:CAPS"></a>GST_PHOTOGRAPHY_FOCUS_MODE_PORTRAIT</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>Mode for portraits</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-PHOTOGRAPHY-FOCUS-MODE-INFINITY:CAPS"></a>GST_PHOTOGRAPHY_FOCUS_MODE_INFINITY</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>Mode for landscapes and far away objects</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-PHOTOGRAPHY-FOCUS-MODE-HYPERFOCAL:CAPS"></a>GST_PHOTOGRAPHY_FOCUS_MODE_HYPERFOCAL</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>Mode for maximum depth of field, keeping
+focus acceptable both in infinify and as close objects as possible</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-PHOTOGRAPHY-FOCUS-MODE-EXTENDED:CAPS"></a>GST_PHOTOGRAPHY_FOCUS_MODE_EXTENDED</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>Extended focus mode</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-PHOTOGRAPHY-FOCUS-MODE-CONTINUOUS-NORMAL:CAPS"></a>GST_PHOTOGRAPHY_FOCUS_MODE_CONTINUOUS_NORMAL</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>Continuous autofocus mode</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-PHOTOGRAPHY-FOCUS-MODE-CONTINUOUS-EXTENDED:CAPS"></a>GST_PHOTOGRAPHY_FOCUS_MODE_CONTINUOUS_EXTENDED</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>Extended continuous
+autofocus mode</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-PHOTOGRAPHY-FOCUS-MODE-MANUAL:CAPS"></a>GST_PHOTOGRAPHY_FOCUS_MODE_MANUAL</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>Disable automatic focusing
+and keep current value. <span class="type">“lens-focus”</span> property can
+be used to change focus manually.</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
</tbody>
</table></div>
@@ -1074,6 +2074,8 @@
<hr>
<div class="refsect2">
<a name="GstPhotographyFocusStatus"></a><h3>enum GstPhotographyFocusStatus</h3>
+<p>Status of the focusing operation, used in <a class="link" href="gst-plugins-bad-libs-GstPhotography.html#GST-PHOTOGRAPHY-AUTOFOCUS-DONE:CAPS" title="GST_PHOTOGRAPHY_AUTOFOCUS_DONE"><span class="type">GST_PHOTOGRAPHY_AUTOFOCUS_DONE</span></a>
+message.</p>
<div class="refsect3">
<a name="GstPhotographyFocusStatus.members"></a><h4>Members</h4>
<div class="informaltable"><table class="informaltable" width="100%" border="0">
@@ -1085,23 +2087,31 @@
<tbody>
<tr>
<td class="enum_member_name"><p><a name="GST-PHOTOGRAPHY-FOCUS-STATUS-NONE:CAPS"></a>GST_PHOTOGRAPHY_FOCUS_STATUS_NONE</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>No status available</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-PHOTOGRAPHY-FOCUS-STATUS-RUNNING:CAPS"></a>GST_PHOTOGRAPHY_FOCUS_STATUS_RUNNING</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>Focusing is ongoing</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-PHOTOGRAPHY-FOCUS-STATUS-FAIL:CAPS"></a>GST_PHOTOGRAPHY_FOCUS_STATUS_FAIL</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>Focusing failed</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-PHOTOGRAPHY-FOCUS-STATUS-SUCCESS:CAPS"></a>GST_PHOTOGRAPHY_FOCUS_STATUS_SUCCESS</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>Focusing succeeded</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
</tbody>
</table></div>
@@ -1110,6 +2120,8 @@
<hr>
<div class="refsect2">
<a name="GstPhotographyCaps"></a><h3>enum GstPhotographyCaps</h3>
+<p>Bitmask that indicates which <a class="link" href="gst-plugins-bad-libs-GstPhotography.html#GstPhotography" title="GstPhotography"><span class="type">GstPhotography</span></a> interface features an instance
+supports.</p>
<div class="refsect3">
<a name="GstPhotographyCaps.members"></a><h4>Members</h4>
<div class="informaltable"><table class="informaltable" width="100%" border="0">
@@ -1206,6 +2218,8 @@
<hr>
<div class="refsect2">
<a name="GstPhotographyShakeRisk"></a><h3>enum GstPhotographyShakeRisk</h3>
+<p>Risk level of captured image becoming "shaken" due to camera movement and
+too long exposure time. Used in <a class="link" href="gst-plugins-bad-libs-GstPhotography.html#GST-PHOTOGRAPHY-SHAKE-RISK:CAPS" title="GST_PHOTOGRAPHY_SHAKE_RISK"><span class="type">GST_PHOTOGRAPHY_SHAKE_RISK</span></a> <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstMessage.html#GstMessage-struct"><span class="type">GstMessage</span></a>.</p>
<div class="refsect3">
<a name="GstPhotographyShakeRisk.members"></a><h4>Members</h4>
<div class="informaltable"><table class="informaltable" width="100%" border="0">
@@ -1217,18 +2231,24 @@
<tbody>
<tr>
<td class="enum_member_name"><p><a name="GST-PHOTOGRAPHY-SHAKE-RISK-LOW:CAPS"></a>GST_PHOTOGRAPHY_SHAKE_RISK_LOW</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>Low risk</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-PHOTOGRAPHY-SHAKE-RISK-MEDIUM:CAPS"></a>GST_PHOTOGRAPHY_SHAKE_RISK_MEDIUM</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>Medium risk</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-PHOTOGRAPHY-SHAKE-RISK-HIGH:CAPS"></a>GST_PHOTOGRAPHY_SHAKE_RISK_HIGH</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>High risk</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
</tbody>
</table></div>
@@ -1239,12 +2259,48 @@
<a name="GST-PHOTOGRAPHY-AUTOFOCUS-DONE:CAPS"></a><h3>GST_PHOTOGRAPHY_AUTOFOCUS_DONE</h3>
<pre class="programlisting">#define GST_PHOTOGRAPHY_AUTOFOCUS_DONE "autofocus-done"
</pre>
+<p>Name of custom GstMessage that will be posted to <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstBus.html#GstBus-struct"><span class="type">GstBus</span></a> when autofocusing
+is complete.
+This message contains following fields:</p>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
+<li class="listitem"><p>
+ <a class="link" href="gst-plugins-bad-libs-GstPhotography.html#GstPhotographyFocusStatus" title="enum GstPhotographyFocusStatus"><span class="type">GstPhotographyFocusStatus</span></a>
+ <code class="classname">"status"</code>:
+ Tells if focusing succeeded or failed.
+ </p></li>
+<li class="listitem"><p>
+ <a href="/usr/share/gtk-doc/html/gobjectgobject-Type-Information.html#G-TYPE-INT:CAPS"><span class="type">G_TYPE_INT</span></a>
+ <code class="classname">"focus-window-rows"</code>:
+ Tells number of focus matrix rows.
+ </p></li>
+<li class="listitem"><p>
+ <a href="/usr/share/gtk-doc/html/gobjectgobject-Type-Information.html#G-TYPE-INT:CAPS"><span class="type">G_TYPE_INT</span></a>
+ <code class="classname">"focus-window-columns"</code>:
+ Tells number of focus matrix columns.
+ </p></li>
+<li class="listitem"><p>
+ <a href="/usr/share/gtk-doc/html/gobjectgobject-Type-Information.html#G-TYPE-INT:CAPS"><span class="type">G_TYPE_INT</span></a>
+ <code class="classname">"focus-window-mask"</code>:
+ Bitmask containing rows x columns bits which mark the focus points in the
+ focus matrix. Lowest bit (LSB) always represents the top-left corner of the
+ focus matrix. This field is only valid when focusing status is SUCCESS.
+ </p></li>
+</ul></div>
</div>
<hr>
<div class="refsect2">
<a name="GST-PHOTOGRAPHY-SHAKE-RISK:CAPS"></a><h3>GST_PHOTOGRAPHY_SHAKE_RISK</h3>
<pre class="programlisting">#define GST_PHOTOGRAPHY_SHAKE_RISK "shake-risk"
</pre>
+<p>Name of custom GstMessage that is posted to <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstBus.html#GstBus-struct"><span class="type">GstBus</span></a> during autofocusing
+process. It is posted if there is change in the risk of captured image
+becoming "shaken" due to camera movement and too long exposure time.</p>
+<p>This message contains following fields:</p>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
+ <a class="link" href="gst-plugins-bad-libs-GstPhotography.html#GstPhotographyShakeRisk" title="enum GstPhotographyShakeRisk"><span class="type">GstPhotographyShakeRisk</span></a>
+ <code class="classname">"status"</code>:
+ Tells risk level of capturing shaken image.
+ </p></li></ul></div>
</div>
<hr>
<div class="refsect2">
diff --git a/docs/libs/html/gst-plugins-bad-libs-GstVideoAggregator.html b/docs/libs/html/gst-plugins-bad-libs-GstVideoAggregator.html
index 8421f95..6000c20 100644
--- a/docs/libs/html/gst-plugins-bad-libs-GstVideoAggregator.html
+++ b/docs/libs/html/gst-plugins-bad-libs-GstVideoAggregator.html
@@ -27,7 +27,7 @@
<div class="refnamediv"><table width="100%"><tr>
<td valign="top">
<h2><span class="refentrytitle"><a name="gst-plugins-bad-libs-GstVideoAggregator.top_of_page"></a>GstVideoAggregator</span></h2>
-<p>GstVideoAggregator</p>
+<p>GstVideoAggregator — Base class for video aggregators</p>
</td>
<td class="gallery_image" valign="top" align="right"></td>
</tr></table></div>
@@ -52,6 +52,13 @@
</div>
<div class="refsect1">
<a name="gst-plugins-bad-libs-GstVideoAggregator.description"></a><h2>Description</h2>
+<p>VideoAggregator can accept AYUV, ARGB and BGRA video streams. For each of the requested
+sink pads it will compare the incoming geometry and framerate to define the
+output parameters. Indeed output video frames will have the geometry of the
+biggest incoming video stream and the framerate of the fastest incoming one.</p>
+<p>VideoAggregator will do colorspace conversion.</p>
+<p>Zorder for each input stream can be configured on the
+<a class="link" href="gst-plugins-bad-libs-GstVideoAggregatorPad.html#GstVideoAggregatorPad" title="struct GstVideoAggregatorPad"><span class="type">GstVideoAggregatorPad</span></a>.</p>
</div>
<div class="refsect1">
<a name="gst-plugins-bad-libs-GstVideoAggregator.functions_details"></a><h2>Functions</h2>
@@ -68,6 +75,29 @@
GstVideoInfo info;
};
</pre>
+<div class="refsect3">
+<a name="GstVideoAggregator.members"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="300px" class="struct_members_name">
+<col class="struct_members_description">
+<col width="200px" class="struct_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="struct_member_name"><p><a class="link" href="gst-plugins-bad-libs-GstAggregator.html#GstAggregator" title="struct GstAggregator"><span class="type">GstAggregator</span></a> <em class="structfield"><code><a name="GstVideoAggregator.aggregator"></a>aggregator</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/gst-plugins-base-libs-1.0gst-plugins-base-libs-gstvideo.html#GstVideoInfo"><span class="type">GstVideoInfo</span></a> <em class="structfield"><code><a name="GstVideoAggregator.info"></a>info</code></em>;</p></td>
+<td class="struct_member_description"><p>The <a href="/usr/share/gtk-doc/html/gst-plugins-base-libs-1.0gst-plugins-base-libs-gstvideo.html#GstVideoInfo"><span class="type">GstVideoInfo</span></a> representing the currently set
+srcpad caps.</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
</div>
<hr>
<div class="refsect2">
@@ -92,6 +122,71 @@
GstCaps *sink_non_alpha_caps;
};
</pre>
+<div class="refsect3">
+<a name="GstVideoAggregatorClass.members"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="300px" class="struct_members_name">
+<col class="struct_members_description">
+<col width="200px" class="struct_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="struct_member_name"><p><em class="structfield"><code><a name="GstVideoAggregatorClass.update-caps"></a>update_caps</code></em> ()</p></td>
+<td class="struct_member_description"><p>Optional.
+Lets subclasses update the <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstCaps.html#GstCaps-struct"><span class="type">GstCaps</span></a> representing
+the src pad caps before usage. Return <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> to indicate failure.</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><em class="structfield"><code><a name="GstVideoAggregatorClass.fixate-caps"></a>fixate_caps</code></em> ()</p></td>
+<td class="struct_member_description"><p>Fixate and return the src pad caps provided. The function takes
+ownership of <em class="parameter"><code>caps</code></em>
+and returns a fixated version of
+<em class="parameter"><code>caps</code></em>
+. <em class="parameter"><code>caps</code></em>
+is not guaranteed to be writable.</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><em class="structfield"><code><a name="GstVideoAggregatorClass.aggregate-frames"></a>aggregate_frames</code></em> ()</p></td>
+<td class="struct_member_description"><p>Lets subclasses aggregate frames that are ready. Subclasses
+should iterate the GstElement.sinkpads and use the already
+mapped <a href="/usr/share/gtk-doc/html/gst-plugins-base-libs-1.0gst-plugins-base-libs-gstvideo.html#GstVideoFrame"><span class="type">GstVideoFrame</span></a> from GstVideoAggregatorPad.aggregated_frame
+or directly use the <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstBuffer.html#GstBuffer-struct"><span class="type">GstBuffer</span></a> from GstVideoAggregatorPad.buffer
+if it needs to map the buffer in a special way. The result of the
+aggregation should land in <em class="parameter"><code>outbuffer</code></em>
+.</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><em class="structfield"><code><a name="GstVideoAggregatorClass.get-output-buffer"></a>get_output_buffer</code></em> ()</p></td>
+<td class="struct_member_description"><p>Optional.
+Lets subclasses provide a <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstBuffer.html#GstBuffer-struct"><span class="type">GstBuffer</span></a> to be used as <em class="parameter"><code>outbuffer</code></em>
+of
+the <span class="type">aggregate_frames</span> vmethod.</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><em class="structfield"><code><a name="GstVideoAggregatorClass.negotiated-caps"></a>negotiated_caps</code></em> ()</p></td>
+<td class="struct_member_description"><p>Optional.
+Notifies subclasses what caps format has been negotiated</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><em class="structfield"><code><a name="GstVideoAggregatorClass.find-best-format"></a>find_best_format</code></em> ()</p></td>
+<td class="struct_member_description"><p>Optional.
+Lets subclasses decide of the best common format to use.</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/gstreamer-1.0GstCaps.html#GstCaps-struct"><span class="type">GstCaps</span></a> *<em class="structfield"><code><a name="GstVideoAggregatorClass.sink-non-alpha-caps"></a>sink_non_alpha_caps</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
</div>
</div>
</div>
diff --git a/docs/libs/html/gst-plugins-bad-libs-GstVideoAggregatorPad.html b/docs/libs/html/gst-plugins-bad-libs-GstVideoAggregatorPad.html
index 3494b6b..035f1c4 100644
--- a/docs/libs/html/gst-plugins-bad-libs-GstVideoAggregatorPad.html
+++ b/docs/libs/html/gst-plugins-bad-libs-GstVideoAggregatorPad.html
@@ -82,6 +82,56 @@
gboolean ignore_eos;
};
</pre>
+<div class="refsect3">
+<a name="GstVideoAggregatorPad.members"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="300px" class="struct_members_name">
+<col class="struct_members_description">
+<col width="200px" class="struct_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="struct_member_name"><p><a class="link" href="gst-plugins-bad-libs-GstAggregatorPad.html#GstAggregatorPad" title="struct GstAggregatorPad"><span class="type">GstAggregatorPad</span></a> <em class="structfield"><code><a name="GstVideoAggregatorPad.parent"></a>parent</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/gst-plugins-base-libs-1.0gst-plugins-base-libs-gstvideo.html#GstVideoInfo"><span class="type">GstVideoInfo</span></a> <em class="structfield"><code><a name="GstVideoAggregatorPad.info"></a>info</code></em>;</p></td>
+<td class="struct_member_description"><p>The <a href="/usr/share/gtk-doc/html/gst-plugins-base-libs-1.0gst-plugins-base-libs-gstvideo.html#GstVideoInfo"><span class="type">GstVideoInfo</span></a> currently set on the pad</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/gstreamer-1.0GstBuffer.html#GstBuffer-struct"><span class="type">GstBuffer</span></a> *<em class="structfield"><code><a name="GstVideoAggregatorPad.buffer"></a>buffer</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/gst-plugins-base-libs-1.0gst-plugins-base-libs-gstvideo.html#GstVideoInfo"><span class="type">GstVideoInfo</span></a> <em class="structfield"><code><a name="GstVideoAggregatorPad.buffer-vinfo"></a>buffer_vinfo</code></em>;</p></td>
+<td class="struct_member_description"><p>The <a href="/usr/share/gtk-doc/html/gst-plugins-base-libs-1.0gst-plugins-base-libs-gstvideo.html#GstVideoInfo"><span class="type">GstVideoInfo</span></a> representing the type contained
+in <em class="parameter"><code>buffer</code></em>
+</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/gst-plugins-base-libs-1.0gst-plugins-base-libs-gstvideo.html#GstVideoFrame"><span class="type">GstVideoFrame</span></a> *<em class="structfield"><code><a name="GstVideoAggregatorPad.aggregated-frame"></a>aggregated_frame</code></em>;</p></td>
+<td class="struct_member_description"><p>The <a href="/usr/share/gtk-doc/html/gst-plugins-base-libs-1.0gst-plugins-base-libs-gstvideo.html#GstVideoFrame"><span class="type">GstVideoFrame</span></a> ready to be used for aggregation
+inside the aggregate_frames vmethod.</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="type">guint</span></a> <em class="structfield"><code><a name="GstVideoAggregatorPad.zorder"></a>zorder</code></em>;</p></td>
+<td class="struct_member_description"><p>The zorder of this pad</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> <em class="structfield"><code><a name="GstVideoAggregatorPad.ignore-eos"></a>ignore_eos</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
</div>
<hr>
<div class="refsect2">
@@ -102,6 +152,15 @@
gpointer _gst_reserved[GST_PADDING_LARGE];
};
</pre>
+<p><em class="parameter"><code>set_info</code></em>
+: Lets subclass set a converter on the pad,
+ right after a new format has been negotiated.
+<em class="parameter"><code>prepare_frame</code></em>
+: Prepare the frame from the pad buffer (if any)
+ and sets it to <em class="parameter"><code>aggregated_frame</code></em>
+
+<em class="parameter"><code>clean_frame</code></em>
+: clean the frame previously prepared in prepare_frame</p>
</div>
</div>
</div>
diff --git a/docs/libs/html/gst-plugins-bad-libs-gst-isdb-descriptor.html b/docs/libs/html/gst-plugins-bad-libs-ISDB-variants-of-MPEG-TS-descriptors.html
similarity index 80%
rename from docs/libs/html/gst-plugins-bad-libs-gst-isdb-descriptor.html
rename to docs/libs/html/gst-plugins-bad-libs-ISDB-variants-of-MPEG-TS-descriptors.html
index e2d8660..3e9c157 100644
--- a/docs/libs/html/gst-plugins-bad-libs-gst-isdb-descriptor.html
+++ b/docs/libs/html/gst-plugins-bad-libs-ISDB-variants-of-MPEG-TS-descriptors.html
@@ -2,11 +2,11 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>gst-isdb-descriptor: GStreamer Bad Plugins 1.0 Library Reference Manual</title>
+<title>ISDB variants of MPEG-TS descriptors: GStreamer Bad Plugins 1.0 Library Reference Manual</title>
<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
<link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Library Reference Manual">
<link rel="up" href="mpegts.html" title="Mpeg TS helper library">
-<link rel="prev" href="gst-plugins-bad-libs-gst-dvb-descriptor.html" title="gst-dvb-descriptor">
+<link rel="prev" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html" title="DVB variants of MPEG-TS descriptors">
<link rel="next" href="tools.html" title="Useful elements">
<meta name="generator" content="GTK-Doc V1.25 (XML mode)">
<link rel="stylesheet" href="style.css" type="text/css">
@@ -15,24 +15,24 @@
<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
<td width="100%" align="left" class="shortcuts">
<a href="#" class="shortcut">Top</a><span id="nav_description"> <span class="dim">|</span>
- <a href="#gst-plugins-bad-libs-gst-isdb-descriptor.description" class="shortcut">Description</a></span>
+ <a href="#gst-plugins-bad-libs-ISDB-variants-of-MPEG-TS-descriptors.description" class="shortcut">Description</a></span>
</td>
<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
<td><a accesskey="u" href="mpegts.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
-<td><a accesskey="p" href="gst-plugins-bad-libs-gst-dvb-descriptor.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="p" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
<td><a accesskey="n" href="tools.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
</tr></table>
<div class="refentry">
-<a name="gst-plugins-bad-libs-gst-isdb-descriptor"></a><div class="titlepage"></div>
+<a name="gst-plugins-bad-libs-ISDB-variants-of-MPEG-TS-descriptors"></a><div class="titlepage"></div>
<div class="refnamediv"><table width="100%"><tr>
<td valign="top">
-<h2><span class="refentrytitle"><a name="gst-plugins-bad-libs-gst-isdb-descriptor.top_of_page"></a>gst-isdb-descriptor</span></h2>
-<p>gst-isdb-descriptor</p>
+<h2><span class="refentrytitle"><a name="gst-plugins-bad-libs-ISDB-variants-of-MPEG-TS-descriptors.top_of_page"></a>ISDB variants of MPEG-TS descriptors</span></h2>
+<p>ISDB variants of MPEG-TS descriptors — Descriptors for the various ISDB specifications</p>
</td>
<td class="gallery_image" valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="gst-plugins-bad-libs-gst-isdb-descriptor.other"></a><h2>Types and Values</h2>
+<a name="gst-plugins-bad-libs-ISDB-variants-of-MPEG-TS-descriptors.other"></a><h2>Types and Values</h2>
<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="name">
@@ -40,21 +40,29 @@
</colgroup>
<tbody><tr>
<td class="datatype_keyword">enum</td>
-<td class="function_name"><a class="link" href="gst-plugins-bad-libs-gst-isdb-descriptor.html#GstMpegtsISDBDescriptorType" title="enum GstMpegtsISDBDescriptorType">GstMpegtsISDBDescriptorType</a></td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-libs-ISDB-variants-of-MPEG-TS-descriptors.html#GstMpegtsISDBDescriptorType" title="enum GstMpegtsISDBDescriptorType">GstMpegtsISDBDescriptorType</a></td>
</tr></tbody>
</table></div>
</div>
<div class="refsect1">
-<a name="gst-plugins-bad-libs-gst-isdb-descriptor.description"></a><h2>Description</h2>
+<a name="gst-plugins-bad-libs-ISDB-variants-of-MPEG-TS-descriptors.includes"></a><h2>Includes</h2>
+<pre class="synopsis">#include <gst/mpegts/mpegts.h>
+</pre>
</div>
<div class="refsect1">
-<a name="gst-plugins-bad-libs-gst-isdb-descriptor.functions_details"></a><h2>Functions</h2>
+<a name="gst-plugins-bad-libs-ISDB-variants-of-MPEG-TS-descriptors.description"></a><h2>Description</h2>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-libs-ISDB-variants-of-MPEG-TS-descriptors.functions_details"></a><h2>Functions</h2>
<p></p>
</div>
<div class="refsect1">
-<a name="gst-plugins-bad-libs-gst-isdb-descriptor.other_details"></a><h2>Types and Values</h2>
+<a name="gst-plugins-bad-libs-ISDB-variants-of-MPEG-TS-descriptors.other_details"></a><h2>Types and Values</h2>
<div class="refsect2">
<a name="GstMpegtsISDBDescriptorType"></a><h3>enum GstMpegtsISDBDescriptorType</h3>
+<p>These values correspond to the registered descriptor type from
+the various ISDB specifications.</p>
+<p>Consult the relevant specifications for more details.</p>
<div class="refsect3">
<a name="GstMpegtsISDBDescriptorType.members"></a><h4>Members</h4>
<div class="informaltable"><table class="informaltable" width="100%" border="0">
diff --git a/docs/libs/html/gst-plugins-bad-libs-Mpeg-ts-helper-library.html b/docs/libs/html/gst-plugins-bad-libs-Mpeg-ts-helper-library.html
new file mode 100644
index 0000000..c50a0c3
--- /dev/null
+++ b/docs/libs/html/gst-plugins-bad-libs-Mpeg-ts-helper-library.html
@@ -0,0 +1,76 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Mpeg-ts helper library: GStreamer Bad Plugins 1.0 Library Reference Manual</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
+<link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Library Reference Manual">
+<link rel="up" href="mpegts.html" title="Mpeg TS helper library">
+<link rel="prev" href="mpegts.html" title="Mpeg TS helper library">
+<link rel="next" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html" title="Base MPEG-TS sections">
+<meta name="generator" content="GTK-Doc V1.25 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
+<td width="100%" align="left" class="shortcuts">
+<a href="#" class="shortcut">Top</a><span id="nav_description"> <span class="dim">|</span>
+ <a href="#gst-plugins-bad-libs-Mpeg-ts-helper-library.description" class="shortcut">Description</a></span>
+</td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
+<td><a accesskey="u" href="mpegts.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
+<td><a accesskey="p" href="mpegts.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="gst-plugins-bad-libs-Mpeg-ts-helper-library"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-bad-libs-Mpeg-ts-helper-library.top_of_page"></a>Mpeg-ts helper library</span></h2>
+<p>Mpeg-ts helper library — Mpeg-ts helper library for plugins and applications</p>
+</td>
+<td class="gallery_image" valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="gst-plugins-bad-libs-Mpeg-ts-helper-library.functions"></a><h2>Functions</h2>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="functions_return">
+<col class="functions_name">
+</colgroup>
+<tbody><tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-Mpeg-ts-helper-library.html#gst-mpegts-initialize" title="gst_mpegts_initialize ()">gst_mpegts_initialize</a> <span class="c_punctuation">()</span>
+</td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-libs-Mpeg-ts-helper-library.includes"></a><h2>Includes</h2>
+<pre class="synopsis">#include <gst/mpegts/mpegts.h>
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-libs-Mpeg-ts-helper-library.description"></a><h2>Description</h2>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-libs-Mpeg-ts-helper-library.functions_details"></a><h2>Functions</h2>
+<div class="refsect2">
+<a name="gst-mpegts-initialize"></a><h3>gst_mpegts_initialize ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_mpegts_initialize (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<p>Initializes the MPEG-TS helper library. Must be called before any
+usage.</p>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-libs-Mpeg-ts-helper-library.other_details"></a><h2>Types and Values</h2>
+</div>
+</div>
+<div class="footer">
+<hr>Generated by GTK-Doc V1.25</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-bad-libs-OpenGL-Formats.html b/docs/libs/html/gst-plugins-bad-libs-OpenGL-Formats.html
index 66ebd42..6f9ce8b 100644
--- a/docs/libs/html/gst-plugins-bad-libs-OpenGL-Formats.html
+++ b/docs/libs/html/gst-plugins-bad-libs-OpenGL-Formats.html
@@ -169,18 +169,87 @@
<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>
gst_gl_format_type_n_bytes (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="type">guint</span></a> format</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="type">guint</span></a> type</code></em>);</pre>
+<div class="refsect3">
+<a name="gst-gl-format-type-n-bytes.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>format</p></td>
+<td class="parameter_description"><p>the OpenGL format, <code class="literal">GL_RGBA</code>, <code class="literal">GL_LUMINANCE</code>, etc</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>type</p></td>
+<td class="parameter_description"><p>the OpenGL type, <code class="literal">GL_UNSIGNED_BYTE</code>, <code class="literal">GL_FLOAT</code>, etc</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-gl-format-type-n-bytes.returns"></a><h4>Returns</h4>
+<p> the number of bytes the specified <em class="parameter"><code>format</code></em>
+, <em class="parameter"><code>type</code></em>
+combination takes
+per pixel</p>
+</div>
</div>
<hr>
<div class="refsect2">
<a name="gst-gl-texture-type-n-bytes"></a><h3>gst_gl_texture_type_n_bytes ()</h3>
<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>
gst_gl_texture_type_n_bytes (<em class="parameter"><code><span class="type">GstVideoGLTextureType</span> tex_format</code></em>);</pre>
+<div class="refsect3">
+<a name="gst-gl-texture-type-n-bytes.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>tex_format</p></td>
+<td class="parameter_description"><p>a <span class="type">GstVideoGLTextureType</span></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-gl-texture-type-n-bytes.returns"></a><h4>Returns</h4>
+<p> the number of bytes <em class="parameter"><code>tex_format</code></em>
+used per pixel</p>
+</div>
</div>
<hr>
<div class="refsect2">
<a name="gst-gl-format-from-gl-texture-type"></a><h3>gst_gl_format_from_gl_texture_type ()</h3>
<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>
gst_gl_format_from_gl_texture_type (<em class="parameter"><code><span class="type">GstVideoGLTextureType</span> tex_format</code></em>);</pre>
+<div class="refsect3">
+<a name="gst-gl-format-from-gl-texture-type.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>tex_format</p></td>
+<td class="parameter_description"><p>a <span class="type">GstVideoGLTextureType</span></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-gl-format-from-gl-texture-type.returns"></a><h4>Returns</h4>
+<p> the OpenGL format specified by <em class="parameter"><code>tex_format</code></em>
+</p>
+</div>
</div>
<hr>
<div class="refsect2">
@@ -189,6 +258,40 @@
gst_gl_texture_type_from_format (<em class="parameter"><code><a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a> *context</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/gst-plugins-base-libs-1.0gst-plugins-base-libs-gstvideo.html#GstVideoFormat"><span class="type">GstVideoFormat</span></a> v_format</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="type">guint</span></a> plane</code></em>);</pre>
+<div class="refsect3">
+<a name="gst-gl-texture-type-from-format.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>context</p></td>
+<td class="parameter_description"><p>a <a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>v_format</p></td>
+<td class="parameter_description"><p>a <a href="/usr/share/gtk-doc/html/gst-plugins-base-libs-1.0gst-plugins-base-libs-gstvideo.html#GstVideoFormat"><span class="type">GstVideoFormat</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>plane</p></td>
+<td class="parameter_description"><p>the plane number (starting from 0)</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-gl-texture-type-from-format.returns"></a><h4>Returns</h4>
+<p> the <span class="type">GstVideoGLTextureType</span> for the specified <em class="parameter"><code>format</code></em>
+and <em class="parameter"><code>plane</code></em>
+that can be allocated using <em class="parameter"><code>context</code></em>
+</p>
+</div>
</div>
<hr>
<div class="refsect2">
@@ -198,6 +301,41 @@
(<em class="parameter"><code><a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a> *context</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="type">guint</span></a> format</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="type">guint</span></a> type</code></em>);</pre>
+<div class="refsect3">
+<a name="gst-gl-sized-gl-format-from-gl-format-type.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>context</p></td>
+<td class="parameter_description"><p>a <a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>format</p></td>
+<td class="parameter_description"><p>an OpenGL format, <code class="literal">GL_RGBA</code>, <code class="literal">GL_LUMINANCE</code>, etc</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>type</p></td>
+<td class="parameter_description"><p>an OpenGL type, <code class="literal">GL_UNSIGNED_BYTE</code>, <code class="literal">GL_FLOAT</code>, etc</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-gl-sized-gl-format-from-gl-format-type.returns"></a><h4>Returns</h4>
+<p> the sized internal format specified by <em class="parameter"><code>format</code></em>
+and <em class="parameter"><code>type</code></em>
+that can
+be used in <em class="parameter"><code>context</code></em>
+</p>
+</div>
</div>
<hr>
<div class="refsect2">
@@ -210,18 +348,81 @@
<a name="gst-gl-texture-target-to-string"></a><h3>gst_gl_texture_target_to_string ()</h3>
<pre class="programlisting">const <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *
gst_gl_texture_target_to_string (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-OpenGL-Formats.html#GstGLTextureTarget" title="enum GstGLTextureTarget"><span class="type">GstGLTextureTarget</span></a> target</code></em>);</pre>
+<div class="refsect3">
+<a name="gst-gl-texture-target-to-string.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>str</p></td>
+<td class="parameter_description"><p>a string equivalant to one of the GST_GL_TEXTURE_TARGET_*_STR values</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-gl-texture-target-to-string.returns"></a><h4>Returns</h4>
+<p> the <a class="link" href="gst-plugins-bad-libs-OpenGL-Formats.html#GstGLTextureTarget" title="enum GstGLTextureTarget"><span class="type">GstGLTextureTarget</span></a> represented by <em class="parameter"><code>str</code></em>
+or
+<a class="link" href="gst-plugins-bad-libs-OpenGL-Formats.html#GST-GL-TEXTURE-TARGET-NONE:CAPS"><code class="literal">GST_GL_TEXTURE_TARGET_NONE</code></a></p>
+</div>
</div>
<hr>
<div class="refsect2">
<a name="gst-gl-texture-target-to-gl"></a><h3>gst_gl_texture_target_to_gl ()</h3>
<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>
gst_gl_texture_target_to_gl (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-OpenGL-Formats.html#GstGLTextureTarget" title="enum GstGLTextureTarget"><span class="type">GstGLTextureTarget</span></a> target</code></em>);</pre>
+<div class="refsect3">
+<a name="gst-gl-texture-target-to-gl.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>target</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-OpenGL-Formats.html#GstGLTextureTarget" title="enum GstGLTextureTarget"><span class="type">GstGLTextureTarget</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-gl-texture-target-to-gl.returns"></a><h4>Returns</h4>
+<p> the OpenGL value for binding the <em class="parameter"><code>target</code></em>
+with <code class="function">glBindTexture()</code> and
+similar functions or 0</p>
+</div>
</div>
<hr>
<div class="refsect2">
<a name="gst-gl-texture-target-from-gl"></a><h3>gst_gl_texture_target_from_gl ()</h3>
<pre class="programlisting"><a class="link" href="gst-plugins-bad-libs-OpenGL-Formats.html#GstGLTextureTarget" title="enum GstGLTextureTarget"><span class="returnvalue">GstGLTextureTarget</span></a>
gst_gl_texture_target_from_gl (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="type">guint</span></a> target</code></em>);</pre>
+<div class="refsect3">
+<a name="gst-gl-texture-target-from-gl.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>target</p></td>
+<td class="parameter_description"><p>an OpenGL texture binding target</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-gl-texture-target-from-gl.returns"></a><h4>Returns</h4>
+<p> the <a class="link" href="gst-plugins-bad-libs-OpenGL-Formats.html#GstGLTextureTarget" title="enum GstGLTextureTarget"><span class="type">GstGLTextureTarget</span></a> that's equiavalant to <em class="parameter"><code>target</code></em>
+or
+<a class="link" href="gst-plugins-bad-libs-OpenGL-Formats.html#GST-GL-TEXTURE-TARGET-NONE:CAPS"><code class="literal">GST_GL_TEXTURE_TARGET_NONE</code></a></p>
+</div>
</div>
<hr>
<div class="refsect2">
@@ -229,6 +430,27 @@
<pre class="programlisting">const <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *
gst_gl_texture_target_to_buffer_pool_option
(<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-OpenGL-Formats.html#GstGLTextureTarget" title="enum GstGLTextureTarget"><span class="type">GstGLTextureTarget</span></a> target</code></em>);</pre>
+<div class="refsect3">
+<a name="gst-gl-texture-target-to-buffer-pool-option.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>target</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-OpenGL-Formats.html#GstGLTextureTarget" title="enum GstGLTextureTarget"><span class="type">GstGLTextureTarget</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-gl-texture-target-to-buffer-pool-option.returns"></a><h4>Returns</h4>
+<p> a string representing the <em class="parameter"><code>GstBufferPoolOption</code></em>
+specified by <em class="parameter"><code>target</code></em>
+</p>
+</div>
</div>
</div>
<div class="refsect1">
@@ -246,63 +468,78 @@
<tbody>
<tr>
<td class="enum_member_name"><p><a name="GST-GL-TEXTURE-TARGET-NONE:CAPS"></a>GST_GL_TEXTURE_TARGET_NONE</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>no texture target</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-GL-TEXTURE-TARGET-2D:CAPS"></a>GST_GL_TEXTURE_TARGET_2D</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>2D texture target</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-GL-TEXTURE-TARGET-RECTANGLE:CAPS"></a>GST_GL_TEXTURE_TARGET_RECTANGLE</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>rectangle texture target</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-GL-TEXTURE-TARGET-EXTERNAL-OES:CAPS"></a>GST_GL_TEXTURE_TARGET_EXTERNAL_OES</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>external oes texture target</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
</tbody>
</table></div>
</div>
+<p class="since">Since: 1.8</p>
</div>
<hr>
<div class="refsect2">
<a name="GST-GL-TEXTURE-TARGET-2D-STR:CAPS"></a><h3>GST_GL_TEXTURE_TARGET_2D_STR</h3>
<pre class="programlisting">#define GST_GL_TEXTURE_TARGET_2D_STR "2D"
</pre>
+<p>String used for <a class="link" href="gst-plugins-bad-libs-OpenGL-Formats.html#GST-GL-TEXTURE-TARGET-2D:CAPS"><code class="literal">GST_GL_TEXTURE_TARGET_2D</code></a> in things like caps values</p>
</div>
<hr>
<div class="refsect2">
<a name="GST-GL-TEXTURE-TARGET-RECTANGLE-STR:CAPS"></a><h3>GST_GL_TEXTURE_TARGET_RECTANGLE_STR</h3>
<pre class="programlisting">#define GST_GL_TEXTURE_TARGET_RECTANGLE_STR "rectangle"
</pre>
+<p>String used for <a class="link" href="gst-plugins-bad-libs-OpenGL-Formats.html#GST-GL-TEXTURE-TARGET-RECTANGLE:CAPS"><code class="literal">GST_GL_TEXTURE_TARGET_RECTANGLE</code></a> in things like caps values</p>
</div>
<hr>
<div class="refsect2">
<a name="GST-GL-TEXTURE-TARGET-EXTERNAL-OES-STR:CAPS"></a><h3>GST_GL_TEXTURE_TARGET_EXTERNAL_OES_STR</h3>
<pre class="programlisting">#define GST_GL_TEXTURE_TARGET_EXTERNAL_OES_STR "external-oes"
</pre>
+<p>String used for <a class="link" href="gst-plugins-bad-libs-OpenGL-Formats.html#GST-GL-TEXTURE-TARGET-EXTERNAL-OES:CAPS"><code class="literal">GST_GL_TEXTURE_TARGET_EXTERNAL_OES</code></a> in things like caps values</p>
</div>
<hr>
<div class="refsect2">
<a name="GST-BUFFER-POOL-OPTION-GL-TEXTURE-TARGET-2D:CAPS"></a><h3>GST_BUFFER_POOL_OPTION_GL_TEXTURE_TARGET_2D</h3>
<pre class="programlisting">#define GST_BUFFER_POOL_OPTION_GL_TEXTURE_TARGET_2D "GstBufferPoolOptionGLTextureTarget2D"
</pre>
+<p>String used for <a class="link" href="gst-plugins-bad-libs-OpenGL-Formats.html#GST-GL-TEXTURE-TARGET-2D:CAPS"><code class="literal">GST_GL_TEXTURE_TARGET_2D</code></a> as a <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstBufferPool.html#GstBufferPool-struct"><span class="type">GstBufferPool</span></a> pool option</p>
</div>
<hr>
<div class="refsect2">
<a name="GST-BUFFER-POOL-OPTION-GL-TEXTURE-TARGET-RECTANGLE:CAPS"></a><h3>GST_BUFFER_POOL_OPTION_GL_TEXTURE_TARGET_RECTANGLE</h3>
<pre class="programlisting">#define GST_BUFFER_POOL_OPTION_GL_TEXTURE_TARGET_RECTANGLE "GstBufferPoolOptionGLTextureTargetRectangle"
</pre>
+<p>String used for <a class="link" href="gst-plugins-bad-libs-OpenGL-Formats.html#GST-GL-TEXTURE-TARGET-RECTANGLE:CAPS"><code class="literal">GST_GL_TEXTURE_TARGET_RECTANGLE</code></a> as a <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstBufferPool.html#GstBufferPool-struct"><span class="type">GstBufferPool</span></a> pool option</p>
</div>
<hr>
<div class="refsect2">
<a name="GST-BUFFER-POOL-OPTION-GL-TEXTURE-TARGET-EXTERNAL-OES:CAPS"></a><h3>GST_BUFFER_POOL_OPTION_GL_TEXTURE_TARGET_EXTERNAL_OES</h3>
<pre class="programlisting">#define GST_BUFFER_POOL_OPTION_GL_TEXTURE_TARGET_EXTERNAL_OES "GstBufferPoolOptionGLTextureTargetExternalOES"
</pre>
+<p>String used for <code class="literal">GST_GL_TEXTURE_TARGET_ESTERNAL_OES</code> as a <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstBufferPool.html#GstBufferPool-struct"><span class="type">GstBufferPool</span></a> pool option</p>
</div>
</div>
</div>
diff --git a/docs/libs/html/gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html b/docs/libs/html/gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html
index cd4ec70..3dea301 100644
--- a/docs/libs/html/gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html
+++ b/docs/libs/html/gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html
@@ -6,7 +6,7 @@
<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
<link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Library Reference Manual">
<link rel="up" href="gl.html" title="OpenGL Helper Library">
-<link rel="prev" href="gst-plugins-bad-libs-gstgldebug.html" title="OpenGL Debugging">
+<link rel="prev" href="gst-plugins-bad-libs-OpenGL-debugging.html" title="OpenGL debugging">
<link rel="next" href="gst-plugins-bad-libs-OpenGL-Formats.html" title="OpenGL Formats">
<meta name="generator" content="GTK-Doc V1.25 (XML mode)">
<link rel="stylesheet" href="style.css" type="text/css">
@@ -19,7 +19,7 @@
</td>
<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
<td><a accesskey="u" href="gl.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
-<td><a accesskey="p" href="gst-plugins-bad-libs-gstgldebug.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="p" href="gst-plugins-bad-libs-OpenGL-debugging.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
<td><a accesskey="n" href="gst-plugins-bad-libs-OpenGL-Formats.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
</tr></table>
<div class="refentry">
@@ -41,30 +41,6 @@
<tbody>
<tr>
<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<span class="c_punctuation">(</span><a class="link" href="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#GLCB:CAPS" title="GLCB ()">*GLCB</a><span class="c_punctuation">)</span> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<span class="c_punctuation">(</span><a class="link" href="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#GLCB-V2:CAPS" title="GLCB_V2 ()">*GLCB_V2</a><span class="c_punctuation">)</span> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<span class="c_punctuation">(</span><a class="link" href="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#CDCB:CAPS" title="CDCB ()">*CDCB</a><span class="c_punctuation">)</span> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
<a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
</td>
<td class="function_name">
@@ -84,30 +60,6 @@
<a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
</td>
<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#gst-gl-context-gen-fbo" title="gst_gl_context_gen_fbo ()">gst_gl_context_gen_fbo</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#gst-gl-context-del-fbo" title="gst_gl_context_del_fbo ()">gst_gl_context_del_fbo</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#gst-gl-context-use-fbo-v2" title="gst_gl_context_use_fbo_v2 ()">gst_gl_context_use_fbo_v2</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
<a class="link" href="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#gst-gl-context-gen-shader" title="gst_gl_context_gen_shader ()">gst_gl_context_gen_shader</a> <span class="c_punctuation">()</span>
</td>
</tr>
@@ -132,22 +84,6 @@
<span class="returnvalue">void</span>
</td>
<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#gst-gl-context-set-error" title="gst_gl_context_set_error ()">gst_gl_context_set_error</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#gst-gl-context-get-error" title="gst_gl_context_get_error ()">gst_gl_context_get_error</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
<a class="link" href="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#gst-gl-context-clear-shader" title="gst_gl_context_clear_shader ()">gst_gl_context_clear_shader</a> <span class="c_punctuation">()</span>
</td>
</tr>
@@ -219,48 +155,11 @@
</table></div>
</div>
<div class="refsect1">
-<a name="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table class="informaltable" width="100%" border="0">
-<colgroup>
-<col width="150px" class="name">
-<col class="description">
-</colgroup>
-<tbody><tr>
-<td class="datatype_keyword">enum</td>
-<td class="function_name"><a class="link" href="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#GstGLDisplayProjection" title="enum GstGLDisplayProjection">GstGLDisplayProjection</a></td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect1">
<a name="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.description"></a><h2>Description</h2>
</div>
<div class="refsect1">
<a name="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.functions_details"></a><h2>Functions</h2>
<div class="refsect2">
-<a name="GLCB:CAPS"></a><h3>GLCB ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-<span class="c_punctuation">(</span>*GLCB<span class="c_punctuation">)</span> (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint"><span class="type">gint</span></a> Param1</code></em>,
- <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint"><span class="type">gint</span></a> Param2</code></em>,
- <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="type">guint</span></a> Param3</code></em>,
- <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> stuff</code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="GLCB-V2:CAPS"></a><h3>GLCB_V2 ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-<span class="c_punctuation">(</span>*GLCB_V2<span class="c_punctuation">)</span> (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> stuff</code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="CDCB:CAPS"></a><h3>CDCB ()</h3>
-<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-<span class="c_punctuation">(</span>*CDCB<span class="c_punctuation">)</span> (<em class="parameter"><code><span class="type">GLuint</span> texture</code></em>,
- <em class="parameter"><code><span class="type">GLuint</span> width</code></em>,
- <em class="parameter"><code><span class="type">GLuint</span> height</code></em>,
- <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> data</code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
<a name="gst-gl-handle-set-context"></a><h3>gst_gl_handle_set_context ()</h3>
<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
gst_gl_handle_set_context (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#GstElement-struct"><span class="type">GstElement</span></a> *element</code></em>,
@@ -279,37 +178,6 @@
</div>
<hr>
<div class="refsect2">
-<a name="gst-gl-context-gen-fbo"></a><h3>gst_gl_context_gen_fbo ()</h3>
-<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-gst_gl_context_gen_fbo (<em class="parameter"><code><a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a> *context</code></em>,
- <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint"><span class="type">gint</span></a> width</code></em>,
- <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint"><span class="type">gint</span></a> height</code></em>,
- <em class="parameter"><code><span class="type">GLuint</span> *fbo</code></em>,
- <em class="parameter"><code><span class="type">GLuint</span> *depthbuffer</code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-gl-context-del-fbo"></a><h3>gst_gl_context_del_fbo ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-gst_gl_context_del_fbo (<em class="parameter"><code><a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a> *context</code></em>,
- <em class="parameter"><code><span class="type">GLuint</span> fbo</code></em>,
- <em class="parameter"><code><span class="type">GLuint</span> depth_buffer</code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-gl-context-use-fbo-v2"></a><h3>gst_gl_context_use_fbo_v2 ()</h3>
-<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-gst_gl_context_use_fbo_v2 (<em class="parameter"><code><a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a> *context</code></em>,
- <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint"><span class="type">gint</span></a> texture_fbo_width</code></em>,
- <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint"><span class="type">gint</span></a> texture_fbo_height</code></em>,
- <em class="parameter"><code><span class="type">GLuint</span> fbo</code></em>,
- <em class="parameter"><code><span class="type">GLuint</span> depth_buffer</code></em>,
- <em class="parameter"><code><span class="type">GLuint</span> texture_fbo</code></em>,
- <em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#GLCB-V2:CAPS" title="GLCB_V2 ()"><span class="type">GLCB_V2</span></a> cb</code></em>,
- <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> stuff</code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
<a name="gst-gl-context-gen-shader"></a><h3>gst_gl_context_gen_shader ()</h3>
<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
gst_gl_context_gen_shader (<em class="parameter"><code><a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a> *context</code></em>,
@@ -333,23 +201,26 @@
</div>
<hr>
<div class="refsect2">
-<a name="gst-gl-context-set-error"></a><h3>gst_gl_context_set_error ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-gst_gl_context_set_error (<em class="parameter"><code><a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a> *context</code></em>,
- <em class="parameter"><code>const <span class="type">char</span> *format</code></em>,
- <em class="parameter"><code>...</code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-gl-context-get-error"></a><h3>gst_gl_context_get_error ()</h3>
-<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *
-gst_gl_context_get_error (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
<a name="gst-gl-context-clear-shader"></a><h3>gst_gl_context_clear_shader ()</h3>
<pre class="programlisting"><span class="returnvalue">void</span>
gst_gl_context_clear_shader (<em class="parameter"><code><a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a> *context</code></em>);</pre>
+<p>Clear's the currently set shader from the GL state machine.</p>
+<p>Note: must be called in the GL thread.</p>
+<div class="refsect3">
+<a name="gst-gl-context-clear-shader.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>context</p></td>
+<td class="parameter_description"><p>a <a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
</div>
<hr>
<div class="refsect2">
@@ -395,6 +266,27 @@
<a name="gst-gl-value-get-texture-target-mask"></a><h3>gst_gl_value_get_texture_target_mask ()</h3>
<pre class="programlisting"><a class="link" href="gst-plugins-bad-libs-OpenGL-Formats.html#GstGLTextureTarget" title="enum GstGLTextureTarget"><span class="returnvalue">GstGLTextureTarget</span></a>
gst_gl_value_get_texture_target_mask (<em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/gobjectgobject-Generic-values.html#GValue"><span class="type">GValue</span></a> *value</code></em>);</pre>
+<p>See <a class="link" href="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#gst-gl-value-set-texture-target-from-mask" title="gst_gl_value_set_texture_target_from_mask ()"><code class="function">gst_gl_value_set_texture_target_from_mask()</code></a> for what entails a mask</p>
+<div class="refsect3">
+<a name="gst-gl-value-get-texture-target-mask.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>value</p></td>
+<td class="parameter_description"><p>an initialized <a href="/usr/share/gtk-doc/html/gobjectgobject-Generic-values.html#GValue"><span class="type">GValue</span></a> of type G_TYPE_STRING</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-gl-value-get-texture-target-mask.returns"></a><h4>Returns</h4>
+<p> the mask of <a class="link" href="gst-plugins-bad-libs-OpenGL-Formats.html#GstGLTextureTarget" title="enum GstGLTextureTarget"><span class="type">GstGLTextureTarget</span></a>'s in <em class="parameter"><code>value</code></em>
+</p>
+</div>
</div>
<hr>
<div class="refsect2">
@@ -402,6 +294,34 @@
<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
gst_gl_value_set_texture_target (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/gobjectgobject-Generic-values.html#GValue"><span class="type">GValue</span></a> *value</code></em>,
<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-OpenGL-Formats.html#GstGLTextureTarget" title="enum GstGLTextureTarget"><span class="type">GstGLTextureTarget</span></a> target</code></em>);</pre>
+<div class="refsect3">
+<a name="gst-gl-value-set-texture-target.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>value</p></td>
+<td class="parameter_description"><p>an initialized <a href="/usr/share/gtk-doc/html/gobjectgobject-Generic-values.html#GValue"><span class="type">GValue</span></a> of type G_TYPE_STRING</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>target</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-OpenGL-Formats.html#GstGLTextureTarget" title="enum GstGLTextureTarget"><span class="type">GstGLTextureTarget</span></a>'s</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-gl-value-set-texture-target.returns"></a><h4>Returns</h4>
+<p> whether the <em class="parameter"><code>target</code></em>
+could be set on <em class="parameter"><code>value</code></em>
+</p>
+</div>
</div>
<hr>
<div class="refsect2">
@@ -410,37 +330,42 @@
gst_gl_value_set_texture_target_from_mask
(<em class="parameter"><code><a href="/usr/share/gtk-doc/html/gobjectgobject-Generic-values.html#GValue"><span class="type">GValue</span></a> *value</code></em>,
<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-OpenGL-Formats.html#GstGLTextureTarget" title="enum GstGLTextureTarget"><span class="type">GstGLTextureTarget</span></a> target_mask</code></em>);</pre>
-</div>
-</div>
-<div class="refsect1">
-<a name="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.other_details"></a><h2>Types and Values</h2>
-<div class="refsect2">
-<a name="GstGLDisplayProjection"></a><h3>enum GstGLDisplayProjection</h3>
+<p>A mask is a bitwise OR of (1 << target) where target is a valid
+<a class="link" href="gst-plugins-bad-libs-OpenGL-Formats.html#GstGLTextureTarget" title="enum GstGLTextureTarget"><span class="type">GstGLTextureTarget</span></a></p>
<div class="refsect3">
-<a name="GstGLDisplayProjection.members"></a><h4>Members</h4>
+<a name="gst-gl-value-set-texture-target-from-mask.parameters"></a><h4>Parameters</h4>
<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
-<col width="300px" class="enum_members_name">
-<col class="enum_members_description">
-<col width="200px" class="enum_members_annotations">
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
</colgroup>
<tbody>
<tr>
-<td class="enum_member_name"><p><a name="GST-GL-DISPLAY-PROJECTION-ORTHO2D:CAPS"></a>GST_GL_DISPLAY_PROJECTION_ORTHO2D</p></td>
-<td> </td>
-<td> </td>
+<td class="parameter_name"><p>value</p></td>
+<td class="parameter_description"><p>an uninitialized <a href="/usr/share/gtk-doc/html/gobjectgobject-Generic-values.html#GValue"><span class="type">GValue</span></a></p></td>
+<td class="parameter_annotations"> </td>
</tr>
<tr>
-<td class="enum_member_name"><p><a name="GST-GL-DISPLAY-PROJECTION-PERSPECTIVE:CAPS"></a>GST_GL_DISPLAY_PROJECTION_PERSPECTIVE</p></td>
-<td> </td>
-<td> </td>
+<td class="parameter_name"><p>target_mask</p></td>
+<td class="parameter_description"><p>a bitwise mask of <a class="link" href="gst-plugins-bad-libs-OpenGL-Formats.html#GstGLTextureTarget" title="enum GstGLTextureTarget"><span class="type">GstGLTextureTarget</span></a>'s</p></td>
+<td class="parameter_annotations"> </td>
</tr>
</tbody>
</table></div>
</div>
+<div class="refsect3">
+<a name="gst-gl-value-set-texture-target-from-mask.returns"></a><h4>Returns</h4>
+<p> whether the <em class="parameter"><code>target_mask</code></em>
+could be set on <em class="parameter"><code>value</code></em>
+</p>
</div>
</div>
</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.other_details"></a><h2>Types and Values</h2>
+</div>
+</div>
<div class="footer">
<hr>Generated by GTK-Doc V1.25</div>
</body>
diff --git a/docs/libs/html/gst-plugins-bad-libs-OpenGL-debugging.html b/docs/libs/html/gst-plugins-bad-libs-OpenGL-debugging.html
new file mode 100644
index 0000000..ac96c27
--- /dev/null
+++ b/docs/libs/html/gst-plugins-bad-libs-OpenGL-debugging.html
@@ -0,0 +1,648 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>OpenGL debugging: GStreamer Bad Plugins 1.0 Library Reference Manual</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
+<link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Library Reference Manual">
+<link rel="up" href="gl.html" title="OpenGL Helper Library">
+<link rel="prev" href="gst-plugins-bad-libs-GstGLWindowX11.html" title="GstGLWindowX11">
+<link rel="next" href="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html" title="OpenGL Miscellaneous Utilities">
+<meta name="generator" content="GTK-Doc V1.25 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
+<td width="100%" align="left" class="shortcuts">
+<a href="#" class="shortcut">Top</a><span id="nav_description"> <span class="dim">|</span>
+ <a href="#gst-plugins-bad-libs-OpenGL-debugging.description" class="shortcut">Description</a></span>
+</td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
+<td><a accesskey="u" href="gl.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
+<td><a accesskey="p" href="gst-plugins-bad-libs-GstGLWindowX11.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="gst-plugins-bad-libs-OpenGL-debugging"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-bad-libs-OpenGL-debugging.top_of_page"></a>OpenGL debugging</span></h2>
+<p>OpenGL debugging — helper routines for dealing with OpenGL debugging</p>
+</td>
+<td class="gallery_image" valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="gst-plugins-bad-libs-OpenGL-debugging.functions"></a><h2>Functions</h2>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="functions_return">
+<col class="functions_name">
+</colgroup>
+<tbody>
+<tr>
+<td class="function_type">
+<a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *
+</td>
+<td class="function_name">
+<span class="c_punctuation">(</span><a class="link" href="gst-plugins-bad-libs-OpenGL-debugging.html#GstGLAsyncDebugLogGetMessage" title="GstGLAsyncDebugLogGetMessage ()">*GstGLAsyncDebugLogGetMessage</a><span class="c_punctuation">)</span> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="gst-plugins-bad-libs-OpenGL-debugging.html#GstGLAsyncDebug" title="struct GstGLAsyncDebug"><span class="returnvalue">GstGLAsyncDebug</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-OpenGL-debugging.html#gst-gl-async-debug-new" title="gst_gl_async_debug_new ()">gst_gl_async_debug_new</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-OpenGL-debugging.html#gst-gl-async-debug-free" title="gst_gl_async_debug_free ()">gst_gl_async_debug_free</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-OpenGL-debugging.html#gst-gl-async-debug-init" title="gst_gl_async_debug_init ()">gst_gl_async_debug_init</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-OpenGL-debugging.html#gst-gl-async-debug-unset" title="gst_gl_async_debug_unset ()">gst_gl_async_debug_unset</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-OpenGL-debugging.html#gst-gl-async-debug-freeze" title="gst_gl_async_debug_freeze ()">gst_gl_async_debug_freeze</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-OpenGL-debugging.html#gst-gl-async-debug-thaw" title="gst_gl_async_debug_thaw ()">gst_gl_async_debug_thaw</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-OpenGL-debugging.html#gst-gl-async-debug-output-log-msg" title="gst_gl_async_debug_output_log_msg ()">gst_gl_async_debug_output_log_msg</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-OpenGL-debugging.html#gst-gl-async-debug-store-log-msg" title="gst_gl_async_debug_store_log_msg ()">gst_gl_async_debug_store_log_msg</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-OpenGL-debugging.html#gst-gl-async-debug-store-log-msg-valist" title="gst_gl_async_debug_store_log_msg_valist ()">gst_gl_async_debug_store_log_msg_valist</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="define_keyword">#define</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-OpenGL-debugging.html#GST-GL-ASYNC-CAT-LEVEL-LOG-valist" title="GST_GL_ASYNC_CAT_LEVEL_LOG_valist()">GST_GL_ASYNC_CAT_LEVEL_LOG_valist</a><span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="define_keyword">#define</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-OpenGL-debugging.html#GST-GL-ASYNC-CAT-LEVEL-LOG:CAPS" title="GST_GL_ASYNC_CAT_LEVEL_LOG()">GST_GL_ASYNC_CAT_LEVEL_LOG</a><span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-OpenGL-debugging.html#gst-gl-insert-debug-marker" title="gst_gl_insert_debug_marker ()">gst_gl_insert_debug_marker</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-libs-OpenGL-debugging.other"></a><h2>Types and Values</h2>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="name">
+<col class="description">
+</colgroup>
+<tbody><tr>
+<td class="datatype_keyword">struct</td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-libs-OpenGL-debugging.html#GstGLAsyncDebug" title="struct GstGLAsyncDebug">GstGLAsyncDebug</a></td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-libs-OpenGL-debugging.description"></a><h2>Description</h2>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-libs-OpenGL-debugging.functions_details"></a><h2>Functions</h2>
+<div class="refsect2">
+<a name="GstGLAsyncDebugLogGetMessage"></a><h3>GstGLAsyncDebugLogGetMessage ()</h3>
+<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *
+<span class="c_punctuation">(</span>*GstGLAsyncDebugLogGetMessage<span class="c_punctuation">)</span> (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-gl-async-debug-new"></a><h3>gst_gl_async_debug_new ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-bad-libs-OpenGL-debugging.html#GstGLAsyncDebug" title="struct GstGLAsyncDebug"><span class="returnvalue">GstGLAsyncDebug</span></a> *
+gst_gl_async_debug_new (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<p>Free with <a class="link" href="gst-plugins-bad-libs-OpenGL-debugging.html#gst-gl-async-debug-free" title="gst_gl_async_debug_free ()"><code class="function">gst_gl_async_debug_free()</code></a></p>
+<div class="refsect3">
+<a name="gst-gl-async-debug-new.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>ad</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-OpenGL-debugging.html#GstGLAsyncDebug" title="struct GstGLAsyncDebug"><span class="type">GstGLAsyncDebug</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-gl-async-debug-new.returns"></a><h4>Returns</h4>
+<p> a new <a class="link" href="gst-plugins-bad-libs-OpenGL-debugging.html#GstGLAsyncDebug" title="struct GstGLAsyncDebug"><span class="type">GstGLAsyncDebug</span></a></p>
+</div>
+<p class="since">Since: 1.8</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-gl-async-debug-free"></a><h3>gst_gl_async_debug_free ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_gl_async_debug_free (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-OpenGL-debugging.html#GstGLAsyncDebug" title="struct GstGLAsyncDebug"><span class="type">GstGLAsyncDebug</span></a> *ad</code></em>);</pre>
+<p>Frees <em class="parameter"><code>ad</code></em>
+</p>
+<div class="refsect3">
+<a name="gst-gl-async-debug-free.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>ad</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-OpenGL-debugging.html#GstGLAsyncDebug" title="struct GstGLAsyncDebug"><span class="type">GstGLAsyncDebug</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<p class="since">Since: 1.8</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-gl-async-debug-init"></a><h3>gst_gl_async_debug_init ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_gl_async_debug_init (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-OpenGL-debugging.html#GstGLAsyncDebug" title="struct GstGLAsyncDebug"><span class="type">GstGLAsyncDebug</span></a> *ad</code></em>);</pre>
+<p>Initialize <em class="parameter"><code>ad</code></em>
+. Intended for use with <a class="link" href="gst-plugins-bad-libs-OpenGL-debugging.html#GstGLAsyncDebug" title="struct GstGLAsyncDebug"><span class="type">GstGLAsyncDebug</span></a>'s that are embedded
+in other structs.</p>
+<div class="refsect3">
+<a name="gst-gl-async-debug-init.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>ad</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-OpenGL-debugging.html#GstGLAsyncDebug" title="struct GstGLAsyncDebug"><span class="type">GstGLAsyncDebug</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<p class="since">Since: 1.8</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-gl-async-debug-unset"></a><h3>gst_gl_async_debug_unset ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_gl_async_debug_unset (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-OpenGL-debugging.html#GstGLAsyncDebug" title="struct GstGLAsyncDebug"><span class="type">GstGLAsyncDebug</span></a> *ad</code></em>);</pre>
+<p>Unset any dynamically allocated data. Intended for use with
+<a class="link" href="gst-plugins-bad-libs-OpenGL-debugging.html#GstGLAsyncDebug" title="struct GstGLAsyncDebug"><span class="type">GstGLAsyncDebug</span></a>'s that are embedded in other structs.</p>
+<div class="refsect3">
+<a name="gst-gl-async-debug-unset.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>ad</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-OpenGL-debugging.html#GstGLAsyncDebug" title="struct GstGLAsyncDebug"><span class="type">GstGLAsyncDebug</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-gl-async-debug-freeze"></a><h3>gst_gl_async_debug_freeze ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_gl_async_debug_freeze (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-OpenGL-debugging.html#GstGLAsyncDebug" title="struct GstGLAsyncDebug"><span class="type">GstGLAsyncDebug</span></a> *ad</code></em>);</pre>
+<p>freeze the debug output. While frozen, any call to
+<a class="link" href="gst-plugins-bad-libs-OpenGL-debugging.html#gst-gl-async-debug-output-log-msg" title="gst_gl_async_debug_output_log_msg ()"><code class="function">gst_gl_async_debug_output_log_msg()</code></a> will not output any messages but
+subsequent calls to <a class="link" href="gst-plugins-bad-libs-OpenGL-debugging.html#gst-gl-async-debug-store-log-msg" title="gst_gl_async_debug_store_log_msg ()"><code class="function">gst_gl_async_debug_store_log_msg()</code></a> will overwrite previous
+messages.</p>
+<div class="refsect3">
+<a name="gst-gl-async-debug-freeze.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>ad</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-OpenGL-debugging.html#GstGLAsyncDebug" title="struct GstGLAsyncDebug"><span class="type">GstGLAsyncDebug</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<p class="since">Since: 1.8</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-gl-async-debug-thaw"></a><h3>gst_gl_async_debug_thaw ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_gl_async_debug_thaw (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-OpenGL-debugging.html#GstGLAsyncDebug" title="struct GstGLAsyncDebug"><span class="type">GstGLAsyncDebug</span></a> *ad</code></em>);</pre>
+<p>unfreeze the debug output. See <a class="link" href="gst-plugins-bad-libs-OpenGL-debugging.html#gst-gl-async-debug-freeze" title="gst_gl_async_debug_freeze ()"><code class="function">gst_gl_async_debug_freeze()</code></a> for what freezing means</p>
+<div class="refsect3">
+<a name="gst-gl-async-debug-thaw.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>ad</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-OpenGL-debugging.html#GstGLAsyncDebug" title="struct GstGLAsyncDebug"><span class="type">GstGLAsyncDebug</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<p class="since">Since: 1.8</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-gl-async-debug-output-log-msg"></a><h3>gst_gl_async_debug_output_log_msg ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_gl_async_debug_output_log_msg (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-OpenGL-debugging.html#GstGLAsyncDebug" title="struct GstGLAsyncDebug"><span class="type">GstGLAsyncDebug</span></a> *ad</code></em>);</pre>
+<p>Outputs a previously stored debug message.</p>
+<div class="refsect3">
+<a name="gst-gl-async-debug-output-log-msg.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>ad</p></td>
+<td class="parameter_description"><p>the <a class="link" href="gst-plugins-bad-libs-OpenGL-debugging.html#GstGLAsyncDebug" title="struct GstGLAsyncDebug"><span class="type">GstGLAsyncDebug</span></a> to store the message in</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-gl-async-debug-store-log-msg"></a><h3>gst_gl_async_debug_store_log_msg ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_gl_async_debug_store_log_msg (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-OpenGL-debugging.html#GstGLAsyncDebug" title="struct GstGLAsyncDebug"><span class="type">GstGLAsyncDebug</span></a> *ad</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/gstreamer-1.0gstreamer-GstInfo.html#GstDebugCategory"><span class="type">GstDebugCategory</span></a> *cat</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/gstreamer-1.0gstreamer-GstInfo.html#GstDebugLevel"><span class="type">GstDebugLevel</span></a> level</code></em>,
+ <em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *file</code></em>,
+ <em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *function</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint"><span class="type">gint</span></a> line</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/gobjectgobject-The-Base-Object-Type.html#GObject-struct"><span class="type">GObject</span></a> *object</code></em>,
+ <em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *format</code></em>,
+ <em class="parameter"><code>...</code></em>);</pre>
+<p>Stores a debug message for later output by <a class="link" href="gst-plugins-bad-libs-OpenGL-debugging.html#gst-gl-async-debug-output-log-msg" title="gst_gl_async_debug_output_log_msg ()"><code class="function">gst_gl_async_debug_output_log_msg()</code></a></p>
+<div class="refsect3">
+<a name="gst-gl-async-debug-store-log-msg.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>ad</p></td>
+<td class="parameter_description"><p>the <a class="link" href="gst-plugins-bad-libs-OpenGL-debugging.html#GstGLAsyncDebug" title="struct GstGLAsyncDebug"><span class="type">GstGLAsyncDebug</span></a> to store the message in</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cat</p></td>
+<td class="parameter_description"><p>the <a href="/usr/share/gtk-doc/html/gstreamer-1.0gstreamer-GstInfo.html#GstDebugCategory"><span class="type">GstDebugCategory</span></a> to output the message in</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>level</p></td>
+<td class="parameter_description"><p>the <a href="/usr/share/gtk-doc/html/gst-plugins-good-plugins-1.0gst-plugins-good-plugins-level.html#GstLevel-struct"><span class="type">GstLevel</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>file</p></td>
+<td class="parameter_description"><p>the file where the debug message originates from</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>function</p></td>
+<td class="parameter_description"><p>the function where the debug message originates from</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>line</p></td>
+<td class="parameter_description"><p>the line in <em class="parameter"><code>file</code></em>
+where the debug message originates from</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>object</p></td>
+<td class="parameter_description"><p> a <a href="/usr/share/gtk-doc/html/gobjectgobject-The-Base-Object-Type.html#GObject-struct"><span class="type">GObject</span></a> to associate with the debug message. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>format</p></td>
+<td class="parameter_description"><p>a printf style format string</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>...</p></td>
+<td class="parameter_description"><p>the list of arguments for <em class="parameter"><code>format</code></em>
+</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 1.8</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-gl-async-debug-store-log-msg-valist"></a><h3>gst_gl_async_debug_store_log_msg_valist ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_gl_async_debug_store_log_msg_valist
+ (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-OpenGL-debugging.html#GstGLAsyncDebug" title="struct GstGLAsyncDebug"><span class="type">GstGLAsyncDebug</span></a> *ad</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/gstreamer-1.0gstreamer-GstInfo.html#GstDebugCategory"><span class="type">GstDebugCategory</span></a> *cat</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/gstreamer-1.0gstreamer-GstInfo.html#GstDebugLevel"><span class="type">GstDebugLevel</span></a> level</code></em>,
+ <em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *file</code></em>,
+ <em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *function</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint"><span class="type">gint</span></a> line</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/gobjectgobject-The-Base-Object-Type.html#GObject-struct"><span class="type">GObject</span></a> *object</code></em>,
+ <em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *format</code></em>,
+ <em class="parameter"><code><span class="type">va_list</span> varargs</code></em>);</pre>
+<p>Stores a debug message for later output by <a class="link" href="gst-plugins-bad-libs-OpenGL-debugging.html#gst-gl-async-debug-output-log-msg" title="gst_gl_async_debug_output_log_msg ()"><code class="function">gst_gl_async_debug_output_log_msg()</code></a></p>
+<div class="refsect3">
+<a name="gst-gl-async-debug-store-log-msg-valist.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>ad</p></td>
+<td class="parameter_description"><p>the <a class="link" href="gst-plugins-bad-libs-OpenGL-debugging.html#GstGLAsyncDebug" title="struct GstGLAsyncDebug"><span class="type">GstGLAsyncDebug</span></a> to store the message in</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cat</p></td>
+<td class="parameter_description"><p>the <a href="/usr/share/gtk-doc/html/gstreamer-1.0gstreamer-GstInfo.html#GstDebugCategory"><span class="type">GstDebugCategory</span></a> to output the message in</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>level</p></td>
+<td class="parameter_description"><p>the <a href="/usr/share/gtk-doc/html/gst-plugins-good-plugins-1.0gst-plugins-good-plugins-level.html#GstLevel-struct"><span class="type">GstLevel</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>file</p></td>
+<td class="parameter_description"><p>the file where the debug message originates from</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>function</p></td>
+<td class="parameter_description"><p>the function where the debug message originates from</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>line</p></td>
+<td class="parameter_description"><p>the line in <em class="parameter"><code>file</code></em>
+where the debug message originates from</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>object</p></td>
+<td class="parameter_description"><p> a <a href="/usr/share/gtk-doc/html/gobjectgobject-The-Base-Object-Type.html#GObject-struct"><span class="type">GObject</span></a> to associate with the debug message. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>format</p></td>
+<td class="parameter_description"><p>a printf style format string</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>varargs</p></td>
+<td class="parameter_description"><p>the list of arguments for <em class="parameter"><code>format</code></em>
+</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 1.8</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GST-GL-ASYNC-CAT-LEVEL-LOG-valist"></a><h3>GST_GL_ASYNC_CAT_LEVEL_LOG_valist()</h3>
+<pre class="programlisting">#define GST_GL_ASYNC_CAT_LEVEL_LOG_valist(ad,cat,level,object,format,varargs)</pre>
+<p>Stores a debug message in <em class="parameter"><code>ad</code></em>
+ for later output</p>
+<div class="refsect3">
+<a name="GST-GL-ASYNC-CAT-LEVEL-LOG-valist.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>ad</p></td>
+<td class="parameter_description"><p>the <a class="link" href="gst-plugins-bad-libs-OpenGL-debugging.html#GstGLAsyncDebug" title="struct GstGLAsyncDebug"><span class="type">GstGLAsyncDebug</span></a> to store the message in</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cat</p></td>
+<td class="parameter_description"><p>the <a href="/usr/share/gtk-doc/html/gstreamer-1.0gstreamer-GstInfo.html#GstDebugCategory"><span class="type">GstDebugCategory</span></a> to output the message in</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>level</p></td>
+<td class="parameter_description"><p>the <a href="/usr/share/gtk-doc/html/gst-plugins-good-plugins-1.0gst-plugins-good-plugins-level.html#GstLevel-struct"><span class="type">GstLevel</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>object</p></td>
+<td class="parameter_description"><p> a <a href="/usr/share/gtk-doc/html/gobjectgobject-The-Base-Object-Type.html#GObject-struct"><span class="type">GObject</span></a> to associate with the debug message. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>format</p></td>
+<td class="parameter_description"><p>a printf style format string</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>varargs</p></td>
+<td class="parameter_description"><p>the list of arguments for <em class="parameter"><code>format</code></em>
+</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GST-GL-ASYNC-CAT-LEVEL-LOG:CAPS"></a><h3>GST_GL_ASYNC_CAT_LEVEL_LOG()</h3>
+<pre class="programlisting">#define GST_GL_ASYNC_CAT_LEVEL_LOG(ad,cat,level,object,format,...)</pre>
+<p>Stores a debug message in <em class="parameter"><code>ad</code></em>
+ for later output</p>
+<div class="refsect3">
+<a name="GST-GL-ASYNC-CAT-LEVEL-LOG.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>ad</p></td>
+<td class="parameter_description"><p>the <a class="link" href="gst-plugins-bad-libs-OpenGL-debugging.html#GstGLAsyncDebug" title="struct GstGLAsyncDebug"><span class="type">GstGLAsyncDebug</span></a> to store the message in</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cat</p></td>
+<td class="parameter_description"><p>the <a href="/usr/share/gtk-doc/html/gstreamer-1.0gstreamer-GstInfo.html#GstDebugCategory"><span class="type">GstDebugCategory</span></a> to output the message in</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>level</p></td>
+<td class="parameter_description"><p>the <a href="/usr/share/gtk-doc/html/gst-plugins-good-plugins-1.0gst-plugins-good-plugins-level.html#GstLevel-struct"><span class="type">GstLevel</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>object</p></td>
+<td class="parameter_description"><p> a <a href="/usr/share/gtk-doc/html/gobjectgobject-The-Base-Object-Type.html#GObject-struct"><span class="type">GObject</span></a> to associate with the debug message. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>format</p></td>
+<td class="parameter_description"><p>a printf style format string</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>...</p></td>
+<td class="parameter_description"><p>the list of arguments for <em class="parameter"><code>format</code></em>
+</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-gl-insert-debug-marker"></a><h3>gst_gl_insert_debug_marker ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_gl_insert_debug_marker (<em class="parameter"><code><a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a> *context</code></em>,
+ <em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *format</code></em>,
+ <em class="parameter"><code>...</code></em>);</pre>
+<p>Inserts a marker into a GL debug stream. Requires the 'gldebugmarker'
+debug category to be at least <a href="/usr/share/gtk-doc/html/gstreamer-1.0gstreamer-GstInfo.html#GST-LEVEL-FIXME:CAPS"><code class="literal">GST_LEVEL_FIXME</code></a>.</p>
+<div class="refsect3">
+<a name="gst-gl-insert-debug-marker.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>context</p></td>
+<td class="parameter_description"><p>a <a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>format</p></td>
+<td class="parameter_description"><p>a printf-style format string</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>...</p></td>
+<td class="parameter_description"><p>arguments form <em class="parameter"><code>format</code></em>
+</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 1.8</p>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-libs-OpenGL-debugging.other_details"></a><h2>Types and Values</h2>
+<div class="refsect2">
+<a name="GstGLAsyncDebug"></a><h3>struct GstGLAsyncDebug</h3>
+<pre class="programlisting">struct GstGLAsyncDebug {
+};
+</pre>
+<p><a class="link" href="gst-plugins-bad-libs-OpenGL-debugging.html#GstGLAsyncDebug" title="struct GstGLAsyncDebug"><span class="type">GstGLAsyncDebug</span></a> an opaque structure and should only be accessed through the
+provided API.</p>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-libs-OpenGL-debugging.see-also"></a><h2>See Also</h2>
+<p><a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a></p>
+</div>
+</div>
+<div class="footer">
+<hr>Generated by GTK-Doc V1.25</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-bad-libs-gst-atsc-section.html b/docs/libs/html/gst-plugins-bad-libs-gst-atsc-section.html
deleted file mode 100644
index 9fdf2f6..0000000
--- a/docs/libs/html/gst-plugins-bad-libs-gst-atsc-section.html
+++ /dev/null
@@ -1,475 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>gst-atsc-section: GStreamer Bad Plugins 1.0 Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
-<link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Library Reference Manual">
-<link rel="up" href="mpegts.html" title="Mpeg TS helper library">
-<link rel="prev" href="gst-plugins-bad-libs-gstmpegtsdescriptor.html" title="gstmpegtsdescriptor">
-<link rel="next" href="gst-plugins-bad-libs-gst-dvb-section.html" title="gst-dvb-section">
-<meta name="generator" content="GTK-Doc V1.25 (XML mode)">
-<link rel="stylesheet" href="style.css" type="text/css">
-</head>
-<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
-<td width="100%" align="left" class="shortcuts">
-<a href="#" class="shortcut">Top</a><span id="nav_description"> <span class="dim">|</span>
- <a href="#gst-plugins-bad-libs-gst-atsc-section.description" class="shortcut">Description</a></span>
-</td>
-<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
-<td><a accesskey="u" href="mpegts.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
-<td><a accesskey="p" href="gst-plugins-bad-libs-gstmpegtsdescriptor.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="gst-plugins-bad-libs-gst-dvb-section.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
-</tr></table>
-<div class="refentry">
-<a name="gst-plugins-bad-libs-gst-atsc-section"></a><div class="titlepage"></div>
-<div class="refnamediv"><table width="100%"><tr>
-<td valign="top">
-<h2><span class="refentrytitle"><a name="gst-plugins-bad-libs-gst-atsc-section.top_of_page"></a>gst-atsc-section</span></h2>
-<p>gst-atsc-section</p>
-</td>
-<td class="gallery_image" valign="top" align="right"></td>
-</tr></table></div>
-<div class="refsect1">
-<a name="gst-plugins-bad-libs-gst-atsc-section.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table class="informaltable" width="100%" border="0">
-<colgroup>
-<col width="150px" class="functions_return">
-<col class="functions_name">
-</colgroup>
-<tbody>
-<tr>
-<td class="function_type">const <a class="link" href="gst-plugins-bad-libs-gst-atsc-section.html#GstMpegtsAtscVCT" title="struct GstMpegtsAtscVCT"><span class="returnvalue">GstMpegtsAtscVCT</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gst-atsc-section.html#gst-mpegts-section-get-atsc-tvct" title="gst_mpegts_section_get_atsc_tvct ()">gst_mpegts_section_get_atsc_tvct</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">const <a class="link" href="gst-plugins-bad-libs-gst-atsc-section.html#GstMpegtsAtscVCT" title="struct GstMpegtsAtscVCT"><span class="returnvalue">GstMpegtsAtscVCT</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gst-atsc-section.html#gst-mpegts-section-get-atsc-cvct" title="gst_mpegts_section_get_atsc_cvct ()">gst_mpegts_section_get_atsc_cvct</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">const <a class="link" href="gst-plugins-bad-libs-gst-atsc-section.html#GstMpegtsAtscMGT" title="struct GstMpegtsAtscMGT"><span class="returnvalue">GstMpegtsAtscMGT</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gst-atsc-section.html#gst-mpegts-section-get-atsc-mgt" title="gst_mpegts_section_get_atsc_mgt ()">gst_mpegts_section_get_atsc_mgt</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">const <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gst-atsc-section.html#gst-mpegts-atsc-string-segment-get-string" title="gst_mpegts_atsc_string_segment_get_string ()">gst_mpegts_atsc_string_segment_get_string</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">const <a class="link" href="gst-plugins-bad-libs-gst-atsc-section.html#GstMpegtsAtscEIT" title="struct GstMpegtsAtscEIT"><span class="returnvalue">GstMpegtsAtscEIT</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gst-atsc-section.html#gst-mpegts-section-get-atsc-eit" title="gst_mpegts_section_get_atsc_eit ()">gst_mpegts_section_get_atsc_eit</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">const <a class="link" href="gst-plugins-bad-libs-gst-atsc-section.html#GstMpegtsAtscETT" title="struct GstMpegtsAtscETT"><span class="returnvalue">GstMpegtsAtscETT</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gst-atsc-section.html#gst-mpegts-section-get-atsc-ett" title="gst_mpegts_section_get_atsc_ett ()">gst_mpegts_section_get_atsc_ett</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">const <a class="link" href="gst-plugins-bad-libs-gst-atsc-section.html#GstMpegtsAtscSTT" title="struct GstMpegtsAtscSTT"><span class="returnvalue">GstMpegtsAtscSTT</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gst-atsc-section.html#gst-mpegts-section-get-atsc-stt" title="gst_mpegts_section_get_atsc_stt ()">gst_mpegts_section_get_atsc_stt</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="/usr/share/gtk-doc/html/gstreamer-1.0GstDateTime.html#GstDateTime-struct"><span class="returnvalue">GstDateTime</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gst-atsc-section.html#gst-mpegts-atsc-stt-get-datetime-utc" title="gst_mpegts_atsc_stt_get_datetime_utc ()">gst_mpegts_atsc_stt_get_datetime_utc</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<div class="refsect1">
-<a name="gst-plugins-bad-libs-gst-atsc-section.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table class="informaltable" width="100%" border="0">
-<colgroup>
-<col width="150px" class="name">
-<col class="description">
-</colgroup>
-<tbody>
-<tr>
-<td class="datatype_keyword">enum</td>
-<td class="function_name"><a class="link" href="gst-plugins-bad-libs-gst-atsc-section.html#GstMpegtsSectionATSCTableID" title="enum GstMpegtsSectionATSCTableID">GstMpegtsSectionATSCTableID</a></td>
-</tr>
-<tr>
-<td class="datatype_keyword">struct</td>
-<td class="function_name"><a class="link" href="gst-plugins-bad-libs-gst-atsc-section.html#GstMpegtsAtscVCTSource" title="struct GstMpegtsAtscVCTSource">GstMpegtsAtscVCTSource</a></td>
-</tr>
-<tr>
-<td class="datatype_keyword">struct</td>
-<td class="function_name"><a class="link" href="gst-plugins-bad-libs-gst-atsc-section.html#GstMpegtsAtscVCT" title="struct GstMpegtsAtscVCT">GstMpegtsAtscVCT</a></td>
-</tr>
-<tr>
-<td class="datatype_keyword">enum</td>
-<td class="function_name"><a class="link" href="gst-plugins-bad-libs-gst-atsc-section.html#GstMpegtsAtscMGTTableType" title="enum GstMpegtsAtscMGTTableType">GstMpegtsAtscMGTTableType</a></td>
-</tr>
-<tr>
-<td class="datatype_keyword">struct</td>
-<td class="function_name"><a class="link" href="gst-plugins-bad-libs-gst-atsc-section.html#GstMpegtsAtscMGTTable" title="struct GstMpegtsAtscMGTTable">GstMpegtsAtscMGTTable</a></td>
-</tr>
-<tr>
-<td class="datatype_keyword">struct</td>
-<td class="function_name"><a class="link" href="gst-plugins-bad-libs-gst-atsc-section.html#GstMpegtsAtscMGT" title="struct GstMpegtsAtscMGT">GstMpegtsAtscMGT</a></td>
-</tr>
-<tr>
-<td class="datatype_keyword">struct</td>
-<td class="function_name"><a class="link" href="gst-plugins-bad-libs-gst-atsc-section.html#GstMpegtsAtscMultString" title="struct GstMpegtsAtscMultString">GstMpegtsAtscMultString</a></td>
-</tr>
-<tr>
-<td class="datatype_keyword">struct</td>
-<td class="function_name"><a class="link" href="gst-plugins-bad-libs-gst-atsc-section.html#GstMpegtsAtscEITEvent" title="struct GstMpegtsAtscEITEvent">GstMpegtsAtscEITEvent</a></td>
-</tr>
-<tr>
-<td class="datatype_keyword">struct</td>
-<td class="function_name"><a class="link" href="gst-plugins-bad-libs-gst-atsc-section.html#GstMpegtsAtscEIT" title="struct GstMpegtsAtscEIT">GstMpegtsAtscEIT</a></td>
-</tr>
-<tr>
-<td class="datatype_keyword">struct</td>
-<td class="function_name"><a class="link" href="gst-plugins-bad-libs-gst-atsc-section.html#GstMpegtsAtscETT" title="struct GstMpegtsAtscETT">GstMpegtsAtscETT</a></td>
-</tr>
-<tr>
-<td class="datatype_keyword">struct</td>
-<td class="function_name"><a class="link" href="gst-plugins-bad-libs-gst-atsc-section.html#GstMpegtsAtscSTT" title="struct GstMpegtsAtscSTT">GstMpegtsAtscSTT</a></td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<div class="refsect1">
-<a name="gst-plugins-bad-libs-gst-atsc-section.description"></a><h2>Description</h2>
-</div>
-<div class="refsect1">
-<a name="gst-plugins-bad-libs-gst-atsc-section.functions_details"></a><h2>Functions</h2>
-<div class="refsect2">
-<a name="gst-mpegts-section-get-atsc-tvct"></a><h3>gst_mpegts_section_get_atsc_tvct ()</h3>
-<pre class="programlisting">const <a class="link" href="gst-plugins-bad-libs-gst-atsc-section.html#GstMpegtsAtscVCT" title="struct GstMpegtsAtscVCT"><span class="returnvalue">GstMpegtsAtscVCT</span></a> *
-gst_mpegts_section_get_atsc_tvct (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstmpegtssection.html#GstMpegtsSection"><span class="type">GstMpegtsSection</span></a> *section</code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-mpegts-section-get-atsc-cvct"></a><h3>gst_mpegts_section_get_atsc_cvct ()</h3>
-<pre class="programlisting">const <a class="link" href="gst-plugins-bad-libs-gst-atsc-section.html#GstMpegtsAtscVCT" title="struct GstMpegtsAtscVCT"><span class="returnvalue">GstMpegtsAtscVCT</span></a> *
-gst_mpegts_section_get_atsc_cvct (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstmpegtssection.html#GstMpegtsSection"><span class="type">GstMpegtsSection</span></a> *section</code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-mpegts-section-get-atsc-mgt"></a><h3>gst_mpegts_section_get_atsc_mgt ()</h3>
-<pre class="programlisting">const <a class="link" href="gst-plugins-bad-libs-gst-atsc-section.html#GstMpegtsAtscMGT" title="struct GstMpegtsAtscMGT"><span class="returnvalue">GstMpegtsAtscMGT</span></a> *
-gst_mpegts_section_get_atsc_mgt (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstmpegtssection.html#GstMpegtsSection"><span class="type">GstMpegtsSection</span></a> *section</code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-mpegts-atsc-string-segment-get-string"></a><h3>gst_mpegts_atsc_string_segment_get_string ()</h3>
-<pre class="programlisting">const <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *
-gst_mpegts_atsc_string_segment_get_string
- (<em class="parameter"><code><span class="type">GstMpegtsAtscStringSegment</span> *seg</code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-mpegts-section-get-atsc-eit"></a><h3>gst_mpegts_section_get_atsc_eit ()</h3>
-<pre class="programlisting">const <a class="link" href="gst-plugins-bad-libs-gst-atsc-section.html#GstMpegtsAtscEIT" title="struct GstMpegtsAtscEIT"><span class="returnvalue">GstMpegtsAtscEIT</span></a> *
-gst_mpegts_section_get_atsc_eit (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstmpegtssection.html#GstMpegtsSection"><span class="type">GstMpegtsSection</span></a> *section</code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-mpegts-section-get-atsc-ett"></a><h3>gst_mpegts_section_get_atsc_ett ()</h3>
-<pre class="programlisting">const <a class="link" href="gst-plugins-bad-libs-gst-atsc-section.html#GstMpegtsAtscETT" title="struct GstMpegtsAtscETT"><span class="returnvalue">GstMpegtsAtscETT</span></a> *
-gst_mpegts_section_get_atsc_ett (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstmpegtssection.html#GstMpegtsSection"><span class="type">GstMpegtsSection</span></a> *section</code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-mpegts-section-get-atsc-stt"></a><h3>gst_mpegts_section_get_atsc_stt ()</h3>
-<pre class="programlisting">const <a class="link" href="gst-plugins-bad-libs-gst-atsc-section.html#GstMpegtsAtscSTT" title="struct GstMpegtsAtscSTT"><span class="returnvalue">GstMpegtsAtscSTT</span></a> *
-gst_mpegts_section_get_atsc_stt (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstmpegtssection.html#GstMpegtsSection"><span class="type">GstMpegtsSection</span></a> *section</code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-mpegts-atsc-stt-get-datetime-utc"></a><h3>gst_mpegts_atsc_stt_get_datetime_utc ()</h3>
-<pre class="programlisting"><a href="/usr/share/gtk-doc/html/gstreamer-1.0GstDateTime.html#GstDateTime-struct"><span class="returnvalue">GstDateTime</span></a> *
-gst_mpegts_atsc_stt_get_datetime_utc (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gst-atsc-section.html#GstMpegtsAtscSTT" title="struct GstMpegtsAtscSTT"><span class="type">GstMpegtsAtscSTT</span></a> *stt</code></em>);</pre>
-</div>
-</div>
-<div class="refsect1">
-<a name="gst-plugins-bad-libs-gst-atsc-section.other_details"></a><h2>Types and Values</h2>
-<div class="refsect2">
-<a name="GstMpegtsSectionATSCTableID"></a><h3>enum GstMpegtsSectionATSCTableID</h3>
-<div class="refsect3">
-<a name="GstMpegtsSectionATSCTableID.members"></a><h4>Members</h4>
-<div class="informaltable"><table class="informaltable" width="100%" border="0">
-<colgroup>
-<col width="300px" class="enum_members_name">
-<col class="enum_members_description">
-<col width="200px" class="enum_members_annotations">
-</colgroup>
-<tbody>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-TABLE-ID-ATSC-MASTER-GUIDE:CAPS"></a>GST_MTS_TABLE_ID_ATSC_MASTER_GUIDE</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-TABLE-ID-ATSC-TERRESTRIAL-VIRTUAL-CHANNEL:CAPS"></a>GST_MTS_TABLE_ID_ATSC_TERRESTRIAL_VIRTUAL_CHANNEL</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-TABLE-ID-ATSC-CABLE-VIRTUAL-CHANNEL:CAPS"></a>GST_MTS_TABLE_ID_ATSC_CABLE_VIRTUAL_CHANNEL</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-TABLE-ID-ATSC-RATING-REGION:CAPS"></a>GST_MTS_TABLE_ID_ATSC_RATING_REGION</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-TABLE-ID-ATSC-EVENT-INFORMATION:CAPS"></a>GST_MTS_TABLE_ID_ATSC_EVENT_INFORMATION</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-TABLE-ID-ATSC-CHANNEL-OR-EVENT-EXTENDED-TEXT:CAPS"></a>GST_MTS_TABLE_ID_ATSC_CHANNEL_OR_EVENT_EXTENDED_TEXT</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-TABLE-ID-ATSC-SYSTEM-TIME:CAPS"></a>GST_MTS_TABLE_ID_ATSC_SYSTEM_TIME</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-TABLE-ID-ATSC-DATA-EVENT:CAPS"></a>GST_MTS_TABLE_ID_ATSC_DATA_EVENT</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-TABLE-ID-ATSC-DATA-SERVICE:CAPS"></a>GST_MTS_TABLE_ID_ATSC_DATA_SERVICE</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-TABLE-ID-ATSC-NETWORK-RESOURCE:CAPS"></a>GST_MTS_TABLE_ID_ATSC_NETWORK_RESOURCE</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-TABLE-ID-ATSC-LONG-TERM-SERVICE:CAPS"></a>GST_MTS_TABLE_ID_ATSC_LONG_TERM_SERVICE</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-TABLE-ID-ATSC-DIRECTED-CHANNEL-CHANGE:CAPS"></a>GST_MTS_TABLE_ID_ATSC_DIRECTED_CHANNEL_CHANGE</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-TABLE-ID-ATSC-DIRECTED-CHANNEL-CHANGE-SECTION-CODE:CAPS"></a>GST_MTS_TABLE_ID_ATSC_DIRECTED_CHANNEL_CHANGE_SECTION_CODE</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-TABLE-ID-ATSC-AGGREGATE-EVENT-INFORMATION:CAPS"></a>GST_MTS_TABLE_ID_ATSC_AGGREGATE_EVENT_INFORMATION</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-TABLE-ID-ATSC-AGGREGATE-EXTENDED-TEXT:CAPS"></a>GST_MTS_TABLE_ID_ATSC_AGGREGATE_EXTENDED_TEXT</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-TABLE-ID-ATSC-AGGREGATE-DATA-EVENT:CAPS"></a>GST_MTS_TABLE_ID_ATSC_AGGREGATE_DATA_EVENT</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-TABLE-ID-ATSC-SATELLITE-VIRTUAL-CHANNEL:CAPS"></a>GST_MTS_TABLE_ID_ATSC_SATELLITE_VIRTUAL_CHANNEL</p></td>
-<td> </td>
-<td> </td>
-</tr>
-</tbody>
-</table></div>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="GstMpegtsAtscVCTSource"></a><h3>struct GstMpegtsAtscVCTSource</h3>
-<pre class="programlisting">struct GstMpegtsAtscVCTSource {
- gchar *short_name;
- guint16 major_channel_number;
- guint16 minor_channel_number;
- guint8 modulation_mode;
- guint32 carrier_frequency;
- guint16 channel_TSID;
- guint16 program_number;
- /* FIXME: */
- guint8 ETM_location;
- gboolean access_controlled;
- gboolean hidden;
- gboolean path_select; /* CVCT only - reserved bit in TVCT */
- gboolean out_of_band; /* CVCT only - reserved bit in TVCT */
- gboolean hide_guide;
- /* FIXME: */
- guint8 service_type;
- guint16 source_id;
- GPtrArray *descriptors;
-};
-</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="GstMpegtsAtscVCT"></a><h3>struct GstMpegtsAtscVCT</h3>
-<pre class="programlisting">struct GstMpegtsAtscVCT {
- guint16 transport_stream_id;
- guint8 protocol_version;
- GPtrArray *sources;
- GPtrArray *descriptors;
-};
-</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="GstMpegtsAtscMGTTableType"></a><h3>enum GstMpegtsAtscMGTTableType</h3>
-<div class="refsect3">
-<a name="GstMpegtsAtscMGTTableType.members"></a><h4>Members</h4>
-<div class="informaltable"><table class="informaltable" width="100%" border="0">
-<colgroup>
-<col width="300px" class="enum_members_name">
-<col class="enum_members_description">
-<col width="200px" class="enum_members_annotations">
-</colgroup>
-<tbody>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-ATSC-MGT-TABLE-TYPE-EIT0:CAPS"></a>GST_MPEGTS_ATSC_MGT_TABLE_TYPE_EIT0</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-ATSC-MGT-TABLE-TYPE-EIT127:CAPS"></a>GST_MPEGTS_ATSC_MGT_TABLE_TYPE_EIT127</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-ATSC-MGT-TABLE-TYPE-ETT0:CAPS"></a>GST_MPEGTS_ATSC_MGT_TABLE_TYPE_ETT0</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-ATSC-MGT-TABLE-TYPE-ETT127:CAPS"></a>GST_MPEGTS_ATSC_MGT_TABLE_TYPE_ETT127</p></td>
-<td> </td>
-<td> </td>
-</tr>
-</tbody>
-</table></div>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="GstMpegtsAtscMGTTable"></a><h3>struct GstMpegtsAtscMGTTable</h3>
-<pre class="programlisting">struct GstMpegtsAtscMGTTable {
- guint16 table_type;
- guint16 pid;
- guint8 version_number;
- guint32 number_bytes;
- GPtrArray *descriptors;
-};
-</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="GstMpegtsAtscMGT"></a><h3>struct GstMpegtsAtscMGT</h3>
-<pre class="programlisting">struct GstMpegtsAtscMGT {
- guint8 protocol_version;
- guint16 tables_defined;
- GPtrArray *tables;
- GPtrArray *descriptors;
-};
-</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="GstMpegtsAtscMultString"></a><h3>struct GstMpegtsAtscMultString</h3>
-<pre class="programlisting">struct GstMpegtsAtscMultString {
- gchar iso_639_langcode[4];
- GPtrArray *segments;
-};
-</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="GstMpegtsAtscEITEvent"></a><h3>struct GstMpegtsAtscEITEvent</h3>
-<pre class="programlisting">struct GstMpegtsAtscEITEvent {
- guint16 event_id;
- guint32 start_time;
- guint8 etm_location;
- guint32 length_in_seconds;
- GPtrArray *titles;
-
- GPtrArray *descriptors;
-};
-</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="GstMpegtsAtscEIT"></a><h3>struct GstMpegtsAtscEIT</h3>
-<pre class="programlisting">struct GstMpegtsAtscEIT {
- guint16 source_id;
- guint8 protocol_version;
-
- GPtrArray *events;
-};
-</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="GstMpegtsAtscETT"></a><h3>struct GstMpegtsAtscETT</h3>
-<pre class="programlisting">struct GstMpegtsAtscETT {
- guint16 ett_table_id_extension;
- guint16 protocol_version;
- guint32 etm_id;
-
- GPtrArray *messages;
-};
-</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="GstMpegtsAtscSTT"></a><h3>struct GstMpegtsAtscSTT</h3>
-<pre class="programlisting">struct GstMpegtsAtscSTT {
- guint8 protocol_version;
- guint32 system_time;
- guint8 gps_utc_offset;
- gboolean ds_status;
- guint8 ds_dayofmonth;
- guint8 ds_hour;
- GPtrArray *descriptors;
-
- GstDateTime *utc_datetime;
-};
-</pre>
-</div>
-</div>
-</div>
-<div class="footer">
-<hr>Generated by GTK-Doc V1.25</div>
-</body>
-</html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-bad-libs-gst-dvb-descriptor.html b/docs/libs/html/gst-plugins-bad-libs-gst-dvb-descriptor.html
deleted file mode 100644
index 2f5759c..0000000
--- a/docs/libs/html/gst-plugins-bad-libs-gst-dvb-descriptor.html
+++ /dev/null
@@ -1,2425 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>gst-dvb-descriptor: GStreamer Bad Plugins 1.0 Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
-<link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Library Reference Manual">
-<link rel="up" href="mpegts.html" title="Mpeg TS helper library">
-<link rel="prev" href="gst-plugins-bad-libs-gst-atsc-descriptor.html" title="gst-atsc-descriptor">
-<link rel="next" href="gst-plugins-bad-libs-gst-isdb-descriptor.html" title="gst-isdb-descriptor">
-<meta name="generator" content="GTK-Doc V1.25 (XML mode)">
-<link rel="stylesheet" href="style.css" type="text/css">
-</head>
-<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
-<td width="100%" align="left" class="shortcuts">
-<a href="#" class="shortcut">Top</a><span id="nav_description"> <span class="dim">|</span>
- <a href="#gst-plugins-bad-libs-gst-dvb-descriptor.description" class="shortcut">Description</a></span><span id="nav_hierarchy"> <span class="dim">|</span>
- <a href="#gst-plugins-bad-libs-gst-dvb-descriptor.object-hierarchy" class="shortcut">Object Hierarchy</a></span>
-</td>
-<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
-<td><a accesskey="u" href="mpegts.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
-<td><a accesskey="p" href="gst-plugins-bad-libs-gst-atsc-descriptor.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="gst-plugins-bad-libs-gst-isdb-descriptor.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
-</tr></table>
-<div class="refentry">
-<a name="gst-plugins-bad-libs-gst-dvb-descriptor"></a><div class="titlepage"></div>
-<div class="refnamediv"><table width="100%"><tr>
-<td valign="top">
-<h2><span class="refentrytitle"><a name="gst-plugins-bad-libs-gst-dvb-descriptor.top_of_page"></a>gst-dvb-descriptor</span></h2>
-<p>gst-dvb-descriptor</p>
-</td>
-<td class="gallery_image" valign="top" align="right"></td>
-</tr></table></div>
-<div class="refsect1">
-<a name="gst-plugins-bad-libs-gst-dvb-descriptor.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table class="informaltable" width="100%" border="0">
-<colgroup>
-<col width="150px" class="functions_return">
-<col class="functions_name">
-</colgroup>
-<tbody>
-<tr>
-<td class="function_type">
-<a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#gst-mpegts-descriptor-parse-dvb-content" title="gst_mpegts_descriptor_parse_dvb_content ()">gst_mpegts_descriptor_parse_dvb_content</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#gst-mpegts-dvb-component-descriptor-free" title="gst_mpegts_dvb_component_descriptor_free ()">gst_mpegts_dvb_component_descriptor_free</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#gst-mpegts-descriptor-parse-dvb-component" title="gst_mpegts_descriptor_parse_dvb_component ()">gst_mpegts_descriptor_parse_dvb_component</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#gst-mpegts-extended-event-descriptor-free" title="gst_mpegts_extended_event_descriptor_free ()">gst_mpegts_extended_event_descriptor_free</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#gst-mpegts-descriptor-parse-dvb-extended-event" title="gst_mpegts_descriptor_parse_dvb_extended_event ()">gst_mpegts_descriptor_parse_dvb_extended_event</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#gst-mpegts-descriptor-parse-satellite-delivery-system" title="gst_mpegts_descriptor_parse_satellite_delivery_system ()">gst_mpegts_descriptor_parse_satellite_delivery_system</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#gst-mpegts-descriptor-parse-cable-delivery-system" title="gst_mpegts_descriptor_parse_cable_delivery_system ()">gst_mpegts_descriptor_parse_cable_delivery_system</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#gst-mpegts-descriptor-parse-terrestrial-delivery-system" title="gst_mpegts_descriptor_parse_terrestrial_delivery_system ()">gst_mpegts_descriptor_parse_terrestrial_delivery_system</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#gst-mpegts-t2-delivery-system-descriptor-free" title="gst_mpegts_t2_delivery_system_descriptor_free ()">gst_mpegts_t2_delivery_system_descriptor_free</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#gst-mpegts-descriptor-parse-dvb-t2-delivery-system" title="gst_mpegts_descriptor_parse_dvb_t2_delivery_system ()">gst_mpegts_descriptor_parse_dvb_t2_delivery_system</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#gst-mpegts-descriptor-parse-dvb-short-event" title="gst_mpegts_descriptor_parse_dvb_short_event ()">gst_mpegts_descriptor_parse_dvb_short_event</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#gst-mpegts-descriptor-parse-dvb-network-name" title="gst_mpegts_descriptor_parse_dvb_network_name ()">gst_mpegts_descriptor_parse_dvb_network_name</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a class="link" href="gst-plugins-bad-libs-gstmpegtsdescriptor.html#GstMpegtsDescriptor"><span class="returnvalue">GstMpegtsDescriptor</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#gst-mpegts-descriptor-from-dvb-network-name" title="gst_mpegts_descriptor_from_dvb_network_name ()">gst_mpegts_descriptor_from_dvb_network_name</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#gst-mpegts-descriptor-parse-dvb-service" title="gst_mpegts_descriptor_parse_dvb_service ()">gst_mpegts_descriptor_parse_dvb_service</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a class="link" href="gst-plugins-bad-libs-gstmpegtsdescriptor.html#GstMpegtsDescriptor"><span class="returnvalue">GstMpegtsDescriptor</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#gst-mpegts-descriptor-from-dvb-service" title="gst_mpegts_descriptor_from_dvb_service ()">gst_mpegts_descriptor_from_dvb_service</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#gst-mpegts-descriptor-parse-dvb-teletext-idx" title="gst_mpegts_descriptor_parse_dvb_teletext_idx ()">gst_mpegts_descriptor_parse_dvb_teletext_idx</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#gst-mpegts-descriptor-parse-dvb-teletext-nb" title="gst_mpegts_descriptor_parse_dvb_teletext_nb ()">gst_mpegts_descriptor_parse_dvb_teletext_nb</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#gst-mpegts-descriptor-parse-dvb-subtitling-idx" title="gst_mpegts_descriptor_parse_dvb_subtitling_idx ()">gst_mpegts_descriptor_parse_dvb_subtitling_idx</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#gst-mpegts-descriptor-parse-dvb-subtitling-nb" title="gst_mpegts_descriptor_parse_dvb_subtitling_nb ()">gst_mpegts_descriptor_parse_dvb_subtitling_nb</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a class="link" href="gst-plugins-bad-libs-gstmpegtsdescriptor.html#GstMpegtsDescriptor"><span class="returnvalue">GstMpegtsDescriptor</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#gst-mpegts-descriptor-from-dvb-subtitling" title="gst_mpegts_descriptor_from_dvb_subtitling ()">gst_mpegts_descriptor_from_dvb_subtitling</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#gst-mpegts-dvb-linkage-descriptor-free" title="gst_mpegts_dvb_linkage_descriptor_free ()">gst_mpegts_dvb_linkage_descriptor_free</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">const <a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#GstMpegtsDVBLinkageMobileHandOver" title="struct GstMpegtsDVBLinkageMobileHandOver"><span class="returnvalue">GstMpegtsDVBLinkageMobileHandOver</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#gst-mpegts-dvb-linkage-descriptor-get-mobile-hand-over" title="gst_mpegts_dvb_linkage_descriptor_get_mobile_hand_over ()">gst_mpegts_dvb_linkage_descriptor_get_mobile_hand_over</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">const <a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#GstMpegtsDVBLinkageEvent" title="struct GstMpegtsDVBLinkageEvent"><span class="returnvalue">GstMpegtsDVBLinkageEvent</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#gst-mpegts-dvb-linkage-descriptor-get-event" title="gst_mpegts_dvb_linkage_descriptor_get_event ()">gst_mpegts_dvb_linkage_descriptor_get_event</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">const <a href="/usr/share/gtk-doc/html/glibglib-Pointer-Arrays.html#GPtrArray"><span class="returnvalue">GPtrArray</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#gst-mpegts-dvb-linkage-descriptor-get-extended-event" title="gst_mpegts_dvb_linkage_descriptor_get_extended_event ()">gst_mpegts_dvb_linkage_descriptor_get_extended_event</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#gst-mpegts-descriptor-parse-dvb-linkage" title="gst_mpegts_descriptor_parse_dvb_linkage ()">gst_mpegts_descriptor_parse_dvb_linkage</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#gst-mpegts-descriptor-parse-dvb-private-data-specifier" title="gst_mpegts_descriptor_parse_dvb_private_data_specifier ()">gst_mpegts_descriptor_parse_dvb_private_data_specifier</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#gst-mpegts-descriptor-parse-dvb-frequency-list" title="gst_mpegts_descriptor_parse_dvb_frequency_list ()">gst_mpegts_descriptor_parse_dvb_frequency_list</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#gst-mpegts-dvb-data-broadcast-descriptor-free" title="gst_mpegts_dvb_data_broadcast_descriptor_free ()">gst_mpegts_dvb_data_broadcast_descriptor_free</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#gst-mpegts-descriptor-parse-dvb-data-broadcast" title="gst_mpegts_descriptor_parse_dvb_data_broadcast ()">gst_mpegts_descriptor_parse_dvb_data_broadcast</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#gst-mpegts-descriptor-parse-dvb-scrambling" title="gst_mpegts_descriptor_parse_dvb_scrambling ()">gst_mpegts_descriptor_parse_dvb_scrambling</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#gst-mpegts-descriptor-parse-dvb-data-broadcast-id" title="gst_mpegts_descriptor_parse_dvb_data_broadcast_id ()">gst_mpegts_descriptor_parse_dvb_data_broadcast_id</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#gst-mpegts-descriptor-parse-dvb-parental-rating" title="gst_mpegts_descriptor_parse_dvb_parental_rating ()">gst_mpegts_descriptor_parse_dvb_parental_rating</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#gst-mpegts-descriptor-parse-dvb-stream-identifier" title="gst_mpegts_descriptor_parse_dvb_stream_identifier ()">gst_mpegts_descriptor_parse_dvb_stream_identifier</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#gst-mpegts-descriptor-parse-dvb-ca-identifier" title="gst_mpegts_descriptor_parse_dvb_ca_identifier ()">gst_mpegts_descriptor_parse_dvb_ca_identifier</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#gst-mpegts-descriptor-parse-dvb-service-list" title="gst_mpegts_descriptor_parse_dvb_service_list ()">gst_mpegts_descriptor_parse_dvb_service_list</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#gst-mpegts-descriptor-parse-dvb-stuffing" title="gst_mpegts_descriptor_parse_dvb_stuffing ()">gst_mpegts_descriptor_parse_dvb_stuffing</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#gst-mpegts-descriptor-parse-dvb-bouquet-name" title="gst_mpegts_descriptor_parse_dvb_bouquet_name ()">gst_mpegts_descriptor_parse_dvb_bouquet_name</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#gst-mpegts-descriptor-parse-dvb-multilingual-network-name" title="gst_mpegts_descriptor_parse_dvb_multilingual_network_name ()">gst_mpegts_descriptor_parse_dvb_multilingual_network_name</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#gst-mpegts-descriptor-parse-dvb-multilingual-bouquet-name" title="gst_mpegts_descriptor_parse_dvb_multilingual_bouquet_name ()">gst_mpegts_descriptor_parse_dvb_multilingual_bouquet_name</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#gst-mpegts-descriptor-parse-dvb-multilingual-service-name" title="gst_mpegts_descriptor_parse_dvb_multilingual_service_name ()">gst_mpegts_descriptor_parse_dvb_multilingual_service_name</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#gst-mpegts-descriptor-parse-dvb-multilingual-component" title="gst_mpegts_descriptor_parse_dvb_multilingual_component ()">gst_mpegts_descriptor_parse_dvb_multilingual_component</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<div class="refsect1">
-<a name="gst-plugins-bad-libs-gst-dvb-descriptor.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table class="informaltable" width="100%" border="0">
-<colgroup>
-<col width="150px" class="name">
-<col class="description">
-</colgroup>
-<tbody>
-<tr>
-<td class="datatype_keyword">enum</td>
-<td class="function_name"><a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#GstMpegtsDVBDescriptorType" title="enum GstMpegtsDVBDescriptorType">GstMpegtsDVBDescriptorType</a></td>
-</tr>
-<tr>
-<td class="datatype_keyword">enum</td>
-<td class="function_name"><a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#GstMpegtsDVBExtendedDescriptorType" title="enum GstMpegtsDVBExtendedDescriptorType">GstMpegtsDVBExtendedDescriptorType</a></td>
-</tr>
-<tr>
-<td class="datatype_keyword">struct</td>
-<td class="function_name"><a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#GstMpegtsContent" title="struct GstMpegtsContent">GstMpegtsContent</a></td>
-</tr>
-<tr>
-<td class="datatype_keyword">struct</td>
-<td class="function_name"><a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#GstMpegtsComponentDescriptor" title="struct GstMpegtsComponentDescriptor">GstMpegtsComponentDescriptor</a></td>
-</tr>
-<tr>
-<td class="datatype_keyword">struct</td>
-<td class="function_name"><a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#GstMpegtsExtendedEventItem" title="struct GstMpegtsExtendedEventItem">GstMpegtsExtendedEventItem</a></td>
-</tr>
-<tr>
-<td class="datatype_keyword">struct</td>
-<td class="function_name"><a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#GstMpegtsExtendedEventDescriptor" title="struct GstMpegtsExtendedEventDescriptor">GstMpegtsExtendedEventDescriptor</a></td>
-</tr>
-<tr>
-<td class="datatype_keyword">struct</td>
-<td class="function_name"><a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#GstMpegtsSatelliteDeliverySystemDescriptor" title="struct GstMpegtsSatelliteDeliverySystemDescriptor">GstMpegtsSatelliteDeliverySystemDescriptor</a></td>
-</tr>
-<tr>
-<td class="datatype_keyword">enum</td>
-<td class="function_name"><a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#GstMpegtsDVBCodeRate" title="enum GstMpegtsDVBCodeRate">GstMpegtsDVBCodeRate</a></td>
-</tr>
-<tr>
-<td class="datatype_keyword">enum</td>
-<td class="function_name"><a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#GstMpegtsModulationType" title="enum GstMpegtsModulationType">GstMpegtsModulationType</a></td>
-</tr>
-<tr>
-<td class="datatype_keyword">enum</td>
-<td class="function_name"><a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#GstMpegtsSatellitePolarizationType" title="enum GstMpegtsSatellitePolarizationType">GstMpegtsSatellitePolarizationType</a></td>
-</tr>
-<tr>
-<td class="datatype_keyword">enum</td>
-<td class="function_name"><a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#GstMpegtsSatelliteRolloff" title="enum GstMpegtsSatelliteRolloff">GstMpegtsSatelliteRolloff</a></td>
-</tr>
-<tr>
-<td class="datatype_keyword">struct</td>
-<td class="function_name"><a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#GstMpegtsCableDeliverySystemDescriptor" title="struct GstMpegtsCableDeliverySystemDescriptor">GstMpegtsCableDeliverySystemDescriptor</a></td>
-</tr>
-<tr>
-<td class="datatype_keyword">enum</td>
-<td class="function_name"><a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#GstMpegtsCableOuterFECScheme" title="enum GstMpegtsCableOuterFECScheme">GstMpegtsCableOuterFECScheme</a></td>
-</tr>
-<tr>
-<td class="datatype_keyword">struct</td>
-<td class="function_name"><a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#GstMpegtsTerrestrialDeliverySystemDescriptor" title="struct GstMpegtsTerrestrialDeliverySystemDescriptor">GstMpegtsTerrestrialDeliverySystemDescriptor</a></td>
-</tr>
-<tr>
-<td class="datatype_keyword">enum</td>
-<td class="function_name"><a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#GstMpegtsTerrestrialTransmissionMode" title="enum GstMpegtsTerrestrialTransmissionMode">GstMpegtsTerrestrialTransmissionMode</a></td>
-</tr>
-<tr>
-<td class="datatype_keyword">enum</td>
-<td class="function_name"><a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#GstMpegtsTerrestrialGuardInterval" title="enum GstMpegtsTerrestrialGuardInterval">GstMpegtsTerrestrialGuardInterval</a></td>
-</tr>
-<tr>
-<td class="datatype_keyword">enum</td>
-<td class="function_name"><a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#GstMpegtsTerrestrialHierarchy" title="enum GstMpegtsTerrestrialHierarchy">GstMpegtsTerrestrialHierarchy</a></td>
-</tr>
-<tr>
-<td class="datatype_keyword">struct</td>
-<td class="function_name"><a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#GstMpegtsT2DeliverySystemCellExtension" title="struct GstMpegtsT2DeliverySystemCellExtension">GstMpegtsT2DeliverySystemCellExtension</a></td>
-</tr>
-<tr>
-<td class="datatype_keyword">struct</td>
-<td class="function_name"><a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#GstMpegtsT2DeliverySystemCell" title="struct GstMpegtsT2DeliverySystemCell">GstMpegtsT2DeliverySystemCell</a></td>
-</tr>
-<tr>
-<td class="datatype_keyword">struct</td>
-<td class="function_name"><a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#GstMpegtsT2DeliverySystemDescriptor" title="struct GstMpegtsT2DeliverySystemDescriptor">GstMpegtsT2DeliverySystemDescriptor</a></td>
-</tr>
-<tr>
-<td class="datatype_keyword">enum</td>
-<td class="function_name"><a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#GstMpegtsDVBServiceType" title="enum GstMpegtsDVBServiceType">GstMpegtsDVBServiceType</a></td>
-</tr>
-<tr>
-<td class="datatype_keyword">enum</td>
-<td class="function_name"><a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#GstMpegtsDVBTeletextType" title="enum GstMpegtsDVBTeletextType">GstMpegtsDVBTeletextType</a></td>
-</tr>
-<tr>
-<td class="datatype_keyword">enum</td>
-<td class="function_name"><a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#GstMpegtsDVBLinkageType" title="enum GstMpegtsDVBLinkageType">GstMpegtsDVBLinkageType</a></td>
-</tr>
-<tr>
-<td class="datatype_keyword">enum</td>
-<td class="function_name"><a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#GstMpegtsDVBLinkageHandOverType" title="enum GstMpegtsDVBLinkageHandOverType">GstMpegtsDVBLinkageHandOverType</a></td>
-</tr>
-<tr>
-<td class="datatype_keyword">struct</td>
-<td class="function_name"><a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#GstMpegtsDVBLinkageMobileHandOver" title="struct GstMpegtsDVBLinkageMobileHandOver">GstMpegtsDVBLinkageMobileHandOver</a></td>
-</tr>
-<tr>
-<td class="datatype_keyword">struct</td>
-<td class="function_name"><a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#GstMpegtsDVBLinkageEvent" title="struct GstMpegtsDVBLinkageEvent">GstMpegtsDVBLinkageEvent</a></td>
-</tr>
-<tr>
-<td class="datatype_keyword">struct</td>
-<td class="function_name"><a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#GstMpegtsDVBLinkageExtendedEvent" title="struct GstMpegtsDVBLinkageExtendedEvent">GstMpegtsDVBLinkageExtendedEvent</a></td>
-</tr>
-<tr>
-<td class="datatype_keyword">struct</td>
-<td class="function_name"><a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#GstMpegtsDVBLinkageDescriptor" title="struct GstMpegtsDVBLinkageDescriptor">GstMpegtsDVBLinkageDescriptor</a></td>
-</tr>
-<tr>
-<td class="datatype_keyword">struct</td>
-<td class="function_name"><a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#GstMpegtsDataBroadcastDescriptor" title="struct GstMpegtsDataBroadcastDescriptor">GstMpegtsDataBroadcastDescriptor</a></td>
-</tr>
-<tr>
-<td class="datatype_keyword">enum</td>
-<td class="function_name"><a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#GstMpegtsDVBScramblingModeType" title="enum GstMpegtsDVBScramblingModeType">GstMpegtsDVBScramblingModeType</a></td>
-</tr>
-<tr>
-<td class="datatype_keyword">struct</td>
-<td class="function_name"><a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#GstMpegtsDVBParentalRatingItem" title="struct GstMpegtsDVBParentalRatingItem">GstMpegtsDVBParentalRatingItem</a></td>
-</tr>
-<tr>
-<td class="datatype_keyword">struct</td>
-<td class="function_name"><a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#GstMpegtsDVBServiceListItem" title="struct GstMpegtsDVBServiceListItem">GstMpegtsDVBServiceListItem</a></td>
-</tr>
-<tr>
-<td class="datatype_keyword">struct</td>
-<td class="function_name"><a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#GstMpegtsDvbMultilingualNetworkNameItem" title="struct GstMpegtsDvbMultilingualNetworkNameItem">GstMpegtsDvbMultilingualNetworkNameItem</a></td>
-</tr>
-<tr>
-<td class="datatype_keyword">struct</td>
-<td class="function_name"><a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#GstMpegtsDvbMultilingualBouquetNameItem" title="struct GstMpegtsDvbMultilingualBouquetNameItem">GstMpegtsDvbMultilingualBouquetNameItem</a></td>
-</tr>
-<tr>
-<td class="datatype_keyword">struct</td>
-<td class="function_name"><a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#GstMpegtsDvbMultilingualServiceNameItem" title="struct GstMpegtsDvbMultilingualServiceNameItem">GstMpegtsDvbMultilingualServiceNameItem</a></td>
-</tr>
-<tr>
-<td class="datatype_keyword">struct</td>
-<td class="function_name"><a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#GstMpegtsDvbMultilingualComponentItem" title="struct GstMpegtsDvbMultilingualComponentItem">GstMpegtsDvbMultilingualComponentItem</a></td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<div class="refsect1">
-<a name="gst-plugins-bad-libs-gst-dvb-descriptor.object-hierarchy"></a><h2>Object Hierarchy</h2>
-<pre class="screen"> <a href="https://developer.gnome.org/gobject/unstable/gobject-Enumeration-and-Flag-Types.html">GEnum</a>
- <span class="lineart">├──</span> GstMpegtsCableOuterFECScheme
- <span class="lineart">├──</span> GstMpegtsDVBCodeRate
- <span class="lineart">├──</span> GstMpegtsDVBServiceType
- <span class="lineart">├──</span> GstMpegtsModulationType
- <span class="lineart">├──</span> GstMpegtsSatellitePolarizationType
- <span class="lineart">╰──</span> GstMpegtsSatelliteRolloff
-</pre>
-</div>
-<div class="refsect1">
-<a name="gst-plugins-bad-libs-gst-dvb-descriptor.description"></a><h2>Description</h2>
-</div>
-<div class="refsect1">
-<a name="gst-plugins-bad-libs-gst-dvb-descriptor.functions_details"></a><h2>Functions</h2>
-<div class="refsect2">
-<a name="gst-mpegts-descriptor-parse-dvb-content"></a><h3>gst_mpegts_descriptor_parse_dvb_content ()</h3>
-<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-gst_mpegts_descriptor_parse_dvb_content
- (<em class="parameter"><code>const <a class="link" href="gst-plugins-bad-libs-gstmpegtsdescriptor.html#GstMpegtsDescriptor"><span class="type">GstMpegtsDescriptor</span></a> *descriptor</code></em>,
- <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a> **content</code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-mpegts-dvb-component-descriptor-free"></a><h3>gst_mpegts_dvb_component_descriptor_free ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-gst_mpegts_dvb_component_descriptor_free
- (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#GstMpegtsComponentDescriptor" title="struct GstMpegtsComponentDescriptor"><span class="type">GstMpegtsComponentDescriptor</span></a> *source</code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-mpegts-descriptor-parse-dvb-component"></a><h3>gst_mpegts_descriptor_parse_dvb_component ()</h3>
-<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-gst_mpegts_descriptor_parse_dvb_component
- (<em class="parameter"><code>const <a class="link" href="gst-plugins-bad-libs-gstmpegtsdescriptor.html#GstMpegtsDescriptor"><span class="type">GstMpegtsDescriptor</span></a> *descriptor</code></em>,
- <em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#GstMpegtsComponentDescriptor" title="struct GstMpegtsComponentDescriptor"><span class="type">GstMpegtsComponentDescriptor</span></a> **res</code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-mpegts-extended-event-descriptor-free"></a><h3>gst_mpegts_extended_event_descriptor_free ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-gst_mpegts_extended_event_descriptor_free
- (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#GstMpegtsExtendedEventDescriptor" title="struct GstMpegtsExtendedEventDescriptor"><span class="type">GstMpegtsExtendedEventDescriptor</span></a> *source</code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-mpegts-descriptor-parse-dvb-extended-event"></a><h3>gst_mpegts_descriptor_parse_dvb_extended_event ()</h3>
-<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-gst_mpegts_descriptor_parse_dvb_extended_event
- (<em class="parameter"><code>const <a class="link" href="gst-plugins-bad-libs-gstmpegtsdescriptor.html#GstMpegtsDescriptor"><span class="type">GstMpegtsDescriptor</span></a> *descriptor</code></em>,
- <em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#GstMpegtsExtendedEventDescriptor" title="struct GstMpegtsExtendedEventDescriptor"><span class="type">GstMpegtsExtendedEventDescriptor</span></a> **res</code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-mpegts-descriptor-parse-satellite-delivery-system"></a><h3>gst_mpegts_descriptor_parse_satellite_delivery_system ()</h3>
-<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-gst_mpegts_descriptor_parse_satellite_delivery_system
- (<em class="parameter"><code>const <a class="link" href="gst-plugins-bad-libs-gstmpegtsdescriptor.html#GstMpegtsDescriptor"><span class="type">GstMpegtsDescriptor</span></a> *descriptor</code></em>,
- <em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#GstMpegtsSatelliteDeliverySystemDescriptor" title="struct GstMpegtsSatelliteDeliverySystemDescriptor"><span class="type">GstMpegtsSatelliteDeliverySystemDescriptor</span></a> *res</code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-mpegts-descriptor-parse-cable-delivery-system"></a><h3>gst_mpegts_descriptor_parse_cable_delivery_system ()</h3>
-<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-gst_mpegts_descriptor_parse_cable_delivery_system
- (<em class="parameter"><code>const <a class="link" href="gst-plugins-bad-libs-gstmpegtsdescriptor.html#GstMpegtsDescriptor"><span class="type">GstMpegtsDescriptor</span></a> *descriptor</code></em>,
- <em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#GstMpegtsCableDeliverySystemDescriptor" title="struct GstMpegtsCableDeliverySystemDescriptor"><span class="type">GstMpegtsCableDeliverySystemDescriptor</span></a> *res</code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-mpegts-descriptor-parse-terrestrial-delivery-system"></a><h3>gst_mpegts_descriptor_parse_terrestrial_delivery_system ()</h3>
-<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-gst_mpegts_descriptor_parse_terrestrial_delivery_system
- (<em class="parameter"><code>const <a class="link" href="gst-plugins-bad-libs-gstmpegtsdescriptor.html#GstMpegtsDescriptor"><span class="type">GstMpegtsDescriptor</span></a> *descriptor</code></em>,
- <em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#GstMpegtsTerrestrialDeliverySystemDescriptor" title="struct GstMpegtsTerrestrialDeliverySystemDescriptor"><span class="type">GstMpegtsTerrestrialDeliverySystemDescriptor</span></a> *res</code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-mpegts-t2-delivery-system-descriptor-free"></a><h3>gst_mpegts_t2_delivery_system_descriptor_free ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-gst_mpegts_t2_delivery_system_descriptor_free
- (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#GstMpegtsT2DeliverySystemDescriptor" title="struct GstMpegtsT2DeliverySystemDescriptor"><span class="type">GstMpegtsT2DeliverySystemDescriptor</span></a> *source</code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-mpegts-descriptor-parse-dvb-t2-delivery-system"></a><h3>gst_mpegts_descriptor_parse_dvb_t2_delivery_system ()</h3>
-<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-gst_mpegts_descriptor_parse_dvb_t2_delivery_system
- (<em class="parameter"><code>const <a class="link" href="gst-plugins-bad-libs-gstmpegtsdescriptor.html#GstMpegtsDescriptor"><span class="type">GstMpegtsDescriptor</span></a> *descriptor</code></em>,
- <em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#GstMpegtsT2DeliverySystemDescriptor" title="struct GstMpegtsT2DeliverySystemDescriptor"><span class="type">GstMpegtsT2DeliverySystemDescriptor</span></a> **res</code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-mpegts-descriptor-parse-dvb-short-event"></a><h3>gst_mpegts_descriptor_parse_dvb_short_event ()</h3>
-<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-gst_mpegts_descriptor_parse_dvb_short_event
- (<em class="parameter"><code>const <a class="link" href="gst-plugins-bad-libs-gstmpegtsdescriptor.html#GstMpegtsDescriptor"><span class="type">GstMpegtsDescriptor</span></a> *descriptor</code></em>,
- <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="type">gchar</span></a> **language_code</code></em>,
- <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="type">gchar</span></a> **event_name</code></em>,
- <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="type">gchar</span></a> **text</code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-mpegts-descriptor-parse-dvb-network-name"></a><h3>gst_mpegts_descriptor_parse_dvb_network_name ()</h3>
-<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-gst_mpegts_descriptor_parse_dvb_network_name
- (<em class="parameter"><code>const <a class="link" href="gst-plugins-bad-libs-gstmpegtsdescriptor.html#GstMpegtsDescriptor"><span class="type">GstMpegtsDescriptor</span></a> *descriptor</code></em>,
- <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="type">gchar</span></a> **name</code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-mpegts-descriptor-from-dvb-network-name"></a><h3>gst_mpegts_descriptor_from_dvb_network_name ()</h3>
-<pre class="programlisting"><a class="link" href="gst-plugins-bad-libs-gstmpegtsdescriptor.html#GstMpegtsDescriptor"><span class="returnvalue">GstMpegtsDescriptor</span></a> *
-gst_mpegts_descriptor_from_dvb_network_name
- (<em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *name</code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-mpegts-descriptor-parse-dvb-service"></a><h3>gst_mpegts_descriptor_parse_dvb_service ()</h3>
-<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-gst_mpegts_descriptor_parse_dvb_service
- (<em class="parameter"><code>const <a class="link" href="gst-plugins-bad-libs-gstmpegtsdescriptor.html#GstMpegtsDescriptor"><span class="type">GstMpegtsDescriptor</span></a> *descriptor</code></em>,
- <em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#GstMpegtsDVBServiceType" title="enum GstMpegtsDVBServiceType"><span class="type">GstMpegtsDVBServiceType</span></a> *service_type</code></em>,
- <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="type">gchar</span></a> **service_name</code></em>,
- <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="type">gchar</span></a> **provider_name</code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-mpegts-descriptor-from-dvb-service"></a><h3>gst_mpegts_descriptor_from_dvb_service ()</h3>
-<pre class="programlisting"><a class="link" href="gst-plugins-bad-libs-gstmpegtsdescriptor.html#GstMpegtsDescriptor"><span class="returnvalue">GstMpegtsDescriptor</span></a> *
-gst_mpegts_descriptor_from_dvb_service
- (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#GstMpegtsDVBServiceType" title="enum GstMpegtsDVBServiceType"><span class="type">GstMpegtsDVBServiceType</span></a> service_type</code></em>,
- <em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *service_name</code></em>,
- <em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *service_provider</code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-mpegts-descriptor-parse-dvb-teletext-idx"></a><h3>gst_mpegts_descriptor_parse_dvb_teletext_idx ()</h3>
-<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-gst_mpegts_descriptor_parse_dvb_teletext_idx
- (<em class="parameter"><code>const <a class="link" href="gst-plugins-bad-libs-gstmpegtsdescriptor.html#GstMpegtsDescriptor"><span class="type">GstMpegtsDescriptor</span></a> *descriptor</code></em>,
- <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="type">guint</span></a> idx</code></em>,
- <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="type">gchar</span></a> **language_code</code></em>,
- <em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#GstMpegtsDVBTeletextType" title="enum GstMpegtsDVBTeletextType"><span class="type">GstMpegtsDVBTeletextType</span></a> *teletext_type</code></em>,
- <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> *magazine_number</code></em>,
- <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> *page_number</code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-mpegts-descriptor-parse-dvb-teletext-nb"></a><h3>gst_mpegts_descriptor_parse_dvb_teletext_nb ()</h3>
-<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>
-gst_mpegts_descriptor_parse_dvb_teletext_nb
- (<em class="parameter"><code>const <a class="link" href="gst-plugins-bad-libs-gstmpegtsdescriptor.html#GstMpegtsDescriptor"><span class="type">GstMpegtsDescriptor</span></a> *descriptor</code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-mpegts-descriptor-parse-dvb-subtitling-idx"></a><h3>gst_mpegts_descriptor_parse_dvb_subtitling_idx ()</h3>
-<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-gst_mpegts_descriptor_parse_dvb_subtitling_idx
- (<em class="parameter"><code>const <a class="link" href="gst-plugins-bad-libs-gstmpegtsdescriptor.html#GstMpegtsDescriptor"><span class="type">GstMpegtsDescriptor</span></a> *descriptor</code></em>,
- <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="type">guint</span></a> idx</code></em>,
- <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="type">gchar</span></a> **lang</code></em>,
- <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> *type</code></em>,
- <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint16"><span class="type">guint16</span></a> *composition_page_id</code></em>,
- <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint16"><span class="type">guint16</span></a> *ancillary_page_id</code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-mpegts-descriptor-parse-dvb-subtitling-nb"></a><h3>gst_mpegts_descriptor_parse_dvb_subtitling_nb ()</h3>
-<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>
-gst_mpegts_descriptor_parse_dvb_subtitling_nb
- (<em class="parameter"><code>const <a class="link" href="gst-plugins-bad-libs-gstmpegtsdescriptor.html#GstMpegtsDescriptor"><span class="type">GstMpegtsDescriptor</span></a> *descriptor</code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-mpegts-descriptor-from-dvb-subtitling"></a><h3>gst_mpegts_descriptor_from_dvb_subtitling ()</h3>
-<pre class="programlisting"><a class="link" href="gst-plugins-bad-libs-gstmpegtsdescriptor.html#GstMpegtsDescriptor"><span class="returnvalue">GstMpegtsDescriptor</span></a> *
-gst_mpegts_descriptor_from_dvb_subtitling
- (<em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *lang</code></em>,
- <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> type</code></em>,
- <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint16"><span class="type">guint16</span></a> composition</code></em>,
- <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint16"><span class="type">guint16</span></a> ancillary</code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-mpegts-dvb-linkage-descriptor-free"></a><h3>gst_mpegts_dvb_linkage_descriptor_free ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-gst_mpegts_dvb_linkage_descriptor_free
- (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#GstMpegtsDVBLinkageDescriptor" title="struct GstMpegtsDVBLinkageDescriptor"><span class="type">GstMpegtsDVBLinkageDescriptor</span></a> *source</code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-mpegts-dvb-linkage-descriptor-get-mobile-hand-over"></a><h3>gst_mpegts_dvb_linkage_descriptor_get_mobile_hand_over ()</h3>
-<pre class="programlisting">const <a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#GstMpegtsDVBLinkageMobileHandOver" title="struct GstMpegtsDVBLinkageMobileHandOver"><span class="returnvalue">GstMpegtsDVBLinkageMobileHandOver</span></a> *
-gst_mpegts_dvb_linkage_descriptor_get_mobile_hand_over
- (<em class="parameter"><code>const <a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#GstMpegtsDVBLinkageDescriptor" title="struct GstMpegtsDVBLinkageDescriptor"><span class="type">GstMpegtsDVBLinkageDescriptor</span></a> *desc</code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-mpegts-dvb-linkage-descriptor-get-event"></a><h3>gst_mpegts_dvb_linkage_descriptor_get_event ()</h3>
-<pre class="programlisting">const <a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#GstMpegtsDVBLinkageEvent" title="struct GstMpegtsDVBLinkageEvent"><span class="returnvalue">GstMpegtsDVBLinkageEvent</span></a> *
-gst_mpegts_dvb_linkage_descriptor_get_event
- (<em class="parameter"><code>const <a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#GstMpegtsDVBLinkageDescriptor" title="struct GstMpegtsDVBLinkageDescriptor"><span class="type">GstMpegtsDVBLinkageDescriptor</span></a> *desc</code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-mpegts-dvb-linkage-descriptor-get-extended-event"></a><h3>gst_mpegts_dvb_linkage_descriptor_get_extended_event ()</h3>
-<pre class="programlisting">const <a href="/usr/share/gtk-doc/html/glibglib-Pointer-Arrays.html#GPtrArray"><span class="returnvalue">GPtrArray</span></a> *
-gst_mpegts_dvb_linkage_descriptor_get_extended_event
- (<em class="parameter"><code>const <a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#GstMpegtsDVBLinkageDescriptor" title="struct GstMpegtsDVBLinkageDescriptor"><span class="type">GstMpegtsDVBLinkageDescriptor</span></a> *desc</code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-mpegts-descriptor-parse-dvb-linkage"></a><h3>gst_mpegts_descriptor_parse_dvb_linkage ()</h3>
-<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-gst_mpegts_descriptor_parse_dvb_linkage
- (<em class="parameter"><code>const <a class="link" href="gst-plugins-bad-libs-gstmpegtsdescriptor.html#GstMpegtsDescriptor"><span class="type">GstMpegtsDescriptor</span></a> *descriptor</code></em>,
- <em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#GstMpegtsDVBLinkageDescriptor" title="struct GstMpegtsDVBLinkageDescriptor"><span class="type">GstMpegtsDVBLinkageDescriptor</span></a> **res</code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-mpegts-descriptor-parse-dvb-private-data-specifier"></a><h3>gst_mpegts_descriptor_parse_dvb_private_data_specifier ()</h3>
-<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-gst_mpegts_descriptor_parse_dvb_private_data_specifier
- (<em class="parameter"><code>const <a class="link" href="gst-plugins-bad-libs-gstmpegtsdescriptor.html#GstMpegtsDescriptor"><span class="type">GstMpegtsDescriptor</span></a> *descriptor</code></em>,
- <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint32"><span class="type">guint32</span></a> *private_data_specifier</code></em>,
- <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> **private_data</code></em>,
- <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> *length</code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-mpegts-descriptor-parse-dvb-frequency-list"></a><h3>gst_mpegts_descriptor_parse_dvb_frequency_list ()</h3>
-<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-gst_mpegts_descriptor_parse_dvb_frequency_list
- (<em class="parameter"><code>const <a class="link" href="gst-plugins-bad-libs-gstmpegtsdescriptor.html#GstMpegtsDescriptor"><span class="type">GstMpegtsDescriptor</span></a> *descriptor</code></em>,
- <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> *offset</code></em>,
- <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Arrays.html#GArray"><span class="type">GArray</span></a> **list</code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-mpegts-dvb-data-broadcast-descriptor-free"></a><h3>gst_mpegts_dvb_data_broadcast_descriptor_free ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-gst_mpegts_dvb_data_broadcast_descriptor_free
- (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#GstMpegtsDataBroadcastDescriptor" title="struct GstMpegtsDataBroadcastDescriptor"><span class="type">GstMpegtsDataBroadcastDescriptor</span></a> *source</code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-mpegts-descriptor-parse-dvb-data-broadcast"></a><h3>gst_mpegts_descriptor_parse_dvb_data_broadcast ()</h3>
-<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-gst_mpegts_descriptor_parse_dvb_data_broadcast
- (<em class="parameter"><code>const <a class="link" href="gst-plugins-bad-libs-gstmpegtsdescriptor.html#GstMpegtsDescriptor"><span class="type">GstMpegtsDescriptor</span></a> *descriptor</code></em>,
- <em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#GstMpegtsDataBroadcastDescriptor" title="struct GstMpegtsDataBroadcastDescriptor"><span class="type">GstMpegtsDataBroadcastDescriptor</span></a> **res</code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-mpegts-descriptor-parse-dvb-scrambling"></a><h3>gst_mpegts_descriptor_parse_dvb_scrambling ()</h3>
-<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-gst_mpegts_descriptor_parse_dvb_scrambling
- (<em class="parameter"><code>const <a class="link" href="gst-plugins-bad-libs-gstmpegtsdescriptor.html#GstMpegtsDescriptor"><span class="type">GstMpegtsDescriptor</span></a> *descriptor</code></em>,
- <em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#GstMpegtsDVBScramblingModeType" title="enum GstMpegtsDVBScramblingModeType"><span class="type">GstMpegtsDVBScramblingModeType</span></a> *scrambling_mode</code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-mpegts-descriptor-parse-dvb-data-broadcast-id"></a><h3>gst_mpegts_descriptor_parse_dvb_data_broadcast_id ()</h3>
-<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-gst_mpegts_descriptor_parse_dvb_data_broadcast_id
- (<em class="parameter"><code>const <a class="link" href="gst-plugins-bad-libs-gstmpegtsdescriptor.html#GstMpegtsDescriptor"><span class="type">GstMpegtsDescriptor</span></a> *descriptor</code></em>,
- <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint16"><span class="type">guint16</span></a> *data_broadcast_id</code></em>,
- <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> **id_selector_bytes</code></em>,
- <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> *len</code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-mpegts-descriptor-parse-dvb-parental-rating"></a><h3>gst_mpegts_descriptor_parse_dvb_parental_rating ()</h3>
-<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-gst_mpegts_descriptor_parse_dvb_parental_rating
- (<em class="parameter"><code>const <a class="link" href="gst-plugins-bad-libs-gstmpegtsdescriptor.html#GstMpegtsDescriptor"><span class="type">GstMpegtsDescriptor</span></a> *descriptor</code></em>,
- <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a> **rating</code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-mpegts-descriptor-parse-dvb-stream-identifier"></a><h3>gst_mpegts_descriptor_parse_dvb_stream_identifier ()</h3>
-<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-gst_mpegts_descriptor_parse_dvb_stream_identifier
- (<em class="parameter"><code>const <a class="link" href="gst-plugins-bad-libs-gstmpegtsdescriptor.html#GstMpegtsDescriptor"><span class="type">GstMpegtsDescriptor</span></a> *descriptor</code></em>,
- <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> *component_tag</code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-mpegts-descriptor-parse-dvb-ca-identifier"></a><h3>gst_mpegts_descriptor_parse_dvb_ca_identifier ()</h3>
-<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-gst_mpegts_descriptor_parse_dvb_ca_identifier
- (<em class="parameter"><code>const <a class="link" href="gst-plugins-bad-libs-gstmpegtsdescriptor.html#GstMpegtsDescriptor"><span class="type">GstMpegtsDescriptor</span></a> *descriptor</code></em>,
- <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Arrays.html#GArray"><span class="type">GArray</span></a> **list</code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-mpegts-descriptor-parse-dvb-service-list"></a><h3>gst_mpegts_descriptor_parse_dvb_service_list ()</h3>
-<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-gst_mpegts_descriptor_parse_dvb_service_list
- (<em class="parameter"><code>const <a class="link" href="gst-plugins-bad-libs-gstmpegtsdescriptor.html#GstMpegtsDescriptor"><span class="type">GstMpegtsDescriptor</span></a> *descriptor</code></em>,
- <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a> **list</code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-mpegts-descriptor-parse-dvb-stuffing"></a><h3>gst_mpegts_descriptor_parse_dvb_stuffing ()</h3>
-<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-gst_mpegts_descriptor_parse_dvb_stuffing
- (<em class="parameter"><code>const <a class="link" href="gst-plugins-bad-libs-gstmpegtsdescriptor.html#GstMpegtsDescriptor"><span class="type">GstMpegtsDescriptor</span></a> *descriptor</code></em>,
- <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> **stuffing_bytes</code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-mpegts-descriptor-parse-dvb-bouquet-name"></a><h3>gst_mpegts_descriptor_parse_dvb_bouquet_name ()</h3>
-<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-gst_mpegts_descriptor_parse_dvb_bouquet_name
- (<em class="parameter"><code>const <a class="link" href="gst-plugins-bad-libs-gstmpegtsdescriptor.html#GstMpegtsDescriptor"><span class="type">GstMpegtsDescriptor</span></a> *descriptor</code></em>,
- <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="type">gchar</span></a> **bouquet_name</code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-mpegts-descriptor-parse-dvb-multilingual-network-name"></a><h3>gst_mpegts_descriptor_parse_dvb_multilingual_network_name ()</h3>
-<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-gst_mpegts_descriptor_parse_dvb_multilingual_network_name
- (<em class="parameter"><code>const <a class="link" href="gst-plugins-bad-libs-gstmpegtsdescriptor.html#GstMpegtsDescriptor"><span class="type">GstMpegtsDescriptor</span></a> *descriptor</code></em>,
- <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a> **network_name_items</code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-mpegts-descriptor-parse-dvb-multilingual-bouquet-name"></a><h3>gst_mpegts_descriptor_parse_dvb_multilingual_bouquet_name ()</h3>
-<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-gst_mpegts_descriptor_parse_dvb_multilingual_bouquet_name
- (<em class="parameter"><code>const <a class="link" href="gst-plugins-bad-libs-gstmpegtsdescriptor.html#GstMpegtsDescriptor"><span class="type">GstMpegtsDescriptor</span></a> *descriptor</code></em>,
- <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a> **bouquet_name_items</code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-mpegts-descriptor-parse-dvb-multilingual-service-name"></a><h3>gst_mpegts_descriptor_parse_dvb_multilingual_service_name ()</h3>
-<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-gst_mpegts_descriptor_parse_dvb_multilingual_service_name
- (<em class="parameter"><code>const <a class="link" href="gst-plugins-bad-libs-gstmpegtsdescriptor.html#GstMpegtsDescriptor"><span class="type">GstMpegtsDescriptor</span></a> *descriptor</code></em>,
- <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a> **service_name_items</code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-mpegts-descriptor-parse-dvb-multilingual-component"></a><h3>gst_mpegts_descriptor_parse_dvb_multilingual_component ()</h3>
-<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-gst_mpegts_descriptor_parse_dvb_multilingual_component
- (<em class="parameter"><code>const <a class="link" href="gst-plugins-bad-libs-gstmpegtsdescriptor.html#GstMpegtsDescriptor"><span class="type">GstMpegtsDescriptor</span></a> *descriptor</code></em>,
- <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> *component_tag</code></em>,
- <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a> **component_description_items</code></em>);</pre>
-</div>
-</div>
-<div class="refsect1">
-<a name="gst-plugins-bad-libs-gst-dvb-descriptor.other_details"></a><h2>Types and Values</h2>
-<div class="refsect2">
-<a name="GstMpegtsDVBDescriptorType"></a><h3>enum GstMpegtsDVBDescriptorType</h3>
-<div class="refsect3">
-<a name="GstMpegtsDVBDescriptorType.members"></a><h4>Members</h4>
-<div class="informaltable"><table class="informaltable" width="100%" border="0">
-<colgroup>
-<col width="300px" class="enum_members_name">
-<col class="enum_members_description">
-<col width="200px" class="enum_members_annotations">
-</colgroup>
-<tbody>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-DESC-DVB-NETWORK-NAME:CAPS"></a>GST_MTS_DESC_DVB_NETWORK_NAME</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-DESC-DVB-SERVICE-LIST:CAPS"></a>GST_MTS_DESC_DVB_SERVICE_LIST</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-DESC-DVB-STUFFING:CAPS"></a>GST_MTS_DESC_DVB_STUFFING</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-DESC-DVB-SATELLITE-DELIVERY-SYSTEM:CAPS"></a>GST_MTS_DESC_DVB_SATELLITE_DELIVERY_SYSTEM</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-DESC-DVB-CABLE-DELIVERY-SYSTEM:CAPS"></a>GST_MTS_DESC_DVB_CABLE_DELIVERY_SYSTEM</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-DESC-DVB-VBI-DATA:CAPS"></a>GST_MTS_DESC_DVB_VBI_DATA</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-DESC-DVB-VBI-TELETEXT:CAPS"></a>GST_MTS_DESC_DVB_VBI_TELETEXT</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-DESC-DVB-BOUQUET-NAME:CAPS"></a>GST_MTS_DESC_DVB_BOUQUET_NAME</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-DESC-DVB-SERVICE:CAPS"></a>GST_MTS_DESC_DVB_SERVICE</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-DESC-DVB-COUNTRY-AVAILABILITY:CAPS"></a>GST_MTS_DESC_DVB_COUNTRY_AVAILABILITY</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-DESC-DVB-LINKAGE:CAPS"></a>GST_MTS_DESC_DVB_LINKAGE</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-DESC-DVB-NVOD-REFERENCE:CAPS"></a>GST_MTS_DESC_DVB_NVOD_REFERENCE</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-DESC-DVB-TIME-SHIFTED-SERVICE:CAPS"></a>GST_MTS_DESC_DVB_TIME_SHIFTED_SERVICE</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-DESC-DVB-SHORT-EVENT:CAPS"></a>GST_MTS_DESC_DVB_SHORT_EVENT</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-DESC-DVB-EXTENDED-EVENT:CAPS"></a>GST_MTS_DESC_DVB_EXTENDED_EVENT</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-DESC-DVB-TIME-SHIFTED-EVENT:CAPS"></a>GST_MTS_DESC_DVB_TIME_SHIFTED_EVENT</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-DESC-DVB-COMPONENT:CAPS"></a>GST_MTS_DESC_DVB_COMPONENT</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-DESC-DVB-MOSAIC:CAPS"></a>GST_MTS_DESC_DVB_MOSAIC</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-DESC-DVB-STREAM-IDENTIFIER:CAPS"></a>GST_MTS_DESC_DVB_STREAM_IDENTIFIER</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-DESC-DVB-CA-IDENTIFIER:CAPS"></a>GST_MTS_DESC_DVB_CA_IDENTIFIER</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-DESC-DVB-CONTENT:CAPS"></a>GST_MTS_DESC_DVB_CONTENT</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-DESC-DVB-PARENTAL-RATING:CAPS"></a>GST_MTS_DESC_DVB_PARENTAL_RATING</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-DESC-DVB-TELETEXT:CAPS"></a>GST_MTS_DESC_DVB_TELETEXT</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-DESC-DVB-TELEPHONE:CAPS"></a>GST_MTS_DESC_DVB_TELEPHONE</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-DESC-DVB-LOCAL-TIME-OFFSET:CAPS"></a>GST_MTS_DESC_DVB_LOCAL_TIME_OFFSET</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-DESC-DVB-SUBTITLING:CAPS"></a>GST_MTS_DESC_DVB_SUBTITLING</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-DESC-DVB-TERRESTRIAL-DELIVERY-SYSTEM:CAPS"></a>GST_MTS_DESC_DVB_TERRESTRIAL_DELIVERY_SYSTEM</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-DESC-DVB-MULTILINGUAL-NETWORK-NAME:CAPS"></a>GST_MTS_DESC_DVB_MULTILINGUAL_NETWORK_NAME</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-DESC-DVB-MULTILINGUAL-BOUQUET-NAME:CAPS"></a>GST_MTS_DESC_DVB_MULTILINGUAL_BOUQUET_NAME</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-DESC-DVB-MULTILINGUAL-SERVICE-NAME:CAPS"></a>GST_MTS_DESC_DVB_MULTILINGUAL_SERVICE_NAME</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-DESC-DVB-MULTILINGUAL-COMPONENT:CAPS"></a>GST_MTS_DESC_DVB_MULTILINGUAL_COMPONENT</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-DESC-DVB-PRIVATE-DATA-SPECIFIER:CAPS"></a>GST_MTS_DESC_DVB_PRIVATE_DATA_SPECIFIER</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-DESC-DVB-SERVICE-MOVE:CAPS"></a>GST_MTS_DESC_DVB_SERVICE_MOVE</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-DESC-DVB-SHORT-SMOOTHING-BUFFER:CAPS"></a>GST_MTS_DESC_DVB_SHORT_SMOOTHING_BUFFER</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-DESC-DVB-FREQUENCY-LIST:CAPS"></a>GST_MTS_DESC_DVB_FREQUENCY_LIST</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-DESC-DVB-PARTIAL-TRANSPORT-STREAM:CAPS"></a>GST_MTS_DESC_DVB_PARTIAL_TRANSPORT_STREAM</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-DESC-DVB-DATA-BROADCAST:CAPS"></a>GST_MTS_DESC_DVB_DATA_BROADCAST</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-DESC-DVB-SCRAMBLING:CAPS"></a>GST_MTS_DESC_DVB_SCRAMBLING</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-DESC-DVB-DATA-BROADCAST-ID:CAPS"></a>GST_MTS_DESC_DVB_DATA_BROADCAST_ID</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-DESC-DVB-TRANSPORT-STREAM:CAPS"></a>GST_MTS_DESC_DVB_TRANSPORT_STREAM</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-DESC-DVB-DSNG:CAPS"></a>GST_MTS_DESC_DVB_DSNG</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-DESC-DVB-PDC:CAPS"></a>GST_MTS_DESC_DVB_PDC</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-DESC-DVB-AC3:CAPS"></a>GST_MTS_DESC_DVB_AC3</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-DESC-DVB-ANCILLARY-DATA:CAPS"></a>GST_MTS_DESC_DVB_ANCILLARY_DATA</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-DESC-DVB-CELL-LIST:CAPS"></a>GST_MTS_DESC_DVB_CELL_LIST</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-DESC-DVB-CELL-FREQUENCY-LINK:CAPS"></a>GST_MTS_DESC_DVB_CELL_FREQUENCY_LINK</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-DESC-DVB-ANNOUNCEMENT-SUPPORT:CAPS"></a>GST_MTS_DESC_DVB_ANNOUNCEMENT_SUPPORT</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-DESC-DVB-APPLICATION-SIGNALLING:CAPS"></a>GST_MTS_DESC_DVB_APPLICATION_SIGNALLING</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-DESC-DVB-ADAPTATION-FIELD-DATA:CAPS"></a>GST_MTS_DESC_DVB_ADAPTATION_FIELD_DATA</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-DESC-DVB-SERVICE-IDENTIFIER:CAPS"></a>GST_MTS_DESC_DVB_SERVICE_IDENTIFIER</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-DESC-DVB-SERVICE-AVAILABILITY:CAPS"></a>GST_MTS_DESC_DVB_SERVICE_AVAILABILITY</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-DESC-DVB-DEFAULT-AUTHORITY:CAPS"></a>GST_MTS_DESC_DVB_DEFAULT_AUTHORITY</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-DESC-DVB-RELATED-CONTENT:CAPS"></a>GST_MTS_DESC_DVB_RELATED_CONTENT</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-DESC-DVB-TVA-ID:CAPS"></a>GST_MTS_DESC_DVB_TVA_ID</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-DESC-DVB-CONTENT-IDENTIFIER:CAPS"></a>GST_MTS_DESC_DVB_CONTENT_IDENTIFIER</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-DESC-DVB-TIMESLICE-FEC-IDENTIFIER:CAPS"></a>GST_MTS_DESC_DVB_TIMESLICE_FEC_IDENTIFIER</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-DESC-DVB-ECM-REPETITION-RATE:CAPS"></a>GST_MTS_DESC_DVB_ECM_REPETITION_RATE</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-DESC-DVB-S2-SATELLITE-DELIVERY-SYSTEM:CAPS"></a>GST_MTS_DESC_DVB_S2_SATELLITE_DELIVERY_SYSTEM</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-DESC-DVB-ENHANCED-AC3:CAPS"></a>GST_MTS_DESC_DVB_ENHANCED_AC3</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-DESC-DVB-DTS:CAPS"></a>GST_MTS_DESC_DVB_DTS</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-DESC-DVB-AAC:CAPS"></a>GST_MTS_DESC_DVB_AAC</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-DESC-DVB-XAIT-LOCATION:CAPS"></a>GST_MTS_DESC_DVB_XAIT_LOCATION</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-DESC-DVB-FTA-CONTENT-MANAGEMENT:CAPS"></a>GST_MTS_DESC_DVB_FTA_CONTENT_MANAGEMENT</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-DESC-DVB-EXTENSION:CAPS"></a>GST_MTS_DESC_DVB_EXTENSION</p></td>
-<td> </td>
-<td> </td>
-</tr>
-</tbody>
-</table></div>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="GstMpegtsDVBExtendedDescriptorType"></a><h3>enum GstMpegtsDVBExtendedDescriptorType</h3>
-<div class="refsect3">
-<a name="GstMpegtsDVBExtendedDescriptorType.members"></a><h4>Members</h4>
-<div class="informaltable"><table class="informaltable" width="100%" border="0">
-<colgroup>
-<col width="300px" class="enum_members_name">
-<col class="enum_members_description">
-<col width="200px" class="enum_members_annotations">
-</colgroup>
-<tbody>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-DESC-EXT-DVB-IMAGE-ICON:CAPS"></a>GST_MTS_DESC_EXT_DVB_IMAGE_ICON</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-DESC-EXT-DVB-CPCM-DELIVERY-SIGNALLING:CAPS"></a>GST_MTS_DESC_EXT_DVB_CPCM_DELIVERY_SIGNALLING</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-DESC-EXT-DVB-CP:CAPS"></a>GST_MTS_DESC_EXT_DVB_CP</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-DESC-EXT-DVB-CP-IDENTIFIER:CAPS"></a>GST_MTS_DESC_EXT_DVB_CP_IDENTIFIER</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-DESC-EXT-DVB-T2-DELIVERY-SYSTEM:CAPS"></a>GST_MTS_DESC_EXT_DVB_T2_DELIVERY_SYSTEM</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-DESC-EXT-DVB-SH-DELIVERY-SYSTEM:CAPS"></a>GST_MTS_DESC_EXT_DVB_SH_DELIVERY_SYSTEM</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-DESC-EXT-DVB-SUPPLEMENTARY-AUDIO:CAPS"></a>GST_MTS_DESC_EXT_DVB_SUPPLEMENTARY_AUDIO</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-DESC-EXT-DVB-NETWORK-CHANGE-NOTIFY:CAPS"></a>GST_MTS_DESC_EXT_DVB_NETWORK_CHANGE_NOTIFY</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-DESC-EXT-DVB-MESSAGE:CAPS"></a>GST_MTS_DESC_EXT_DVB_MESSAGE</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-DESC-EXT-DVB-TARGET-REGION:CAPS"></a>GST_MTS_DESC_EXT_DVB_TARGET_REGION</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-DESC-EXT-DVB-TARGET-REGION-NAME:CAPS"></a>GST_MTS_DESC_EXT_DVB_TARGET_REGION_NAME</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-DESC-EXT-DVB-SERVICE-RELOCATED:CAPS"></a>GST_MTS_DESC_EXT_DVB_SERVICE_RELOCATED</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-DESC-EXT-DVB-XAIT-PID:CAPS"></a>GST_MTS_DESC_EXT_DVB_XAIT_PID</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-DESC-EXT-DVB-C2-DELIVERY-SYSTEM:CAPS"></a>GST_MTS_DESC_EXT_DVB_C2_DELIVERY_SYSTEM</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-DESC-EXT-DVB-DTS-HD-AUDIO-STREAM:CAPS"></a>GST_MTS_DESC_EXT_DVB_DTS_HD_AUDIO_STREAM</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-DESC-EXT-DVB-DTS-NEUTRAL:CAPS"></a>GST_MTS_DESC_EXT_DVB_DTS_NEUTRAL</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-DESC-EXT-DVB-VIDEO-DEPTH-RANGE:CAPS"></a>GST_MTS_DESC_EXT_DVB_VIDEO_DEPTH_RANGE</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-DESC-EXT-DVB-T2MI:CAPS"></a>GST_MTS_DESC_EXT_DVB_T2MI</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-DESC-EXT-DVB-URI-LINKAGE:CAPS"></a>GST_MTS_DESC_EXT_DVB_URI_LINKAGE</p></td>
-<td> </td>
-<td> </td>
-</tr>
-</tbody>
-</table></div>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="GstMpegtsContent"></a><h3>struct GstMpegtsContent</h3>
-<pre class="programlisting">struct GstMpegtsContent {
- GstMpegtsContentNibbleHi content_nibble_1;
- guint8 content_nibble_2;
- guint8 user_byte;
-};
-</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="GstMpegtsComponentDescriptor"></a><h3>struct GstMpegtsComponentDescriptor</h3>
-<pre class="programlisting">struct GstMpegtsComponentDescriptor {
- guint8 stream_content;
- guint8 component_type;
- guint8 component_tag;
- gchar *language_code;
- gchar *text;
-};
-</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="GstMpegtsExtendedEventItem"></a><h3>struct GstMpegtsExtendedEventItem</h3>
-<pre class="programlisting">struct GstMpegtsExtendedEventItem {
- gchar *item_description;
- gchar *item;
-};
-</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="GstMpegtsExtendedEventDescriptor"></a><h3>struct GstMpegtsExtendedEventDescriptor</h3>
-<pre class="programlisting">struct GstMpegtsExtendedEventDescriptor {
- guint8 descriptor_number;
- guint8 last_descriptor_number;
- gchar *language_code;
- GPtrArray *items;
- gchar *text;
-};
-</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="GstMpegtsSatelliteDeliverySystemDescriptor"></a><h3>struct GstMpegtsSatelliteDeliverySystemDescriptor</h3>
-<pre class="programlisting">struct GstMpegtsSatelliteDeliverySystemDescriptor {
- guint32 frequency;
- gfloat orbital_position;
- gboolean west_east;
- GstMpegtsSatellitePolarizationType polarization;
-
- GstMpegtsSatelliteRolloff roll_off;
- gboolean modulation_system;
- GstMpegtsModulationType modulation_type;
-
- guint32 symbol_rate;
- GstMpegtsDVBCodeRate fec_inner;
-};
-</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="GstMpegtsDVBCodeRate"></a><h3>enum GstMpegtsDVBCodeRate</h3>
-<div class="refsect3">
-<a name="GstMpegtsDVBCodeRate.members"></a><h4>Members</h4>
-<div class="informaltable"><table class="informaltable" width="100%" border="0">
-<colgroup>
-<col width="300px" class="enum_members_name">
-<col class="enum_members_description">
-<col width="200px" class="enum_members_annotations">
-</colgroup>
-<tbody>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-FEC-NONE:CAPS"></a>GST_MPEGTS_FEC_NONE</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-FEC-1-2:CAPS"></a>GST_MPEGTS_FEC_1_2</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-FEC-2-3:CAPS"></a>GST_MPEGTS_FEC_2_3</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-FEC-3-4:CAPS"></a>GST_MPEGTS_FEC_3_4</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-FEC-4-5:CAPS"></a>GST_MPEGTS_FEC_4_5</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-FEC-5-6:CAPS"></a>GST_MPEGTS_FEC_5_6</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-FEC-6-7:CAPS"></a>GST_MPEGTS_FEC_6_7</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-FEC-7-8:CAPS"></a>GST_MPEGTS_FEC_7_8</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-FEC-8-9:CAPS"></a>GST_MPEGTS_FEC_8_9</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-FEC-AUTO:CAPS"></a>GST_MPEGTS_FEC_AUTO</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-FEC-3-5:CAPS"></a>GST_MPEGTS_FEC_3_5</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-FEC-9-10:CAPS"></a>GST_MPEGTS_FEC_9_10</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-FEC-2-5:CAPS"></a>GST_MPEGTS_FEC_2_5</p></td>
-<td> </td>
-<td> </td>
-</tr>
-</tbody>
-</table></div>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="GstMpegtsModulationType"></a><h3>enum GstMpegtsModulationType</h3>
-<div class="refsect3">
-<a name="GstMpegtsModulationType.members"></a><h4>Members</h4>
-<div class="informaltable"><table class="informaltable" width="100%" border="0">
-<colgroup>
-<col width="300px" class="enum_members_name">
-<col class="enum_members_description">
-<col width="200px" class="enum_members_annotations">
-</colgroup>
-<tbody>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-MODULATION-QPSK:CAPS"></a>GST_MPEGTS_MODULATION_QPSK</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-MODULATION-QAM-16:CAPS"></a>GST_MPEGTS_MODULATION_QAM_16</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-MODULATION-QAM-32:CAPS"></a>GST_MPEGTS_MODULATION_QAM_32</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-MODULATION-QAM-64:CAPS"></a>GST_MPEGTS_MODULATION_QAM_64</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-MODULATION-QAM-128:CAPS"></a>GST_MPEGTS_MODULATION_QAM_128</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-MODULATION-QAM-256:CAPS"></a>GST_MPEGTS_MODULATION_QAM_256</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-MODULATION-QAM-AUTO:CAPS"></a>GST_MPEGTS_MODULATION_QAM_AUTO</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-MODULATION-VSB-8:CAPS"></a>GST_MPEGTS_MODULATION_VSB_8</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-MODULATION-VSB-16:CAPS"></a>GST_MPEGTS_MODULATION_VSB_16</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-MODULATION-PSK-8:CAPS"></a>GST_MPEGTS_MODULATION_PSK_8</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-MODULATION-APSK-16:CAPS"></a>GST_MPEGTS_MODULATION_APSK_16</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-MODULATION-APSK-32:CAPS"></a>GST_MPEGTS_MODULATION_APSK_32</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-MODULATION-DQPSK:CAPS"></a>GST_MPEGTS_MODULATION_DQPSK</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-MODULATION-QAM-4-NR-:CAPS"></a>GST_MPEGTS_MODULATION_QAM_4_NR_</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-MODULATION-NONE:CAPS"></a>GST_MPEGTS_MODULATION_NONE</p></td>
-<td> </td>
-<td> </td>
-</tr>
-</tbody>
-</table></div>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="GstMpegtsSatellitePolarizationType"></a><h3>enum GstMpegtsSatellitePolarizationType</h3>
-<div class="refsect3">
-<a name="GstMpegtsSatellitePolarizationType.members"></a><h4>Members</h4>
-<div class="informaltable"><table class="informaltable" width="100%" border="0">
-<colgroup>
-<col width="300px" class="enum_members_name">
-<col class="enum_members_description">
-<col width="200px" class="enum_members_annotations">
-</colgroup>
-<tbody>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-POLARIZATION-LINEAR-HORIZONTAL:CAPS"></a>GST_MPEGTS_POLARIZATION_LINEAR_HORIZONTAL</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-POLARIZATION-LINEAR-VERTICAL:CAPS"></a>GST_MPEGTS_POLARIZATION_LINEAR_VERTICAL</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-POLARIZATION-CIRCULAR-LEFT:CAPS"></a>GST_MPEGTS_POLARIZATION_CIRCULAR_LEFT</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-POLARIZATION-CIRCULAR-RIGHT:CAPS"></a>GST_MPEGTS_POLARIZATION_CIRCULAR_RIGHT</p></td>
-<td> </td>
-<td> </td>
-</tr>
-</tbody>
-</table></div>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="GstMpegtsSatelliteRolloff"></a><h3>enum GstMpegtsSatelliteRolloff</h3>
-<div class="refsect3">
-<a name="GstMpegtsSatelliteRolloff.members"></a><h4>Members</h4>
-<div class="informaltable"><table class="informaltable" width="100%" border="0">
-<colgroup>
-<col width="300px" class="enum_members_name">
-<col class="enum_members_description">
-<col width="200px" class="enum_members_annotations">
-</colgroup>
-<tbody>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-ROLLOFF-35:CAPS"></a>GST_MPEGTS_ROLLOFF_35</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-ROLLOFF-20:CAPS"></a>GST_MPEGTS_ROLLOFF_20</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-ROLLOFF-25:CAPS"></a>GST_MPEGTS_ROLLOFF_25</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-ROLLOFF-RESERVED:CAPS"></a>GST_MPEGTS_ROLLOFF_RESERVED</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-ROLLOFF-AUTO:CAPS"></a>GST_MPEGTS_ROLLOFF_AUTO</p></td>
-<td> </td>
-<td> </td>
-</tr>
-</tbody>
-</table></div>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="GstMpegtsCableDeliverySystemDescriptor"></a><h3>struct GstMpegtsCableDeliverySystemDescriptor</h3>
-<pre class="programlisting">struct GstMpegtsCableDeliverySystemDescriptor {
- guint32 frequency;
- GstMpegtsCableOuterFECScheme outer_fec;
- GstMpegtsModulationType modulation;
-
- guint32 symbol_rate;
- GstMpegtsDVBCodeRate fec_inner;
-};
-</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="GstMpegtsCableOuterFECScheme"></a><h3>enum GstMpegtsCableOuterFECScheme</h3>
-<div class="refsect3">
-<a name="GstMpegtsCableOuterFECScheme.members"></a><h4>Members</h4>
-<div class="informaltable"><table class="informaltable" width="100%" border="0">
-<colgroup>
-<col width="300px" class="enum_members_name">
-<col class="enum_members_description">
-<col width="200px" class="enum_members_annotations">
-</colgroup>
-<tbody>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-CABLE-OUTER-FEC-UNDEFINED:CAPS"></a>GST_MPEGTS_CABLE_OUTER_FEC_UNDEFINED</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-CABLE-OUTER-FEC-NONE:CAPS"></a>GST_MPEGTS_CABLE_OUTER_FEC_NONE</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-CABLE-OUTER-FEC-RS-204-188:CAPS"></a>GST_MPEGTS_CABLE_OUTER_FEC_RS_204_188</p></td>
-<td> </td>
-<td> </td>
-</tr>
-</tbody>
-</table></div>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="GstMpegtsTerrestrialDeliverySystemDescriptor"></a><h3>struct GstMpegtsTerrestrialDeliverySystemDescriptor</h3>
-<pre class="programlisting">struct GstMpegtsTerrestrialDeliverySystemDescriptor {
- guint32 frequency;
- guint32 bandwidth;
- gboolean priority;
- gboolean time_slicing;
- gboolean mpe_fec;
- GstMpegtsModulationType constellation;
- GstMpegtsTerrestrialHierarchy hierarchy;
- GstMpegtsDVBCodeRate code_rate_hp;
- GstMpegtsDVBCodeRate code_rate_lp;
- GstMpegtsTerrestrialGuardInterval guard_interval;
- GstMpegtsTerrestrialTransmissionMode transmission_mode;
- gboolean other_frequency;
-};
-</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="GstMpegtsTerrestrialTransmissionMode"></a><h3>enum GstMpegtsTerrestrialTransmissionMode</h3>
-<div class="refsect3">
-<a name="GstMpegtsTerrestrialTransmissionMode.members"></a><h4>Members</h4>
-<div class="informaltable"><table class="informaltable" width="100%" border="0">
-<colgroup>
-<col width="300px" class="enum_members_name">
-<col class="enum_members_description">
-<col width="200px" class="enum_members_annotations">
-</colgroup>
-<tbody>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-TRANSMISSION-MODE-2K:CAPS"></a>GST_MPEGTS_TRANSMISSION_MODE_2K</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-TRANSMISSION-MODE-8K:CAPS"></a>GST_MPEGTS_TRANSMISSION_MODE_8K</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-TRANSMISSION-MODE-AUTO:CAPS"></a>GST_MPEGTS_TRANSMISSION_MODE_AUTO</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-TRANSMISSION-MODE-4K:CAPS"></a>GST_MPEGTS_TRANSMISSION_MODE_4K</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-TRANSMISSION-MODE-1K:CAPS"></a>GST_MPEGTS_TRANSMISSION_MODE_1K</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-TRANSMISSION-MODE-16K:CAPS"></a>GST_MPEGTS_TRANSMISSION_MODE_16K</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-TRANSMISSION-MODE-32K:CAPS"></a>GST_MPEGTS_TRANSMISSION_MODE_32K</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-TRANSMISSION-MODE-C1:CAPS"></a>GST_MPEGTS_TRANSMISSION_MODE_C1</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-TRANSMISSION-MODE-C3780:CAPS"></a>GST_MPEGTS_TRANSMISSION_MODE_C3780</p></td>
-<td> </td>
-<td> </td>
-</tr>
-</tbody>
-</table></div>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="GstMpegtsTerrestrialGuardInterval"></a><h3>enum GstMpegtsTerrestrialGuardInterval</h3>
-<div class="refsect3">
-<a name="GstMpegtsTerrestrialGuardInterval.members"></a><h4>Members</h4>
-<div class="informaltable"><table class="informaltable" width="100%" border="0">
-<colgroup>
-<col width="300px" class="enum_members_name">
-<col class="enum_members_description">
-<col width="200px" class="enum_members_annotations">
-</colgroup>
-<tbody>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-GUARD-INTERVAL-1-32:CAPS"></a>GST_MPEGTS_GUARD_INTERVAL_1_32</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-GUARD-INTERVAL-1-16:CAPS"></a>GST_MPEGTS_GUARD_INTERVAL_1_16</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-GUARD-INTERVAL-1-8:CAPS"></a>GST_MPEGTS_GUARD_INTERVAL_1_8</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-GUARD-INTERVAL-1-4:CAPS"></a>GST_MPEGTS_GUARD_INTERVAL_1_4</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-GUARD-INTERVAL-AUTO:CAPS"></a>GST_MPEGTS_GUARD_INTERVAL_AUTO</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-GUARD-INTERVAL-1-128:CAPS"></a>GST_MPEGTS_GUARD_INTERVAL_1_128</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-GUARD-INTERVAL-19-128:CAPS"></a>GST_MPEGTS_GUARD_INTERVAL_19_128</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-GUARD-INTERVAL-19-256:CAPS"></a>GST_MPEGTS_GUARD_INTERVAL_19_256</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-GUARD-INTERVAL-PN420:CAPS"></a>GST_MPEGTS_GUARD_INTERVAL_PN420</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-GUARD-INTERVAL-PN595:CAPS"></a>GST_MPEGTS_GUARD_INTERVAL_PN595</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-GUARD-INTERVAL-PN945:CAPS"></a>GST_MPEGTS_GUARD_INTERVAL_PN945</p></td>
-<td> </td>
-<td> </td>
-</tr>
-</tbody>
-</table></div>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="GstMpegtsTerrestrialHierarchy"></a><h3>enum GstMpegtsTerrestrialHierarchy</h3>
-<div class="refsect3">
-<a name="GstMpegtsTerrestrialHierarchy.members"></a><h4>Members</h4>
-<div class="informaltable"><table class="informaltable" width="100%" border="0">
-<colgroup>
-<col width="300px" class="enum_members_name">
-<col class="enum_members_description">
-<col width="200px" class="enum_members_annotations">
-</colgroup>
-<tbody>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-HIERARCHY-NONE:CAPS"></a>GST_MPEGTS_HIERARCHY_NONE</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-HIERARCHY-1:CAPS"></a>GST_MPEGTS_HIERARCHY_1</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-HIERARCHY-2:CAPS"></a>GST_MPEGTS_HIERARCHY_2</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-HIERARCHY-4:CAPS"></a>GST_MPEGTS_HIERARCHY_4</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-HIERARCHY-AUTO:CAPS"></a>GST_MPEGTS_HIERARCHY_AUTO</p></td>
-<td> </td>
-<td> </td>
-</tr>
-</tbody>
-</table></div>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="GstMpegtsT2DeliverySystemCellExtension"></a><h3>struct GstMpegtsT2DeliverySystemCellExtension</h3>
-<pre class="programlisting">struct GstMpegtsT2DeliverySystemCellExtension {
- guint8 cell_id_extension;
- guint32 transposer_frequency;
-};
-</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="GstMpegtsT2DeliverySystemCell"></a><h3>struct GstMpegtsT2DeliverySystemCell</h3>
-<pre class="programlisting">struct GstMpegtsT2DeliverySystemCell {
- guint16 cell_id;
- GArray *centre_frequencies;
- GPtrArray *sub_cells;
-};
-</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="GstMpegtsT2DeliverySystemDescriptor"></a><h3>struct GstMpegtsT2DeliverySystemDescriptor</h3>
-<pre class="programlisting">struct GstMpegtsT2DeliverySystemDescriptor {
- guint8 plp_id;
- guint16 t2_system_id;
- /* FIXME: */
- guint8 siso_miso;
- guint32 bandwidth;
- GstMpegtsTerrestrialGuardInterval guard_interval;
- GstMpegtsTerrestrialTransmissionMode transmission_mode;
- gboolean other_frequency;
- gboolean tfs;
- GPtrArray *cells;
-};
-</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="GstMpegtsDVBServiceType"></a><h3>enum GstMpegtsDVBServiceType</h3>
-<div class="refsect3">
-<a name="GstMpegtsDVBServiceType.members"></a><h4>Members</h4>
-<div class="informaltable"><table class="informaltable" width="100%" border="0">
-<colgroup>
-<col width="300px" class="enum_members_name">
-<col class="enum_members_description">
-<col width="200px" class="enum_members_annotations">
-</colgroup>
-<tbody>
-<tr>
-<td class="enum_member_name"><p><a name="GST-DVB-SERVICE-RESERVED-00:CAPS"></a>GST_DVB_SERVICE_RESERVED_00</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-DVB-SERVICE-DIGITAL-TELEVISION:CAPS"></a>GST_DVB_SERVICE_DIGITAL_TELEVISION</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-DVB-SERVICE-DIGITAL-RADIO-SOUND:CAPS"></a>GST_DVB_SERVICE_DIGITAL_RADIO_SOUND</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-DVB-SERVICE-TELETEXT:CAPS"></a>GST_DVB_SERVICE_TELETEXT</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-DVB-SERVICE-NVOD-REFERENCE:CAPS"></a>GST_DVB_SERVICE_NVOD_REFERENCE</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-DVB-SERVICE-NVOD-TIME-SHIFTED:CAPS"></a>GST_DVB_SERVICE_NVOD_TIME_SHIFTED</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-DVB-SERVICE-MOSAIC:CAPS"></a>GST_DVB_SERVICE_MOSAIC</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-DVB-SERVICE-FM-RADIO:CAPS"></a>GST_DVB_SERVICE_FM_RADIO</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-DVB-SERVICE-DVB-SRM:CAPS"></a>GST_DVB_SERVICE_DVB_SRM</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-DVB-SERVICE-RESERVED-09:CAPS"></a>GST_DVB_SERVICE_RESERVED_09</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-DVB-SERVICE-ADVANCED-CODEC-DIGITAL-RADIO-SOUND:CAPS"></a>GST_DVB_SERVICE_ADVANCED_CODEC_DIGITAL_RADIO_SOUND</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-DVB-SERVICE-ADVANCED-CODEC-MOSAIC:CAPS"></a>GST_DVB_SERVICE_ADVANCED_CODEC_MOSAIC</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-DVB-SERVICE-DATA-BROADCAST:CAPS"></a>GST_DVB_SERVICE_DATA_BROADCAST</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-DVB-SERVICE-RESERVED-0D-COMMON-INTERFACE:CAPS"></a>GST_DVB_SERVICE_RESERVED_0D_COMMON_INTERFACE</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-DVB-SERVICE-RCS-MAP:CAPS"></a>GST_DVB_SERVICE_RCS_MAP</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-DVB-SERVICE-RCS-FLS:CAPS"></a>GST_DVB_SERVICE_RCS_FLS</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-DVB-SERVICE-DVB-MHP:CAPS"></a>GST_DVB_SERVICE_DVB_MHP</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-DVB-SERVICE-MPEG2-HD-DIGITAL-TELEVISION:CAPS"></a>GST_DVB_SERVICE_MPEG2_HD_DIGITAL_TELEVISION</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-DVB-SERVICE-ADVANCED-CODEC-SD-DIGITAL-TELEVISION:CAPS"></a>GST_DVB_SERVICE_ADVANCED_CODEC_SD_DIGITAL_TELEVISION</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-DVB-SERVICE-ADVANCED-CODEC-SD-NVOD-TIME-SHIFTED:CAPS"></a>GST_DVB_SERVICE_ADVANCED_CODEC_SD_NVOD_TIME_SHIFTED</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-DVB-SERVICE-ADVANCED-CODEC-SD-NVOD-REFERENCE:CAPS"></a>GST_DVB_SERVICE_ADVANCED_CODEC_SD_NVOD_REFERENCE</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-DVB-SERVICE-ADVANCED-CODEC-HD-DIGITAL-TELEVISION:CAPS"></a>GST_DVB_SERVICE_ADVANCED_CODEC_HD_DIGITAL_TELEVISION</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-DVB-SERVICE-ADVANCED-CODEC-HD-NVOD-TIME-SHIFTED:CAPS"></a>GST_DVB_SERVICE_ADVANCED_CODEC_HD_NVOD_TIME_SHIFTED</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-DVB-SERVICE-ADVANCED-CODEC-HD-NVOD-REFERENCE:CAPS"></a>GST_DVB_SERVICE_ADVANCED_CODEC_HD_NVOD_REFERENCE</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-DVB-SERVICE-ADVANCED-CODEC-STEREO-HD-DIGITAL-TELEVISION:CAPS"></a>GST_DVB_SERVICE_ADVANCED_CODEC_STEREO_HD_DIGITAL_TELEVISION</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-DVB-SERVICE-ADVANCED-CODEC-STEREO-HD-NVOD-TIME-SHIFTED:CAPS"></a>GST_DVB_SERVICE_ADVANCED_CODEC_STEREO_HD_NVOD_TIME_SHIFTED</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-DVB-SERVICE-ADVANCED-CODEC-STEREO-HD-NVOD-REFERENCE:CAPS"></a>GST_DVB_SERVICE_ADVANCED_CODEC_STEREO_HD_NVOD_REFERENCE</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-DVB-SERVICE-RESERVED-FF:CAPS"></a>GST_DVB_SERVICE_RESERVED_FF</p></td>
-<td> </td>
-<td> </td>
-</tr>
-</tbody>
-</table></div>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="GstMpegtsDVBTeletextType"></a><h3>enum GstMpegtsDVBTeletextType</h3>
-<div class="refsect3">
-<a name="GstMpegtsDVBTeletextType.members"></a><h4>Members</h4>
-<div class="informaltable"><table class="informaltable" width="100%" border="0">
-<colgroup>
-<col width="300px" class="enum_members_name">
-<col class="enum_members_description">
-<col width="200px" class="enum_members_annotations">
-</colgroup>
-<tbody>
-<tr>
-<td class="enum_member_name"><p><a name="INITIAL-PAGE:CAPS"></a>INITIAL_PAGE</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="SUBTITLE-PAGE:CAPS"></a>SUBTITLE_PAGE</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="ADDITIONAL-INFO-PAGE:CAPS"></a>ADDITIONAL_INFO_PAGE</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="PROGRAMME-SCHEDULE-PAGE:CAPS"></a>PROGRAMME_SCHEDULE_PAGE</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="HEARING-IMPAIRED-PAGE:CAPS"></a>HEARING_IMPAIRED_PAGE</p></td>
-<td> </td>
-<td> </td>
-</tr>
-</tbody>
-</table></div>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="GstMpegtsDVBLinkageType"></a><h3>enum GstMpegtsDVBLinkageType</h3>
-<div class="refsect3">
-<a name="GstMpegtsDVBLinkageType.members"></a><h4>Members</h4>
-<div class="informaltable"><table class="informaltable" width="100%" border="0">
-<colgroup>
-<col width="300px" class="enum_members_name">
-<col class="enum_members_description">
-<col width="200px" class="enum_members_annotations">
-</colgroup>
-<tbody>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-DVB-LINKAGE-RESERVED-00:CAPS"></a>GST_MPEGTS_DVB_LINKAGE_RESERVED_00</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-DVB-LINKAGE-INFORMATION:CAPS"></a>GST_MPEGTS_DVB_LINKAGE_INFORMATION</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-DVB-LINKAGE-EPG:CAPS"></a>GST_MPEGTS_DVB_LINKAGE_EPG</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-DVB-LINKAGE-CA-REPLACEMENT:CAPS"></a>GST_MPEGTS_DVB_LINKAGE_CA_REPLACEMENT</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-DVB-LINKAGE-TS-CONTAINING-COMPLETE-SI:CAPS"></a>GST_MPEGTS_DVB_LINKAGE_TS_CONTAINING_COMPLETE_SI</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-DVB-LINKAGE-SERVICE-REPLACEMENT:CAPS"></a>GST_MPEGTS_DVB_LINKAGE_SERVICE_REPLACEMENT</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-DVB-LINKAGE-DATA-BROADCAST:CAPS"></a>GST_MPEGTS_DVB_LINKAGE_DATA_BROADCAST</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-DVB-LINKAGE-RCS-MAP:CAPS"></a>GST_MPEGTS_DVB_LINKAGE_RCS_MAP</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-DVB-LINKAGE-MOBILE-HAND-OVER:CAPS"></a>GST_MPEGTS_DVB_LINKAGE_MOBILE_HAND_OVER</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-DVB-LINKAGE-SYSTEM-SOFTWARE-UPDATE:CAPS"></a>GST_MPEGTS_DVB_LINKAGE_SYSTEM_SOFTWARE_UPDATE</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-DVB-LINKAGE-TS-CONTAINING-SSU:CAPS"></a>GST_MPEGTS_DVB_LINKAGE_TS_CONTAINING_SSU</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-DVB-LINKAGE-IP-MAC-NOTIFICATION:CAPS"></a>GST_MPEGTS_DVB_LINKAGE_IP_MAC_NOTIFICATION</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-DVB-LINKAGE-TS-CONTAINING-INT:CAPS"></a>GST_MPEGTS_DVB_LINKAGE_TS_CONTAINING_INT</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-DVB-LINKAGE-EVENT:CAPS"></a>GST_MPEGTS_DVB_LINKAGE_EVENT</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-DVB-LINKAGE-EXTENDED-EVENT:CAPS"></a>GST_MPEGTS_DVB_LINKAGE_EXTENDED_EVENT</p></td>
-<td> </td>
-<td> </td>
-</tr>
-</tbody>
-</table></div>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="GstMpegtsDVBLinkageHandOverType"></a><h3>enum GstMpegtsDVBLinkageHandOverType</h3>
-<div class="refsect3">
-<a name="GstMpegtsDVBLinkageHandOverType.members"></a><h4>Members</h4>
-<div class="informaltable"><table class="informaltable" width="100%" border="0">
-<colgroup>
-<col width="300px" class="enum_members_name">
-<col class="enum_members_description">
-<col width="200px" class="enum_members_annotations">
-</colgroup>
-<tbody>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-DVB-LINKAGE-HAND-OVER-RESERVED:CAPS"></a>GST_MPEGTS_DVB_LINKAGE_HAND_OVER_RESERVED</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-DVB-LINKAGE-HAND-OVER-IDENTICAL:CAPS"></a>GST_MPEGTS_DVB_LINKAGE_HAND_OVER_IDENTICAL</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-DVB-LINKAGE-HAND-OVER-LOCAL-VARIATION:CAPS"></a>GST_MPEGTS_DVB_LINKAGE_HAND_OVER_LOCAL_VARIATION</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-DVB-LINKAGE-HAND-OVER-ASSOCIATED:CAPS"></a>GST_MPEGTS_DVB_LINKAGE_HAND_OVER_ASSOCIATED</p></td>
-<td> </td>
-<td> </td>
-</tr>
-</tbody>
-</table></div>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="GstMpegtsDVBLinkageMobileHandOver"></a><h3>struct GstMpegtsDVBLinkageMobileHandOver</h3>
-<pre class="programlisting">struct GstMpegtsDVBLinkageMobileHandOver {
- GstMpegtsDVBLinkageHandOverType hand_over_type;
- /* 0 = NIT, 1 = SDT */
- gboolean origin_type;
- guint16 network_id;
- guint16 initial_service_id;
-};
-</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="GstMpegtsDVBLinkageEvent"></a><h3>struct GstMpegtsDVBLinkageEvent</h3>
-<pre class="programlisting">struct GstMpegtsDVBLinkageEvent {
- guint16 target_event_id;
- gboolean target_listed;
- gboolean event_simulcast;
-};
-</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="GstMpegtsDVBLinkageExtendedEvent"></a><h3>struct GstMpegtsDVBLinkageExtendedEvent</h3>
-<pre class="programlisting">struct GstMpegtsDVBLinkageExtendedEvent {
- guint16 target_event_id;
- gboolean target_listed;
- gboolean event_simulcast;
- /* FIXME: */
- guint8 link_type;
- /* FIXME: */
- guint8 target_id_type;
- gboolean original_network_id_flag;
- gboolean service_id_flag;
- /* if (target_id_type == 3) */
- guint16 user_defined_id;
- /* else */
- guint16 target_transport_stream_id;
- guint16 target_original_network_id;
- guint16 target_service_id;
-};
-</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="GstMpegtsDVBLinkageDescriptor"></a><h3>struct GstMpegtsDVBLinkageDescriptor</h3>
-<pre class="programlisting">struct GstMpegtsDVBLinkageDescriptor {
- guint16 transport_stream_id;
- guint16 original_network_id;
- guint16 service_id;
- GstMpegtsDVBLinkageType linkage_type;
- guint8 private_data_length;
- guint8 *private_data_bytes;
-};
-</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="GstMpegtsDataBroadcastDescriptor"></a><h3>struct GstMpegtsDataBroadcastDescriptor</h3>
-<pre class="programlisting">struct GstMpegtsDataBroadcastDescriptor {
- guint16 data_broadcast_id;
- guint8 component_tag;
- guint8 length;
- guint8 *selector_bytes;
- gchar *language_code;
- gchar *text;
-};
-</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="GstMpegtsDVBScramblingModeType"></a><h3>enum GstMpegtsDVBScramblingModeType</h3>
-<div class="refsect3">
-<a name="GstMpegtsDVBScramblingModeType.members"></a><h4>Members</h4>
-<div class="informaltable"><table class="informaltable" width="100%" border="0">
-<colgroup>
-<col width="300px" class="enum_members_name">
-<col class="enum_members_description">
-<col width="200px" class="enum_members_annotations">
-</colgroup>
-<tbody>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-DVB-SCRAMBLING-MODE-RESERVED:CAPS"></a>GST_MPEGTS_DVB_SCRAMBLING_MODE_RESERVED</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-DVB-SCRAMBLING-MODE-CSA1:CAPS"></a>GST_MPEGTS_DVB_SCRAMBLING_MODE_CSA1</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-DVB-SCRAMBLING-MODE-CSA2:CAPS"></a>GST_MPEGTS_DVB_SCRAMBLING_MODE_CSA2</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-DVB-SCRAMBLING-MODE-CSA3-STANDARD:CAPS"></a>GST_MPEGTS_DVB_SCRAMBLING_MODE_CSA3_STANDARD</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-DVB-SCRAMBLING-MODE-CSA3-MINIMAL-ENHANCED:CAPS"></a>GST_MPEGTS_DVB_SCRAMBLING_MODE_CSA3_MINIMAL_ENHANCED</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-DVB-SCRAMBLING-MODE-CSA3-FULL-ENHANCED:CAPS"></a>GST_MPEGTS_DVB_SCRAMBLING_MODE_CSA3_FULL_ENHANCED</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-DVB-SCRAMBLING-MODE-CISSA:CAPS"></a>GST_MPEGTS_DVB_SCRAMBLING_MODE_CISSA</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-DVB-SCRAMBLING-MODE-ATIS-0:CAPS"></a>GST_MPEGTS_DVB_SCRAMBLING_MODE_ATIS_0</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-DVB-SCRAMBLING-MODE-ATIS-F:CAPS"></a>GST_MPEGTS_DVB_SCRAMBLING_MODE_ATIS_F</p></td>
-<td> </td>
-<td> </td>
-</tr>
-</tbody>
-</table></div>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="GstMpegtsDVBParentalRatingItem"></a><h3>struct GstMpegtsDVBParentalRatingItem</h3>
-<pre class="programlisting">struct GstMpegtsDVBParentalRatingItem {
- gchar *country_code;
- guint8 rating;
-};
-</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="GstMpegtsDVBServiceListItem"></a><h3>struct GstMpegtsDVBServiceListItem</h3>
-<pre class="programlisting">struct GstMpegtsDVBServiceListItem {
- guint16 service_id;
- GstMpegtsDVBServiceType type;
-};
-</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="GstMpegtsDvbMultilingualNetworkNameItem"></a><h3>struct GstMpegtsDvbMultilingualNetworkNameItem</h3>
-<pre class="programlisting">struct GstMpegtsDvbMultilingualNetworkNameItem {
- gchar *language_code;
- gchar *network_name;
-};
-</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="GstMpegtsDvbMultilingualBouquetNameItem"></a><h3>struct GstMpegtsDvbMultilingualBouquetNameItem</h3>
-<pre class="programlisting">struct GstMpegtsDvbMultilingualBouquetNameItem {
- gchar *language_code;
- gchar *bouquet_name;
-};
-</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="GstMpegtsDvbMultilingualServiceNameItem"></a><h3>struct GstMpegtsDvbMultilingualServiceNameItem</h3>
-<pre class="programlisting">struct GstMpegtsDvbMultilingualServiceNameItem {
- gchar *language_code;
- gchar *provider_name;
- gchar *service_name;
-};
-</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="GstMpegtsDvbMultilingualComponentItem"></a><h3>struct GstMpegtsDvbMultilingualComponentItem</h3>
-<pre class="programlisting">struct GstMpegtsDvbMultilingualComponentItem {
- gchar *language_code;
- gchar *description;
-};
-</pre>
-</div>
-</div>
-</div>
-<div class="footer">
-<hr>Generated by GTK-Doc V1.25</div>
-</body>
-</html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-bad-libs-gst-dvb-section.html b/docs/libs/html/gst-plugins-bad-libs-gst-dvb-section.html
deleted file mode 100644
index aefbf64..0000000
--- a/docs/libs/html/gst-plugins-bad-libs-gst-dvb-section.html
+++ /dev/null
@@ -1,647 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>gst-dvb-section: GStreamer Bad Plugins 1.0 Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
-<link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Library Reference Manual">
-<link rel="up" href="mpegts.html" title="Mpeg TS helper library">
-<link rel="prev" href="gst-plugins-bad-libs-gst-atsc-section.html" title="gst-atsc-section">
-<link rel="next" href="gst-plugins-bad-libs-gst-atsc-descriptor.html" title="gst-atsc-descriptor">
-<meta name="generator" content="GTK-Doc V1.25 (XML mode)">
-<link rel="stylesheet" href="style.css" type="text/css">
-</head>
-<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
-<td width="100%" align="left" class="shortcuts">
-<a href="#" class="shortcut">Top</a><span id="nav_description"> <span class="dim">|</span>
- <a href="#gst-plugins-bad-libs-gst-dvb-section.description" class="shortcut">Description</a></span><span id="nav_hierarchy"> <span class="dim">|</span>
- <a href="#gst-plugins-bad-libs-gst-dvb-section.object-hierarchy" class="shortcut">Object Hierarchy</a></span>
-</td>
-<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
-<td><a accesskey="u" href="mpegts.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
-<td><a accesskey="p" href="gst-plugins-bad-libs-gst-atsc-section.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="gst-plugins-bad-libs-gst-atsc-descriptor.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
-</tr></table>
-<div class="refentry">
-<a name="gst-plugins-bad-libs-gst-dvb-section"></a><div class="titlepage"></div>
-<div class="refnamediv"><table width="100%"><tr>
-<td valign="top">
-<h2><span class="refentrytitle"><a name="gst-plugins-bad-libs-gst-dvb-section.top_of_page"></a>gst-dvb-section</span></h2>
-<p>gst-dvb-section</p>
-</td>
-<td class="gallery_image" valign="top" align="right"></td>
-</tr></table></div>
-<div class="refsect1">
-<a name="gst-plugins-bad-libs-gst-dvb-section.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table class="informaltable" width="100%" border="0">
-<colgroup>
-<col width="150px" class="functions_return">
-<col class="functions_name">
-</colgroup>
-<tbody>
-<tr>
-<td class="function_type">const <a class="link" href="gst-plugins-bad-libs-gst-dvb-section.html#GstMpegtsNIT" title="struct GstMpegtsNIT"><span class="returnvalue">GstMpegtsNIT</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-section.html#gst-mpegts-section-get-nit" title="gst_mpegts_section_get_nit ()">gst_mpegts_section_get_nit</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-section.html#GstMpegtsNIT" title="struct GstMpegtsNIT"><span class="returnvalue">GstMpegtsNIT</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-section.html#gst-mpegts-nit-new" title="gst_mpegts_nit_new ()">gst_mpegts_nit_new</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-section.html#GstMpegtsNITStream" title="struct GstMpegtsNITStream"><span class="returnvalue">GstMpegtsNITStream</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-section.html#gst-mpegts-nit-stream-new" title="gst_mpegts_nit_stream_new ()">gst_mpegts_nit_stream_new</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a class="link" href="gst-plugins-bad-libs-gstmpegtssection.html#GstMpegtsSection"><span class="returnvalue">GstMpegtsSection</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-section.html#gst-mpegts-section-from-nit" title="gst_mpegts_section_from_nit ()">gst_mpegts_section_from_nit</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">const <a class="link" href="gst-plugins-bad-libs-gst-dvb-section.html#GstMpegtsBAT" title="struct GstMpegtsBAT"><span class="returnvalue">GstMpegtsBAT</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-section.html#gst-mpegts-section-get-bat" title="gst_mpegts_section_get_bat ()">gst_mpegts_section_get_bat</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">const <a class="link" href="gst-plugins-bad-libs-gst-dvb-section.html#GstMpegtsSDT" title="struct GstMpegtsSDT"><span class="returnvalue">GstMpegtsSDT</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-section.html#gst-mpegts-section-get-sdt" title="gst_mpegts_section_get_sdt ()">gst_mpegts_section_get_sdt</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-section.html#GstMpegtsSDT" title="struct GstMpegtsSDT"><span class="returnvalue">GstMpegtsSDT</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-section.html#gst-mpegts-sdt-new" title="gst_mpegts_sdt_new ()">gst_mpegts_sdt_new</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-section.html#GstMpegtsSDTService" title="struct GstMpegtsSDTService"><span class="returnvalue">GstMpegtsSDTService</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-section.html#gst-mpegts-sdt-service-new" title="gst_mpegts_sdt_service_new ()">gst_mpegts_sdt_service_new</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a class="link" href="gst-plugins-bad-libs-gstmpegtssection.html#GstMpegtsSection"><span class="returnvalue">GstMpegtsSection</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-section.html#gst-mpegts-section-from-sdt" title="gst_mpegts_section_from_sdt ()">gst_mpegts_section_from_sdt</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">const <a class="link" href="gst-plugins-bad-libs-gst-dvb-section.html#GstMpegtsEIT" title="struct GstMpegtsEIT"><span class="returnvalue">GstMpegtsEIT</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-section.html#gst-mpegts-section-get-eit" title="gst_mpegts_section_get_eit ()">gst_mpegts_section_get_eit</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="/usr/share/gtk-doc/html/gstreamer-1.0GstDateTime.html#GstDateTime-struct"><span class="returnvalue">GstDateTime</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-section.html#gst-mpegts-section-get-tdt" title="gst_mpegts_section_get_tdt ()">gst_mpegts_section_get_tdt</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">const <a class="link" href="gst-plugins-bad-libs-gst-dvb-section.html#GstMpegtsTOT" title="struct GstMpegtsTOT"><span class="returnvalue">GstMpegtsTOT</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gst-dvb-section.html#gst-mpegts-section-get-tot" title="gst_mpegts_section_get_tot ()">gst_mpegts_section_get_tot</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<div class="refsect1">
-<a name="gst-plugins-bad-libs-gst-dvb-section.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table class="informaltable" width="100%" border="0">
-<colgroup>
-<col width="150px" class="name">
-<col class="description">
-</colgroup>
-<tbody>
-<tr>
-<td class="datatype_keyword">enum</td>
-<td class="function_name"><a class="link" href="gst-plugins-bad-libs-gst-dvb-section.html#GstMpegtsSectionDVBTableID" title="enum GstMpegtsSectionDVBTableID">GstMpegtsSectionDVBTableID</a></td>
-</tr>
-<tr>
-<td class="datatype_keyword">struct</td>
-<td class="function_name"><a class="link" href="gst-plugins-bad-libs-gst-dvb-section.html#GstMpegtsNIT" title="struct GstMpegtsNIT">GstMpegtsNIT</a></td>
-</tr>
-<tr>
-<td class="datatype_keyword">struct</td>
-<td class="function_name"><a class="link" href="gst-plugins-bad-libs-gst-dvb-section.html#GstMpegtsNITStream" title="struct GstMpegtsNITStream">GstMpegtsNITStream</a></td>
-</tr>
-<tr>
-<td class="datatype_keyword">struct</td>
-<td class="function_name"><a class="link" href="gst-plugins-bad-libs-gst-dvb-section.html#GstMpegtsBAT" title="struct GstMpegtsBAT">GstMpegtsBAT</a></td>
-</tr>
-<tr>
-<td class="datatype_keyword">struct</td>
-<td class="function_name"><a class="link" href="gst-plugins-bad-libs-gst-dvb-section.html#GstMpegtsBATStream" title="struct GstMpegtsBATStream">GstMpegtsBATStream</a></td>
-</tr>
-<tr>
-<td class="datatype_keyword">struct</td>
-<td class="function_name"><a class="link" href="gst-plugins-bad-libs-gst-dvb-section.html#GstMpegtsSDT" title="struct GstMpegtsSDT">GstMpegtsSDT</a></td>
-</tr>
-<tr>
-<td class="datatype_keyword">struct</td>
-<td class="function_name"><a class="link" href="gst-plugins-bad-libs-gst-dvb-section.html#GstMpegtsSDTService" title="struct GstMpegtsSDTService">GstMpegtsSDTService</a></td>
-</tr>
-<tr>
-<td class="datatype_keyword">struct</td>
-<td class="function_name"><a class="link" href="gst-plugins-bad-libs-gst-dvb-section.html#GstMpegtsEIT" title="struct GstMpegtsEIT">GstMpegtsEIT</a></td>
-</tr>
-<tr>
-<td class="datatype_keyword">struct</td>
-<td class="function_name"><a class="link" href="gst-plugins-bad-libs-gst-dvb-section.html#GstMpegtsEITEvent" title="struct GstMpegtsEITEvent">GstMpegtsEITEvent</a></td>
-</tr>
-<tr>
-<td class="datatype_keyword">enum</td>
-<td class="function_name"><a class="link" href="gst-plugins-bad-libs-gst-dvb-section.html#GstMpegtsRunningStatus" title="enum GstMpegtsRunningStatus">GstMpegtsRunningStatus</a></td>
-</tr>
-<tr>
-<td class="datatype_keyword">struct</td>
-<td class="function_name"><a class="link" href="gst-plugins-bad-libs-gst-dvb-section.html#GstMpegtsTOT" title="struct GstMpegtsTOT">GstMpegtsTOT</a></td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<div class="refsect1">
-<a name="gst-plugins-bad-libs-gst-dvb-section.object-hierarchy"></a><h2>Object Hierarchy</h2>
-<pre class="screen"> <a href="https://developer.gnome.org/gobject/unstable/gobject-Enumeration-and-Flag-Types.html">GEnum</a>
- <span class="lineart">╰──</span> GstMpegtsRunningStatus
-</pre>
-</div>
-<div class="refsect1">
-<a name="gst-plugins-bad-libs-gst-dvb-section.description"></a><h2>Description</h2>
-</div>
-<div class="refsect1">
-<a name="gst-plugins-bad-libs-gst-dvb-section.functions_details"></a><h2>Functions</h2>
-<div class="refsect2">
-<a name="gst-mpegts-section-get-nit"></a><h3>gst_mpegts_section_get_nit ()</h3>
-<pre class="programlisting">const <a class="link" href="gst-plugins-bad-libs-gst-dvb-section.html#GstMpegtsNIT" title="struct GstMpegtsNIT"><span class="returnvalue">GstMpegtsNIT</span></a> *
-gst_mpegts_section_get_nit (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstmpegtssection.html#GstMpegtsSection"><span class="type">GstMpegtsSection</span></a> *section</code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-mpegts-nit-new"></a><h3>gst_mpegts_nit_new ()</h3>
-<pre class="programlisting"><a class="link" href="gst-plugins-bad-libs-gst-dvb-section.html#GstMpegtsNIT" title="struct GstMpegtsNIT"><span class="returnvalue">GstMpegtsNIT</span></a> *
-gst_mpegts_nit_new (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-mpegts-nit-stream-new"></a><h3>gst_mpegts_nit_stream_new ()</h3>
-<pre class="programlisting"><a class="link" href="gst-plugins-bad-libs-gst-dvb-section.html#GstMpegtsNITStream" title="struct GstMpegtsNITStream"><span class="returnvalue">GstMpegtsNITStream</span></a> *
-gst_mpegts_nit_stream_new (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-mpegts-section-from-nit"></a><h3>gst_mpegts_section_from_nit ()</h3>
-<pre class="programlisting"><a class="link" href="gst-plugins-bad-libs-gstmpegtssection.html#GstMpegtsSection"><span class="returnvalue">GstMpegtsSection</span></a> *
-gst_mpegts_section_from_nit (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gst-dvb-section.html#GstMpegtsNIT" title="struct GstMpegtsNIT"><span class="type">GstMpegtsNIT</span></a> *nit</code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-mpegts-section-get-bat"></a><h3>gst_mpegts_section_get_bat ()</h3>
-<pre class="programlisting">const <a class="link" href="gst-plugins-bad-libs-gst-dvb-section.html#GstMpegtsBAT" title="struct GstMpegtsBAT"><span class="returnvalue">GstMpegtsBAT</span></a> *
-gst_mpegts_section_get_bat (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstmpegtssection.html#GstMpegtsSection"><span class="type">GstMpegtsSection</span></a> *section</code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-mpegts-section-get-sdt"></a><h3>gst_mpegts_section_get_sdt ()</h3>
-<pre class="programlisting">const <a class="link" href="gst-plugins-bad-libs-gst-dvb-section.html#GstMpegtsSDT" title="struct GstMpegtsSDT"><span class="returnvalue">GstMpegtsSDT</span></a> *
-gst_mpegts_section_get_sdt (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstmpegtssection.html#GstMpegtsSection"><span class="type">GstMpegtsSection</span></a> *section</code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-mpegts-sdt-new"></a><h3>gst_mpegts_sdt_new ()</h3>
-<pre class="programlisting"><a class="link" href="gst-plugins-bad-libs-gst-dvb-section.html#GstMpegtsSDT" title="struct GstMpegtsSDT"><span class="returnvalue">GstMpegtsSDT</span></a> *
-gst_mpegts_sdt_new (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-mpegts-sdt-service-new"></a><h3>gst_mpegts_sdt_service_new ()</h3>
-<pre class="programlisting"><a class="link" href="gst-plugins-bad-libs-gst-dvb-section.html#GstMpegtsSDTService" title="struct GstMpegtsSDTService"><span class="returnvalue">GstMpegtsSDTService</span></a> *
-gst_mpegts_sdt_service_new (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-mpegts-section-from-sdt"></a><h3>gst_mpegts_section_from_sdt ()</h3>
-<pre class="programlisting"><a class="link" href="gst-plugins-bad-libs-gstmpegtssection.html#GstMpegtsSection"><span class="returnvalue">GstMpegtsSection</span></a> *
-gst_mpegts_section_from_sdt (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gst-dvb-section.html#GstMpegtsSDT" title="struct GstMpegtsSDT"><span class="type">GstMpegtsSDT</span></a> *sdt</code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-mpegts-section-get-eit"></a><h3>gst_mpegts_section_get_eit ()</h3>
-<pre class="programlisting">const <a class="link" href="gst-plugins-bad-libs-gst-dvb-section.html#GstMpegtsEIT" title="struct GstMpegtsEIT"><span class="returnvalue">GstMpegtsEIT</span></a> *
-gst_mpegts_section_get_eit (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstmpegtssection.html#GstMpegtsSection"><span class="type">GstMpegtsSection</span></a> *section</code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-mpegts-section-get-tdt"></a><h3>gst_mpegts_section_get_tdt ()</h3>
-<pre class="programlisting"><a href="/usr/share/gtk-doc/html/gstreamer-1.0GstDateTime.html#GstDateTime-struct"><span class="returnvalue">GstDateTime</span></a> *
-gst_mpegts_section_get_tdt (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstmpegtssection.html#GstMpegtsSection"><span class="type">GstMpegtsSection</span></a> *section</code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-mpegts-section-get-tot"></a><h3>gst_mpegts_section_get_tot ()</h3>
-<pre class="programlisting">const <a class="link" href="gst-plugins-bad-libs-gst-dvb-section.html#GstMpegtsTOT" title="struct GstMpegtsTOT"><span class="returnvalue">GstMpegtsTOT</span></a> *
-gst_mpegts_section_get_tot (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstmpegtssection.html#GstMpegtsSection"><span class="type">GstMpegtsSection</span></a> *section</code></em>);</pre>
-</div>
-</div>
-<div class="refsect1">
-<a name="gst-plugins-bad-libs-gst-dvb-section.other_details"></a><h2>Types and Values</h2>
-<div class="refsect2">
-<a name="GstMpegtsSectionDVBTableID"></a><h3>enum GstMpegtsSectionDVBTableID</h3>
-<div class="refsect3">
-<a name="GstMpegtsSectionDVBTableID.members"></a><h4>Members</h4>
-<div class="informaltable"><table class="informaltable" width="100%" border="0">
-<colgroup>
-<col width="300px" class="enum_members_name">
-<col class="enum_members_description">
-<col width="200px" class="enum_members_annotations">
-</colgroup>
-<tbody>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-TABLE-ID-NETWORK-INFORMATION-ACTUAL-NETWORK:CAPS"></a>GST_MTS_TABLE_ID_NETWORK_INFORMATION_ACTUAL_NETWORK</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-TABLE-ID-NETWORK-INFORMATION-OTHER-NETWORK:CAPS"></a>GST_MTS_TABLE_ID_NETWORK_INFORMATION_OTHER_NETWORK</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-TABLE-ID-SERVICE-DESCRIPTION-ACTUAL-TS:CAPS"></a>GST_MTS_TABLE_ID_SERVICE_DESCRIPTION_ACTUAL_TS</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-TABLE-ID-SERVICE-DESCRIPTION-OTHER-TS:CAPS"></a>GST_MTS_TABLE_ID_SERVICE_DESCRIPTION_OTHER_TS</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-TABLE-ID-BOUQUET-ASSOCIATION:CAPS"></a>GST_MTS_TABLE_ID_BOUQUET_ASSOCIATION</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-TABLE-ID-EVENT-INFORMATION-ACTUAL-TS-PRESENT:CAPS"></a>GST_MTS_TABLE_ID_EVENT_INFORMATION_ACTUAL_TS_PRESENT</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-TABLE-ID-EVENT-INFORMATION-OTHER-TS-PRESENT:CAPS"></a>GST_MTS_TABLE_ID_EVENT_INFORMATION_OTHER_TS_PRESENT</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-TABLE-ID-EVENT-INFORMATION-ACTUAL-TS-SCHEDULE-1:CAPS"></a>GST_MTS_TABLE_ID_EVENT_INFORMATION_ACTUAL_TS_SCHEDULE_1</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-TABLE-ID-EVENT-INFORMATION-ACTUAL-TS-SCHEDULE-N:CAPS"></a>GST_MTS_TABLE_ID_EVENT_INFORMATION_ACTUAL_TS_SCHEDULE_N</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-TABLE-ID-EVENT-INFORMATION-OTHER-TS-SCHEDULE-1:CAPS"></a>GST_MTS_TABLE_ID_EVENT_INFORMATION_OTHER_TS_SCHEDULE_1</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-TABLE-ID-EVENT-INFORMATION-OTHER-TS-SCHEDULE-N:CAPS"></a>GST_MTS_TABLE_ID_EVENT_INFORMATION_OTHER_TS_SCHEDULE_N</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-TABLE-ID-TIME-DATE:CAPS"></a>GST_MTS_TABLE_ID_TIME_DATE</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-TABLE-ID-RUNNING-STATUS:CAPS"></a>GST_MTS_TABLE_ID_RUNNING_STATUS</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-TABLE-ID-STUFFING:CAPS"></a>GST_MTS_TABLE_ID_STUFFING</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-TABLE-ID-TIME-OFFSET:CAPS"></a>GST_MTS_TABLE_ID_TIME_OFFSET</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-TABLE-ID-APPLICATION-INFORMATION-TABLE:CAPS"></a>GST_MTS_TABLE_ID_APPLICATION_INFORMATION_TABLE</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-TABLE-ID-CONTAINER:CAPS"></a>GST_MTS_TABLE_ID_CONTAINER</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-TABLE-ID-RELATED-CONTENT:CAPS"></a>GST_MTS_TABLE_ID_RELATED_CONTENT</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-TABLE-ID-CONTENT-IDENTIFIER:CAPS"></a>GST_MTS_TABLE_ID_CONTENT_IDENTIFIER</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-TABLE-ID-MPE-FEC:CAPS"></a>GST_MTS_TABLE_ID_MPE_FEC</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-TABLE-ID-RESOLUTION-NOTIFICATION:CAPS"></a>GST_MTS_TABLE_ID_RESOLUTION_NOTIFICATION</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-TABLE-ID-MPE-IFEC:CAPS"></a>GST_MTS_TABLE_ID_MPE_IFEC</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-TABLE-ID-DISCONTINUITY-INFORMATION:CAPS"></a>GST_MTS_TABLE_ID_DISCONTINUITY_INFORMATION</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-TABLE-ID-SELECTION-INFORMATION:CAPS"></a>GST_MTS_TABLE_ID_SELECTION_INFORMATION</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-TABLE-ID-CA-MESSAGE-ECM-0:CAPS"></a>GST_MTS_TABLE_ID_CA_MESSAGE_ECM_0</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-TABLE-ID-CA-MESSAGE-ECM-1:CAPS"></a>GST_MTS_TABLE_ID_CA_MESSAGE_ECM_1</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-TABLE-ID-CA-MESSAGE-SYSTEM-PRIVATE-1:CAPS"></a>GST_MTS_TABLE_ID_CA_MESSAGE_SYSTEM_PRIVATE_1</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-TABLE-ID-CA-MESSAGE-SYSTEM-PRIVATE-N:CAPS"></a>GST_MTS_TABLE_ID_CA_MESSAGE_SYSTEM_PRIVATE_N</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-TABLE-ID-SCT:CAPS"></a>GST_MTS_TABLE_ID_SCT</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-TABLE-ID-FCT:CAPS"></a>GST_MTS_TABLE_ID_FCT</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-TABLE-ID-TCT:CAPS"></a>GST_MTS_TABLE_ID_TCT</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-TABLE-ID-SPT:CAPS"></a>GST_MTS_TABLE_ID_SPT</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-TABLE-ID-CMT:CAPS"></a>GST_MTS_TABLE_ID_CMT</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-TABLE-ID-TBTP:CAPS"></a>GST_MTS_TABLE_ID_TBTP</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-TABLE-ID-PCR-PACKET-PAYLOAD:CAPS"></a>GST_MTS_TABLE_ID_PCR_PACKET_PAYLOAD</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-TABLE-ID-TRANSMISSION-MODE-SUPPORT-PAYLOAD:CAPS"></a>GST_MTS_TABLE_ID_TRANSMISSION_MODE_SUPPORT_PAYLOAD</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-TABLE-ID-TIM:CAPS"></a>GST_MTS_TABLE_ID_TIM</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-TABLE-ID-LL-FEC-PARITY-DATA-TABLE:CAPS"></a>GST_MTS_TABLE_ID_LL_FEC_PARITY_DATA_TABLE</p></td>
-<td> </td>
-<td> </td>
-</tr>
-</tbody>
-</table></div>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="GstMpegtsNIT"></a><h3>struct GstMpegtsNIT</h3>
-<pre class="programlisting">struct GstMpegtsNIT {
- gboolean actual_network;
- guint16 network_id;
-
- GPtrArray *descriptors;
-
- GPtrArray *streams;
-};
-</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="GstMpegtsNITStream"></a><h3>struct GstMpegtsNITStream</h3>
-<pre class="programlisting">struct GstMpegtsNITStream {
- guint16 transport_stream_id;
- guint16 original_network_id;
-
- GPtrArray *descriptors;
-};
-</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="GstMpegtsBAT"></a><h3>struct GstMpegtsBAT</h3>
-<pre class="programlisting">struct GstMpegtsBAT {
- GPtrArray *descriptors;
-
- GPtrArray *streams;
-};
-</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="GstMpegtsBATStream"></a><h3>struct GstMpegtsBATStream</h3>
-<pre class="programlisting">struct GstMpegtsBATStream {
- guint16 transport_stream_id;
- guint16 original_network_id;
-
- GPtrArray *descriptors;
-};
-</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="GstMpegtsSDT"></a><h3>struct GstMpegtsSDT</h3>
-<pre class="programlisting">struct GstMpegtsSDT {
- guint16 original_network_id;
- gboolean actual_ts;
- guint16 transport_stream_id;
-
- GPtrArray *services;
-};
-</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="GstMpegtsSDTService"></a><h3>struct GstMpegtsSDTService</h3>
-<pre class="programlisting">struct GstMpegtsSDTService {
- guint16 service_id;
-
- gboolean EIT_schedule_flag;
- gboolean EIT_present_following_flag;
- GstMpegtsRunningStatus running_status;
- gboolean free_CA_mode;
-
- GPtrArray *descriptors;
-};
-</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="GstMpegtsEIT"></a><h3>struct GstMpegtsEIT</h3>
-<pre class="programlisting">struct GstMpegtsEIT {
- guint16 transport_stream_id;
- guint16 original_network_id;
- guint8 segment_last_section_number;
- guint8 last_table_id;
-
- gboolean actual_stream;
- gboolean present_following;
-
- GPtrArray *events;
-};
-</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="GstMpegtsEITEvent"></a><h3>struct GstMpegtsEITEvent</h3>
-<pre class="programlisting">struct GstMpegtsEITEvent {
- guint16 event_id;
-
- GstDateTime *start_time;
- guint32 duration;
-
- GstMpegtsRunningStatus running_status;
- gboolean free_CA_mode;
-
- GPtrArray *descriptors;
-};
-</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="GstMpegtsRunningStatus"></a><h3>enum GstMpegtsRunningStatus</h3>
-<div class="refsect3">
-<a name="GstMpegtsRunningStatus.members"></a><h4>Members</h4>
-<div class="informaltable"><table class="informaltable" width="100%" border="0">
-<colgroup>
-<col width="300px" class="enum_members_name">
-<col class="enum_members_description">
-<col width="200px" class="enum_members_annotations">
-</colgroup>
-<tbody>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-RUNNING-STATUS-UNDEFINED:CAPS"></a>GST_MPEGTS_RUNNING_STATUS_UNDEFINED</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-RUNNING-STATUS-NOT-RUNNING:CAPS"></a>GST_MPEGTS_RUNNING_STATUS_NOT_RUNNING</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-RUNNING-STATUS-STARTS-IN-FEW-SECONDS:CAPS"></a>GST_MPEGTS_RUNNING_STATUS_STARTS_IN_FEW_SECONDS</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-RUNNING-STATUS-PAUSING:CAPS"></a>GST_MPEGTS_RUNNING_STATUS_PAUSING</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-RUNNING-STATUS-RUNNING:CAPS"></a>GST_MPEGTS_RUNNING_STATUS_RUNNING</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-RUNNING-STATUS-OFF-AIR:CAPS"></a>GST_MPEGTS_RUNNING_STATUS_OFF_AIR</p></td>
-<td> </td>
-<td> </td>
-</tr>
-</tbody>
-</table></div>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="GstMpegtsTOT"></a><h3>struct GstMpegtsTOT</h3>
-<pre class="programlisting">struct GstMpegtsTOT {
- GstDateTime *utc_time;
-
- GPtrArray *descriptors;
-};
-</pre>
-</div>
-</div>
-</div>
-<div class="footer">
-<hr>Generated by GTK-Doc V1.25</div>
-</body>
-</html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-bad-libs-gstglbasememory.html b/docs/libs/html/gst-plugins-bad-libs-gstglbasememory.html
index d27bd36..46516e6 100644
--- a/docs/libs/html/gst-plugins-bad-libs-gstglbasememory.html
+++ b/docs/libs/html/gst-plugins-bad-libs-gstglbasememory.html
@@ -28,7 +28,7 @@
<div class="refnamediv"><table width="100%"><tr>
<td valign="top">
<h2><span class="refentrytitle"><a name="gst-plugins-bad-libs-gstglbasememory.top_of_page"></a>GstGLBaseMemory</span></h2>
-<p>GstGLBaseMemory</p>
+<p>GstGLBaseMemory — memory subclass for GL buffers</p>
</td>
<td class="gallery_image" valign="top" align="right"></td>
</tr></table></div>
@@ -271,6 +271,9 @@
</div>
<div class="refsect1">
<a name="gst-plugins-bad-libs-gstglbasememory.description"></a><h2>Description</h2>
+<p>GstGLBaseMemory is a <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstMemory.html#GstMemory-struct"><span class="type">GstMemory</span></a> subclass providing the basis of support
+for the mapping of GL buffers.</p>
+<p>Data is uploaded or downloaded from the GPU as is necessary.</p>
</div>
<div class="refsect1">
<a name="gst-plugins-bad-libs-gstglbasememory.functions_details"></a><h2>Functions</h2>
@@ -279,12 +282,55 @@
<pre class="programlisting"><span class="returnvalue">void</span>
<span class="c_punctuation">(</span>*GstGLAllocationParamsCopyFunc<span class="c_punctuation">)</span> (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLAllocationParams" title="struct GstGLAllocationParams"><span class="type">GstGLAllocationParams</span></a> *src</code></em>,
<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLAllocationParams" title="struct GstGLAllocationParams"><span class="type">GstGLAllocationParams</span></a> *dest</code></em>);</pre>
+<p>Copies the parameters from <em class="parameter"><code>src</code></em>
+ into <em class="parameter"><code>dest</code></em>
+. The subclass must compose copy
+functions from the superclass.</p>
+<div class="refsect3">
+<a name="GstGLAllocationParamsCopyFunc.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>src</p></td>
+<td class="parameter_description"><p>the source <a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLAllocationParams" title="struct GstGLAllocationParams"><span class="type">GstGLAllocationParams</span></a> to copy from</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>dest</p></td>
+<td class="parameter_description"><p>the source <a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLAllocationParams" title="struct GstGLAllocationParams"><span class="type">GstGLAllocationParams</span></a> to copy</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
</div>
<hr>
<div class="refsect2">
<a name="GstGLAllocationParamsFreeFunc"></a><h3>GstGLAllocationParamsFreeFunc ()</h3>
<pre class="programlisting"><span class="returnvalue">void</span>
<span class="c_punctuation">(</span>*GstGLAllocationParamsFreeFunc<span class="c_punctuation">)</span> (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> params</code></em>);</pre>
+<p>Free any dynamically allocated data. The subclass must call the superclass'
+free.</p>
+<div class="refsect3">
+<a name="GstGLAllocationParamsFreeFunc.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>params</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLAllocationParams" title="struct GstGLAllocationParams"><span class="type">GstGLAllocationParams</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
</div>
<hr>
<div class="refsect2">
@@ -302,24 +348,164 @@
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> gl_handle</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Datasets.html#GDestroyNotify"><span class="type">GDestroyNotify</span></a> notify</code></em>);</pre>
+<p><em class="parameter"><code>notify</code></em>
+ will be called once for each allocated memory using these <em class="parameter"><code>params</code></em>
+
+when freeing the memory.</p>
+<div class="refsect3">
+<a name="gst-gl-allocation-params-init.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>params</p></td>
+<td class="parameter_description"><p>the <a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLAllocationParams" title="struct GstGLAllocationParams"><span class="type">GstGLAllocationParams</span></a> to initialize</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>struct_size</p></td>
+<td class="parameter_description"><p>the struct size of the implementation</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>alloc_flags</p></td>
+<td class="parameter_description"><p>some alloc flags</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>copy</p></td>
+<td class="parameter_description"><p>a copy function</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>free</p></td>
+<td class="parameter_description"><p>a free function</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>context</p></td>
+<td class="parameter_description"><p> a <a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>alloc_size</p></td>
+<td class="parameter_description"><p>the number of bytes to allocate.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>alloc_params</p></td>
+<td class="parameter_description"><p> a <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstAllocator.html#GstAllocationParams-struct"><span class="type">GstAllocationParams</span></a> to apply. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>][<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>wrapped_data</p></td>
+<td class="parameter_description"><p> a sysmem data pointer to initialize the allocation with. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>][<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>gl_handle</p></td>
+<td class="parameter_description"><p> a GL handle to initialize the allocation with. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>user_data</p></td>
+<td class="parameter_description"><p> user data to call <em class="parameter"><code>notify</code></em>
+with. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>][<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>notify</p></td>
+<td class="parameter_description"><p> a <a href="/usr/share/gtk-doc/html/glibglib-Datasets.html#GDestroyNotify"><span class="type">GDestroyNotify</span></a>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-gl-allocation-params-init.returns"></a><h4>Returns</h4>
+<p> whether the paramaters could be initialized</p>
+</div>
+<p class="since">Since: 1.8</p>
</div>
<hr>
<div class="refsect2">
<a name="gst-gl-allocation-params-copy"></a><h3>gst_gl_allocation_params_copy ()</h3>
<pre class="programlisting"><a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLAllocationParams" title="struct GstGLAllocationParams"><span class="returnvalue">GstGLAllocationParams</span></a> *
gst_gl_allocation_params_copy (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLAllocationParams" title="struct GstGLAllocationParams"><span class="type">GstGLAllocationParams</span></a> *src</code></em>);</pre>
+<div class="refsect3">
+<a name="gst-gl-allocation-params-copy.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>src</p></td>
+<td class="parameter_description"><p>the <a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLAllocationParams" title="struct GstGLAllocationParams"><span class="type">GstGLAllocationParams</span></a> to initialize</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-gl-allocation-params-copy.returns"></a><h4>Returns</h4>
+<p> a copy of the <a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLAllocationParams" title="struct GstGLAllocationParams"><span class="type">GstGLAllocationParams</span></a> specified by <em class="parameter"><code>src</code></em>
+or <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> on
+failure</p>
+</div>
+<p class="since">Since: 1.8</p>
</div>
<hr>
<div class="refsect2">
<a name="gst-gl-allocation-params-free"></a><h3>gst_gl_allocation_params_free ()</h3>
<pre class="programlisting"><span class="returnvalue">void</span>
gst_gl_allocation_params_free (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLAllocationParams" title="struct GstGLAllocationParams"><span class="type">GstGLAllocationParams</span></a> *params</code></em>);</pre>
+<p>Frees the <a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLAllocationParams" title="struct GstGLAllocationParams"><span class="type">GstGLAllocationParams</span></a> and all associated data.</p>
+<div class="refsect3">
+<a name="gst-gl-allocation-params-free.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>params</p></td>
+<td class="parameter_description"><p>the <a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLAllocationParams" title="struct GstGLAllocationParams"><span class="type">GstGLAllocationParams</span></a> to initialize</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<p class="since">Since: 1.8</p>
</div>
<hr>
<div class="refsect2">
<a name="gst-gl-allocation-params-free-data"></a><h3>gst_gl_allocation_params_free_data ()</h3>
<pre class="programlisting"><span class="returnvalue">void</span>
gst_gl_allocation_params_free_data (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLAllocationParams" title="struct GstGLAllocationParams"><span class="type">GstGLAllocationParams</span></a> *params</code></em>);</pre>
+<p>Frees the dynamically allocated data in <em class="parameter"><code>params</code></em>
+. Direct subclasses
+should call this function in their own overriden free function.</p>
+<div class="refsect3">
+<a name="gst-gl-allocation-params-free-data.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>params</p></td>
+<td class="parameter_description"><p>the source <a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLAllocationParams" title="struct GstGLAllocationParams"><span class="type">GstGLAllocationParams</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<p class="since">Since: 1.8</p>
</div>
<hr>
<div class="refsect2">
@@ -327,12 +513,42 @@
<pre class="programlisting"><span class="returnvalue">void</span>
gst_gl_allocation_params_copy_data (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLAllocationParams" title="struct GstGLAllocationParams"><span class="type">GstGLAllocationParams</span></a> *src</code></em>,
<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLAllocationParams" title="struct GstGLAllocationParams"><span class="type">GstGLAllocationParams</span></a> *dest</code></em>);</pre>
+<p>Copies the dynamically allocated data from <em class="parameter"><code>src</code></em>
+ to <em class="parameter"><code>dest</code></em>
+. Direct subclasses
+should call this function in their own overriden copy function.</p>
+<div class="refsect3">
+<a name="gst-gl-allocation-params-copy-data.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>src</p></td>
+<td class="parameter_description"><p>the source <a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLAllocationParams" title="struct GstGLAllocationParams"><span class="type">GstGLAllocationParams</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>dest</p></td>
+<td class="parameter_description"><p>the destination <a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLAllocationParams" title="struct GstGLAllocationParams"><span class="type">GstGLAllocationParams</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 1.8</p>
</div>
<hr>
<div class="refsect2">
<a name="gst-gl-base-memory-init-once"></a><h3>gst_gl_base_memory_init_once ()</h3>
<pre class="programlisting"><span class="returnvalue">void</span>
gst_gl_base_memory_init_once (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<p>Initializes the GL Base Memory allocator. It is safe to call this function
+multiple times. This must be called before any other GstGLBaseMemory operation.</p>
+<p class="since">Since: 1.8</p>
</div>
<hr>
<div class="refsect2">
@@ -346,12 +562,90 @@
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gsize"><span class="type">gsize</span></a> size</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Datasets.html#GDestroyNotify"><span class="type">GDestroyNotify</span></a> notify</code></em>);</pre>
+<p>Initializes <em class="parameter"><code>mem</code></em>
+ with the required parameters</p>
+<div class="refsect3">
+<a name="gst-gl-base-memory-init.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>mem</p></td>
+<td class="parameter_description"><p>the <a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemory" title="GstGLBaseMemory"><span class="type">GstGLBaseMemory</span></a> to initialize</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>allocator</p></td>
+<td class="parameter_description"><p>the <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstAllocator.html#GstAllocator-struct"><span class="type">GstAllocator</span></a> to initialize with</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>parent</p></td>
+<td class="parameter_description"><p> the parent <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstMemory.html#GstMemory-struct"><span class="type">GstMemory</span></a> to initialize with. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>context</p></td>
+<td class="parameter_description"><p>the <a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a> to initialize with</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>params</p></td>
+<td class="parameter_description"><p> the <em class="parameter"><code>GstAllocationParams</code></em>
+to initialize with. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>size</p></td>
+<td class="parameter_description"><p>the number of bytes to be allocated</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 to call <em class="parameter"><code>notify</code></em>
+with. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>notify</p></td>
+<td class="parameter_description"><p> a <a href="/usr/share/gtk-doc/html/glibglib-Datasets.html#GDestroyNotify"><span class="type">GDestroyNotify</span></a>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 1.8</p>
</div>
<hr>
<div class="refsect2">
<a name="gst-is-gl-base-memory"></a><h3>gst_is_gl_base_memory ()</h3>
<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
gst_is_gl_base_memory (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/gstreamer-1.0GstMemory.html#GstMemory-struct"><span class="type">GstMemory</span></a> *mem</code></em>);</pre>
+<div class="refsect3">
+<a name="gst-is-gl-base-memory.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>mem</p></td>
+<td class="parameter_description"><p>a <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstMemory.html#GstMemory-struct"><span class="type">GstMemory</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-is-gl-base-memory.returns"></a><h4>Returns</h4>
+<p> whether the memory at <em class="parameter"><code>mem</code></em>
+is a <a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemory" title="GstGLBaseMemory"><span class="type">GstGLBaseMemory</span></a></p>
+</div>
+<p class="since">Since: 1.8</p>
</div>
<hr>
<div class="refsect2">
@@ -360,6 +654,36 @@
<span class="c_punctuation">(</span>*GstGLBaseMemoryAllocatorAllocFunction<span class="c_punctuation">)</span>
(<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemoryAllocator"><span class="type">GstGLBaseMemoryAllocator</span></a> *allocator</code></em>,
<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLAllocationParams" title="struct GstGLAllocationParams"><span class="type">GstGLAllocationParams</span></a> *params</code></em>);</pre>
+<p>Note: not called with a GL context current</p>
+<div class="refsect3">
+<a name="GstGLBaseMemoryAllocatorAllocFunction.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>allocator</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemoryAllocator"><span class="type">GstGLBaseMemoryAllocator</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>params</p></td>
+<td class="parameter_description"><p>the <a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLAllocationParams" title="struct GstGLAllocationParams"><span class="type">GstGLAllocationParams</span></a> to allocate the memory with</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="GstGLBaseMemoryAllocatorAllocFunction.returns"></a><h4>Returns</h4>
+<p> a newly allocated <a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemory" title="GstGLBaseMemory"><span class="type">GstGLBaseMemory</span></a> from <em class="parameter"><code>allocator</code></em>
+and <em class="parameter"><code>params</code></em>
+</p>
+</div>
+<p class="since">Since: 1.8</p>
</div>
<hr>
<div class="refsect2">
@@ -368,6 +692,35 @@
<span class="c_punctuation">(</span>*GstGLBaseMemoryAllocatorCreateFunction<span class="c_punctuation">)</span>
(<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemory" title="GstGLBaseMemory"><span class="type">GstGLBaseMemory</span></a> *mem</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);</pre>
+<p>As this virtual method is called with an OpenGL context current, use this
+function to allocate and OpenGL resources needed for your application</p>
+<div class="refsect3">
+<a name="GstGLBaseMemoryAllocatorCreateFunction.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>mem</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemory" title="GstGLBaseMemory"><span class="type">GstGLBaseMemory</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>a <a href="/usr/share/gtk-doc/html/glibglib-Error-Reporting.html#GError"><span class="type">GError</span></a> to use on failure</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="GstGLBaseMemoryAllocatorCreateFunction.returns"></a><h4>Returns</h4>
+<p> whether the creation succeeded</p>
+</div>
+<p class="since">Since: 1.8</p>
</div>
<hr>
<div class="refsect2">
@@ -377,6 +730,39 @@
(<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemory" title="GstGLBaseMemory"><span class="type">GstGLBaseMemory</span></a> *mem</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/gstreamer-1.0GstMemory.html#GstMapInfo"><span class="type">GstMapInfo</span></a> *info</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gsize"><span class="type">gsize</span></a> maxsize</code></em>);</pre>
+<p>Also see <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstMemory.html#gst-memory-map"><code class="function">gst_memory_map()</code></a>;</p>
+<div class="refsect3">
+<a name="GstGLBaseMemoryAllocatorMapFunction.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>mem</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemory" title="GstGLBaseMemory"><span class="type">GstGLBaseMemory</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>info</p></td>
+<td class="parameter_description"><p>a <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstMemory.html#GstMapInfo"><span class="type">GstMapInfo</span></a> to map with</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>maxsize</p></td>
+<td class="parameter_description"><p>the size to map</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="GstGLBaseMemoryAllocatorMapFunction.returns"></a><h4>Returns</h4>
+<p> the mapped pointer</p>
+</div>
+<p class="since">Since: 1.8</p>
</div>
<hr>
<div class="refsect2">
@@ -385,6 +771,30 @@
<span class="c_punctuation">(</span>*GstGLBaseMemoryAllocatorUnmapFunction<span class="c_punctuation">)</span>
(<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemory" title="GstGLBaseMemory"><span class="type">GstGLBaseMemory</span></a> *mem</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/gstreamer-1.0GstMemory.html#GstMapInfo"><span class="type">GstMapInfo</span></a> *info</code></em>);</pre>
+<p>Also see <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstMemory.html#gst-memory-unmap"><code class="function">gst_memory_unmap()</code></a>;</p>
+<div class="refsect3">
+<a name="GstGLBaseMemoryAllocatorUnmapFunction.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>mem</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemory" title="GstGLBaseMemory"><span class="type">GstGLBaseMemory</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>info</p></td>
+<td class="parameter_description"><p>a <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstMemory.html#GstMapInfo"><span class="type">GstMapInfo</span></a> to map with</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 1.8</p>
</div>
<hr>
<div class="refsect2">
@@ -394,6 +804,39 @@
(<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemory" title="GstGLBaseMemory"><span class="type">GstGLBaseMemory</span></a> *mem</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gssize"><span class="type">gssize</span></a> offset</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gssize"><span class="type">gssize</span></a> size</code></em>);</pre>
+<p>Also see <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstMemory.html#gst-memory-copy"><code class="function">gst_memory_copy()</code></a>;</p>
+<div class="refsect3">
+<a name="GstGLBaseMemoryAllocatorCopyFunction.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>mem</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemory" title="GstGLBaseMemory"><span class="type">GstGLBaseMemory</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>offset</p></td>
+<td class="parameter_description"><p>the offset to copy from</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>size</p></td>
+<td class="parameter_description"><p>the number of bytes to copy</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="GstGLBaseMemoryAllocatorCopyFunction.returns"></a><h4>Returns</h4>
+<p> the newly copied <a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#GstGLMemory" title="GstGLMemory"><span class="type">GstGLMemory</span></a> or <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a></p>
+</div>
+<p class="since">Since: 1.8</p>
</div>
<hr>
<div class="refsect2">
@@ -401,6 +844,24 @@
<pre class="programlisting"><span class="returnvalue">void</span>
<span class="c_punctuation">(</span>*GstGLBaseMemoryAllocatorDestroyFunction<span class="c_punctuation">)</span>
(<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemory" title="GstGLBaseMemory"><span class="type">GstGLBaseMemory</span></a> *mem</code></em>);</pre>
+<p>Destroy any resources allocated throughout the lifetime of <em class="parameter"><code>mem</code></em>
+</p>
+<div class="refsect3">
+<a name="GstGLBaseMemoryAllocatorDestroyFunction.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>mem</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemory" title="GstGLBaseMemory"><span class="type">GstGLBaseMemory</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<p class="since">Since: 1.8</p>
</div>
<hr>
<div class="refsect2">
@@ -408,6 +869,35 @@
<pre class="programlisting"><a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemory" title="GstGLBaseMemory"><span class="returnvalue">GstGLBaseMemory</span></a> *
gst_gl_base_memory_alloc (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemoryAllocator"><span class="type">GstGLBaseMemoryAllocator</span></a> *allocator</code></em>,
<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLAllocationParams" title="struct GstGLAllocationParams"><span class="type">GstGLAllocationParams</span></a> *params</code></em>);</pre>
+<div class="refsect3">
+<a name="gst-gl-base-memory-alloc.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>allocator</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemoryAllocator"><span class="type">GstGLBaseMemoryAllocator</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>params</p></td>
+<td class="parameter_description"><p>the <a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLAllocationParams" title="struct GstGLAllocationParams"><span class="type">GstGLAllocationParams</span></a> to allocate the memory with</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-gl-base-memory-alloc.returns"></a><h4>Returns</h4>
+<p> a new <a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemory" title="GstGLBaseMemory"><span class="type">GstGLBaseMemory</span></a> from <em class="parameter"><code>allocator</code></em>
+with the requested <em class="parameter"><code>params</code></em>
+.</p>
+</div>
+<p class="since">Since: 1.8</p>
</div>
<hr>
<div class="refsect2">
@@ -423,6 +913,43 @@
<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemory" title="GstGLBaseMemory"><span class="type">GstGLBaseMemory</span></a> *dest</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gssize"><span class="type">gssize</span></a> offset</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gssize"><span class="type">gssize</span></a> size</code></em>);</pre>
+<div class="refsect3">
+<a name="gst-gl-base-memory-memcpy.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>src</p></td>
+<td class="parameter_description"><p>the source <a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemory" title="GstGLBaseMemory"><span class="type">GstGLBaseMemory</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>dest</p></td>
+<td class="parameter_description"><p>the destination <a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemory" title="GstGLBaseMemory"><span class="type">GstGLBaseMemory</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>offset</p></td>
+<td class="parameter_description"><p>the offset to start at</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>size</p></td>
+<td class="parameter_description"><p>the number of bytes to copy</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-gl-base-memory-memcpy.returns"></a><h4>Returns</h4>
+<p> whether the copy suceeded.</p>
+</div>
+<p class="since">Since: 1.8</p>
</div>
</div>
<div class="refsect1">
@@ -430,6 +957,8 @@
<div class="refsect2">
<a name="GstGLBaseMemoryAllocator-struct"></a><h3>GstGLBaseMemoryAllocator</h3>
<pre class="programlisting">typedef struct _GstGLBaseMemoryAllocator GstGLBaseMemoryAllocator;</pre>
+<p>Opaque <a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemoryAllocator"><span class="type">GstGLBaseMemoryAllocator</span></a> struct</p>
+<p class="since">Since: 1.8</p>
</div>
<hr>
<div class="refsect2">
@@ -450,18 +979,77 @@
GstGLBaseMemoryAllocatorDestroyFunction destroy;
} GstGLBaseMemoryAllocatorClass;
</pre>
+<div class="refsect3">
+<a name="GstGLBaseMemoryAllocatorClass.members"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="300px" class="struct_members_name">
+<col class="struct_members_description">
+<col width="200px" class="struct_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="struct_member_name"><p><a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemoryAllocatorAllocFunction" title="GstGLBaseMemoryAllocatorAllocFunction ()"><span class="type">GstGLBaseMemoryAllocatorAllocFunction</span></a> <em class="structfield"><code><a name="GstGLBaseMemoryAllocatorClass.alloc"></a>alloc</code></em>;</p></td>
+<td class="struct_member_description"><p>a <a href="gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemoryAllocatorAllocFunction"><span class="type">GstGLBaseMemoryAllocatorAllocFunctions</span></a></p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemoryAllocatorCreateFunction" title="GstGLBaseMemoryAllocatorCreateFunction ()"><span class="type">GstGLBaseMemoryAllocatorCreateFunction</span></a> <em class="structfield"><code><a name="GstGLBaseMemoryAllocatorClass.create"></a>create</code></em>;</p></td>
+<td class="struct_member_description"><p>a <a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemoryAllocatorCreateFunction" title="GstGLBaseMemoryAllocatorCreateFunction ()"><span class="type">GstGLBaseMemoryAllocatorCreateFunction</span></a></p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemoryAllocatorMapFunction" title="GstGLBaseMemoryAllocatorMapFunction ()"><span class="type">GstGLBaseMemoryAllocatorMapFunction</span></a> <em class="structfield"><code><a name="GstGLBaseMemoryAllocatorClass.map"></a>map</code></em>;</p></td>
+<td class="struct_member_description"><p>a <a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemoryAllocatorMapFunction" title="GstGLBaseMemoryAllocatorMapFunction ()"><span class="type">GstGLBaseMemoryAllocatorMapFunction</span></a></p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><span class="type">GstGLBaseMemoryAllocatorFlushFunction</span> <em class="structfield"><code><a name="GstGLBaseMemoryAllocatorClass.flush"></a>flush</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><span class="type">GstGLBaseMemoryAllocatorInvalidateFunction</span> <em class="structfield"><code><a name="GstGLBaseMemoryAllocatorClass.invalidate"></a>invalidate</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemoryAllocatorUnmapFunction" title="GstGLBaseMemoryAllocatorUnmapFunction ()"><span class="type">GstGLBaseMemoryAllocatorUnmapFunction</span></a> <em class="structfield"><code><a name="GstGLBaseMemoryAllocatorClass.unmap"></a>unmap</code></em>;</p></td>
+<td class="struct_member_description"><p>a <a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemoryAllocatorUnmapFunction" title="GstGLBaseMemoryAllocatorUnmapFunction ()"><span class="type">GstGLBaseMemoryAllocatorUnmapFunction</span></a></p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemoryAllocatorCopyFunction" title="GstGLBaseMemoryAllocatorCopyFunction ()"><span class="type">GstGLBaseMemoryAllocatorCopyFunction</span></a> <em class="structfield"><code><a name="GstGLBaseMemoryAllocatorClass.copy"></a>copy</code></em>;</p></td>
+<td class="struct_member_description"><p>a <a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemoryAllocatorCopyFunction" title="GstGLBaseMemoryAllocatorCopyFunction ()"><span class="type">GstGLBaseMemoryAllocatorCopyFunction</span></a></p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemoryAllocatorDestroyFunction" title="GstGLBaseMemoryAllocatorDestroyFunction ()"><span class="type">GstGLBaseMemoryAllocatorDestroyFunction</span></a> <em class="structfield"><code><a name="GstGLBaseMemoryAllocatorClass.destroy"></a>destroy</code></em>;</p></td>
+<td class="struct_member_description"><p>a <a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemoryAllocatorDestroyFunction" title="GstGLBaseMemoryAllocatorDestroyFunction ()"><span class="type">GstGLBaseMemoryAllocatorDestroyFunction</span></a></p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 1.8</p>
</div>
<hr>
<div class="refsect2">
<a name="GST-GL-BASE-MEMORY-ALLOCATOR-NAME:CAPS"></a><h3>GST_GL_BASE_MEMORY_ALLOCATOR_NAME</h3>
<pre class="programlisting">#define GST_GL_BASE_MEMORY_ALLOCATOR_NAME "GLBaseMemory"
</pre>
+<p>The name of the GL buffer allocator</p>
+<p class="since">Since: 1.8</p>
</div>
<hr>
<div class="refsect2">
<a name="GST-MAP-GL:CAPS"></a><h3>GST_MAP_GL</h3>
<pre class="programlisting">#define GST_MAP_GL (GST_MAP_FLAG_LAST << 1)
</pre>
+<p>Flag indicating that we should map the GL object instead of to system memory.</p>
+<p>Combining <a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GST-MAP-GL:CAPS" title="GST_MAP_GL"><span class="type">GST_MAP_GL</span></a> with <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstMemory.html#GST-MAP-WRITE:CAPS"><span class="type">GST_MAP_WRITE</span></a> has the same semantics as though
+you are writing to OpenGL. Conversely, combining <a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GST-MAP-GL:CAPS" title="GST_MAP_GL"><span class="type">GST_MAP_GL</span></a> with
+<a href="/usr/share/gtk-doc/html/gstreamer-1.0GstMemory.html#GST-MAP-READ:CAPS"><span class="type">GST_MAP_READ</span></a> has the same semantics as though you are reading from OpenGL.</p>
</div>
<hr>
<div class="refsect2">
@@ -477,18 +1065,25 @@
<tbody>
<tr>
<td class="enum_member_name"><p><a name="GST-GL-BASE-MEMORY-ERROR-FAILED:CAPS"></a>GST_GL_BASE_MEMORY_ERROR_FAILED</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>generic faliure</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-GL-BASE-MEMORY-ERROR-OLD-LIBS:CAPS"></a>GST_GL_BASE_MEMORY_ERROR_OLD_LIBS</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>the implementation is too old and doesn't
+ implement enough features</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-GL-BASE-MEMORY-ERROR-RESOURCE-UNAVAILABLE:CAPS"></a>GST_GL_BASE_MEMORY_ERROR_RESOURCE_UNAVAILABLE</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>a resource could not be found</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
</tbody>
</table></div>
@@ -514,13 +1109,19 @@
<tbody>
<tr>
<td class="enum_member_name"><p><a name="GST-GL-BASE-MEMORY-TRANSFER-NEED-DOWNLOAD:CAPS"></a>GST_GL_BASE_MEMORY_TRANSFER_NEED_DOWNLOAD</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>the texture needs downloading
+ to the data pointer</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-GL-BASE-MEMORY-TRANSFER-NEED-UPLOAD:CAPS"></a>GST_GL_BASE_MEMORY_TRANSFER_NEED_UPLOAD</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>the data pointer needs uploading
+ to the texture</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
</tbody>
</table></div>
@@ -547,6 +1148,74 @@
gpointer gl_handle;
};
</pre>
+<div class="refsect3">
+<a name="GstGLAllocationParams.members"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="300px" class="struct_members_name">
+<col class="struct_members_description">
+<col width="200px" class="struct_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gsize"><span class="type">gsize</span></a> <em class="structfield"><code><a name="GstGLAllocationParams.struct-size"></a>struct_size</code></em>;</p></td>
+<td class="struct_member_description"><p>the size of the struct (including and subclass data)</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLAllocationParamsCopyFunc" title="GstGLAllocationParamsCopyFunc ()"><span class="type">GstGLAllocationParamsCopyFunc</span></a> <em class="structfield"><code><a name="GstGLAllocationParams.copy"></a>copy</code></em>;</p></td>
+<td class="struct_member_description"><p>a <a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLAllocationParamsCopyFunc" title="GstGLAllocationParamsCopyFunc ()"><span class="type">GstGLAllocationParamsCopyFunc</span></a></p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLAllocationParamsFreeFunc" title="GstGLAllocationParamsFreeFunc ()"><span class="type">GstGLAllocationParamsFreeFunc</span></a> <em class="structfield"><code><a name="GstGLAllocationParams.free"></a>free</code></em>;</p></td>
+<td class="struct_member_description"><p>a <a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLAllocationParamsFreeFunc" title="GstGLAllocationParamsFreeFunc ()"><span class="type">GstGLAllocationParamsFreeFunc</span></a></p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="type">guint</span></a> <em class="structfield"><code><a name="GstGLAllocationParams.alloc-flags"></a>alloc_flags</code></em>;</p></td>
+<td class="struct_member_description"><p>allocation flags</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gsize"><span class="type">gsize</span></a> <em class="structfield"><code><a name="GstGLAllocationParams.alloc-size"></a>alloc_size</code></em>;</p></td>
+<td class="struct_member_description"><p>the allocation size</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/gstreamer-1.0GstAllocator.html#GstAllocationParams-struct"><span class="type">GstAllocationParams</span></a> *<em class="structfield"><code><a name="GstGLAllocationParams.alloc-params"></a>alloc_params</code></em>;</p></td>
+<td class="struct_member_description"><p>the <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstAllocator.html#GstAllocationParams-struct"><span class="type">GstAllocationParams</span></a></p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a> *<em class="structfield"><code><a name="GstGLAllocationParams.context"></a>context</code></em>;</p></td>
+<td class="struct_member_description"><p>a <a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a></p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Datasets.html#GDestroyNotify"><span class="type">GDestroyNotify</span></a> <em class="structfield"><code><a name="GstGLAllocationParams.notify"></a>notify</code></em>;</p></td>
+<td class="struct_member_description"><p>a <a href="/usr/share/gtk-doc/html/glibglib-Datasets.html#GDestroyNotify"><span class="type">GDestroyNotify</span></a></p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> <em class="structfield"><code><a name="GstGLAllocationParams.user-data"></a>user_data</code></em>;</p></td>
+<td class="struct_member_description"><p>argument to call <em class="parameter"><code>notify</code></em>
+with</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> <em class="structfield"><code><a name="GstGLAllocationParams.wrapped-data"></a>wrapped_data</code></em>;</p></td>
+<td class="struct_member_description"><p>the wrapped data pointer</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> <em class="structfield"><code><a name="GstGLAllocationParams.gl-handle"></a>gl_handle</code></em>;</p></td>
+<td class="struct_member_description"><p>the wrapped OpenGL handle</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
</div>
<hr>
<div class="refsect2">
@@ -581,9 +1250,36 @@
GstGLContext *context;
} GstGLBaseMemory;
</pre>
+<p>Represents information about a GL memory object</p>
+<div class="refsect3">
+<a name="GstGLBaseMemory.members"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="300px" class="struct_members_name">
+<col class="struct_members_description">
+<col width="200px" class="struct_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/gstreamer-1.0GstMemory.html#GstMemory-struct"><span class="type">GstMemory</span></a> <em class="structfield"><code><a name="GstGLBaseMemory.mem"></a>mem</code></em>;</p></td>
+<td class="struct_member_description"><p>the parent object</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a> *<em class="structfield"><code><a name="GstGLBaseMemory.context"></a>context</code></em>;</p></td>
+<td class="struct_member_description"><p>the <a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a> to use for GL operations</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
</div>
</div>
</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-libs-gstglbasememory.see-also"></a><h2>See Also</h2>
+<p><a href="/usr/share/gtk-doc/html/gstreamer-1.0GstMemory.html#GstMemory-struct"><span class="type">GstMemory</span></a>, <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstAllocator.html#GstAllocator-struct"><span class="type">GstAllocator</span></a></p>
+</div>
+</div>
<div class="footer">
<hr>Generated by GTK-Doc V1.25</div>
</body>
diff --git a/docs/libs/html/gst-plugins-bad-libs-gstgldebug.html b/docs/libs/html/gst-plugins-bad-libs-gstgldebug.html
deleted file mode 100644
index 4068760..0000000
--- a/docs/libs/html/gst-plugins-bad-libs-gstgldebug.html
+++ /dev/null
@@ -1,271 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>OpenGL Debugging: GStreamer Bad Plugins 1.0 Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
-<link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Library Reference Manual">
-<link rel="up" href="gl.html" title="OpenGL Helper Library">
-<link rel="prev" href="gst-plugins-bad-libs-GstGLWindowX11.html" title="GstGLWindowX11">
-<link rel="next" href="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html" title="OpenGL Miscellaneous Utilities">
-<meta name="generator" content="GTK-Doc V1.25 (XML mode)">
-<link rel="stylesheet" href="style.css" type="text/css">
-</head>
-<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
-<td width="100%" align="left" class="shortcuts">
-<a href="#" class="shortcut">Top</a><span id="nav_description"> <span class="dim">|</span>
- <a href="#gst-plugins-bad-libs-gstgldebug.description" class="shortcut">Description</a></span>
-</td>
-<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
-<td><a accesskey="u" href="gl.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
-<td><a accesskey="p" href="gst-plugins-bad-libs-GstGLWindowX11.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
-</tr></table>
-<div class="refentry">
-<a name="gst-plugins-bad-libs-gstgldebug"></a><div class="titlepage"></div>
-<div class="refnamediv"><table width="100%"><tr>
-<td valign="top">
-<h2><span class="refentrytitle"><a name="gst-plugins-bad-libs-gstgldebug.top_of_page"></a>OpenGL Debugging</span></h2>
-<p>OpenGL Debugging</p>
-</td>
-<td class="gallery_image" valign="top" align="right"></td>
-</tr></table></div>
-<div class="refsect1">
-<a name="gst-plugins-bad-libs-gstgldebug.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table class="informaltable" width="100%" border="0">
-<colgroup>
-<col width="150px" class="functions_return">
-<col class="functions_name">
-</colgroup>
-<tbody>
-<tr>
-<td class="function_type">
-<a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *
-</td>
-<td class="function_name">
-<span class="c_punctuation">(</span><a class="link" href="gst-plugins-bad-libs-gstgldebug.html#GstGLAsyncDebugLogGetMessage" title="GstGLAsyncDebugLogGetMessage ()">*GstGLAsyncDebugLogGetMessage</a><span class="c_punctuation">)</span> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a class="link" href="gst-plugins-bad-libs-gstgldebug.html#GstGLAsyncDebug" title="struct GstGLAsyncDebug"><span class="returnvalue">GstGLAsyncDebug</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gstgldebug.html#gst-gl-async-debug-new" title="gst_gl_async_debug_new ()">gst_gl_async_debug_new</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gstgldebug.html#gst-gl-async-debug-free" title="gst_gl_async_debug_free ()">gst_gl_async_debug_free</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gstgldebug.html#gst-gl-async-debug-init" title="gst_gl_async_debug_init ()">gst_gl_async_debug_init</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gstgldebug.html#gst-gl-async-debug-unset" title="gst_gl_async_debug_unset ()">gst_gl_async_debug_unset</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gstgldebug.html#gst-gl-async-debug-freeze" title="gst_gl_async_debug_freeze ()">gst_gl_async_debug_freeze</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gstgldebug.html#gst-gl-async-debug-thaw" title="gst_gl_async_debug_thaw ()">gst_gl_async_debug_thaw</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gstgldebug.html#gst-gl-async-debug-output-log-msg" title="gst_gl_async_debug_output_log_msg ()">gst_gl_async_debug_output_log_msg</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gstgldebug.html#gst-gl-async-debug-store-log-msg" title="gst_gl_async_debug_store_log_msg ()">gst_gl_async_debug_store_log_msg</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gstgldebug.html#gst-gl-async-debug-store-log-msg-valist" title="gst_gl_async_debug_store_log_msg_valist ()">gst_gl_async_debug_store_log_msg_valist</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gstgldebug.html#GST-GL-ASYNC-CAT-LEVEL-LOG-valist" title="GST_GL_ASYNC_CAT_LEVEL_LOG_valist()">GST_GL_ASYNC_CAT_LEVEL_LOG_valist</a><span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gstgldebug.html#GST-GL-ASYNC-CAT-LEVEL-LOG:CAPS" title="GST_GL_ASYNC_CAT_LEVEL_LOG()">GST_GL_ASYNC_CAT_LEVEL_LOG</a><span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gstgldebug.html#gst-gl-insert-debug-marker" title="gst_gl_insert_debug_marker ()">gst_gl_insert_debug_marker</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<div class="refsect1">
-<a name="gst-plugins-bad-libs-gstgldebug.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table class="informaltable" width="100%" border="0">
-<colgroup>
-<col width="150px" class="name">
-<col class="description">
-</colgroup>
-<tbody><tr>
-<td class="datatype_keyword">struct</td>
-<td class="function_name"><a class="link" href="gst-plugins-bad-libs-gstgldebug.html#GstGLAsyncDebug" title="struct GstGLAsyncDebug">GstGLAsyncDebug</a></td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect1">
-<a name="gst-plugins-bad-libs-gstgldebug.description"></a><h2>Description</h2>
-</div>
-<div class="refsect1">
-<a name="gst-plugins-bad-libs-gstgldebug.functions_details"></a><h2>Functions</h2>
-<div class="refsect2">
-<a name="GstGLAsyncDebugLogGetMessage"></a><h3>GstGLAsyncDebugLogGetMessage ()</h3>
-<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *
-<span class="c_punctuation">(</span>*GstGLAsyncDebugLogGetMessage<span class="c_punctuation">)</span> (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-gl-async-debug-new"></a><h3>gst_gl_async_debug_new ()</h3>
-<pre class="programlisting"><a class="link" href="gst-plugins-bad-libs-gstgldebug.html#GstGLAsyncDebug" title="struct GstGLAsyncDebug"><span class="returnvalue">GstGLAsyncDebug</span></a> *
-gst_gl_async_debug_new (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-gl-async-debug-free"></a><h3>gst_gl_async_debug_free ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-gst_gl_async_debug_free (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstgldebug.html#GstGLAsyncDebug" title="struct GstGLAsyncDebug"><span class="type">GstGLAsyncDebug</span></a> *ad</code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-gl-async-debug-init"></a><h3>gst_gl_async_debug_init ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-gst_gl_async_debug_init (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstgldebug.html#GstGLAsyncDebug" title="struct GstGLAsyncDebug"><span class="type">GstGLAsyncDebug</span></a> *ad</code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-gl-async-debug-unset"></a><h3>gst_gl_async_debug_unset ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-gst_gl_async_debug_unset (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstgldebug.html#GstGLAsyncDebug" title="struct GstGLAsyncDebug"><span class="type">GstGLAsyncDebug</span></a> *ad</code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-gl-async-debug-freeze"></a><h3>gst_gl_async_debug_freeze ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-gst_gl_async_debug_freeze (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstgldebug.html#GstGLAsyncDebug" title="struct GstGLAsyncDebug"><span class="type">GstGLAsyncDebug</span></a> *ad</code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-gl-async-debug-thaw"></a><h3>gst_gl_async_debug_thaw ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-gst_gl_async_debug_thaw (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstgldebug.html#GstGLAsyncDebug" title="struct GstGLAsyncDebug"><span class="type">GstGLAsyncDebug</span></a> *ad</code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-gl-async-debug-output-log-msg"></a><h3>gst_gl_async_debug_output_log_msg ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-gst_gl_async_debug_output_log_msg (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstgldebug.html#GstGLAsyncDebug" title="struct GstGLAsyncDebug"><span class="type">GstGLAsyncDebug</span></a> *ad</code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-gl-async-debug-store-log-msg"></a><h3>gst_gl_async_debug_store_log_msg ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-gst_gl_async_debug_store_log_msg (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstgldebug.html#GstGLAsyncDebug" title="struct GstGLAsyncDebug"><span class="type">GstGLAsyncDebug</span></a> *ad</code></em>,
- <em class="parameter"><code><a href="/usr/share/gtk-doc/html/gstreamer-1.0gstreamer-GstInfo.html#GstDebugCategory"><span class="type">GstDebugCategory</span></a> *cat</code></em>,
- <em class="parameter"><code><a href="/usr/share/gtk-doc/html/gstreamer-1.0gstreamer-GstInfo.html#GstDebugLevel"><span class="type">GstDebugLevel</span></a> level</code></em>,
- <em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *file</code></em>,
- <em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *function</code></em>,
- <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint"><span class="type">gint</span></a> line</code></em>,
- <em class="parameter"><code><a href="/usr/share/gtk-doc/html/gobjectgobject-The-Base-Object-Type.html#GObject-struct"><span class="type">GObject</span></a> *object</code></em>,
- <em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *format</code></em>,
- <em class="parameter"><code>...</code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-gl-async-debug-store-log-msg-valist"></a><h3>gst_gl_async_debug_store_log_msg_valist ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-gst_gl_async_debug_store_log_msg_valist
- (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstgldebug.html#GstGLAsyncDebug" title="struct GstGLAsyncDebug"><span class="type">GstGLAsyncDebug</span></a> *ad</code></em>,
- <em class="parameter"><code><a href="/usr/share/gtk-doc/html/gstreamer-1.0gstreamer-GstInfo.html#GstDebugCategory"><span class="type">GstDebugCategory</span></a> *cat</code></em>,
- <em class="parameter"><code><a href="/usr/share/gtk-doc/html/gstreamer-1.0gstreamer-GstInfo.html#GstDebugLevel"><span class="type">GstDebugLevel</span></a> level</code></em>,
- <em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *file</code></em>,
- <em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *function</code></em>,
- <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint"><span class="type">gint</span></a> line</code></em>,
- <em class="parameter"><code><a href="/usr/share/gtk-doc/html/gobjectgobject-The-Base-Object-Type.html#GObject-struct"><span class="type">GObject</span></a> *object</code></em>,
- <em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *format</code></em>,
- <em class="parameter"><code><span class="type">va_list</span> varargs</code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="GST-GL-ASYNC-CAT-LEVEL-LOG-valist"></a><h3>GST_GL_ASYNC_CAT_LEVEL_LOG_valist()</h3>
-<pre class="programlisting">#define GST_GL_ASYNC_CAT_LEVEL_LOG_valist(ad,cat,level,object,format,varargs)</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="GST-GL-ASYNC-CAT-LEVEL-LOG:CAPS"></a><h3>GST_GL_ASYNC_CAT_LEVEL_LOG()</h3>
-<pre class="programlisting">#define GST_GL_ASYNC_CAT_LEVEL_LOG(ad,cat,level,object,format,...)</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-gl-insert-debug-marker"></a><h3>gst_gl_insert_debug_marker ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-gst_gl_insert_debug_marker (<em class="parameter"><code><a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a> *context</code></em>,
- <em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *format</code></em>,
- <em class="parameter"><code>...</code></em>);</pre>
-</div>
-</div>
-<div class="refsect1">
-<a name="gst-plugins-bad-libs-gstgldebug.other_details"></a><h2>Types and Values</h2>
-<div class="refsect2">
-<a name="GstGLAsyncDebug"></a><h3>struct GstGLAsyncDebug</h3>
-<pre class="programlisting">struct GstGLAsyncDebug {
-};
-</pre>
-</div>
-</div>
-</div>
-<div class="footer">
-<hr>Generated by GTK-Doc V1.25</div>
-</body>
-</html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-bad-libs-gstglmemorypbo.html b/docs/libs/html/gst-plugins-bad-libs-gstglmemorypbo.html
index 6fc51d3..d2f10d1 100644
--- a/docs/libs/html/gst-plugins-bad-libs-gstglmemorypbo.html
+++ b/docs/libs/html/gst-plugins-bad-libs-gstglmemorypbo.html
@@ -28,7 +28,7 @@
<div class="refnamediv"><table width="100%"><tr>
<td valign="top">
<h2><span class="refentrytitle"><a name="gst-plugins-bad-libs-gstglmemorypbo.top_of_page"></a>GstGLMemoryPBO</span></h2>
-<p>GstGLMemoryPBO</p>
+<p>GstGLMemoryPBO — memory subclass for GL textures</p>
</td>
<td class="gallery_image" valign="top" align="right"></td>
</tr></table></div>
@@ -123,6 +123,11 @@
</div>
<div class="refsect1">
<a name="gst-plugins-bad-libs-gstglmemorypbo.description"></a><h2>Description</h2>
+<p><a class="link" href="gst-plugins-bad-libs-gstglmemorypbo.html#GstGLMemoryPBO" title="GstGLMemoryPBO"><span class="type">GstGLMemoryPBO</span></a> is created or wrapped through <a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#gst-gl-base-memory-alloc" title="gst_gl_base_memory_alloc ()"><code class="function">gst_gl_base_memory_alloc()</code></a>
+with <a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#GstGLVideoAllocationParams" title="struct GstGLVideoAllocationParams"><span class="type">GstGLVideoAllocationParams</span></a>.</p>
+<p><a class="link" href="gst-plugins-bad-libs-gstglmemorypbo.html#GstGLMemoryPBO" title="GstGLMemoryPBO"><span class="type">GstGLMemoryPBO</span></a> is created through <code class="function">gst_gl_memory_pbo_alloc()</code> or system memory can
+be wrapped through <code class="function">gst_gl_memory_pbo_wrapped()</code>.</p>
+<p>Data is uploaded or downloaded from the GPU as is necessary.</p>
</div>
<div class="refsect1">
<a name="gst-plugins-bad-libs-gstglmemorypbo.functions_details"></a><h2>Functions</h2>
@@ -130,6 +135,27 @@
<a name="gst-is-gl-memory-pbo"></a><h3>gst_is_gl_memory_pbo ()</h3>
<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
gst_is_gl_memory_pbo (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/gstreamer-1.0GstMemory.html#GstMemory-struct"><span class="type">GstMemory</span></a> *mem</code></em>);</pre>
+<div class="refsect3">
+<a name="gst-is-gl-memory-pbo.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>mem</p></td>
+<td class="parameter_description"><p>a <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstMemory.html#GstMemory-struct"><span class="type">GstMemory</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-is-gl-memory-pbo.returns"></a><h4>Returns</h4>
+<p> whether the memory at <em class="parameter"><code>mem</code></em>
+is a <a class="link" href="gst-plugins-bad-libs-gstglmemorypbo.html#GstGLMemoryPBO" title="GstGLMemoryPBO"><span class="type">GstGLMemoryPBO</span></a></p>
+</div>
+<p class="since">Since: 1.8</p>
</div>
<hr>
<div class="refsect2">
@@ -143,12 +169,107 @@
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint"><span class="type">gint</span></a> height</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint"><span class="type">gint</span></a> stride</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> respecify</code></em>);</pre>
+<p>Copies <em class="parameter"><code>gl_mem</code></em>
+ into the texture specfified by <em class="parameter"><code>tex_id</code></em>
+. The format of <em class="parameter"><code>tex_id</code></em>
+
+is specified by <em class="parameter"><code>tex_type</code></em>
+, <em class="parameter"><code>width</code></em>
+ and <em class="parameter"><code>height</code></em>
+.</p>
+<p>If <em class="parameter"><code>respecify</code></em>
+ is <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a>, then the copy is performed in terms of the texture
+data. This is useful for splitting RGBA textures into RG or R textures or
+vice versa. The requirement for this to succeed is that the backing texture
+data must be the same size, i.e. say a RGBA8 texture is converted into a RG8
+texture, then the RG texture must have twice as many pixels available for
+output as the RGBA texture.</p>
+<p>Otherwise, if <em class="parameter"><code>respecify</code></em>
+ is <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a>, then the copy is performed per texel
+using glCopyTexImage. See the OpenGL specification for details on the
+mappings between texture formats.</p>
+<div class="refsect3">
+<a name="gst-gl-memory-pbo-copy-into-texture.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>gl_mem</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-gstglmemorypbo.html#GstGLMemoryPBO" title="GstGLMemoryPBO"><span class="type">GstGLMemoryPBO</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>tex_id</p></td>
+<td class="parameter_description"><p>the destination texture id</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>target</p></td>
+<td class="parameter_description"><p>the destination <a class="link" href="gst-plugins-bad-libs-OpenGL-Formats.html#GstGLTextureTarget" title="enum GstGLTextureTarget"><span class="type">GstGLTextureTarget</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>tex_type</p></td>
+<td class="parameter_description"><p>the destination <span class="type">GstVideoGLTextureType</span></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>width</p></td>
+<td class="parameter_description"><p>width of <em class="parameter"><code>tex_id</code></em>
+</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>height</p></td>
+<td class="parameter_description"><p>height of <em class="parameter"><code>tex_id</code></em>
+</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>stride</p></td>
+<td class="parameter_description"><p>stride of the backing texture data</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>respecify</p></td>
+<td class="parameter_description"><p>whether to copy the data or copy per texel</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-gl-memory-pbo-copy-into-texture.returns"></a><h4>Returns</h4>
+<p> Whether the copy suceeded</p>
+</div>
+<p class="since">Since: 1.8</p>
</div>
<hr>
<div class="refsect2">
<a name="gst-gl-memory-pbo-download-transfer"></a><h3>gst_gl_memory_pbo_download_transfer ()</h3>
<pre class="programlisting"><span class="returnvalue">void</span>
gst_gl_memory_pbo_download_transfer (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstglmemorypbo.html#GstGLMemoryPBO" title="GstGLMemoryPBO"><span class="type">GstGLMemoryPBO</span></a> *gl_mem</code></em>);</pre>
+<p>Transfer the texture data from the PBO into the texture if necessary.</p>
+<div class="refsect3">
+<a name="gst-gl-memory-pbo-download-transfer.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>gl_mem</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-gstglmemorypbo.html#GstGLMemoryPBO" title="GstGLMemoryPBO"><span class="type">GstGLMemoryPBO</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<p class="since">Since: 1.8</p>
</div>
<hr>
<div class="refsect2">
@@ -190,8 +311,13 @@
GstGLMemory mem;
} GstGLMemoryPBO;
</pre>
+<p>Private instance</p>
</div>
</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-libs-gstglmemorypbo.see-also"></a><h2>See Also</h2>
+<p><a href="/usr/share/gtk-doc/html/gstreamer-1.0GstMemory.html#GstMemory-struct"><span class="type">GstMemory</span></a>, <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstAllocator.html#GstAllocator-struct"><span class="type">GstAllocator</span></a>, <a class="link" href="GstGLBufferPool.html" title="GstGLBufferPool"><span class="type">GstGLBufferPool</span></a></p>
+</div>
</div>
<div class="footer">
<hr>Generated by GTK-Doc V1.25</div>
diff --git a/docs/libs/html/gst-plugins-bad-libs-gstmpegts.html b/docs/libs/html/gst-plugins-bad-libs-gstmpegts.html
deleted file mode 100644
index a9c8284..0000000
--- a/docs/libs/html/gst-plugins-bad-libs-gstmpegts.html
+++ /dev/null
@@ -1,69 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>gstmpegts: GStreamer Bad Plugins 1.0 Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
-<link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Library Reference Manual">
-<link rel="up" href="mpegts.html" title="Mpeg TS helper library">
-<link rel="prev" href="mpegts.html" title="Mpeg TS helper library">
-<link rel="next" href="gst-plugins-bad-libs-gstmpegtssection.html" title="gstmpegtssection">
-<meta name="generator" content="GTK-Doc V1.25 (XML mode)">
-<link rel="stylesheet" href="style.css" type="text/css">
-</head>
-<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
-<td width="100%" align="left" class="shortcuts">
-<a href="#" class="shortcut">Top</a><span id="nav_description"> <span class="dim">|</span>
- <a href="#gst-plugins-bad-libs-gstmpegts.description" class="shortcut">Description</a></span>
-</td>
-<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
-<td><a accesskey="u" href="mpegts.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
-<td><a accesskey="p" href="mpegts.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="gst-plugins-bad-libs-gstmpegtssection.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
-</tr></table>
-<div class="refentry">
-<a name="gst-plugins-bad-libs-gstmpegts"></a><div class="titlepage"></div>
-<div class="refnamediv"><table width="100%"><tr>
-<td valign="top">
-<h2><span class="refentrytitle"><a name="gst-plugins-bad-libs-gstmpegts.top_of_page"></a>gstmpegts</span></h2>
-<p>gstmpegts</p>
-</td>
-<td class="gallery_image" valign="top" align="right"></td>
-</tr></table></div>
-<div class="refsect1">
-<a name="gst-plugins-bad-libs-gstmpegts.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table class="informaltable" width="100%" border="0">
-<colgroup>
-<col width="150px" class="functions_return">
-<col class="functions_name">
-</colgroup>
-<tbody><tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gstmpegts.html#gst-mpegts-initialize" title="gst_mpegts_initialize ()">gst_mpegts_initialize</a> <span class="c_punctuation">()</span>
-</td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect1">
-<a name="gst-plugins-bad-libs-gstmpegts.description"></a><h2>Description</h2>
-</div>
-<div class="refsect1">
-<a name="gst-plugins-bad-libs-gstmpegts.functions_details"></a><h2>Functions</h2>
-<div class="refsect2">
-<a name="gst-mpegts-initialize"></a><h3>gst_mpegts_initialize ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-gst_mpegts_initialize (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
-</div>
-</div>
-<div class="refsect1">
-<a name="gst-plugins-bad-libs-gstmpegts.other_details"></a><h2>Types and Values</h2>
-</div>
-</div>
-<div class="footer">
-<hr>Generated by GTK-Doc V1.25</div>
-</body>
-</html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-bad-libs-gstmpegtsdescriptor.html b/docs/libs/html/gst-plugins-bad-libs-gstmpegtsdescriptor.html
deleted file mode 100644
index 40d6ef9..0000000
--- a/docs/libs/html/gst-plugins-bad-libs-gstmpegtsdescriptor.html
+++ /dev/null
@@ -1,635 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>gstmpegtsdescriptor: GStreamer Bad Plugins 1.0 Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
-<link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Library Reference Manual">
-<link rel="up" href="mpegts.html" title="Mpeg TS helper library">
-<link rel="prev" href="gst-plugins-bad-libs-gstmpegtssection.html" title="gstmpegtssection">
-<link rel="next" href="gst-plugins-bad-libs-gst-atsc-section.html" title="gst-atsc-section">
-<meta name="generator" content="GTK-Doc V1.25 (XML mode)">
-<link rel="stylesheet" href="style.css" type="text/css">
-</head>
-<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
-<td width="100%" align="left" class="shortcuts">
-<a href="#" class="shortcut">Top</a><span id="nav_description"> <span class="dim">|</span>
- <a href="#gst-plugins-bad-libs-gstmpegtsdescriptor.description" class="shortcut">Description</a></span><span id="nav_hierarchy"> <span class="dim">|</span>
- <a href="#gst-plugins-bad-libs-gstmpegtsdescriptor.object-hierarchy" class="shortcut">Object Hierarchy</a></span>
-</td>
-<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
-<td><a accesskey="u" href="mpegts.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
-<td><a accesskey="p" href="gst-plugins-bad-libs-gstmpegtssection.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="gst-plugins-bad-libs-gst-atsc-section.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
-</tr></table>
-<div class="refentry">
-<a name="gst-plugins-bad-libs-gstmpegtsdescriptor"></a><div class="titlepage"></div>
-<div class="refnamediv"><table width="100%"><tr>
-<td valign="top">
-<h2><span class="refentrytitle"><a name="gst-plugins-bad-libs-gstmpegtsdescriptor.top_of_page"></a>gstmpegtsdescriptor</span></h2>
-<p>gstmpegtsdescriptor</p>
-</td>
-<td class="gallery_image" valign="top" align="right"></td>
-</tr></table></div>
-<div class="refsect1">
-<a name="gst-plugins-bad-libs-gstmpegtsdescriptor.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table class="informaltable" width="100%" border="0">
-<colgroup>
-<col width="150px" class="functions_return">
-<col class="functions_name">
-</colgroup>
-<tbody>
-<tr>
-<td class="function_type">const <a class="link" href="gst-plugins-bad-libs-gstmpegtsdescriptor.html#GstMpegtsDescriptor"><span class="returnvalue">GstMpegtsDescriptor</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gstmpegtsdescriptor.html#gst-mpegts-find-descriptor" title="gst_mpegts_find_descriptor ()">gst_mpegts_find_descriptor</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="/usr/share/gtk-doc/html/glibglib-Pointer-Arrays.html#GPtrArray"><span class="returnvalue">GPtrArray</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gstmpegtsdescriptor.html#gst-mpegts-parse-descriptors" title="gst_mpegts_parse_descriptors ()">gst_mpegts_parse_descriptors</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a class="link" href="gst-plugins-bad-libs-gstmpegtsdescriptor.html#GstMpegtsDescriptor"><span class="returnvalue">GstMpegtsDescriptor</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gstmpegtsdescriptor.html#gst-mpegts-descriptor-from-custom" title="gst_mpegts_descriptor_from_custom ()">gst_mpegts_descriptor_from_custom</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a class="link" href="gst-plugins-bad-libs-gstmpegtsdescriptor.html#GstMpegtsDescriptor"><span class="returnvalue">GstMpegtsDescriptor</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gstmpegtsdescriptor.html#gst-mpegts-descriptor-from-registration" title="gst_mpegts_descriptor_from_registration ()">gst_mpegts_descriptor_from_registration</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gstmpegtsdescriptor.html#gst-mpegts-descriptor-parse-iso-639-language" title="gst_mpegts_descriptor_parse_iso_639_language ()">gst_mpegts_descriptor_parse_iso_639_language</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gstmpegtsdescriptor.html#gst-mpegts-descriptor-parse-iso-639-language-idx" title="gst_mpegts_descriptor_parse_iso_639_language_idx ()">gst_mpegts_descriptor_parse_iso_639_language_idx</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gstmpegtsdescriptor.html#gst-mpegts-descriptor-parse-iso-639-language-nb" title="gst_mpegts_descriptor_parse_iso_639_language_nb ()">gst_mpegts_descriptor_parse_iso_639_language_nb</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gstmpegtsdescriptor.html#gst-mpegts-iso-639-language-descriptor-free" title="gst_mpegts_iso_639_language_descriptor_free ()">gst_mpegts_iso_639_language_descriptor_free</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gstmpegtsdescriptor.html#gst-mpegts-descriptor-parse-logical-channel" title="gst_mpegts_descriptor_parse_logical_channel ()">gst_mpegts_descriptor_parse_logical_channel</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<a name="GstMpegtsDescriptor"></a><div class="refsect1">
-<a name="gst-plugins-bad-libs-gstmpegtsdescriptor.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table class="informaltable" width="100%" border="0">
-<colgroup>
-<col width="150px" class="name">
-<col class="description">
-</colgroup>
-<tbody>
-<tr>
-<td class="datatype_keyword">struct</td>
-<td class="function_name"><a class="link" href="gst-plugins-bad-libs-gstmpegtsdescriptor.html#GstMpegtsDescriptor-struct" title="struct GstMpegtsDescriptor">GstMpegtsDescriptor</a></td>
-</tr>
-<tr>
-<td class="datatype_keyword">enum</td>
-<td class="function_name"><a class="link" href="gst-plugins-bad-libs-gstmpegtsdescriptor.html#GstMpegtsDescriptorType" title="enum GstMpegtsDescriptorType">GstMpegtsDescriptorType</a></td>
-</tr>
-<tr>
-<td class="datatype_keyword">enum</td>
-<td class="function_name"><a class="link" href="gst-plugins-bad-libs-gstmpegtsdescriptor.html#GstMpegtsMiscDescriptorType" title="enum GstMpegtsMiscDescriptorType">GstMpegtsMiscDescriptorType</a></td>
-</tr>
-<tr>
-<td class="datatype_keyword">struct</td>
-<td class="function_name"><a class="link" href="gst-plugins-bad-libs-gstmpegtsdescriptor.html#GstMpegtsISO639LanguageDescriptor" title="struct GstMpegtsISO639LanguageDescriptor">GstMpegtsISO639LanguageDescriptor</a></td>
-</tr>
-<tr>
-<td class="datatype_keyword">enum</td>
-<td class="function_name"><a class="link" href="gst-plugins-bad-libs-gstmpegtsdescriptor.html#GstMpegtsIso639AudioType" title="enum GstMpegtsIso639AudioType">GstMpegtsIso639AudioType</a></td>
-</tr>
-<tr>
-<td class="datatype_keyword">struct</td>
-<td class="function_name"><a class="link" href="gst-plugins-bad-libs-gstmpegtsdescriptor.html#GstMpegtsLogicalChannel" title="struct GstMpegtsLogicalChannel">GstMpegtsLogicalChannel</a></td>
-</tr>
-<tr>
-<td class="datatype_keyword">struct</td>
-<td class="function_name"><a class="link" href="gst-plugins-bad-libs-gstmpegtsdescriptor.html#GstMpegtsLogicalChannelDescriptor" title="struct GstMpegtsLogicalChannelDescriptor">GstMpegtsLogicalChannelDescriptor</a></td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<div class="refsect1">
-<a name="gst-plugins-bad-libs-gstmpegtsdescriptor.object-hierarchy"></a><h2>Object Hierarchy</h2>
-<pre class="screen"> <a href="https://developer.gnome.org/gobject/unstable/gobject-Boxed-Types.html">GBoxed</a>
- <span class="lineart">╰──</span> GstMpegtsDescriptor
- <a href="https://developer.gnome.org/gobject/unstable/gobject-Enumeration-and-Flag-Types.html">GEnum</a>
- <span class="lineart">├──</span> GstMpegtsDescriptorType
- <span class="lineart">╰──</span> GstMpegtsIso639AudioType
-</pre>
-</div>
-<div class="refsect1">
-<a name="gst-plugins-bad-libs-gstmpegtsdescriptor.description"></a><h2>Description</h2>
-</div>
-<div class="refsect1">
-<a name="gst-plugins-bad-libs-gstmpegtsdescriptor.functions_details"></a><h2>Functions</h2>
-<div class="refsect2">
-<a name="gst-mpegts-find-descriptor"></a><h3>gst_mpegts_find_descriptor ()</h3>
-<pre class="programlisting">const <a class="link" href="gst-plugins-bad-libs-gstmpegtsdescriptor.html#GstMpegtsDescriptor"><span class="returnvalue">GstMpegtsDescriptor</span></a> *
-gst_mpegts_find_descriptor (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a> *descriptors</code></em>,
- <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> tag</code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-mpegts-parse-descriptors"></a><h3>gst_mpegts_parse_descriptors ()</h3>
-<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Pointer-Arrays.html#GPtrArray"><span class="returnvalue">GPtrArray</span></a> *
-gst_mpegts_parse_descriptors (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> *buffer</code></em>,
- <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gsize"><span class="type">gsize</span></a> buf_len</code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-mpegts-descriptor-from-custom"></a><h3>gst_mpegts_descriptor_from_custom ()</h3>
-<pre class="programlisting"><a class="link" href="gst-plugins-bad-libs-gstmpegtsdescriptor.html#GstMpegtsDescriptor"><span class="returnvalue">GstMpegtsDescriptor</span></a> *
-gst_mpegts_descriptor_from_custom (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> tag</code></em>,
- <em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> *data</code></em>,
- <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gsize"><span class="type">gsize</span></a> length</code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-mpegts-descriptor-from-registration"></a><h3>gst_mpegts_descriptor_from_registration ()</h3>
-<pre class="programlisting"><a class="link" href="gst-plugins-bad-libs-gstmpegtsdescriptor.html#GstMpegtsDescriptor"><span class="returnvalue">GstMpegtsDescriptor</span></a> *
-gst_mpegts_descriptor_from_registration
- (<em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *format_identifier</code></em>,
- <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> *additional_info</code></em>,
- <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gsize"><span class="type">gsize</span></a> additional_info_length</code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-mpegts-descriptor-parse-iso-639-language"></a><h3>gst_mpegts_descriptor_parse_iso_639_language ()</h3>
-<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-gst_mpegts_descriptor_parse_iso_639_language
- (<em class="parameter"><code>const <a class="link" href="gst-plugins-bad-libs-gstmpegtsdescriptor.html#GstMpegtsDescriptor"><span class="type">GstMpegtsDescriptor</span></a> *descriptor</code></em>,
- <em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstmpegtsdescriptor.html#GstMpegtsISO639LanguageDescriptor" title="struct GstMpegtsISO639LanguageDescriptor"><span class="type">GstMpegtsISO639LanguageDescriptor</span></a> **res</code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-mpegts-descriptor-parse-iso-639-language-idx"></a><h3>gst_mpegts_descriptor_parse_iso_639_language_idx ()</h3>
-<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-gst_mpegts_descriptor_parse_iso_639_language_idx
- (<em class="parameter"><code>const <a class="link" href="gst-plugins-bad-libs-gstmpegtsdescriptor.html#GstMpegtsDescriptor"><span class="type">GstMpegtsDescriptor</span></a> *descriptor</code></em>,
- <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="type">guint</span></a> idx</code></em>,
- <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="type">gchar</span></a> **lang</code></em>,
- <em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstmpegtsdescriptor.html#GstMpegtsIso639AudioType" title="enum GstMpegtsIso639AudioType"><span class="type">GstMpegtsIso639AudioType</span></a> *audio_type</code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-mpegts-descriptor-parse-iso-639-language-nb"></a><h3>gst_mpegts_descriptor_parse_iso_639_language_nb ()</h3>
-<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>
-gst_mpegts_descriptor_parse_iso_639_language_nb
- (<em class="parameter"><code>const <a class="link" href="gst-plugins-bad-libs-gstmpegtsdescriptor.html#GstMpegtsDescriptor"><span class="type">GstMpegtsDescriptor</span></a> *descriptor</code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-mpegts-iso-639-language-descriptor-free"></a><h3>gst_mpegts_iso_639_language_descriptor_free ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-gst_mpegts_iso_639_language_descriptor_free
- (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstmpegtsdescriptor.html#GstMpegtsISO639LanguageDescriptor" title="struct GstMpegtsISO639LanguageDescriptor"><span class="type">GstMpegtsISO639LanguageDescriptor</span></a> *desc</code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-mpegts-descriptor-parse-logical-channel"></a><h3>gst_mpegts_descriptor_parse_logical_channel ()</h3>
-<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-gst_mpegts_descriptor_parse_logical_channel
- (<em class="parameter"><code>const <a class="link" href="gst-plugins-bad-libs-gstmpegtsdescriptor.html#GstMpegtsDescriptor"><span class="type">GstMpegtsDescriptor</span></a> *descriptor</code></em>,
- <em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstmpegtsdescriptor.html#GstMpegtsLogicalChannelDescriptor" title="struct GstMpegtsLogicalChannelDescriptor"><span class="type">GstMpegtsLogicalChannelDescriptor</span></a> *res</code></em>);</pre>
-</div>
-</div>
-<div class="refsect1">
-<a name="gst-plugins-bad-libs-gstmpegtsdescriptor.other_details"></a><h2>Types and Values</h2>
-<div class="refsect2">
-<a name="GstMpegtsDescriptor-struct"></a><h3>struct GstMpegtsDescriptor</h3>
-<pre class="programlisting">struct GstMpegtsDescriptor {
- guint8 tag;
- guint8 tag_extension;
- guint8 length;
- guint8 *data;
-};
-</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="GstMpegtsDescriptorType"></a><h3>enum GstMpegtsDescriptorType</h3>
-<div class="refsect3">
-<a name="GstMpegtsDescriptorType.members"></a><h4>Members</h4>
-<div class="informaltable"><table class="informaltable" width="100%" border="0">
-<colgroup>
-<col width="300px" class="enum_members_name">
-<col class="enum_members_description">
-<col width="200px" class="enum_members_annotations">
-</colgroup>
-<tbody>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-DESC-RESERVED-00:CAPS"></a>GST_MTS_DESC_RESERVED_00</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-DESC-RESERVED-01:CAPS"></a>GST_MTS_DESC_RESERVED_01</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-DESC-VIDEO-STREAM:CAPS"></a>GST_MTS_DESC_VIDEO_STREAM</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-DESC-AUDIO-STREAM:CAPS"></a>GST_MTS_DESC_AUDIO_STREAM</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-DESC-HIERARCHY:CAPS"></a>GST_MTS_DESC_HIERARCHY</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-DESC-REGISTRATION:CAPS"></a>GST_MTS_DESC_REGISTRATION</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-DESC-DATA-STREAM-ALIGNMENT:CAPS"></a>GST_MTS_DESC_DATA_STREAM_ALIGNMENT</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-DESC-TARGET-BACKGROUND-GRID:CAPS"></a>GST_MTS_DESC_TARGET_BACKGROUND_GRID</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-DESC-VIDEO-WINDOW:CAPS"></a>GST_MTS_DESC_VIDEO_WINDOW</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-DESC-CA:CAPS"></a>GST_MTS_DESC_CA</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-DESC-ISO-639-LANGUAGE:CAPS"></a>GST_MTS_DESC_ISO_639_LANGUAGE</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-DESC-SYSTEM-CLOCK:CAPS"></a>GST_MTS_DESC_SYSTEM_CLOCK</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-DESC-MULTIPLEX-BUFFER-UTILISATION:CAPS"></a>GST_MTS_DESC_MULTIPLEX_BUFFER_UTILISATION</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-DESC-COPYRIGHT:CAPS"></a>GST_MTS_DESC_COPYRIGHT</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-DESC-MAXIMUM-BITRATE:CAPS"></a>GST_MTS_DESC_MAXIMUM_BITRATE</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-DESC-PRIVATE-DATA-INDICATOR:CAPS"></a>GST_MTS_DESC_PRIVATE_DATA_INDICATOR</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-DESC-SMOOTHING-BUFFER:CAPS"></a>GST_MTS_DESC_SMOOTHING_BUFFER</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-DESC-STD:CAPS"></a>GST_MTS_DESC_STD</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-DESC-IBP:CAPS"></a>GST_MTS_DESC_IBP</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-DESC-DSMCC-CAROUSEL-IDENTIFIER:CAPS"></a>GST_MTS_DESC_DSMCC_CAROUSEL_IDENTIFIER</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-DESC-DSMCC-ASSOCIATION-TAG:CAPS"></a>GST_MTS_DESC_DSMCC_ASSOCIATION_TAG</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-DESC-DSMCC-DEFERRED-ASSOCIATION-TAG:CAPS"></a>GST_MTS_DESC_DSMCC_DEFERRED_ASSOCIATION_TAG</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-DESC-DSMCC-NPT-REFERENCE:CAPS"></a>GST_MTS_DESC_DSMCC_NPT_REFERENCE</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-DESC-DSMCC-NPT-ENDPOINT:CAPS"></a>GST_MTS_DESC_DSMCC_NPT_ENDPOINT</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-DESC-DSMCC-STREAM-MODE:CAPS"></a>GST_MTS_DESC_DSMCC_STREAM_MODE</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-DESC-DSMCC-STREAM-EVENT:CAPS"></a>GST_MTS_DESC_DSMCC_STREAM_EVENT</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-DESC-MPEG4-VIDEO:CAPS"></a>GST_MTS_DESC_MPEG4_VIDEO</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-DESC-MPEG4-AUDIO:CAPS"></a>GST_MTS_DESC_MPEG4_AUDIO</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-DESC-IOD:CAPS"></a>GST_MTS_DESC_IOD</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-DESC-SL:CAPS"></a>GST_MTS_DESC_SL</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-DESC-FMC:CAPS"></a>GST_MTS_DESC_FMC</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-DESC-EXTERNAL-ES-ID:CAPS"></a>GST_MTS_DESC_EXTERNAL_ES_ID</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-DESC-MUX-CODE:CAPS"></a>GST_MTS_DESC_MUX_CODE</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-DESC-FMX-BUFFER-SIZE:CAPS"></a>GST_MTS_DESC_FMX_BUFFER_SIZE</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-DESC-MULTIPLEX-BUFFER:CAPS"></a>GST_MTS_DESC_MULTIPLEX_BUFFER</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-DESC-CONTENT-LABELING:CAPS"></a>GST_MTS_DESC_CONTENT_LABELING</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-DESC-METADATA-POINTER:CAPS"></a>GST_MTS_DESC_METADATA_POINTER</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-DESC-METADATA:CAPS"></a>GST_MTS_DESC_METADATA</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-DESC-METADATA-STD:CAPS"></a>GST_MTS_DESC_METADATA_STD</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-DESC-AVC-VIDEO:CAPS"></a>GST_MTS_DESC_AVC_VIDEO</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-DESC-IPMP:CAPS"></a>GST_MTS_DESC_IPMP</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-DESC-AVC-TIMING-AND-HRD:CAPS"></a>GST_MTS_DESC_AVC_TIMING_AND_HRD</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-DESC-MPEG2-AAC-AUDIO:CAPS"></a>GST_MTS_DESC_MPEG2_AAC_AUDIO</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-DESC-FLEX-MUX-TIMING:CAPS"></a>GST_MTS_DESC_FLEX_MUX_TIMING</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-DESC-MPEG4-TEXT:CAPS"></a>GST_MTS_DESC_MPEG4_TEXT</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-DESC-MPEG4-AUDIO-EXTENSION:CAPS"></a>GST_MTS_DESC_MPEG4_AUDIO_EXTENSION</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-DESC-AUXILIARY-VIDEO-STREAM:CAPS"></a>GST_MTS_DESC_AUXILIARY_VIDEO_STREAM</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-DESC-SVC-EXTENSION:CAPS"></a>GST_MTS_DESC_SVC_EXTENSION</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-DESC-MVC-EXTENSION:CAPS"></a>GST_MTS_DESC_MVC_EXTENSION</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-DESC-J2K-VIDEO:CAPS"></a>GST_MTS_DESC_J2K_VIDEO</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-DESC-MVC-OPERATION-POINT:CAPS"></a>GST_MTS_DESC_MVC_OPERATION_POINT</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-DESC-MPEG2-STEREOSCOPIC-VIDEO-FORMAT:CAPS"></a>GST_MTS_DESC_MPEG2_STEREOSCOPIC_VIDEO_FORMAT</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-DESC-STEREOSCOPIC-PROGRAM-INFO:CAPS"></a>GST_MTS_DESC_STEREOSCOPIC_PROGRAM_INFO</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-DESC-STEREOSCOPIC-VIDEO-INFO:CAPS"></a>GST_MTS_DESC_STEREOSCOPIC_VIDEO_INFO</p></td>
-<td> </td>
-<td> </td>
-</tr>
-</tbody>
-</table></div>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="GstMpegtsMiscDescriptorType"></a><h3>enum GstMpegtsMiscDescriptorType</h3>
-<div class="refsect3">
-<a name="GstMpegtsMiscDescriptorType.members"></a><h4>Members</h4>
-<div class="informaltable"><table class="informaltable" width="100%" border="0">
-<colgroup>
-<col width="300px" class="enum_members_name">
-<col class="enum_members_description">
-<col width="200px" class="enum_members_annotations">
-</colgroup>
-<tbody>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-DESC-AC3-AUDIO-STREAM:CAPS"></a>GST_MTS_DESC_AC3_AUDIO_STREAM</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-DESC-DTG-LOGICAL-CHANNEL:CAPS"></a>GST_MTS_DESC_DTG_LOGICAL_CHANNEL</p></td>
-<td> </td>
-<td> </td>
-</tr>
-</tbody>
-</table></div>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="GstMpegtsISO639LanguageDescriptor"></a><h3>struct GstMpegtsISO639LanguageDescriptor</h3>
-<pre class="programlisting">struct GstMpegtsISO639LanguageDescriptor {
- guint nb_language;
- gchar *language[64];
- GstMpegtsIso639AudioType audio_type[64];
-};
-</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="GstMpegtsIso639AudioType"></a><h3>enum GstMpegtsIso639AudioType</h3>
-<div class="refsect3">
-<a name="GstMpegtsIso639AudioType.members"></a><h4>Members</h4>
-<div class="informaltable"><table class="informaltable" width="100%" border="0">
-<colgroup>
-<col width="300px" class="enum_members_name">
-<col class="enum_members_description">
-<col width="200px" class="enum_members_annotations">
-</colgroup>
-<tbody>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-AUDIO-TYPE-UNDEFINED:CAPS"></a>GST_MPEGTS_AUDIO_TYPE_UNDEFINED</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-AUDIO-TYPE-CLEAN-EFFECTS:CAPS"></a>GST_MPEGTS_AUDIO_TYPE_CLEAN_EFFECTS</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-AUDIO-TYPE-HEARING-IMPAIRED:CAPS"></a>GST_MPEGTS_AUDIO_TYPE_HEARING_IMPAIRED</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-AUDIO-TYPE-VISUAL-IMPAIRED-COMMENTARY:CAPS"></a>GST_MPEGTS_AUDIO_TYPE_VISUAL_IMPAIRED_COMMENTARY</p></td>
-<td> </td>
-<td> </td>
-</tr>
-</tbody>
-</table></div>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="GstMpegtsLogicalChannel"></a><h3>struct GstMpegtsLogicalChannel</h3>
-<pre class="programlisting">struct GstMpegtsLogicalChannel {
- guint16 service_id;
- gboolean visible_service;
- guint16 logical_channel_number;
-};
-</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="GstMpegtsLogicalChannelDescriptor"></a><h3>struct GstMpegtsLogicalChannelDescriptor</h3>
-<pre class="programlisting">struct GstMpegtsLogicalChannelDescriptor {
- guint nb_channels;
- GstMpegtsLogicalChannel channels[64];
-};
-</pre>
-</div>
-</div>
-</div>
-<div class="footer">
-<hr>Generated by GTK-Doc V1.25</div>
-</body>
-</html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-bad-libs-gstmpegtssection.html b/docs/libs/html/gst-plugins-bad-libs-gstmpegtssection.html
deleted file mode 100644
index 8af72cd..0000000
--- a/docs/libs/html/gst-plugins-bad-libs-gstmpegtssection.html
+++ /dev/null
@@ -1,823 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>gstmpegtssection: GStreamer Bad Plugins 1.0 Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
-<link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Library Reference Manual">
-<link rel="up" href="mpegts.html" title="Mpeg TS helper library">
-<link rel="prev" href="gst-plugins-bad-libs-gstmpegts.html" title="gstmpegts">
-<link rel="next" href="gst-plugins-bad-libs-gstmpegtsdescriptor.html" title="gstmpegtsdescriptor">
-<meta name="generator" content="GTK-Doc V1.25 (XML mode)">
-<link rel="stylesheet" href="style.css" type="text/css">
-</head>
-<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
-<td width="100%" align="left" class="shortcuts">
-<a href="#" class="shortcut">Top</a><span id="nav_description"> <span class="dim">|</span>
- <a href="#gst-plugins-bad-libs-gstmpegtssection.description" class="shortcut">Description</a></span><span id="nav_hierarchy"> <span class="dim">|</span>
- <a href="#gst-plugins-bad-libs-gstmpegtssection.object-hierarchy" class="shortcut">Object Hierarchy</a></span>
-</td>
-<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
-<td><a accesskey="u" href="mpegts.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
-<td><a accesskey="p" href="gst-plugins-bad-libs-gstmpegts.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="gst-plugins-bad-libs-gstmpegtsdescriptor.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
-</tr></table>
-<div class="refentry">
-<a name="gst-plugins-bad-libs-gstmpegtssection"></a><div class="titlepage"></div>
-<div class="refnamediv"><table width="100%"><tr>
-<td valign="top">
-<h2><span class="refentrytitle"><a name="gst-plugins-bad-libs-gstmpegtssection.top_of_page"></a>gstmpegtssection</span></h2>
-<p>gstmpegtssection</p>
-</td>
-<td class="gallery_image" valign="top" align="right"></td>
-</tr></table></div>
-<div class="refsect1">
-<a name="gst-plugins-bad-libs-gstmpegtssection.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table class="informaltable" width="100%" border="0">
-<colgroup>
-<col width="150px" class="functions_return">
-<col class="functions_name">
-</colgroup>
-<tbody>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gstmpegtssection.html#GST-MPEGTS-SECTION-TYPE:CAPS" title="GST_MPEGTS_SECTION_TYPE()">GST_MPEGTS_SECTION_TYPE</a><span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="/usr/share/gtk-doc/html/gstreamer-1.0GstMessage.html#GstMessage-struct"><span class="returnvalue">GstMessage</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gstmpegtssection.html#gst-message-new-mpegts-section" title="gst_message_new_mpegts_section ()">gst_message_new_mpegts_section</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a class="link" href="gst-plugins-bad-libs-gstmpegtssection.html#GstMpegtsSection"><span class="returnvalue">GstMpegtsSection</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gstmpegtssection.html#gst-message-parse-mpegts-section" title="gst_message_parse_mpegts_section ()">gst_message_parse_mpegts_section</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gstmpegtssection.html#gst-mpegts-section-send-event" title="gst_mpegts_section_send_event ()">gst_mpegts_section_send_event</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a class="link" href="gst-plugins-bad-libs-gstmpegtssection.html#GstMpegtsSection"><span class="returnvalue">GstMpegtsSection</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gstmpegtssection.html#gst-event-parse-mpegts-section" title="gst_event_parse_mpegts_section ()">gst_event_parse_mpegts_section</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="returnvalue">guint8</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gstmpegtssection.html#gst-mpegts-section-packetize" title="gst_mpegts_section_packetize ()">gst_mpegts_section_packetize</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a class="link" href="gst-plugins-bad-libs-gstmpegtssection.html#GstMpegtsSection"><span class="returnvalue">GstMpegtsSection</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gstmpegtssection.html#gst-mpegts-section-new" title="gst_mpegts_section_new ()">gst_mpegts_section_new</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gstmpegtssection.html#gst-mpegts-section-ref" title="gst_mpegts_section_ref()">gst_mpegts_section_ref</a><span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gstmpegtssection.html#gst-mpegts-section-unref" title="gst_mpegts_section_unref()">gst_mpegts_section_unref</a><span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="/usr/share/gtk-doc/html/glibglib-Pointer-Arrays.html#GPtrArray"><span class="returnvalue">GPtrArray</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gstmpegtssection.html#gst-mpegts-section-get-pat" title="gst_mpegts_section_get_pat ()">gst_mpegts_section_get_pat</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="/usr/share/gtk-doc/html/glibglib-Pointer-Arrays.html#GPtrArray"><span class="returnvalue">GPtrArray</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gstmpegtssection.html#gst-mpegts-pat-new" title="gst_mpegts_pat_new ()">gst_mpegts_pat_new</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a class="link" href="gst-plugins-bad-libs-gstmpegtssection.html#GstMpegtsPatProgram" title="struct GstMpegtsPatProgram"><span class="returnvalue">GstMpegtsPatProgram</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gstmpegtssection.html#gst-mpegts-pat-program-new" title="gst_mpegts_pat_program_new ()">gst_mpegts_pat_program_new</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a class="link" href="gst-plugins-bad-libs-gstmpegtssection.html#GstMpegtsSection"><span class="returnvalue">GstMpegtsSection</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gstmpegtssection.html#gst-mpegts-section-from-pat" title="gst_mpegts_section_from_pat ()">gst_mpegts_section_from_pat</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">const <a class="link" href="gst-plugins-bad-libs-gstmpegtssection.html#GstMpegtsPMT" title="struct GstMpegtsPMT"><span class="returnvalue">GstMpegtsPMT</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gstmpegtssection.html#gst-mpegts-section-get-pmt" title="gst_mpegts_section_get_pmt ()">gst_mpegts_section_get_pmt</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a class="link" href="gst-plugins-bad-libs-gstmpegtssection.html#GstMpegtsPMT" title="struct GstMpegtsPMT"><span class="returnvalue">GstMpegtsPMT</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gstmpegtssection.html#gst-mpegts-pmt-new" title="gst_mpegts_pmt_new ()">gst_mpegts_pmt_new</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a class="link" href="gst-plugins-bad-libs-gstmpegtssection.html#GstMpegtsPMTStream" title="struct GstMpegtsPMTStream"><span class="returnvalue">GstMpegtsPMTStream</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gstmpegtssection.html#gst-mpegts-pmt-stream-new" title="gst_mpegts_pmt_stream_new ()">gst_mpegts_pmt_stream_new</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a class="link" href="gst-plugins-bad-libs-gstmpegtssection.html#GstMpegtsSection"><span class="returnvalue">GstMpegtsSection</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gstmpegtssection.html#gst-mpegts-section-from-pmt" title="gst_mpegts_section_from_pmt ()">gst_mpegts_section_from_pmt</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="/usr/share/gtk-doc/html/glibglib-Pointer-Arrays.html#GPtrArray"><span class="returnvalue">GPtrArray</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gstmpegtssection.html#gst-mpegts-section-get-tsdt" title="gst_mpegts_section_get_tsdt ()">gst_mpegts_section_get_tsdt</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="/usr/share/gtk-doc/html/glibglib-Pointer-Arrays.html#GPtrArray"><span class="returnvalue">GPtrArray</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gstmpegtssection.html#gst-mpegts-section-get-cat" title="gst_mpegts_section_get_cat ()">gst_mpegts_section_get_cat</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<a name="GstMpegtsSection"></a><div class="refsect1">
-<a name="gst-plugins-bad-libs-gstmpegtssection.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table class="informaltable" width="100%" border="0">
-<colgroup>
-<col width="150px" class="name">
-<col class="description">
-</colgroup>
-<tbody>
-<tr>
-<td class="datatype_keyword">struct</td>
-<td class="function_name"><a class="link" href="gst-plugins-bad-libs-gstmpegtssection.html#GstMpegtsSection-struct" title="struct GstMpegtsSection">GstMpegtsSection</a></td>
-</tr>
-<tr>
-<td class="datatype_keyword">enum</td>
-<td class="function_name"><a class="link" href="gst-plugins-bad-libs-gstmpegtssection.html#GstMpegtsSectionTableID" title="enum GstMpegtsSectionTableID">GstMpegtsSectionTableID</a></td>
-</tr>
-<tr>
-<td class="datatype_keyword">enum</td>
-<td class="function_name"><a class="link" href="gst-plugins-bad-libs-gstmpegtssection.html#GstMpegtsSectionType" title="enum GstMpegtsSectionType">GstMpegtsSectionType</a></td>
-</tr>
-<tr>
-<td class="datatype_keyword">struct</td>
-<td class="function_name"><a class="link" href="gst-plugins-bad-libs-gstmpegtssection.html#GstMpegtsPatProgram" title="struct GstMpegtsPatProgram">GstMpegtsPatProgram</a></td>
-</tr>
-<tr>
-<td class="datatype_keyword">struct</td>
-<td class="function_name"><a class="link" href="gst-plugins-bad-libs-gstmpegtssection.html#GstMpegtsPMT" title="struct GstMpegtsPMT">GstMpegtsPMT</a></td>
-</tr>
-<tr>
-<td class="datatype_keyword">struct</td>
-<td class="function_name"><a class="link" href="gst-plugins-bad-libs-gstmpegtssection.html#GstMpegtsPMTStream" title="struct GstMpegtsPMTStream">GstMpegtsPMTStream</a></td>
-</tr>
-<tr>
-<td class="datatype_keyword">enum</td>
-<td class="function_name"><a class="link" href="gst-plugins-bad-libs-gstmpegtssection.html#GstMpegtsStreamType" title="enum GstMpegtsStreamType">GstMpegtsStreamType</a></td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<div class="refsect1">
-<a name="gst-plugins-bad-libs-gstmpegtssection.object-hierarchy"></a><h2>Object Hierarchy</h2>
-<pre class="screen"> <a href="https://developer.gnome.org/gobject/unstable/gobject-Boxed-Types.html">GBoxed</a>
- <span class="lineart">╰──</span> GstMpegtsSection
- <a href="https://developer.gnome.org/gobject/unstable/gobject-Enumeration-and-Flag-Types.html">GEnum</a>
- <span class="lineart">├──</span> GstMpegtsSectionTableID
- <span class="lineart">├──</span> GstMpegtsSectionType
- <span class="lineart">╰──</span> GstMpegtsStreamType
-</pre>
-</div>
-<div class="refsect1">
-<a name="gst-plugins-bad-libs-gstmpegtssection.description"></a><h2>Description</h2>
-</div>
-<div class="refsect1">
-<a name="gst-plugins-bad-libs-gstmpegtssection.functions_details"></a><h2>Functions</h2>
-<div class="refsect2">
-<a name="GST-MPEGTS-SECTION-TYPE:CAPS"></a><h3>GST_MPEGTS_SECTION_TYPE()</h3>
-<pre class="programlisting">#define GST_MPEGTS_SECTION_TYPE(section) (GST_MPEGTS_SECTION (section)->section_type)
-</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-message-new-mpegts-section"></a><h3>gst_message_new_mpegts_section ()</h3>
-<pre class="programlisting"><a href="/usr/share/gtk-doc/html/gstreamer-1.0GstMessage.html#GstMessage-struct"><span class="returnvalue">GstMessage</span></a> *
-gst_message_new_mpegts_section (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/gstreamer-1.0GstObject.html#GstObject-struct"><span class="type">GstObject</span></a> *parent</code></em>,
- <em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstmpegtssection.html#GstMpegtsSection"><span class="type">GstMpegtsSection</span></a> *section</code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-message-parse-mpegts-section"></a><h3>gst_message_parse_mpegts_section ()</h3>
-<pre class="programlisting"><a class="link" href="gst-plugins-bad-libs-gstmpegtssection.html#GstMpegtsSection"><span class="returnvalue">GstMpegtsSection</span></a> *
-gst_message_parse_mpegts_section (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/gstreamer-1.0GstMessage.html#GstMessage-struct"><span class="type">GstMessage</span></a> *message</code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-mpegts-section-send-event"></a><h3>gst_mpegts_section_send_event ()</h3>
-<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-gst_mpegts_section_send_event (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstmpegtssection.html#GstMpegtsSection"><span class="type">GstMpegtsSection</span></a> *section</code></em>,
- <em class="parameter"><code><a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#GstElement-struct"><span class="type">GstElement</span></a> *element</code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-event-parse-mpegts-section"></a><h3>gst_event_parse_mpegts_section ()</h3>
-<pre class="programlisting"><a class="link" href="gst-plugins-bad-libs-gstmpegtssection.html#GstMpegtsSection"><span class="returnvalue">GstMpegtsSection</span></a> *
-gst_event_parse_mpegts_section (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/gstreamer-1.0GstEvent.html#GstEvent-struct"><span class="type">GstEvent</span></a> *event</code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-mpegts-section-packetize"></a><h3>gst_mpegts_section_packetize ()</h3>
-<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="returnvalue">guint8</span></a> *
-gst_mpegts_section_packetize (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstmpegtssection.html#GstMpegtsSection"><span class="type">GstMpegtsSection</span></a> *section</code></em>,
- <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gsize"><span class="type">gsize</span></a> *output_size</code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-mpegts-section-new"></a><h3>gst_mpegts_section_new ()</h3>
-<pre class="programlisting"><a class="link" href="gst-plugins-bad-libs-gstmpegtssection.html#GstMpegtsSection"><span class="returnvalue">GstMpegtsSection</span></a> *
-gst_mpegts_section_new (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint16"><span class="type">guint16</span></a> pid</code></em>,
- <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> *data</code></em>,
- <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gsize"><span class="type">gsize</span></a> data_size</code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-mpegts-section-ref"></a><h3>gst_mpegts_section_ref()</h3>
-<pre class="programlisting">#define gst_mpegts_section_ref(section) ((GstMpegtsSection*) gst_mini_object_ref (GST_MINI_OBJECT_CAST (section)))
-</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-mpegts-section-unref"></a><h3>gst_mpegts_section_unref()</h3>
-<pre class="programlisting">#define gst_mpegts_section_unref(section) (gst_mini_object_unref (GST_MINI_OBJECT_CAST (section)))
-</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-mpegts-section-get-pat"></a><h3>gst_mpegts_section_get_pat ()</h3>
-<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Pointer-Arrays.html#GPtrArray"><span class="returnvalue">GPtrArray</span></a> *
-gst_mpegts_section_get_pat (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstmpegtssection.html#GstMpegtsSection"><span class="type">GstMpegtsSection</span></a> *section</code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-mpegts-pat-new"></a><h3>gst_mpegts_pat_new ()</h3>
-<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Pointer-Arrays.html#GPtrArray"><span class="returnvalue">GPtrArray</span></a> *
-gst_mpegts_pat_new (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-mpegts-pat-program-new"></a><h3>gst_mpegts_pat_program_new ()</h3>
-<pre class="programlisting"><a class="link" href="gst-plugins-bad-libs-gstmpegtssection.html#GstMpegtsPatProgram" title="struct GstMpegtsPatProgram"><span class="returnvalue">GstMpegtsPatProgram</span></a> *
-gst_mpegts_pat_program_new (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-mpegts-section-from-pat"></a><h3>gst_mpegts_section_from_pat ()</h3>
-<pre class="programlisting"><a class="link" href="gst-plugins-bad-libs-gstmpegtssection.html#GstMpegtsSection"><span class="returnvalue">GstMpegtsSection</span></a> *
-gst_mpegts_section_from_pat (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a> *programs</code></em>,
- <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint16"><span class="type">guint16</span></a> ts_id</code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-mpegts-section-get-pmt"></a><h3>gst_mpegts_section_get_pmt ()</h3>
-<pre class="programlisting">const <a class="link" href="gst-plugins-bad-libs-gstmpegtssection.html#GstMpegtsPMT" title="struct GstMpegtsPMT"><span class="returnvalue">GstMpegtsPMT</span></a> *
-gst_mpegts_section_get_pmt (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstmpegtssection.html#GstMpegtsSection"><span class="type">GstMpegtsSection</span></a> *section</code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-mpegts-pmt-new"></a><h3>gst_mpegts_pmt_new ()</h3>
-<pre class="programlisting"><a class="link" href="gst-plugins-bad-libs-gstmpegtssection.html#GstMpegtsPMT" title="struct GstMpegtsPMT"><span class="returnvalue">GstMpegtsPMT</span></a> *
-gst_mpegts_pmt_new (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-mpegts-pmt-stream-new"></a><h3>gst_mpegts_pmt_stream_new ()</h3>
-<pre class="programlisting"><a class="link" href="gst-plugins-bad-libs-gstmpegtssection.html#GstMpegtsPMTStream" title="struct GstMpegtsPMTStream"><span class="returnvalue">GstMpegtsPMTStream</span></a> *
-gst_mpegts_pmt_stream_new (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-mpegts-section-from-pmt"></a><h3>gst_mpegts_section_from_pmt ()</h3>
-<pre class="programlisting"><a class="link" href="gst-plugins-bad-libs-gstmpegtssection.html#GstMpegtsSection"><span class="returnvalue">GstMpegtsSection</span></a> *
-gst_mpegts_section_from_pmt (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstmpegtssection.html#GstMpegtsPMT" title="struct GstMpegtsPMT"><span class="type">GstMpegtsPMT</span></a> *pmt</code></em>,
- <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint16"><span class="type">guint16</span></a> pid</code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-mpegts-section-get-tsdt"></a><h3>gst_mpegts_section_get_tsdt ()</h3>
-<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Pointer-Arrays.html#GPtrArray"><span class="returnvalue">GPtrArray</span></a> *
-gst_mpegts_section_get_tsdt (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstmpegtssection.html#GstMpegtsSection"><span class="type">GstMpegtsSection</span></a> *section</code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-mpegts-section-get-cat"></a><h3>gst_mpegts_section_get_cat ()</h3>
-<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Pointer-Arrays.html#GPtrArray"><span class="returnvalue">GPtrArray</span></a> *
-gst_mpegts_section_get_cat (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstmpegtssection.html#GstMpegtsSection"><span class="type">GstMpegtsSection</span></a> *section</code></em>);</pre>
-</div>
-</div>
-<div class="refsect1">
-<a name="gst-plugins-bad-libs-gstmpegtssection.other_details"></a><h2>Types and Values</h2>
-<div class="refsect2">
-<a name="GstMpegtsSection-struct"></a><h3>struct GstMpegtsSection</h3>
-<pre class="programlisting">struct GstMpegtsSection {
- GstMpegtsSectionType section_type;
-
- guint16 pid;
- guint8 table_id;
-
- guint16 subtable_extension;
- guint8 version_number;
-
- gboolean current_next_indicator;
-
- guint8 section_number;
- guint8 last_section_number;
-
- guint32 crc;
-};
-</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="GstMpegtsSectionTableID"></a><h3>enum GstMpegtsSectionTableID</h3>
-<div class="refsect3">
-<a name="GstMpegtsSectionTableID.members"></a><h4>Members</h4>
-<div class="informaltable"><table class="informaltable" width="100%" border="0">
-<colgroup>
-<col width="300px" class="enum_members_name">
-<col class="enum_members_description">
-<col width="200px" class="enum_members_annotations">
-</colgroup>
-<tbody>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-TABLE-ID-PROGRAM-ASSOCIATION:CAPS"></a>GST_MTS_TABLE_ID_PROGRAM_ASSOCIATION</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-TABLE-ID-CONDITIONAL-ACCESS:CAPS"></a>GST_MTS_TABLE_ID_CONDITIONAL_ACCESS</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-TABLE-ID-TS-PROGRAM-MAP:CAPS"></a>GST_MTS_TABLE_ID_TS_PROGRAM_MAP</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-TABLE-ID-TS-DESCRIPTION:CAPS"></a>GST_MTS_TABLE_ID_TS_DESCRIPTION</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-TABLE-ID-14496-SCENE-DESCRIPTION:CAPS"></a>GST_MTS_TABLE_ID_14496_SCENE_DESCRIPTION</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-TABLE-ID-14496-OBJET-DESCRIPTOR:CAPS"></a>GST_MTS_TABLE_ID_14496_OBJET_DESCRIPTOR</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-TABLE-ID-METADATA:CAPS"></a>GST_MTS_TABLE_ID_METADATA</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-TABLE-ID-IPMP-CONTROL-INFORMATION:CAPS"></a>GST_MTS_TABLE_ID_IPMP_CONTROL_INFORMATION</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-TABLE-ID-DSM-CC-MULTIPROTO-ENCAPSULATED-DATA:CAPS"></a>GST_MTS_TABLE_ID_DSM_CC_MULTIPROTO_ENCAPSULATED_DATA</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-TABLE-ID-DSM-CC-U-N-MESSAGES:CAPS"></a>GST_MTS_TABLE_ID_DSM_CC_U_N_MESSAGES</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-TABLE-ID-DSM-CC-DOWNLOAD-DATA-MESSAGES:CAPS"></a>GST_MTS_TABLE_ID_DSM_CC_DOWNLOAD_DATA_MESSAGES</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-TABLE-ID-DSM-CC-STREAM-DESCRIPTORS:CAPS"></a>GST_MTS_TABLE_ID_DSM_CC_STREAM_DESCRIPTORS</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-TABLE-ID-DSM-CC-PRIVATE-DATA:CAPS"></a>GST_MTS_TABLE_ID_DSM_CC_PRIVATE_DATA</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-TABLE-ID-DSM-CC-ADDRESSABLE-SECTIONS:CAPS"></a>GST_MTS_TABLE_ID_DSM_CC_ADDRESSABLE_SECTIONS</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MTS-TABLE-ID-UNSET:CAPS"></a>GST_MTS_TABLE_ID_UNSET</p></td>
-<td> </td>
-<td> </td>
-</tr>
-</tbody>
-</table></div>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="GstMpegtsSectionType"></a><h3>enum GstMpegtsSectionType</h3>
-<div class="refsect3">
-<a name="GstMpegtsSectionType.members"></a><h4>Members</h4>
-<div class="informaltable"><table class="informaltable" width="100%" border="0">
-<colgroup>
-<col width="300px" class="enum_members_name">
-<col class="enum_members_description">
-<col width="200px" class="enum_members_annotations">
-</colgroup>
-<tbody>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-SECTION-UNKNOWN:CAPS"></a>GST_MPEGTS_SECTION_UNKNOWN</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-SECTION-PAT:CAPS"></a>GST_MPEGTS_SECTION_PAT</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-SECTION-PMT:CAPS"></a>GST_MPEGTS_SECTION_PMT</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-SECTION-CAT:CAPS"></a>GST_MPEGTS_SECTION_CAT</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-SECTION-TSDT:CAPS"></a>GST_MPEGTS_SECTION_TSDT</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-SECTION-EIT:CAPS"></a>GST_MPEGTS_SECTION_EIT</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-SECTION-NIT:CAPS"></a>GST_MPEGTS_SECTION_NIT</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-SECTION-BAT:CAPS"></a>GST_MPEGTS_SECTION_BAT</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-SECTION-SDT:CAPS"></a>GST_MPEGTS_SECTION_SDT</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-SECTION-TDT:CAPS"></a>GST_MPEGTS_SECTION_TDT</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-SECTION-TOT:CAPS"></a>GST_MPEGTS_SECTION_TOT</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-SECTION-ATSC-TVCT:CAPS"></a>GST_MPEGTS_SECTION_ATSC_TVCT</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-SECTION-ATSC-CVCT:CAPS"></a>GST_MPEGTS_SECTION_ATSC_CVCT</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-SECTION-ATSC-MGT:CAPS"></a>GST_MPEGTS_SECTION_ATSC_MGT</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-SECTION-ATSC-ETT:CAPS"></a>GST_MPEGTS_SECTION_ATSC_ETT</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-SECTION-ATSC-EIT:CAPS"></a>GST_MPEGTS_SECTION_ATSC_EIT</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-SECTION-ATSC-STT:CAPS"></a>GST_MPEGTS_SECTION_ATSC_STT</p></td>
-<td> </td>
-<td> </td>
-</tr>
-</tbody>
-</table></div>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="GstMpegtsPatProgram"></a><h3>struct GstMpegtsPatProgram</h3>
-<pre class="programlisting">struct GstMpegtsPatProgram {
- guint16 program_number;
- guint16 network_or_program_map_PID;
-};
-</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="GstMpegtsPMT"></a><h3>struct GstMpegtsPMT</h3>
-<pre class="programlisting">struct GstMpegtsPMT {
- guint16 pcr_pid;
- guint16 program_number;
-
- GPtrArray *descriptors;
- GPtrArray *streams;
-};
-</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="GstMpegtsPMTStream"></a><h3>struct GstMpegtsPMTStream</h3>
-<pre class="programlisting">struct GstMpegtsPMTStream {
- guint8 stream_type;
- guint16 pid;
-
- GPtrArray *descriptors;
-};
-</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="GstMpegtsStreamType"></a><h3>enum GstMpegtsStreamType</h3>
-<div class="refsect3">
-<a name="GstMpegtsStreamType.members"></a><h4>Members</h4>
-<div class="informaltable"><table class="informaltable" width="100%" border="0">
-<colgroup>
-<col width="300px" class="enum_members_name">
-<col class="enum_members_description">
-<col width="200px" class="enum_members_annotations">
-</colgroup>
-<tbody>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-STREAM-TYPE-RESERVED-00:CAPS"></a>GST_MPEGTS_STREAM_TYPE_RESERVED_00</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-STREAM-TYPE-VIDEO-MPEG1:CAPS"></a>GST_MPEGTS_STREAM_TYPE_VIDEO_MPEG1</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-STREAM-TYPE-VIDEO-MPEG2:CAPS"></a>GST_MPEGTS_STREAM_TYPE_VIDEO_MPEG2</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-STREAM-TYPE-AUDIO-MPEG1:CAPS"></a>GST_MPEGTS_STREAM_TYPE_AUDIO_MPEG1</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-STREAM-TYPE-AUDIO-MPEG2:CAPS"></a>GST_MPEGTS_STREAM_TYPE_AUDIO_MPEG2</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-STREAM-TYPE-PRIVATE-SECTIONS:CAPS"></a>GST_MPEGTS_STREAM_TYPE_PRIVATE_SECTIONS</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-STREAM-TYPE-PRIVATE-PES-PACKETS:CAPS"></a>GST_MPEGTS_STREAM_TYPE_PRIVATE_PES_PACKETS</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-STREAM-TYPE-MHEG:CAPS"></a>GST_MPEGTS_STREAM_TYPE_MHEG</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-STREAM-TYPE-DSM-CC:CAPS"></a>GST_MPEGTS_STREAM_TYPE_DSM_CC</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-STREAM-TYPE-H-222-1:CAPS"></a>GST_MPEGTS_STREAM_TYPE_H_222_1</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-STREAM-TYPE-DSMCC-A:CAPS"></a>GST_MPEGTS_STREAM_TYPE_DSMCC_A</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-STREAM-TYPE-DSMCC-B:CAPS"></a>GST_MPEGTS_STREAM_TYPE_DSMCC_B</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-STREAM-TYPE-DSMCC-C:CAPS"></a>GST_MPEGTS_STREAM_TYPE_DSMCC_C</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-STREAM-TYPE-DSMCC-D:CAPS"></a>GST_MPEGTS_STREAM_TYPE_DSMCC_D</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-STREAM-TYPE-AUXILIARY:CAPS"></a>GST_MPEGTS_STREAM_TYPE_AUXILIARY</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-STREAM-TYPE-AUDIO-AAC-ADTS:CAPS"></a>GST_MPEGTS_STREAM_TYPE_AUDIO_AAC_ADTS</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-STREAM-TYPE-VIDEO-MPEG4:CAPS"></a>GST_MPEGTS_STREAM_TYPE_VIDEO_MPEG4</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-STREAM-TYPE-AUDIO-AAC-LATM:CAPS"></a>GST_MPEGTS_STREAM_TYPE_AUDIO_AAC_LATM</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-STREAM-TYPE-SL-FLEXMUX-PES-PACKETS:CAPS"></a>GST_MPEGTS_STREAM_TYPE_SL_FLEXMUX_PES_PACKETS</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-STREAM-TYPE-SL-FLEXMUX-SECTIONS:CAPS"></a>GST_MPEGTS_STREAM_TYPE_SL_FLEXMUX_SECTIONS</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-STREAM-TYPE-SYNCHRONIZED-DOWNLOAD:CAPS"></a>GST_MPEGTS_STREAM_TYPE_SYNCHRONIZED_DOWNLOAD</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-STREAM-TYPE-METADATA-PES-PACKETS:CAPS"></a>GST_MPEGTS_STREAM_TYPE_METADATA_PES_PACKETS</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-STREAM-TYPE-METADATA-SECTIONS:CAPS"></a>GST_MPEGTS_STREAM_TYPE_METADATA_SECTIONS</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-STREAM-TYPE-METADATA-DATA-CAROUSEL:CAPS"></a>GST_MPEGTS_STREAM_TYPE_METADATA_DATA_CAROUSEL</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-STREAM-TYPE-METADATA-OBJECT-CAROUSEL:CAPS"></a>GST_MPEGTS_STREAM_TYPE_METADATA_OBJECT_CAROUSEL</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-STREAM-TYPE-METADATA-SYNCHRONIZED-DOWNLOAD:CAPS"></a>GST_MPEGTS_STREAM_TYPE_METADATA_SYNCHRONIZED_DOWNLOAD</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-STREAM-TYPE-MPEG2-IPMP:CAPS"></a>GST_MPEGTS_STREAM_TYPE_MPEG2_IPMP</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-STREAM-TYPE-VIDEO-H264:CAPS"></a>GST_MPEGTS_STREAM_TYPE_VIDEO_H264</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-STREAM-TYPE-AUDIO-AAC-CLEAN:CAPS"></a>GST_MPEGTS_STREAM_TYPE_AUDIO_AAC_CLEAN</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-STREAM-TYPE-MPEG4-TIMED-TEXT:CAPS"></a>GST_MPEGTS_STREAM_TYPE_MPEG4_TIMED_TEXT</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-STREAM-TYPE-VIDEO-RVC:CAPS"></a>GST_MPEGTS_STREAM_TYPE_VIDEO_RVC</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-STREAM-TYPE-VIDEO-H264-SVC-SUB-BITSTREAM:CAPS"></a>GST_MPEGTS_STREAM_TYPE_VIDEO_H264_SVC_SUB_BITSTREAM</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-STREAM-TYPE-VIDEO-H264-MVC-SUB-BITSTREAM:CAPS"></a>GST_MPEGTS_STREAM_TYPE_VIDEO_H264_MVC_SUB_BITSTREAM</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-STREAM-TYPE-VIDEO-JP2K:CAPS"></a>GST_MPEGTS_STREAM_TYPE_VIDEO_JP2K</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-STREAM-TYPE-VIDEO-MPEG2-STEREO-ADDITIONAL-VIEW:CAPS"></a>GST_MPEGTS_STREAM_TYPE_VIDEO_MPEG2_STEREO_ADDITIONAL_VIEW</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-STREAM-TYPE-VIDEO-H264-STEREO-ADDITIONAL-VIEW:CAPS"></a>GST_MPEGTS_STREAM_TYPE_VIDEO_H264_STEREO_ADDITIONAL_VIEW</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-STREAM-TYPE-VIDEO-HEVC:CAPS"></a>GST_MPEGTS_STREAM_TYPE_VIDEO_HEVC</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-MPEGTS-STREAM-TYPE-IPMP-STREAM:CAPS"></a>GST_MPEGTS_STREAM_TYPE_IPMP_STREAM</p></td>
-<td> </td>
-<td> </td>
-</tr>
-</tbody>
-</table></div>
-</div>
-</div>
-</div>
-</div>
-<div class="footer">
-<hr>Generated by GTK-Doc V1.25</div>
-</body>
-</html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-bad-libs-gstmpegvideometa.html b/docs/libs/html/gst-plugins-bad-libs-gstmpegvideometa.html
index 1e406a9..7dac93c 100644
--- a/docs/libs/html/gst-plugins-bad-libs-gstmpegvideometa.html
+++ b/docs/libs/html/gst-plugins-bad-libs-gstmpegvideometa.html
@@ -106,6 +106,30 @@
<em class="parameter"><code>const <a class="link" href="gst-plugins-bad-libs-mpegvideoparser.html#GstMpegVideoPictureHdr" title="struct GstMpegVideoPictureHdr"><span class="type">GstMpegVideoPictureHdr</span></a> *pic_hdr</code></em>,
<em class="parameter"><code>const <a class="link" href="gst-plugins-bad-libs-mpegvideoparser.html#GstMpegVideoPictureExt" title="struct GstMpegVideoPictureExt"><span class="type">GstMpegVideoPictureExt</span></a> *pic_ext</code></em>,
<em class="parameter"><code>const <a class="link" href="gst-plugins-bad-libs-mpegvideoparser.html#GstMpegVideoQuantMatrixExt" title="struct GstMpegVideoQuantMatrixExt"><span class="type">GstMpegVideoQuantMatrixExt</span></a> *quant_ext</code></em>);</pre>
+<p>Creates and adds a <a class="link" href="gst-plugins-bad-libs-gstmpegvideometa.html#GstMpegVideoMeta" title="struct GstMpegVideoMeta"><span class="type">GstMpegVideoMeta</span></a> to a <em class="parameter"><code>buffer</code></em>
+.</p>
+<p>Provided structures must either be <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> or GSlice-allocated.</p>
+<div class="refsect3">
+<a name="gst-buffer-add-mpeg-video-meta.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>buffer</p></td>
+<td class="parameter_description"><p>a <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstBuffer.html#GstBuffer-struct"><span class="type">GstBuffer</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-buffer-add-mpeg-video-meta.returns"></a><h4>Returns</h4>
+<p> a newly created <a class="link" href="gst-plugins-bad-libs-gstmpegvideometa.html#GstMpegVideoMeta" title="struct GstMpegVideoMeta"><span class="type">GstMpegVideoMeta</span></a>. </p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
+</div>
+<p class="since">Since: 1.2</p>
</div>
<hr>
<div class="refsect2">
@@ -150,6 +174,70 @@
gsize slice_offset;
};
</pre>
+<p>Extra buffer metadata describing the contents of a MPEG1/2 Video frame</p>
+<p>Can be used by elements (mainly decoders) to avoid having to parse
+Mpeg video 1/2 packets if it can be done upstream.</p>
+<p>The various fields are only valid during the lifetime of the <a class="link" href="gst-plugins-bad-libs-gstmpegvideometa.html#GstMpegVideoMeta" title="struct GstMpegVideoMeta"><span class="type">GstMpegVideoMeta</span></a>.
+If elements wish to use those for longer, they are required to make a copy.</p>
+<div class="refsect3">
+<a name="GstMpegVideoMeta.members"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="300px" class="struct_members_name">
+<col class="struct_members_description">
+<col width="200px" class="struct_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/gstreamer-1.0gstreamer-GstMeta.html#GstMeta"><span class="type">GstMeta</span></a> <em class="structfield"><code><a name="GstMpegVideoMeta.meta"></a>meta</code></em>;</p></td>
+<td class="struct_member_description"><p>parent <a href="/usr/share/gtk-doc/html/gstreamer-1.0gstreamer-GstMeta.html#GstMeta"><span class="type">GstMeta</span></a></p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a class="link" href="gst-plugins-bad-libs-mpegvideoparser.html#GstMpegVideoSequenceHdr" title="struct GstMpegVideoSequenceHdr"><span class="type">GstMpegVideoSequenceHdr</span></a> *<em class="structfield"><code><a name="GstMpegVideoMeta.sequencehdr"></a>sequencehdr</code></em>;</p></td>
+<td class="struct_member_description"><p>the <a class="link" href="gst-plugins-bad-libs-mpegvideoparser.html#GstMpegVideoSequenceHdr" title="struct GstMpegVideoSequenceHdr"><span class="type">GstMpegVideoSequenceHdr</span></a> if present in the buffer</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a class="link" href="gst-plugins-bad-libs-mpegvideoparser.html#GstMpegVideoSequenceExt" title="struct GstMpegVideoSequenceExt"><span class="type">GstMpegVideoSequenceExt</span></a> *<em class="structfield"><code><a name="GstMpegVideoMeta.sequenceext"></a>sequenceext</code></em>;</p></td>
+<td class="struct_member_description"><p>the <a class="link" href="gst-plugins-bad-libs-mpegvideoparser.html#GstMpegVideoSequenceExt" title="struct GstMpegVideoSequenceExt"><span class="type">GstMpegVideoSequenceExt</span></a> if present in the buffer</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><span class="type">GstMpegVideoSequenceDisplayExt</span> *<em class="structfield"><code><a name="GstMpegVideoMeta.sequencedispext"></a>sequencedispext</code></em>;</p></td>
+<td class="struct_member_description"><p>the <span class="type">GstMpegVideoSequenceDisplayExt</span> if present in the
+buffer.</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a class="link" href="gst-plugins-bad-libs-mpegvideoparser.html#GstMpegVideoPictureHdr" title="struct GstMpegVideoPictureHdr"><span class="type">GstMpegVideoPictureHdr</span></a> *<em class="structfield"><code><a name="GstMpegVideoMeta.pichdr"></a>pichdr</code></em>;</p></td>
+<td class="struct_member_description"><p>the <a class="link" href="gst-plugins-bad-libs-mpegvideoparser.html#GstMpegVideoPictureHdr" title="struct GstMpegVideoPictureHdr"><span class="type">GstMpegVideoPictureHdr</span></a> if present in the buffer.</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a class="link" href="gst-plugins-bad-libs-mpegvideoparser.html#GstMpegVideoPictureExt" title="struct GstMpegVideoPictureExt"><span class="type">GstMpegVideoPictureExt</span></a> *<em class="structfield"><code><a name="GstMpegVideoMeta.picext"></a>picext</code></em>;</p></td>
+<td class="struct_member_description"><p>the <a class="link" href="gst-plugins-bad-libs-mpegvideoparser.html#GstMpegVideoPictureExt" title="struct GstMpegVideoPictureExt"><span class="type">GstMpegVideoPictureExt</span></a> if present in the buffer.</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a class="link" href="gst-plugins-bad-libs-mpegvideoparser.html#GstMpegVideoQuantMatrixExt" title="struct GstMpegVideoQuantMatrixExt"><span class="type">GstMpegVideoQuantMatrixExt</span></a> *<em class="structfield"><code><a name="GstMpegVideoMeta.quantext"></a>quantext</code></em>;</p></td>
+<td class="struct_member_description"><p>the <a class="link" href="gst-plugins-bad-libs-mpegvideoparser.html#GstMpegVideoQuantMatrixExt" title="struct GstMpegVideoQuantMatrixExt"><span class="type">GstMpegVideoQuantMatrixExt</span></a> if present in the buffer</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="type">guint</span></a> <em class="structfield"><code><a name="GstMpegVideoMeta.num-slices"></a>num_slices</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gsize"><span class="type">gsize</span></a> <em class="structfield"><code><a name="GstMpegVideoMeta.slice-offset"></a>slice_offset</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 1.2</p>
</div>
</div>
</div>
diff --git a/docs/libs/html/gst-plugins-bad-libs-gstplayer-gmaincontextsignaldispatcher.html b/docs/libs/html/gst-plugins-bad-libs-gstplayer-gmaincontextsignaldispatcher.html
index 7538a41..dcebcf9 100644
--- a/docs/libs/html/gst-plugins-bad-libs-gstplayer-gmaincontextsignaldispatcher.html
+++ b/docs/libs/html/gst-plugins-bad-libs-gstplayer-gmaincontextsignaldispatcher.html
@@ -27,7 +27,7 @@
<div class="refnamediv"><table width="100%"><tr>
<td valign="top">
<h2><span class="refentrytitle"><a name="gst-plugins-bad-libs-gstplayer-gmaincontextsignaldispatcher.top_of_page"></a>gstplayer-gmaincontextsignaldispatcher</span></h2>
-<p>gstplayer-gmaincontextsignaldispatcher</p>
+<p>gstplayer-gmaincontextsignaldispatcher — Player GLib MainContext dispatcher</p>
</td>
<td class="gallery_image" valign="top" align="right"></td>
</tr></table></div>
@@ -58,6 +58,29 @@
<pre class="programlisting"><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayerSignalDispatcher"><span class="returnvalue">GstPlayerSignalDispatcher</span></a> *
gst_player_g_main_context_signal_dispatcher_new
(<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-The-Main-Event-Loop.html#GMainContext"><span class="type">GMainContext</span></a> *application_context</code></em>);</pre>
+<p>Creates a new GstPlayerSignalDispatcher that uses <em class="parameter"><code>application_context</code></em>
+,
+or the thread default one if <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> is used. See <code class="function">gst_player_new_full()</code>.</p>
+<div class="refsect3">
+<a name="gst-player-g-main-context-signal-dispatcher-new.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>application_context</p></td>
+<td class="parameter_description"><p> GMainContext to use or <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-player-g-main-context-signal-dispatcher-new.returns"></a><h4>Returns</h4>
+<p> the new GstPlayerSignalDispatcher. </p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
+</div>
</div>
</div>
<div class="refsect1">
diff --git a/docs/libs/html/gst-plugins-bad-libs-gstplayer-mediainfo.html b/docs/libs/html/gst-plugins-bad-libs-gstplayer-mediainfo.html
index e809695..2a67c75 100644
--- a/docs/libs/html/gst-plugins-bad-libs-gstplayer-mediainfo.html
+++ b/docs/libs/html/gst-plugins-bad-libs-gstplayer-mediainfo.html
@@ -28,7 +28,7 @@
<div class="refnamediv"><table width="100%"><tr>
<td valign="top">
<h2><span class="refentrytitle"><a name="gst-plugins-bad-libs-gstplayer-mediainfo.top_of_page"></a>gstplayer-mediainfo</span></h2>
-<p>gstplayer-mediainfo</p>
+<p>gstplayer-mediainfo — Player Media Information</p>
</td>
<td class="gallery_image" valign="top" align="right"></td>
</tr></table></div>
@@ -294,18 +294,75 @@
<a name="gst-player-media-info-get-uri"></a><h3>gst_player_media_info_get_uri ()</h3>
<pre class="programlisting">const <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *
gst_player_media_info_get_uri (<em class="parameter"><code>const <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerMediaInfo"><span class="type">GstPlayerMediaInfo</span></a> *info</code></em>);</pre>
+<div class="refsect3">
+<a name="gst-player-media-info-get-uri.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>info</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerMediaInfo"><span class="type">GstPlayerMediaInfo</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-player-media-info-get-uri.returns"></a><h4>Returns</h4>
+<p> the URI associated with <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerMediaInfo"><span class="type">GstPlayerMediaInfo</span></a>.</p>
+</div>
</div>
<hr>
<div class="refsect2">
<a name="gst-player-media-info-get-duration"></a><h3>gst_player_media_info_get_duration ()</h3>
<pre class="programlisting"><a href="/usr/share/gtk-doc/html/gstreamer-1.0GstClock.html#GstClockTime"><span class="returnvalue">GstClockTime</span></a>
gst_player_media_info_get_duration (<em class="parameter"><code>const <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerMediaInfo"><span class="type">GstPlayerMediaInfo</span></a> *info</code></em>);</pre>
+<div class="refsect3">
+<a name="gst-player-media-info-get-duration.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>info</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerMediaInfo"><span class="type">GstPlayerMediaInfo</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-player-media-info-get-duration.returns"></a><h4>Returns</h4>
+<p> duration of the media.</p>
+</div>
</div>
<hr>
<div class="refsect2">
<a name="gst-player-media-info-get-title"></a><h3>gst_player_media_info_get_title ()</h3>
<pre class="programlisting">const <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *
gst_player_media_info_get_title (<em class="parameter"><code>const <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerMediaInfo"><span class="type">GstPlayerMediaInfo</span></a> *info</code></em>);</pre>
+<div class="refsect3">
+<a name="gst-player-media-info-get-title.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>info</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerMediaInfo"><span class="type">GstPlayerMediaInfo</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-player-media-info-get-title.returns"></a><h4>Returns</h4>
+<p> the media title.</p>
+</div>
</div>
<hr>
<div class="refsect2">
@@ -313,18 +370,75 @@
<pre class="programlisting">const <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *
gst_player_media_info_get_container_format
(<em class="parameter"><code>const <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerMediaInfo"><span class="type">GstPlayerMediaInfo</span></a> *info</code></em>);</pre>
+<div class="refsect3">
+<a name="gst-player-media-info-get-container-format.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>info</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerMediaInfo"><span class="type">GstPlayerMediaInfo</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-player-media-info-get-container-format.returns"></a><h4>Returns</h4>
+<p> the container format.</p>
+</div>
</div>
<hr>
<div class="refsect2">
<a name="gst-player-media-info-is-seekable"></a><h3>gst_player_media_info_is_seekable ()</h3>
<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
gst_player_media_info_is_seekable (<em class="parameter"><code>const <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerMediaInfo"><span class="type">GstPlayerMediaInfo</span></a> *info</code></em>);</pre>
+<div class="refsect3">
+<a name="gst-player-media-info-is-seekable.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>info</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerMediaInfo"><span class="type">GstPlayerMediaInfo</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-player-media-info-is-seekable.returns"></a><h4>Returns</h4>
+<p> <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the media is seekable.</p>
+</div>
</div>
<hr>
<div class="refsect2">
<a name="gst-player-media-info-is-live"></a><h3>gst_player_media_info_is_live ()</h3>
<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
gst_player_media_info_is_live (<em class="parameter"><code>const <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerMediaInfo"><span class="type">GstPlayerMediaInfo</span></a> *info</code></em>);</pre>
+<div class="refsect3">
+<a name="gst-player-media-info-is-live.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>info</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerMediaInfo"><span class="type">GstPlayerMediaInfo</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-player-media-info-is-live.returns"></a><h4>Returns</h4>
+<p> <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the media is live.</p>
+</div>
</div>
<hr>
<div class="refsect2">
@@ -332,42 +446,185 @@
<pre class="programlisting"><a href="/usr/share/gtk-doc/html/gstreamer-1.0GstSample.html#GstSample-struct"><span class="returnvalue">GstSample</span></a> *
gst_player_media_info_get_image_sample
(<em class="parameter"><code>const <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerMediaInfo"><span class="type">GstPlayerMediaInfo</span></a> *info</code></em>);</pre>
+<p>Function to get the image (or preview-image) stored in taglist.
+Application can use gst_sample_*_() API's to get caps, buffer etc.</p>
+<div class="refsect3">
+<a name="gst-player-media-info-get-image-sample.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>info</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerMediaInfo"><span class="type">GstPlayerMediaInfo</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-player-media-info-get-image-sample.returns"></a><h4>Returns</h4>
+<p> GstSample or NULL. </p>
+<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p>
+</div>
</div>
<hr>
<div class="refsect2">
<a name="gst-player-media-info-get-tags"></a><h3>gst_player_media_info_get_tags ()</h3>
<pre class="programlisting"><a href="/usr/share/gtk-doc/html/gstreamer-1.0GstTagList.html#GstTagList-struct"><span class="returnvalue">GstTagList</span></a> *
gst_player_media_info_get_tags (<em class="parameter"><code>const <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerMediaInfo"><span class="type">GstPlayerMediaInfo</span></a> *info</code></em>);</pre>
+<div class="refsect3">
+<a name="gst-player-media-info-get-tags.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>info</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerMediaInfo"><span class="type">GstPlayerMediaInfo</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-player-media-info-get-tags.returns"></a><h4>Returns</h4>
+<p> the tags contained in media info. </p>
+<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p>
+</div>
</div>
<hr>
<div class="refsect2">
<a name="gst-player-media-info-get-stream-list"></a><h3>gst_player_media_info_get_stream_list ()</h3>
<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Doubly-Linked-Lists.html#GList"><span class="returnvalue">GList</span></a> *
gst_player_media_info_get_stream_list (<em class="parameter"><code>const <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerMediaInfo"><span class="type">GstPlayerMediaInfo</span></a> *info</code></em>);</pre>
+<div class="refsect3">
+<a name="gst-player-media-info-get-stream-list.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>info</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerMediaInfo"><span class="type">GstPlayerMediaInfo</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-player-media-info-get-stream-list.returns"></a><h4>Returns</h4>
+<p> A <a href="/usr/share/gtk-doc/html/glibglib-Doubly-Linked-Lists.html#GList"><span class="type">GList</span></a> of
+matching <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerStreamInfo"><span class="type">GstPlayerStreamInfo</span></a>. </p>
+<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> GstPlayerStreamInfo]</span></p>
+</div>
</div>
<hr>
<div class="refsect2">
<a name="gst-player-stream-info-get-index"></a><h3>gst_player_stream_info_get_index ()</h3>
<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint"><span class="returnvalue">gint</span></a>
gst_player_stream_info_get_index (<em class="parameter"><code>const <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerStreamInfo"><span class="type">GstPlayerStreamInfo</span></a> *info</code></em>);</pre>
+<p>Function to get stream index from <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerStreamInfo"><span class="type">GstPlayerStreamInfo</span></a> instance.</p>
+<div class="refsect3">
+<a name="gst-player-stream-info-get-index.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>info</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerStreamInfo"><span class="type">GstPlayerStreamInfo</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-player-stream-info-get-index.returns"></a><h4>Returns</h4>
+<p> the stream index of this stream.</p>
+</div>
</div>
<hr>
<div class="refsect2">
<a name="gst-player-stream-info-get-caps"></a><h3>gst_player_stream_info_get_caps ()</h3>
<pre class="programlisting"><a href="/usr/share/gtk-doc/html/gstreamer-1.0GstCaps.html#GstCaps-struct"><span class="returnvalue">GstCaps</span></a> *
gst_player_stream_info_get_caps (<em class="parameter"><code>const <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerStreamInfo"><span class="type">GstPlayerStreamInfo</span></a> *info</code></em>);</pre>
+<div class="refsect3">
+<a name="gst-player-stream-info-get-caps.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>info</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerStreamInfo"><span class="type">GstPlayerStreamInfo</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-player-stream-info-get-caps.returns"></a><h4>Returns</h4>
+<p> the <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstCaps.html#GstCaps-struct"><span class="type">GstCaps</span></a> of the stream. </p>
+<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p>
+</div>
</div>
<hr>
<div class="refsect2">
<a name="gst-player-stream-info-get-tags"></a><h3>gst_player_stream_info_get_tags ()</h3>
<pre class="programlisting"><a href="/usr/share/gtk-doc/html/gstreamer-1.0GstTagList.html#GstTagList-struct"><span class="returnvalue">GstTagList</span></a> *
gst_player_stream_info_get_tags (<em class="parameter"><code>const <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerStreamInfo"><span class="type">GstPlayerStreamInfo</span></a> *info</code></em>);</pre>
+<div class="refsect3">
+<a name="gst-player-stream-info-get-tags.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>info</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerStreamInfo"><span class="type">GstPlayerStreamInfo</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-player-stream-info-get-tags.returns"></a><h4>Returns</h4>
+<p> the tags contained in this stream. </p>
+<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p>
+</div>
</div>
<hr>
<div class="refsect2">
<a name="gst-player-stream-info-get-codec"></a><h3>gst_player_stream_info_get_codec ()</h3>
<pre class="programlisting">const <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *
gst_player_stream_info_get_codec (<em class="parameter"><code>const <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerStreamInfo"><span class="type">GstPlayerStreamInfo</span></a> *info</code></em>);</pre>
+<p>A string describing codec used in <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerStreamInfo"><span class="type">GstPlayerStreamInfo</span></a>.</p>
+<div class="refsect3">
+<a name="gst-player-stream-info-get-codec.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>info</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerStreamInfo"><span class="type">GstPlayerStreamInfo</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-player-stream-info-get-codec.returns"></a><h4>Returns</h4>
+<p> codec string or NULL on unknown.</p>
+</div>
</div>
<hr>
<div class="refsect2">
@@ -375,54 +632,228 @@
<pre class="programlisting">const <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *
gst_player_stream_info_get_stream_type
(<em class="parameter"><code>const <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerStreamInfo"><span class="type">GstPlayerStreamInfo</span></a> *info</code></em>);</pre>
+<p>Function to return human readable name for the stream type
+of the given <em class="parameter"><code>info</code></em>
+ (ex: "audio", "video", "subtitle")</p>
+<div class="refsect3">
+<a name="gst-player-stream-info-get-stream-type.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>info</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerStreamInfo"><span class="type">GstPlayerStreamInfo</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-player-stream-info-get-stream-type.returns"></a><h4>Returns</h4>
+<p> a human readable name</p>
+</div>
</div>
<hr>
<div class="refsect2">
<a name="gst-player-audio-info-get-bitrate"></a><h3>gst_player_audio_info_get_bitrate ()</h3>
<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint"><span class="returnvalue">gint</span></a>
gst_player_audio_info_get_bitrate (<em class="parameter"><code>const <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerAudioInfo"><span class="type">GstPlayerAudioInfo</span></a> *info</code></em>);</pre>
+<div class="refsect3">
+<a name="gst-player-audio-info-get-bitrate.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>info</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerAudioInfo"><span class="type">GstPlayerAudioInfo</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-player-audio-info-get-bitrate.returns"></a><h4>Returns</h4>
+<p> the audio bitrate in <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerAudioInfo"><span class="type">GstPlayerAudioInfo</span></a>.</p>
+</div>
</div>
<hr>
<div class="refsect2">
<a name="gst-player-audio-info-get-channels"></a><h3>gst_player_audio_info_get_channels ()</h3>
<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint"><span class="returnvalue">gint</span></a>
gst_player_audio_info_get_channels (<em class="parameter"><code>const <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerAudioInfo"><span class="type">GstPlayerAudioInfo</span></a> *info</code></em>);</pre>
+<div class="refsect3">
+<a name="gst-player-audio-info-get-channels.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>info</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerAudioInfo"><span class="type">GstPlayerAudioInfo</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-player-audio-info-get-channels.returns"></a><h4>Returns</h4>
+<p> the number of audio channels in <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerAudioInfo"><span class="type">GstPlayerAudioInfo</span></a>.</p>
+</div>
</div>
<hr>
<div class="refsect2">
<a name="gst-player-audio-info-get-language"></a><h3>gst_player_audio_info_get_language ()</h3>
<pre class="programlisting">const <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *
gst_player_audio_info_get_language (<em class="parameter"><code>const <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerAudioInfo"><span class="type">GstPlayerAudioInfo</span></a> *info</code></em>);</pre>
+<div class="refsect3">
+<a name="gst-player-audio-info-get-language.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>info</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerAudioInfo"><span class="type">GstPlayerAudioInfo</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-player-audio-info-get-language.returns"></a><h4>Returns</h4>
+<p> the language of the stream, or NULL if unknown.</p>
+</div>
</div>
<hr>
<div class="refsect2">
<a name="gst-player-audio-info-get-max-bitrate"></a><h3>gst_player_audio_info_get_max_bitrate ()</h3>
<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint"><span class="returnvalue">gint</span></a>
gst_player_audio_info_get_max_bitrate (<em class="parameter"><code>const <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerAudioInfo"><span class="type">GstPlayerAudioInfo</span></a> *info</code></em>);</pre>
+<div class="refsect3">
+<a name="gst-player-audio-info-get-max-bitrate.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>info</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerAudioInfo"><span class="type">GstPlayerAudioInfo</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-player-audio-info-get-max-bitrate.returns"></a><h4>Returns</h4>
+<p> the audio maximum bitrate in <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerAudioInfo"><span class="type">GstPlayerAudioInfo</span></a>.</p>
+</div>
</div>
<hr>
<div class="refsect2">
<a name="gst-player-audio-info-get-sample-rate"></a><h3>gst_player_audio_info_get_sample_rate ()</h3>
<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint"><span class="returnvalue">gint</span></a>
gst_player_audio_info_get_sample_rate (<em class="parameter"><code>const <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerAudioInfo"><span class="type">GstPlayerAudioInfo</span></a> *info</code></em>);</pre>
+<div class="refsect3">
+<a name="gst-player-audio-info-get-sample-rate.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>info</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerAudioInfo"><span class="type">GstPlayerAudioInfo</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-player-audio-info-get-sample-rate.returns"></a><h4>Returns</h4>
+<p> the audio sample rate in <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerAudioInfo"><span class="type">GstPlayerAudioInfo</span></a>.</p>
+</div>
</div>
<hr>
<div class="refsect2">
<a name="gst-player-video-info-get-bitrate"></a><h3>gst_player_video_info_get_bitrate ()</h3>
<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint"><span class="returnvalue">gint</span></a>
gst_player_video_info_get_bitrate (<em class="parameter"><code>const <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerVideoInfo"><span class="type">GstPlayerVideoInfo</span></a> *info</code></em>);</pre>
+<div class="refsect3">
+<a name="gst-player-video-info-get-bitrate.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>info</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerVideoInfo"><span class="type">GstPlayerVideoInfo</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-player-video-info-get-bitrate.returns"></a><h4>Returns</h4>
+<p> the current bitrate of video in <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerVideoInfo"><span class="type">GstPlayerVideoInfo</span></a>.</p>
+</div>
</div>
<hr>
<div class="refsect2">
<a name="gst-player-video-info-get-height"></a><h3>gst_player_video_info_get_height ()</h3>
<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint"><span class="returnvalue">gint</span></a>
gst_player_video_info_get_height (<em class="parameter"><code>const <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerVideoInfo"><span class="type">GstPlayerVideoInfo</span></a> *info</code></em>);</pre>
+<div class="refsect3">
+<a name="gst-player-video-info-get-height.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>info</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerVideoInfo"><span class="type">GstPlayerVideoInfo</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-player-video-info-get-height.returns"></a><h4>Returns</h4>
+<p> the height of video in <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerVideoInfo"><span class="type">GstPlayerVideoInfo</span></a>.</p>
+</div>
</div>
<hr>
<div class="refsect2">
<a name="gst-player-video-info-get-width"></a><h3>gst_player_video_info_get_width ()</h3>
<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint"><span class="returnvalue">gint</span></a>
gst_player_video_info_get_width (<em class="parameter"><code>const <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerVideoInfo"><span class="type">GstPlayerVideoInfo</span></a> *info</code></em>);</pre>
+<div class="refsect3">
+<a name="gst-player-video-info-get-width.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>info</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerVideoInfo"><span class="type">GstPlayerVideoInfo</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-player-video-info-get-width.returns"></a><h4>Returns</h4>
+<p> the width of video in <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerVideoInfo"><span class="type">GstPlayerVideoInfo</span></a>.</p>
+</div>
</div>
<hr>
<div class="refsect2">
@@ -431,12 +862,58 @@
gst_player_video_info_get_framerate (<em class="parameter"><code>const <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerVideoInfo"><span class="type">GstPlayerVideoInfo</span></a> *info</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint"><span class="type">gint</span></a> *fps_n</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint"><span class="type">gint</span></a> *fps_d</code></em>);</pre>
+<div class="refsect3">
+<a name="gst-player-video-info-get-framerate.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>info</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerVideoInfo"><span class="type">GstPlayerVideoInfo</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>fps_n</p></td>
+<td class="parameter_description"><p> Numerator of frame rate. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>fps_d</p></td>
+<td class="parameter_description"><p> Denominator of frame rate. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
</div>
<hr>
<div class="refsect2">
<a name="gst-player-video-info-get-max-bitrate"></a><h3>gst_player_video_info_get_max_bitrate ()</h3>
<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint"><span class="returnvalue">gint</span></a>
gst_player_video_info_get_max_bitrate (<em class="parameter"><code>const <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerVideoInfo"><span class="type">GstPlayerVideoInfo</span></a> *info</code></em>);</pre>
+<div class="refsect3">
+<a name="gst-player-video-info-get-max-bitrate.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>info</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerVideoInfo"><span class="type">GstPlayerVideoInfo</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-player-video-info-get-max-bitrate.returns"></a><h4>Returns</h4>
+<p> the maximum bitrate of video in <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerVideoInfo"><span class="type">GstPlayerVideoInfo</span></a>.</p>
+</div>
</div>
<hr>
<div class="refsect2">
@@ -446,12 +923,61 @@
(<em class="parameter"><code>const <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerVideoInfo"><span class="type">GstPlayerVideoInfo</span></a> *info</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="type">guint</span></a> *par_n</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="type">guint</span></a> *par_d</code></em>);</pre>
+<p>Returns the pixel aspect ratio in <em class="parameter"><code>par_n</code></em>
+ and <em class="parameter"><code>par_d</code></em>
+</p>
+<div class="refsect3">
+<a name="gst-player-video-info-get-pixel-aspect-ratio.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>info</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerVideoInfo"><span class="type">GstPlayerVideoInfo</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>par_n</p></td>
+<td class="parameter_description"><p> numerator. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>par_d</p></td>
+<td class="parameter_description"><p> denominator. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
</div>
<hr>
<div class="refsect2">
<a name="gst-player-subtitle-info-get-language"></a><h3>gst_player_subtitle_info_get_language ()</h3>
<pre class="programlisting">const <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *
gst_player_subtitle_info_get_language (<em class="parameter"><code>const <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerSubtitleInfo"><span class="type">GstPlayerSubtitleInfo</span></a> *info</code></em>);</pre>
+<div class="refsect3">
+<a name="gst-player-subtitle-info-get-language.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>info</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerSubtitleInfo"><span class="type">GstPlayerSubtitleInfo</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-player-subtitle-info-get-language.returns"></a><h4>Returns</h4>
+<p> the language of the stream, or NULL if unknown.</p>
+</div>
</div>
</div>
<div class="refsect1">
@@ -459,26 +985,33 @@
<div class="refsect2">
<a name="GstPlayerMediaInfo-struct"></a><h3>GstPlayerMediaInfo</h3>
<pre class="programlisting">typedef struct _GstPlayerMediaInfo GstPlayerMediaInfo;</pre>
+<p>Structure containing the media information of a URI.</p>
</div>
<hr>
<div class="refsect2">
<a name="GstPlayerStreamInfo-struct"></a><h3>GstPlayerStreamInfo</h3>
<pre class="programlisting">typedef struct _GstPlayerStreamInfo GstPlayerStreamInfo;</pre>
+<p>Base structure for information concering a media stream. Depending on
+the stream type, one can find more media-specific information in
+<a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerVideoInfo"><span class="type">GstPlayerVideoInfo</span></a>, <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerAudioInfo"><span class="type">GstPlayerAudioInfo</span></a>, <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerSubtitleInfo"><span class="type">GstPlayerSubtitleInfo</span></a>.</p>
</div>
<hr>
<div class="refsect2">
<a name="GstPlayerAudioInfo-struct"></a><h3>GstPlayerAudioInfo</h3>
<pre class="programlisting">typedef struct _GstPlayerAudioInfo GstPlayerAudioInfo;</pre>
+<p><a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerStreamInfo"><span class="type">GstPlayerStreamInfo</span></a> specific to audio streams.</p>
</div>
<hr>
<div class="refsect2">
<a name="GstPlayerVideoInfo-struct"></a><h3>GstPlayerVideoInfo</h3>
<pre class="programlisting">typedef struct _GstPlayerVideoInfo GstPlayerVideoInfo;</pre>
+<p><a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerStreamInfo"><span class="type">GstPlayerStreamInfo</span></a> specific to video streams.</p>
</div>
<hr>
<div class="refsect2">
<a name="GstPlayerSubtitleInfo-struct"></a><h3>GstPlayerSubtitleInfo</h3>
<pre class="programlisting">typedef struct _GstPlayerSubtitleInfo GstPlayerSubtitleInfo;</pre>
+<p><a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerStreamInfo"><span class="type">GstPlayerStreamInfo</span></a> specific to subtitle streams.</p>
</div>
</div>
</div>
diff --git a/docs/libs/html/gst-plugins-bad-libs-gstplayer-videooverlayvideorenderer.html b/docs/libs/html/gst-plugins-bad-libs-gstplayer-videooverlayvideorenderer.html
index b673335..dc406f6 100644
--- a/docs/libs/html/gst-plugins-bad-libs-gstplayer-videooverlayvideorenderer.html
+++ b/docs/libs/html/gst-plugins-bad-libs-gstplayer-videooverlayvideorenderer.html
@@ -27,7 +27,7 @@
<div class="refnamediv"><table width="100%"><tr>
<td valign="top">
<h2><span class="refentrytitle"><a name="gst-plugins-bad-libs-gstplayer-videooverlayvideorenderer.top_of_page"></a>gstplayer-videooverlayvideorenderer</span></h2>
-<p>gstplayer-videooverlayvideorenderer</p>
+<p>gstplayer-videooverlayvideorenderer — Player Video Overlay Video Renderer</p>
</td>
<td class="gallery_image" valign="top" align="right"></td>
</tr></table></div>
@@ -100,6 +100,26 @@
<pre class="programlisting"><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayerVideoRenderer"><span class="returnvalue">GstPlayerVideoRenderer</span></a> *
gst_player_video_overlay_video_renderer_new
(<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> window_handle</code></em>);</pre>
+<div class="refsect3">
+<a name="gst-player-video-overlay-video-renderer-new.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>window_handle</p></td>
+<td class="parameter_description"><p> Window handle to use or <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-player-video-overlay-video-renderer-new.returns"></a><h4>Returns</h4>
+<p>. </p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
+</div>
</div>
<hr>
<div class="refsect2">
@@ -107,6 +127,27 @@
<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gpointer"><span class="returnvalue">gpointer</span></a>
gst_player_video_overlay_video_renderer_get_window_handle
(<em class="parameter"><code><span class="type">GstPlayerVideoOverlayVideoRenderer</span> *self</code></em>);</pre>
+<div class="refsect3">
+<a name="gst-player-video-overlay-video-renderer-get-window-handle.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>self</p></td>
+<td class="parameter_description"><p><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayerVideoRenderer"><span class="type">GstPlayerVideoRenderer</span></a> instance</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-player-video-overlay-video-renderer-get-window-handle.returns"></a><h4>Returns</h4>
+<p> The currently set, platform specific window
+handle. </p>
+<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p>
+</div>
</div>
<hr>
<div class="refsect2">
@@ -115,6 +156,30 @@
gst_player_video_overlay_video_renderer_set_window_handle
(<em class="parameter"><code><span class="type">GstPlayerVideoOverlayVideoRenderer</span> *self</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> window_handle</code></em>);</pre>
+<p>Sets the platform specific window handle into which the video
+should be rendered</p>
+<div class="refsect3">
+<a name="gst-player-video-overlay-video-renderer-set-window-handle.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>self</p></td>
+<td class="parameter_description"><p><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayerVideoRenderer"><span class="type">GstPlayerVideoRenderer</span></a> instance</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>window_handle</p></td>
+<td class="parameter_description"><p>handle referencing to the platform specific window</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
</div>
<hr>
<div class="refsect2">
@@ -122,6 +187,23 @@
<pre class="programlisting"><span class="returnvalue">void</span>
gst_player_video_overlay_video_renderer_expose
(<em class="parameter"><code><span class="type">GstPlayerVideoOverlayVideoRenderer</span> *self</code></em>);</pre>
+<p>Tell an overlay that it has been exposed. This will redraw the current frame
+in the drawable even if the pipeline is PAUSED.</p>
+<div class="refsect3">
+<a name="gst-player-video-overlay-video-renderer-expose.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>self</p></td>
+<td class="parameter_description"><p>a <span class="type">GstPlayerVideoOverlayVideoRenderer</span> instance.</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
</div>
<hr>
<div class="refsect2">
@@ -133,6 +215,45 @@
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint"><span class="type">gint</span></a> *y</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint"><span class="type">gint</span></a> *width</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint"><span class="type">gint</span></a> *height</code></em>);</pre>
+<p>Return the currently configured render rectangle. See <a class="link" href="gst-plugins-bad-libs-gstplayer-videooverlayvideorenderer.html#gst-player-video-overlay-video-renderer-set-render-rectangle" title="gst_player_video_overlay_video_renderer_set_render_rectangle ()"><code class="function">gst_player_video_overlay_video_renderer_set_render_rectangle()</code></a>
+for details.</p>
+<div class="refsect3">
+<a name="gst-player-video-overlay-video-renderer-get-render-rectangle.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>self</p></td>
+<td class="parameter_description"><p>a <span class="type">GstPlayerVideoOverlayVideoRenderer</span> instance</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>x</p></td>
+<td class="parameter_description"><p> the horizontal offset of the render area inside the window. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>][<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>y</p></td>
+<td class="parameter_description"><p> the vertical offset of the render area inside the window. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>][<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>width</p></td>
+<td class="parameter_description"><p> the width of the render area inside the window. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>][<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>height</p></td>
+<td class="parameter_description"><p> the height of the render area inside the window. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>][<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
</div>
<hr>
<div class="refsect2">
@@ -144,6 +265,54 @@
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint"><span class="type">gint</span></a> y</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint"><span class="type">gint</span></a> width</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint"><span class="type">gint</span></a> height</code></em>);</pre>
+<p>Configure a subregion as a video target within the window set by
+<a class="link" href="gst-plugins-bad-libs-gstplayer-videooverlayvideorenderer.html#gst-player-video-overlay-video-renderer-set-window-handle" title="gst_player_video_overlay_video_renderer_set_window_handle ()"><code class="function">gst_player_video_overlay_video_renderer_set_window_handle()</code></a>. If this is not
+used or not supported the video will fill the area of the window set as the
+overlay to 100%. By specifying the rectangle, the video can be overlaid to
+a specific region of that window only. After setting the new rectangle one
+should call <a class="link" href="gst-plugins-bad-libs-gstplayer-videooverlayvideorenderer.html#gst-player-video-overlay-video-renderer-expose" title="gst_player_video_overlay_video_renderer_expose ()"><code class="function">gst_player_video_overlay_video_renderer_expose()</code></a> to force a
+redraw. To unset the region pass -1 for the <em class="parameter"><code>width</code></em>
+ and <em class="parameter"><code>height</code></em>
+ parameters.</p>
+<p>This method is needed for non fullscreen video overlay in UI toolkits that
+do not support subwindows.</p>
+<div class="refsect3">
+<a name="gst-player-video-overlay-video-renderer-set-render-rectangle.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>self</p></td>
+<td class="parameter_description"><p>a <span class="type">GstPlayerVideoOverlayVideoRenderer</span> instance</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>x</p></td>
+<td class="parameter_description"><p>the horizontal offset of the render area inside the window</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>y</p></td>
+<td class="parameter_description"><p>the vertical offset of the render area inside the window</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>width</p></td>
+<td class="parameter_description"><p>the width of the render area inside the window</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>height</p></td>
+<td class="parameter_description"><p>the height of the render area inside the window</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
</div>
</div>
<div class="refsect1">
diff --git a/docs/libs/html/gst-plugins-bad-libs-gstplayer-visualization.html b/docs/libs/html/gst-plugins-bad-libs-gstplayer-visualization.html
index 89f1675..557c3ef 100644
--- a/docs/libs/html/gst-plugins-bad-libs-gstplayer-visualization.html
+++ b/docs/libs/html/gst-plugins-bad-libs-gstplayer-visualization.html
@@ -28,7 +28,7 @@
<div class="refnamediv"><table width="100%"><tr>
<td valign="top">
<h2><span class="refentrytitle"><a name="gst-plugins-bad-libs-gstplayer-visualization.top_of_page"></a>gstplayer-visualization</span></h2>
-<p>gstplayer-visualization</p>
+<p>gstplayer-visualization — Player Visualization</p>
</td>
<td class="gallery_image" valign="top" align="right"></td>
</tr></table></div>
@@ -103,24 +103,86 @@
<a name="gst-player-visualizations-get"></a><h3>gst_player_visualizations_get ()</h3>
<pre class="programlisting"><a class="link" href="gst-plugins-bad-libs-gstplayer-visualization.html#GstPlayerVisualization"><span class="returnvalue">GstPlayerVisualization</span></a> **
gst_player_visualizations_get (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<div class="refsect3">
+<a name="gst-player-visualizations-get.returns"></a><h4>Returns</h4>
+<p> a <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> terminated array containing all available
+visualizations. Use <a class="link" href="gst-plugins-bad-libs-gstplayer-visualization.html#gst-player-visualizations-free" title="gst_player_visualizations_free ()"><code class="function">gst_player_visualizations_free()</code></a> after
+usage. </p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][<acronym title="Parameter points to an array of items."><span class="acronym">array</span></acronym> zero-terminated=1][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> GstPlayerVisualization]</span></p>
+</div>
</div>
<hr>
<div class="refsect2">
<a name="gst-player-visualizations-free"></a><h3>gst_player_visualizations_free ()</h3>
<pre class="programlisting"><span class="returnvalue">void</span>
gst_player_visualizations_free (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstplayer-visualization.html#GstPlayerVisualization"><span class="type">GstPlayerVisualization</span></a> **viss</code></em>);</pre>
+<p>Frees a <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> terminated array of <a class="link" href="gst-plugins-bad-libs-gstplayer-visualization.html#GstPlayerVisualization"><span class="type">GstPlayerVisualization</span></a>.</p>
+<div class="refsect3">
+<a name="gst-player-visualizations-free.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>viss</p></td>
+<td class="parameter_description"><p>a <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> terminated array of <a class="link" href="gst-plugins-bad-libs-gstplayer-visualization.html#GstPlayerVisualization"><span class="type">GstPlayerVisualization</span></a> to free</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
</div>
<hr>
<div class="refsect2">
<a name="gst-player-visualization-copy"></a><h3>gst_player_visualization_copy ()</h3>
<pre class="programlisting"><a class="link" href="gst-plugins-bad-libs-gstplayer-visualization.html#GstPlayerVisualization"><span class="returnvalue">GstPlayerVisualization</span></a> *
gst_player_visualization_copy (<em class="parameter"><code>const <a class="link" href="gst-plugins-bad-libs-gstplayer-visualization.html#GstPlayerVisualization"><span class="type">GstPlayerVisualization</span></a> *vis</code></em>);</pre>
+<p>Makes a copy of the <a class="link" href="gst-plugins-bad-libs-gstplayer-visualization.html#GstPlayerVisualization"><span class="type">GstPlayerVisualization</span></a>. The result must be
+freed using <a class="link" href="gst-plugins-bad-libs-gstplayer-visualization.html#gst-player-visualization-free" title="gst_player_visualization_free ()"><code class="function">gst_player_visualization_free()</code></a>.</p>
+<div class="refsect3">
+<a name="gst-player-visualization-copy.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>vis</p></td>
+<td class="parameter_description"><p><a class="link" href="gst-plugins-bad-libs-gstplayer-visualization.html#GstPlayerVisualization"><span class="type">GstPlayerVisualization</span></a> instance</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-player-visualization-copy.returns"></a><h4>Returns</h4>
+<p> an allocated copy of <em class="parameter"><code>vis</code></em>
+. </p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
+</div>
</div>
<hr>
<div class="refsect2">
<a name="gst-player-visualization-free"></a><h3>gst_player_visualization_free ()</h3>
<pre class="programlisting"><span class="returnvalue">void</span>
gst_player_visualization_free (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstplayer-visualization.html#GstPlayerVisualization"><span class="type">GstPlayerVisualization</span></a> *vis</code></em>);</pre>
+<p>Frees a <a class="link" href="gst-plugins-bad-libs-gstplayer-visualization.html#GstPlayerVisualization"><span class="type">GstPlayerVisualization</span></a>.</p>
+<div class="refsect3">
+<a name="gst-player-visualization-free.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>vis</p></td>
+<td class="parameter_description"><p><a class="link" href="gst-plugins-bad-libs-gstplayer-visualization.html#GstPlayerVisualization"><span class="type">GstPlayerVisualization</span></a> instance</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
</div>
</div>
<div class="refsect1">
@@ -132,6 +194,29 @@
gchar *description;
};
</pre>
+<p>A <a class="link" href="gst-plugins-bad-libs-gstplayer-visualization.html#GstPlayerVisualization"><span class="type">GstPlayerVisualization</span></a> descriptor.</p>
+<div class="refsect3">
+<a name="GstPlayerVisualization.members"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="300px" class="struct_members_name">
+<col class="struct_members_description">
+<col width="200px" class="struct_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *<em class="structfield"><code><a name="GstPlayerVisualization-struct.name"></a>name</code></em>;</p></td>
+<td class="struct_member_description"><p>name of the visualization.</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *<em class="structfield"><code><a name="GstPlayerVisualization-struct.description"></a>description</code></em>;</p></td>
+<td class="struct_member_description"><p>description of the visualization.</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
</div>
</div>
</div>
diff --git a/docs/libs/html/gst-plugins-bad-libs-gstplayer.html b/docs/libs/html/gst-plugins-bad-libs-gstplayer.html
index 7c38c8c..ed479f4 100644
--- a/docs/libs/html/gst-plugins-bad-libs-gstplayer.html
+++ b/docs/libs/html/gst-plugins-bad-libs-gstplayer.html
@@ -32,7 +32,7 @@
<div class="refnamediv"><table width="100%"><tr>
<td valign="top">
<h2><span class="refentrytitle"><a name="gst-plugins-bad-libs-gstplayer.top_of_page"></a>gstplayer</span></h2>
-<p>gstplayer</p>
+<p>gstplayer — Player</p>
</td>
<td class="gallery_image" valign="top" align="right"></td>
</tr></table></div>
@@ -158,18 +158,18 @@
</tr>
<tr>
<td class="function_type">
-<span class="returnvalue">void</span>
+<a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
</td>
<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gstplayer.html#gst-player-set-position-update-interval" title="gst_player_set_position_update_interval ()">gst_player_set_position_update_interval</a> <span class="c_punctuation">()</span>
+<a class="link" href="gst-plugins-bad-libs-gstplayer.html#gst-player-set-config" title="gst_player_set_config ()">gst_player_set_config</a> <span class="c_punctuation">()</span>
</td>
</tr>
<tr>
<td class="function_type">
-<a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>
+<a href="/usr/share/gtk-doc/html/gstreamer-1.0GstStructure.html#GstStructure-struct"><span class="returnvalue">GstStructure</span></a> *
</td>
<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gstplayer.html#gst-player-get-position-update-interval" title="gst_player_get_position_update_interval ()">gst_player_get_position_update_interval</a> <span class="c_punctuation">()</span>
+<a class="link" href="gst-plugins-bad-libs-gstplayer.html#gst-player-get-config" title="gst_player_get_config ()">gst_player_get_config</a> <span class="c_punctuation">()</span>
</td>
</tr>
<tr>
@@ -425,6 +425,38 @@
<a class="link" href="gst-plugins-bad-libs-gstplayer.html#gst-player-set-rate" title="gst_player_set_rate ()">gst_player_set_rate</a> <span class="c_punctuation">()</span>
</td>
</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-gstplayer.html#gst-player-config-set-position-update-interval" title="gst_player_config_set_position_update_interval ()">gst_player_config_set_position_update_interval</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-gstplayer.html#gst-player-config-get-position-update-interval" title="gst_player_config_get_position_update_interval ()">gst_player_config_get_position_update_interval</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-gstplayer.html#gst-player-config-set-user-agent" title="gst_player_config_set_user_agent ()">gst_player_config_set_user_agent</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-gstplayer.html#gst-player-config-get-user-agent" title="gst_player_config_get_user_agent ()">gst_player_config_get_user_agent</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
</tbody>
</table></div>
</div>
@@ -488,11 +520,6 @@
<td class="property_flags">Read</td>
</tr>
<tr>
-<td class="property_type"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="type">guint</span></a></td>
-<td class="property_name"><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer--position-update-interval" title="The “position-update-interval” property">position-update-interval</a></td>
-<td class="property_flags">Read / Write</td>
-</tr>
-<tr>
<td class="property_type"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a></td>
<td class="property_name"><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer--rate" title="The “rate” property">rate</a></td>
<td class="property_flags">Read / Write</td>
@@ -703,24 +730,107 @@
<pre class="programlisting"><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="returnvalue">GstPlayer</span></a> *
gst_player_new (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayerVideoRenderer"><span class="type">GstPlayerVideoRenderer</span></a> *video_renderer</code></em>,
<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayerSignalDispatcher"><span class="type">GstPlayerSignalDispatcher</span></a> *signal_dispatcher</code></em>);</pre>
+<p>Creates a new <a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> instance that uses <em class="parameter"><code>signal_dispatcher</code></em>
+ to dispatch
+signals to some event loop system, or emits signals directly if NULL is
+passed. See <a class="link" href="gst-plugins-bad-libs-gstplayer-gmaincontextsignaldispatcher.html#gst-player-g-main-context-signal-dispatcher-new" title="gst_player_g_main_context_signal_dispatcher_new ()"><code class="function">gst_player_g_main_context_signal_dispatcher_new()</code></a>.</p>
+<p>Video is going to be rendered by <em class="parameter"><code>video_renderer</code></em>
+, or if <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> is provided
+no special video set up will be done and some default handling will be
+performed.</p>
+<div class="refsect3">
+<a name="gst-player-new.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>video_renderer</p></td>
+<td class="parameter_description"><p> GstPlayerVideoRenderer to use. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>signal_dispatcher</p></td>
+<td class="parameter_description"><p> GstPlayerSignalDispatcher to use. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-player-new.returns"></a><h4>Returns</h4>
+<p> a new <a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> instance</p>
+</div>
</div>
<hr>
<div class="refsect2">
<a name="gst-player-play"></a><h3>gst_player_play ()</h3>
<pre class="programlisting"><span class="returnvalue">void</span>
gst_player_play (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> *player</code></em>);</pre>
+<p>Request to play the loaded stream.</p>
+<div class="refsect3">
+<a name="gst-player-play.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>player</p></td>
+<td class="parameter_description"><p><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> instance</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
</div>
<hr>
<div class="refsect2">
<a name="gst-player-pause"></a><h3>gst_player_pause ()</h3>
<pre class="programlisting"><span class="returnvalue">void</span>
gst_player_pause (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> *player</code></em>);</pre>
+<p>Pauses the current stream.</p>
+<div class="refsect3">
+<a name="gst-player-pause.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>player</p></td>
+<td class="parameter_description"><p><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> instance</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
</div>
<hr>
<div class="refsect2">
<a name="gst-player-stop"></a><h3>gst_player_stop ()</h3>
<pre class="programlisting"><span class="returnvalue">void</span>
gst_player_stop (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> *player</code></em>);</pre>
+<p>Stops playing the current stream and resets to the first position
+in the stream.</p>
+<div class="refsect3">
+<a name="gst-player-stop.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>player</p></td>
+<td class="parameter_description"><p><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> instance</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
</div>
<hr>
<div class="refsect2">
@@ -728,6 +838,31 @@
<pre class="programlisting"><span class="returnvalue">void</span>
gst_player_seek (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> *player</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/gstreamer-1.0GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> position</code></em>);</pre>
+<p>Seeks the currently-playing stream to the absolute <em class="parameter"><code>position</code></em>
+ time
+in nanoseconds.</p>
+<div class="refsect3">
+<a name="gst-player-seek.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>player</p></td>
+<td class="parameter_description"><p><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> instance</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>position</p></td>
+<td class="parameter_description"><p>position to seek in nanoseconds</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
</div>
<hr>
<div class="refsect2">
@@ -735,24 +870,110 @@
<pre class="programlisting"><span class="returnvalue">void</span>
gst_player_set_uri (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> *player</code></em>,
<em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *uri</code></em>);</pre>
+<p>Sets the next URI to play.</p>
+<div class="refsect3">
+<a name="gst-player-set-uri.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>player</p></td>
+<td class="parameter_description"><p><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> instance</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>uri</p></td>
+<td class="parameter_description"><p>next URI to play.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
</div>
<hr>
<div class="refsect2">
<a name="gst-player-get-uri"></a><h3>gst_player_get_uri ()</h3>
<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *
gst_player_get_uri (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> *player</code></em>);</pre>
+<p>Gets the URI of the currently-playing stream.</p>
+<div class="refsect3">
+<a name="gst-player-get-uri.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>player</p></td>
+<td class="parameter_description"><p><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> instance</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-player-get-uri.returns"></a><h4>Returns</h4>
+<p> a string containing the URI of the
+currently-playing stream. <a href="/usr/share/gtk-doc/html/glibglib-Memory-Allocation.html#g-free"><code class="function">g_free()</code></a> after usage. </p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
+</div>
</div>
<hr>
<div class="refsect2">
<a name="gst-player-get-duration"></a><h3>gst_player_get_duration ()</h3>
<pre class="programlisting"><a href="/usr/share/gtk-doc/html/gstreamer-1.0GstClock.html#GstClockTime"><span class="returnvalue">GstClockTime</span></a>
gst_player_get_duration (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> *player</code></em>);</pre>
+<p>Retrieves the duration of the media stream that self represents.</p>
+<div class="refsect3">
+<a name="gst-player-get-duration.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>player</p></td>
+<td class="parameter_description"><p><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> instance</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-player-get-duration.returns"></a><h4>Returns</h4>
+<p> the duration of the currently-playing media stream, in
+nanoseconds.</p>
+</div>
</div>
<hr>
<div class="refsect2">
<a name="gst-player-get-position"></a><h3>gst_player_get_position ()</h3>
<pre class="programlisting"><a href="/usr/share/gtk-doc/html/gstreamer-1.0GstClock.html#GstClockTime"><span class="returnvalue">GstClockTime</span></a>
gst_player_get_position (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> *player</code></em>);</pre>
+<div class="refsect3">
+<a name="gst-player-get-position.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>player</p></td>
+<td class="parameter_description"><p><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> instance</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-player-get-position.returns"></a><h4>Returns</h4>
+<p> the absolute position time, in nanoseconds, of the
+currently-playing stream.</p>
+</div>
</div>
<hr>
<div class="refsect2">
@@ -760,6 +981,29 @@
<pre class="programlisting"><span class="returnvalue">void</span>
gst_player_set_volume (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> *player</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a> val</code></em>);</pre>
+<p>Sets the volume level of the stream as a percentage between 0 and 1.</p>
+<div class="refsect3">
+<a name="gst-player-set-volume.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>player</p></td>
+<td class="parameter_description"><p><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> instance</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>val</p></td>
+<td class="parameter_description"><p>the new volume level, as a percentage between 0 and 1</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
</div>
<hr>
<div class="refsect2">
@@ -767,75 +1011,344 @@
<pre class="programlisting"><span class="returnvalue">void</span>
gst_player_set_mute (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> *player</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> val</code></em>);</pre>
+<p><a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the currently-playing stream should be muted.</p>
+<div class="refsect3">
+<a name="gst-player-set-mute.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>player</p></td>
+<td class="parameter_description"><p><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> instance</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>val</p></td>
+<td class="parameter_description"><p>Mute state the should be set</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
</div>
<hr>
<div class="refsect2">
<a name="gst-player-get-volume"></a><h3>gst_player_get_volume ()</h3>
<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gdouble"><span class="returnvalue">gdouble</span></a>
gst_player_get_volume (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> *player</code></em>);</pre>
+<p>Returns the current volume level, as a percentage between 0 and 1.</p>
+<div class="refsect3">
+<a name="gst-player-get-volume.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>player</p></td>
+<td class="parameter_description"><p><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> instance</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-player-get-volume.returns"></a><h4>Returns</h4>
+<p> the volume as percentage between 0 and 1.</p>
+</div>
</div>
<hr>
<div class="refsect2">
<a name="gst-player-get-mute"></a><h3>gst_player_get_mute ()</h3>
<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
gst_player_get_mute (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> *player</code></em>);</pre>
+<div class="refsect3">
+<a name="gst-player-get-mute.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>player</p></td>
+<td class="parameter_description"><p><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> instance</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-player-get-mute.returns"></a><h4>Returns</h4>
+<p> <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the currently-playing stream is muted.</p>
+</div>
</div>
<hr>
<div class="refsect2">
<a name="gst-player-get-pipeline"></a><h3>gst_player_get_pipeline ()</h3>
<pre class="programlisting"><a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#GstElement-struct"><span class="returnvalue">GstElement</span></a> *
gst_player_get_pipeline (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> *player</code></em>);</pre>
+<div class="refsect3">
+<a name="gst-player-get-pipeline.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>player</p></td>
+<td class="parameter_description"><p><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> instance</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-player-get-pipeline.returns"></a><h4>Returns</h4>
+<p> The internal playbin instance. </p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
+</div>
</div>
<hr>
<div class="refsect2">
-<a name="gst-player-set-position-update-interval"></a><h3>gst_player_set_position_update_interval ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-gst_player_set_position_update_interval
- (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> *player</code></em>,
- <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="type">guint</span></a> interval</code></em>);</pre>
+<a name="gst-player-set-config"></a><h3>gst_player_set_config ()</h3>
+<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gst_player_set_config (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> *player</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/gstreamer-1.0GstStructure.html#GstStructure-struct"><span class="type">GstStructure</span></a> *config</code></em>);</pre>
+<p>Set the configuration of the player. If the player is already configured, and
+the configuration haven't change, this function will return <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a>. If the
+player is not in the GST_PLAYER_STATE_STOPPED, this method will return <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a>
+and active configuration will remain.</p>
+<p><em class="parameter"><code>config</code></em>
+ is a <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstStructure.html#GstStructure-struct"><span class="type">GstStructure</span></a> that contains the configuration parameters for
+the player.</p>
+<p>This function takes ownership of <em class="parameter"><code>config</code></em>
+.</p>
+<div class="refsect3">
+<a name="gst-player-set-config.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>player</p></td>
+<td class="parameter_description"><p><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> instance</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>config</p></td>
+<td class="parameter_description"><p> a <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstStructure.html#GstStructure-struct"><span class="type">GstStructure</span></a>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-player-set-config.returns"></a><h4>Returns</h4>
+<p> <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> when the configuration could be set.
+Since 1.10</p>
+</div>
</div>
<hr>
<div class="refsect2">
-<a name="gst-player-get-position-update-interval"></a><h3>gst_player_get_position_update_interval ()</h3>
-<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>
-gst_player_get_position_update_interval
- (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> *player</code></em>);</pre>
+<a name="gst-player-get-config"></a><h3>gst_player_get_config ()</h3>
+<pre class="programlisting"><a href="/usr/share/gtk-doc/html/gstreamer-1.0GstStructure.html#GstStructure-struct"><span class="returnvalue">GstStructure</span></a> *
+gst_player_get_config (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> *player</code></em>);</pre>
+<p>Get a copy of the current configuration of the player. This configuration
+can either be modified and used for the <a class="link" href="gst-plugins-bad-libs-gstplayer.html#gst-player-set-config" title="gst_player_set_config ()"><code class="function">gst_player_set_config()</code></a> call
+or it must be freed after usage.</p>
+<div class="refsect3">
+<a name="gst-player-get-config.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>player</p></td>
+<td class="parameter_description"><p><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> instance</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-player-get-config.returns"></a><h4>Returns</h4>
+<p> a copy of the current configuration of <em class="parameter"><code>player</code></em>
+. Use
+<a href="/usr/share/gtk-doc/html/gstreamer-1.0GstStructure.html#gst-structure-free"><code class="function">gst_structure_free()</code></a> after usage or <a class="link" href="gst-plugins-bad-libs-gstplayer.html#gst-player-set-config" title="gst_player_set_config ()"><code class="function">gst_player_set_config()</code></a>.</p>
+<p>Since 1.10. </p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
+</div>
</div>
<hr>
<div class="refsect2">
<a name="gst-player-state-get-name"></a><h3>gst_player_state_get_name ()</h3>
<pre class="programlisting">const <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *
gst_player_state_get_name (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayerState" title="enum GstPlayerState"><span class="type">GstPlayerState</span></a> state</code></em>);</pre>
+<p>Gets a string representing the given state.</p>
+<div class="refsect3">
+<a name="gst-player-state-get-name.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>state</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayerState" title="enum GstPlayerState"><span class="type">GstPlayerState</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-player-state-get-name.returns"></a><h4>Returns</h4>
+<p> a string with the name of the state. </p>
+<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p>
+</div>
</div>
<hr>
<div class="refsect2">
<a name="gst-player-error-get-name"></a><h3>gst_player_error_get_name ()</h3>
<pre class="programlisting">const <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *
gst_player_error_get_name (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayerError" title="enum GstPlayerError"><span class="type">GstPlayerError</span></a> error</code></em>);</pre>
+<p>Gets a string representing the given error.</p>
+<div class="refsect3">
+<a name="gst-player-error-get-name.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>error</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayerError" title="enum GstPlayerError"><span class="type">GstPlayerError</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-player-error-get-name.returns"></a><h4>Returns</h4>
+<p> a string with the given error. </p>
+<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p>
+</div>
</div>
<hr>
<div class="refsect2">
<a name="gst-player-get-media-info"></a><h3>gst_player_get_media_info ()</h3>
<pre class="programlisting"><a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerMediaInfo"><span class="returnvalue">GstPlayerMediaInfo</span></a> *
gst_player_get_media_info (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> *player</code></em>);</pre>
+<p>A Function to get the current media info <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerMediaInfo"><span class="type">GstPlayerMediaInfo</span></a> instance.</p>
+<div class="refsect3">
+<a name="gst-player-get-media-info.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>player</p></td>
+<td class="parameter_description"><p><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> instance</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-player-get-media-info.returns"></a><h4>Returns</h4>
+<p> media info instance.</p>
+<p>The caller should free it with <a href="/usr/share/gtk-doc/html/gobjectgobject-The-Base-Object-Type.html#g-object-unref"><code class="function">g_object_unref()</code></a>. </p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
+</div>
</div>
<hr>
<div class="refsect2">
<a name="gst-player-get-audio-streams"></a><h3>gst_player_get_audio_streams ()</h3>
<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Doubly-Linked-Lists.html#GList"><span class="returnvalue">GList</span></a> *
gst_player_get_audio_streams (<em class="parameter"><code>const <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerMediaInfo"><span class="type">GstPlayerMediaInfo</span></a> *info</code></em>);</pre>
+<div class="refsect3">
+<a name="gst-player-get-audio-streams.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>info</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerMediaInfo"><span class="type">GstPlayerMediaInfo</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-player-get-audio-streams.returns"></a><h4>Returns</h4>
+<p> A <a href="/usr/share/gtk-doc/html/glibglib-Doubly-Linked-Lists.html#GList"><span class="type">GList</span></a> of
+matching <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerAudioInfo"><span class="type">GstPlayerAudioInfo</span></a>. </p>
+<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> GstPlayerAudioInfo]</span></p>
+</div>
</div>
<hr>
<div class="refsect2">
<a name="gst-player-get-video-streams"></a><h3>gst_player_get_video_streams ()</h3>
<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Doubly-Linked-Lists.html#GList"><span class="returnvalue">GList</span></a> *
gst_player_get_video_streams (<em class="parameter"><code>const <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerMediaInfo"><span class="type">GstPlayerMediaInfo</span></a> *info</code></em>);</pre>
+<div class="refsect3">
+<a name="gst-player-get-video-streams.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>info</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerMediaInfo"><span class="type">GstPlayerMediaInfo</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-player-get-video-streams.returns"></a><h4>Returns</h4>
+<p> A <a href="/usr/share/gtk-doc/html/glibglib-Doubly-Linked-Lists.html#GList"><span class="type">GList</span></a> of
+matching <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerVideoInfo"><span class="type">GstPlayerVideoInfo</span></a>. </p>
+<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> GstPlayerVideoInfo]</span></p>
+</div>
</div>
<hr>
<div class="refsect2">
<a name="gst-player-get-subtitle-streams"></a><h3>gst_player_get_subtitle_streams ()</h3>
<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Doubly-Linked-Lists.html#GList"><span class="returnvalue">GList</span></a> *
gst_player_get_subtitle_streams (<em class="parameter"><code>const <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerMediaInfo"><span class="type">GstPlayerMediaInfo</span></a> *info</code></em>);</pre>
+<div class="refsect3">
+<a name="gst-player-get-subtitle-streams.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>info</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerMediaInfo"><span class="type">GstPlayerMediaInfo</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-player-get-subtitle-streams.returns"></a><h4>Returns</h4>
+<p> A <a href="/usr/share/gtk-doc/html/glibglib-Doubly-Linked-Lists.html#GList"><span class="type">GList</span></a> of
+matching <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerSubtitleInfo"><span class="type">GstPlayerSubtitleInfo</span></a>. </p>
+<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> GstPlayerSubtitleInfo]</span></p>
+</div>
</div>
<hr>
<div class="refsect2">
@@ -843,6 +1356,34 @@
<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
gst_player_set_audio_track (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> *player</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint"><span class="type">gint</span></a> stream_index</code></em>);</pre>
+<div class="refsect3">
+<a name="gst-player-set-audio-track.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>player</p></td>
+<td class="parameter_description"><p><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> instance</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>stream_index</p></td>
+<td class="parameter_description"><p>stream index</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-player-set-audio-track.returns"></a><h4>Returns</h4>
+<p> <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> or <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a></p>
+<p>Sets the audio track <em class="parameter"><code>stream_idex</code></em>
+.</p>
+</div>
</div>
<hr>
<div class="refsect2">
@@ -850,6 +1391,34 @@
<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
gst_player_set_video_track (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> *player</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint"><span class="type">gint</span></a> stream_index</code></em>);</pre>
+<div class="refsect3">
+<a name="gst-player-set-video-track.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>player</p></td>
+<td class="parameter_description"><p><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> instance</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>stream_index</p></td>
+<td class="parameter_description"><p>stream index</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-player-set-video-track.returns"></a><h4>Returns</h4>
+<p> <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> or <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a></p>
+<p>Sets the video track <em class="parameter"><code>stream_index</code></em>
+.</p>
+</div>
</div>
<hr>
<div class="refsect2">
@@ -857,24 +1426,118 @@
<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
gst_player_set_subtitle_track (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> *player</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint"><span class="type">gint</span></a> stream_index</code></em>);</pre>
+<div class="refsect3">
+<a name="gst-player-set-subtitle-track.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>player</p></td>
+<td class="parameter_description"><p><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> instance</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>stream_index</p></td>
+<td class="parameter_description"><p>stream index</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-player-set-subtitle-track.returns"></a><h4>Returns</h4>
+<p> <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> or <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a></p>
+<p>Sets the subtitle strack <em class="parameter"><code>stream_index</code></em>
+.</p>
+</div>
</div>
<hr>
<div class="refsect2">
<a name="gst-player-get-current-audio-track"></a><h3>gst_player_get_current_audio_track ()</h3>
<pre class="programlisting"><a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerAudioInfo"><span class="returnvalue">GstPlayerAudioInfo</span></a> *
gst_player_get_current_audio_track (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> *player</code></em>);</pre>
+<p>A Function to get current audio <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerAudioInfo"><span class="type">GstPlayerAudioInfo</span></a> instance.</p>
+<div class="refsect3">
+<a name="gst-player-get-current-audio-track.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>player</p></td>
+<td class="parameter_description"><p><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> instance</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-player-get-current-audio-track.returns"></a><h4>Returns</h4>
+<p> current audio track.</p>
+<p>The caller should free it with <a href="/usr/share/gtk-doc/html/gobjectgobject-The-Base-Object-Type.html#g-object-unref"><code class="function">g_object_unref()</code></a>. </p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
+</div>
</div>
<hr>
<div class="refsect2">
<a name="gst-player-get-current-video-track"></a><h3>gst_player_get_current_video_track ()</h3>
<pre class="programlisting"><a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerVideoInfo"><span class="returnvalue">GstPlayerVideoInfo</span></a> *
gst_player_get_current_video_track (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> *player</code></em>);</pre>
+<p>A Function to get current video <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerVideoInfo"><span class="type">GstPlayerVideoInfo</span></a> instance.</p>
+<div class="refsect3">
+<a name="gst-player-get-current-video-track.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>player</p></td>
+<td class="parameter_description"><p><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> instance</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-player-get-current-video-track.returns"></a><h4>Returns</h4>
+<p> current video track.</p>
+<p>The caller should free it with <a href="/usr/share/gtk-doc/html/gobjectgobject-The-Base-Object-Type.html#g-object-unref"><code class="function">g_object_unref()</code></a>. </p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
+</div>
</div>
<hr>
<div class="refsect2">
<a name="gst-player-get-current-subtitle-track"></a><h3>gst_player_get_current_subtitle_track ()</h3>
<pre class="programlisting"><a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerSubtitleInfo"><span class="returnvalue">GstPlayerSubtitleInfo</span></a> *
gst_player_get_current_subtitle_track (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> *player</code></em>);</pre>
+<p>A Function to get current subtitle <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerSubtitleInfo"><span class="type">GstPlayerSubtitleInfo</span></a> instance.</p>
+<div class="refsect3">
+<a name="gst-player-get-current-subtitle-track.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>player</p></td>
+<td class="parameter_description"><p><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> instance</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-player-get-current-subtitle-track.returns"></a><h4>Returns</h4>
+<p> current subtitle track.</p>
+<p>The caller should free it with <a href="/usr/share/gtk-doc/html/gobjectgobject-The-Base-Object-Type.html#g-object-unref"><code class="function">g_object_unref()</code></a>. </p>
+<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p>
+</div>
</div>
<hr>
<div class="refsect2">
@@ -882,6 +1545,29 @@
<pre class="programlisting"><span class="returnvalue">void</span>
gst_player_set_audio_track_enabled (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> *player</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> enabled</code></em>);</pre>
+<p>Enable or disable the current audio track.</p>
+<div class="refsect3">
+<a name="gst-player-set-audio-track-enabled.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>player</p></td>
+<td class="parameter_description"><p><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> instance</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>enabled</p></td>
+<td class="parameter_description"><p>TRUE or FALSE</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
</div>
<hr>
<div class="refsect2">
@@ -889,6 +1575,29 @@
<pre class="programlisting"><span class="returnvalue">void</span>
gst_player_set_video_track_enabled (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> *player</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> enabled</code></em>);</pre>
+<p>Enable or disable the current video track.</p>
+<div class="refsect3">
+<a name="gst-player-set-video-track-enabled.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>player</p></td>
+<td class="parameter_description"><p><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> instance</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>enabled</p></td>
+<td class="parameter_description"><p>TRUE or FALSE</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
</div>
<hr>
<div class="refsect2">
@@ -896,6 +1605,29 @@
<pre class="programlisting"><span class="returnvalue">void</span>
gst_player_set_subtitle_track_enabled (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> *player</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> enabled</code></em>);</pre>
+<p>Enable or disable the current subtitle track.</p>
+<div class="refsect3">
+<a name="gst-player-set-subtitle-track-enabled.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>player</p></td>
+<td class="parameter_description"><p><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> instance</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>enabled</p></td>
+<td class="parameter_description"><p>TRUE or FALSE</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
</div>
<hr>
<div class="refsect2">
@@ -903,12 +1635,61 @@
<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
gst_player_set_subtitle_uri (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> *player</code></em>,
<em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *uri</code></em>);</pre>
+<div class="refsect3">
+<a name="gst-player-set-subtitle-uri.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>player</p></td>
+<td class="parameter_description"><p><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> instance</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>uri</p></td>
+<td class="parameter_description"><p>subtitle URI</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-player-set-subtitle-uri.returns"></a><h4>Returns</h4>
+<p> <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> or <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a></p>
+<p>Sets the external subtitle URI.</p>
+</div>
</div>
<hr>
<div class="refsect2">
<a name="gst-player-get-subtitle-uri"></a><h3>gst_player_get_subtitle_uri ()</h3>
<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *
gst_player_get_subtitle_uri (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> *player</code></em>);</pre>
+<p>current subtitle URI</p>
+<div class="refsect3">
+<a name="gst-player-get-subtitle-uri.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>player</p></td>
+<td class="parameter_description"><p><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> instance</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-player-get-subtitle-uri.returns"></a><h4>Returns</h4>
+<p> URI of the current external subtitle.
+<a href="/usr/share/gtk-doc/html/glibglib-Memory-Allocation.html#g-free"><code class="function">g_free()</code></a> after usage. </p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
+</div>
</div>
<hr>
<div class="refsect2">
@@ -916,6 +1697,34 @@
<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
gst_player_set_visualization (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> *player</code></em>,
<em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *name</code></em>);</pre>
+<div class="refsect3">
+<a name="gst-player-set-visualization.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>player</p></td>
+<td class="parameter_description"><p><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> instance</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>name</p></td>
+<td class="parameter_description"><p>visualization element obtained from
+<a class="link" href="gst-plugins-bad-libs-gstplayer-visualization.html#gst-player-visualizations-get" title="gst_player_visualizations_get ()"><code class="function">gst_player_visualizations_get()</code></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-player-set-visualization.returns"></a><h4>Returns</h4>
+<p> <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the visualizations was set correctly. Otherwise,
+<a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a>.</p>
+</div>
</div>
<hr>
<div class="refsect2">
@@ -923,12 +1732,56 @@
<pre class="programlisting"><span class="returnvalue">void</span>
gst_player_set_visualization_enabled (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> *player</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> enabled</code></em>);</pre>
+<p>Enable or disable the visualization.</p>
+<div class="refsect3">
+<a name="gst-player-set-visualization-enabled.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>player</p></td>
+<td class="parameter_description"><p><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> instance</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>enabled</p></td>
+<td class="parameter_description"><p>TRUE or FALSE</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
</div>
<hr>
<div class="refsect2">
<a name="gst-player-get-current-visualization"></a><h3>gst_player_get_current_visualization ()</h3>
<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *
gst_player_get_current_visualization (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> *player</code></em>);</pre>
+<div class="refsect3">
+<a name="gst-player-get-current-visualization.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>player</p></td>
+<td class="parameter_description"><p><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> instance</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-player-get-current-visualization.returns"></a><h4>Returns</h4>
+<p> Name of the currently enabled visualization.
+<a href="/usr/share/gtk-doc/html/glibglib-Memory-Allocation.html#g-free"><code class="function">g_free()</code></a> after usage. </p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
+</div>
</div>
<hr>
<div class="refsect2">
@@ -936,12 +1789,57 @@
<pre class="programlisting">const <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *
gst_player_color_balance_type_get_name
(<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayerColorBalanceType" title="enum GstPlayerColorBalanceType"><span class="type">GstPlayerColorBalanceType</span></a> type</code></em>);</pre>
+<p>Gets a string representing the given color balance type.</p>
+<div class="refsect3">
+<a name="gst-player-color-balance-type-get-name.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>type</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayerColorBalanceType" title="enum GstPlayerColorBalanceType"><span class="type">GstPlayerColorBalanceType</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-player-color-balance-type-get-name.returns"></a><h4>Returns</h4>
+<p> a string with the name of the color
+balance type. </p>
+<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p>
+</div>
</div>
<hr>
<div class="refsect2">
<a name="gst-player-has-color-balance"></a><h3>gst_player_has_color_balance ()</h3>
<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
gst_player_has_color_balance (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> *player</code></em>);</pre>
+<p>Checks whether the <em class="parameter"><code>player</code></em>
+ has color balance support available.</p>
+<div class="refsect3">
+<a name="gst-player-has-color-balance.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>player</p></td>
+<td class="parameter_description"><p><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> instance</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-player-has-color-balance.returns"></a><h4>Returns</h4>
+<p> <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if <em class="parameter"><code>player</code></em>
+has color balance support. Otherwise,
+<a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a>.</p>
+</div>
</div>
<hr>
<div class="refsect2">
@@ -950,6 +1848,37 @@
gst_player_set_color_balance (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> *player</code></em>,
<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayerColorBalanceType" title="enum GstPlayerColorBalanceType"><span class="type">GstPlayerColorBalanceType</span></a> type</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a> value</code></em>);</pre>
+<p>Sets the current value of the indicated channel <em class="parameter"><code>type</code></em>
+ to the passed
+value.</p>
+<div class="refsect3">
+<a name="gst-player-set-color-balance.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>player</p></td>
+<td class="parameter_description"><p><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> instance</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>type</p></td>
+<td class="parameter_description"><p><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayerColorBalanceType" title="enum GstPlayerColorBalanceType"><span class="type">GstPlayerColorBalanceType</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>value</p></td>
+<td class="parameter_description"><p>The new value for the <em class="parameter"><code>type</code></em>
+, ranged [0,1]</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
</div>
<hr>
<div class="refsect2">
@@ -957,12 +1886,65 @@
<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gdouble"><span class="returnvalue">gdouble</span></a>
gst_player_get_color_balance (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> *player</code></em>,
<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayerColorBalanceType" title="enum GstPlayerColorBalanceType"><span class="type">GstPlayerColorBalanceType</span></a> type</code></em>);</pre>
+<p>Retrieve the current value of the indicated <em class="parameter"><code>type</code></em>
+.</p>
+<div class="refsect3">
+<a name="gst-player-get-color-balance.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>player</p></td>
+<td class="parameter_description"><p><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> instance</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>type</p></td>
+<td class="parameter_description"><p><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayerColorBalanceType" title="enum GstPlayerColorBalanceType"><span class="type">GstPlayerColorBalanceType</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-player-get-color-balance.returns"></a><h4>Returns</h4>
+<p> The current value of <em class="parameter"><code>type</code></em>
+, between [0,1]. In case of
+error -1 is returned.</p>
+</div>
</div>
<hr>
<div class="refsect2">
<a name="gst-player-get-multiview-mode"></a><h3>gst_player_get_multiview_mode ()</h3>
<pre class="programlisting"><a href="/usr/share/gtk-doc/html/gst-plugins-base-libs-1.0gst-plugins-base-libs-gstvideo.html#GstVideoMultiviewMode"><span class="returnvalue">GstVideoMultiviewMode</span></a>
gst_player_get_multiview_mode (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> *player</code></em>);</pre>
+<p>Retrieve the current value of the indicated <em class="parameter"><code>type</code></em>
+.</p>
+<div class="refsect3">
+<a name="gst-player-get-multiview-mode.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>player</p></td>
+<td class="parameter_description"><p><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> instance</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-player-get-multiview-mode.returns"></a><h4>Returns</h4>
+<p> The current value of <em class="parameter"><code>type</code></em>
+, Default: -1 "none"</p>
+</div>
+<p class="since">Since: 1.10</p>
</div>
<hr>
<div class="refsect2">
@@ -970,12 +1952,62 @@
<pre class="programlisting"><span class="returnvalue">void</span>
gst_player_set_multiview_mode (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> *player</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/gst-plugins-base-libs-1.0gst-plugins-base-libs-gstvideo.html#GstVideoMultiviewMode"><span class="type">GstVideoMultiviewMode</span></a> mode</code></em>);</pre>
+<p>Sets the current value of the indicated mode <em class="parameter"><code>type</code></em>
+ to the passed
+value.</p>
+<div class="refsect3">
+<a name="gst-player-set-multiview-mode.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>player</p></td>
+<td class="parameter_description"><p><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> instance</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>mode</p></td>
+<td class="parameter_description"><p>The new value for the <em class="parameter"><code>type</code></em>
+</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 1.10</p>
</div>
<hr>
<div class="refsect2">
<a name="gst-player-get-multiview-flags"></a><h3>gst_player_get_multiview_flags ()</h3>
<pre class="programlisting"><a href="/usr/share/gtk-doc/html/gst-plugins-base-libs-1.0gst-plugins-base-libs-gstvideo.html#GstVideoMultiviewFlags"><span class="returnvalue">GstVideoMultiviewFlags</span></a>
gst_player_get_multiview_flags (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> *player</code></em>);</pre>
+<p>Retrieve the current value of the indicated <em class="parameter"><code>type</code></em>
+.</p>
+<div class="refsect3">
+<a name="gst-player-get-multiview-flags.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>player</p></td>
+<td class="parameter_description"><p><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> instance</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-player-get-multiview-flags.returns"></a><h4>Returns</h4>
+<p> The current value of <em class="parameter"><code>type</code></em>
+, Default: 0x00000000 "none</p>
+</div>
+<p class="since">Since: 1.10</p>
</div>
<hr>
<div class="refsect2">
@@ -983,12 +2015,60 @@
<pre class="programlisting"><span class="returnvalue">void</span>
gst_player_set_multiview_flags (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> *player</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/gst-plugins-base-libs-1.0gst-plugins-base-libs-gstvideo.html#GstVideoMultiviewFlags"><span class="type">GstVideoMultiviewFlags</span></a> flags</code></em>);</pre>
+<p>Sets the current value of the indicated mode <em class="parameter"><code>type</code></em>
+ to the passed
+value.</p>
+<div class="refsect3">
+<a name="gst-player-set-multiview-flags.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>player</p></td>
+<td class="parameter_description"><p><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> instance</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>flags</p></td>
+<td class="parameter_description"><p>The new value for the <em class="parameter"><code>type</code></em>
+</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 1.10</p>
</div>
<hr>
<div class="refsect2">
<a name="gst-player-get-audio-video-offset"></a><h3>gst_player_get_audio_video_offset ()</h3>
<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint64"><span class="returnvalue">gint64</span></a>
gst_player_get_audio_video_offset (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> *player</code></em>);</pre>
+<p>Retrieve the current value of audio-video-offset property</p>
+<div class="refsect3">
+<a name="gst-player-get-audio-video-offset.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>player</p></td>
+<td class="parameter_description"><p><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> instance</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-player-get-audio-video-offset.returns"></a><h4>Returns</h4>
+<p> The current value of audio-video-offset in nanoseconds</p>
+<p>Since 1.10</p>
+</div>
</div>
<hr>
<div class="refsect2">
@@ -996,12 +2076,56 @@
<pre class="programlisting"><span class="returnvalue">void</span>
gst_player_set_audio_video_offset (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> *player</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint64"><span class="type">gint64</span></a> offset</code></em>);</pre>
+<p>Sets audio-video-offset property by value of <em class="parameter"><code>offset</code></em>
+</p>
+<p>Since 1.10</p>
+<div class="refsect3">
+<a name="gst-player-set-audio-video-offset.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>player</p></td>
+<td class="parameter_description"><p><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> instance</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>offset</p></td>
+<td class="parameter_description"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint64"><span class="type">gint64</span></a> in nanoseconds</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
</div>
<hr>
<div class="refsect2">
<a name="gst-player-get-rate"></a><h3>gst_player_get_rate ()</h3>
<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gdouble"><span class="returnvalue">gdouble</span></a>
gst_player_get_rate (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> *player</code></em>);</pre>
+<div class="refsect3">
+<a name="gst-player-get-rate.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>player</p></td>
+<td class="parameter_description"><p><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> instance</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-player-get-rate.returns"></a><h4>Returns</h4>
+<p> current playback rate</p>
+</div>
</div>
<hr>
<div class="refsect2">
@@ -1009,6 +2133,152 @@
<pre class="programlisting"><span class="returnvalue">void</span>
gst_player_set_rate (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> *player</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a> rate</code></em>);</pre>
+<p>Playback at specified rate</p>
+<div class="refsect3">
+<a name="gst-player-set-rate.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>player</p></td>
+<td class="parameter_description"><p><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> instance</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>rate</p></td>
+<td class="parameter_description"><p>playback rate</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-player-config-set-position-update-interval"></a><h3>gst_player_config_set_position_update_interval ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_player_config_set_position_update_interval
+ (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/gstreamer-1.0GstStructure.html#GstStructure-struct"><span class="type">GstStructure</span></a> *config</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="type">guint</span></a> interval</code></em>);</pre>
+<p>set interval in milliseconds between two position-updated signals.
+pass 0 to stop updating the position.
+Since 1.10</p>
+<div class="refsect3">
+<a name="gst-player-config-set-position-update-interval.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>config</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> configuration</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>interval</p></td>
+<td class="parameter_description"><p>interval in ms</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-player-config-get-position-update-interval"></a><h3>gst_player_config_get_position_update_interval ()</h3>
+<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>
+gst_player_config_get_position_update_interval
+ (<em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstStructure.html#GstStructure-struct"><span class="type">GstStructure</span></a> *config</code></em>);</pre>
+<div class="refsect3">
+<a name="gst-player-config-get-position-update-interval.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>config</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> configuration</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-player-config-get-position-update-interval.returns"></a><h4>Returns</h4>
+<p> current position update interval in milliseconds</p>
+<p>Since 1.10</p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-player-config-set-user-agent"></a><h3>gst_player_config_set_user_agent ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_player_config_set_user_agent (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/gstreamer-1.0GstStructure.html#GstStructure-struct"><span class="type">GstStructure</span></a> *config</code></em>,
+ <em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *agent</code></em>);</pre>
+<p>Set the user agent to pass to the server if <em class="parameter"><code>player</code></em>
+ needs to connect
+to a server during playback. This is typically used when playing HTTP
+or RTSP streams.</p>
+<p>Since 1.10</p>
+<div class="refsect3">
+<a name="gst-player-config-set-user-agent.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>config</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> configuration</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>agent</p></td>
+<td class="parameter_description"><p>the string to use as user agent</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-player-config-get-user-agent"></a><h3>gst_player_config_get_user_agent ()</h3>
+<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *
+gst_player_config_get_user_agent (<em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstStructure.html#GstStructure-struct"><span class="type">GstStructure</span></a> *config</code></em>);</pre>
+<p>Return the user agent which has been configured using
+<a class="link" href="gst-plugins-bad-libs-gstplayer.html#gst-player-config-set-user-agent" title="gst_player_config_set_user_agent ()"><code class="function">gst_player_config_set_user_agent()</code></a> if any.</p>
+<div class="refsect3">
+<a name="gst-player-config-get-user-agent.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>config</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> configuration</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-player-config-get-user-agent.returns"></a><h4>Returns</h4>
+<p> the configured agent, or <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>
+Since 1.10. </p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
+</div>
</div>
</div>
<div class="refsect1">
@@ -1031,23 +2301,32 @@
<tbody>
<tr>
<td class="enum_member_name"><p><a name="GST-PLAYER-STATE-STOPPED:CAPS"></a>GST_PLAYER_STATE_STOPPED</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>the player is stopped.</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-PLAYER-STATE-BUFFERING:CAPS"></a>GST_PLAYER_STATE_BUFFERING</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>the player is buffering.</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-PLAYER-STATE-PAUSED:CAPS"></a>GST_PLAYER_STATE_PAUSED</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>the player is paused.</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-PLAYER-STATE-PLAYING:CAPS"></a>GST_PLAYER_STATE_PLAYING</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>the player is currently playing a
+stream.</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
</tbody>
</table></div>
@@ -1072,8 +2351,10 @@
</colgroup>
<tbody><tr>
<td class="enum_member_name"><p><a name="GST-PLAYER-ERROR-FAILED:CAPS"></a>GST_PLAYER_ERROR_FAILED</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>generic error.</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr></tbody>
</table></div>
</div>
@@ -1092,23 +2373,32 @@
<tbody>
<tr>
<td class="enum_member_name"><p><a name="GST-PLAYER-COLOR-BALANCE-BRIGHTNESS:CAPS"></a>GST_PLAYER_COLOR_BALANCE_BRIGHTNESS</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>brightness or black level.</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-PLAYER-COLOR-BALANCE-CONTRAST:CAPS"></a>GST_PLAYER_COLOR_BALANCE_CONTRAST</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>contrast or luma gain.</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-PLAYER-COLOR-BALANCE-SATURATION:CAPS"></a>GST_PLAYER_COLOR_BALANCE_SATURATION</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>color saturation or chroma
+gain.</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-PLAYER-COLOR-BALANCE-HUE:CAPS"></a>GST_PLAYER_COLOR_BALANCE_HUE</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>hue or color balance.</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
</tbody>
</table></div>
@@ -1219,15 +2509,6 @@
</div>
<hr>
<div class="refsect2">
-<a name="GstPlayer--position-update-interval"></a><h3>The <code class="literal">“position-update-interval”</code> property</h3>
-<pre class="programlisting"> “position-update-interval” <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="type">guint</span></a></pre>
-<p>Interval in milliseconds between two position-updated signals.Pass 0 to stop updating the position.</p>
-<p>Flags: Read / Write</p>
-<p>Allowed values: <= 10000</p>
-<p>Default value: 100</p>
-</div>
-<hr>
-<div class="refsect2">
<a name="GstPlayer--rate"></a><h3>The <code class="literal">“rate”</code> property</h3>
<pre class="programlisting"> “rate” <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a></pre>
<p>Playback rate.</p>
diff --git a/docs/libs/html/gst-plugins-bad-libs-h264parser.html b/docs/libs/html/gst-plugins-bad-libs-h264parser.html
index fa74876..eca1b07 100644
--- a/docs/libs/html/gst-plugins-bad-libs-h264parser.html
+++ b/docs/libs/html/gst-plugins-bad-libs-h264parser.html
@@ -27,7 +27,8 @@
<div class="refnamediv"><table width="100%"><tr>
<td valign="top">
<h2><span class="refentrytitle"><a name="gst-plugins-bad-libs-h264parser.top_of_page"></a>h264parser</span></h2>
-<p>h264parser</p>
+<p>h264parser — Convenience library for h264 video
+bitstream parsing.</p>
</td>
<td class="gallery_image" valign="top" align="right"></td>
</tr></table></div>
@@ -310,6 +311,48 @@
</div>
<div class="refsect1">
<a name="gst-plugins-bad-libs-h264parser.description"></a><h2>Description</h2>
+<p>It offers you bitstream parsing in AVC mode or not. To identify Nals in a bitstream and
+parse its headers, you should call:</p>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
+<li class="listitem">
+<a class="link" href="gst-plugins-bad-libs-h264parser.html#gst-h264-parser-identify-nalu" title="gst_h264_parser_identify_nalu ()"><span class="type">gst_h264_parser_identify_nalu</span></a> to identify the following nalu in not AVC bitstreams
+ </li>
+<li class="listitem">
+<a class="link" href="gst-plugins-bad-libs-h264parser.html#gst-h264-parser-identify-nalu-avc" title="gst_h264_parser_identify_nalu_avc ()"><span class="type">gst_h264_parser_identify_nalu_avc</span></a> to identify the nalu in AVC bitstreams
+ </li>
+</ul></div>
+<p>Then, depending on the <a class="link" href="gst-plugins-bad-libs-h264parser.html#GstH264NalUnitType" title="enum GstH264NalUnitType"><span class="type">GstH264NalUnitType</span></a> of the newly parsed <a class="link" href="gst-plugins-bad-libs-h264parser.html#GstH264NalUnit" title="struct GstH264NalUnit"><span class="type">GstH264NalUnit</span></a>, you should
+call the differents functions to parse the structure:</p>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
+<li class="listitem">
+ From <a class="link" href="gst-plugins-bad-libs-h264parser.html#GST-H264-NAL-SLICE:CAPS"><span class="type">GST_H264_NAL_SLICE</span></a> to <a class="link" href="gst-plugins-bad-libs-h264parser.html#GST-H264-NAL-SLICE-IDR:CAPS"><span class="type">GST_H264_NAL_SLICE_IDR</span></a>: <a class="link" href="gst-plugins-bad-libs-h264parser.html#gst-h264-parser-parse-slice-hdr" title="gst_h264_parser_parse_slice_hdr ()"><span class="type">gst_h264_parser_parse_slice_hdr</span></a>
+</li>
+<li class="listitem">
+<a class="link" href="gst-plugins-bad-libs-h264parser.html#GST-H264-NAL-SEI:CAPS"><span class="type">GST_H264_NAL_SEI</span></a>: <a class="link" href="gst-plugins-bad-libs-h264parser.html#gst-h264-parser-parse-sei" title="gst_h264_parser_parse_sei ()"><span class="type">gst_h264_parser_parse_sei</span></a>
+</li>
+<li class="listitem">
+<a class="link" href="gst-plugins-bad-libs-h264parser.html#GST-H264-NAL-SPS:CAPS"><span class="type">GST_H264_NAL_SPS</span></a>: <a class="link" href="gst-plugins-bad-libs-h264parser.html#gst-h264-parser-parse-sps" title="gst_h264_parser_parse_sps ()"><span class="type">gst_h264_parser_parse_sps</span></a>
+</li>
+<li class="listitem">
+<a class="link" href="gst-plugins-bad-libs-h264parser.html#GST-H264-NAL-PPS:CAPS"><span class="type">GST_H264_NAL_PPS</span></a>: <a class="link" href="gst-plugins-bad-libs-h264parser.html#gst-h264-parser-parse-pps" title="gst_h264_parser_parse_pps ()"><span class="type">gst_h264_parser_parse_pps</span></a>
+</li>
+<li class="listitem">
+ Any other: <a class="link" href="gst-plugins-bad-libs-h264parser.html#gst-h264-parser-parse-nal" title="gst_h264_parser_parse_nal ()"><span class="type">gst_h264_parser_parse_nal</span></a>
+</li>
+</ul></div>
+<p>Note: You should always call gst_h264_parser_parse_nal if you don't actually need
+<a class="link" href="gst-plugins-bad-libs-h264parser.html#GstH264NalUnitType" title="enum GstH264NalUnitType"><span class="type">GstH264NalUnitType</span></a> to be parsed for your personnal use, in order to guarantee that the
+<a class="link" href="gst-plugins-bad-libs-h264parser.html#GstH264NalParser" title="struct GstH264NalParser"><span class="type">GstH264NalParser</span></a> is always up to date.</p>
+<p>For more details about the structures, look at the ITU-T H.264 and ISO/IEC 14496-10 – MPEG-4
+Part 10 specifications, you can download them from:</p>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
+<li class="listitem">
+ ITU-T H.264: http://www.itu.int/rec/T-REC-H.264
+ </li>
+<li class="listitem">
+ ISO/IEC 14496-10: http://www.iso.org/iso/iso_catalogue/catalogue_tc/catalogue_detail.htm?csnumber=56538
+ </li>
+</ul></div>
</div>
<div class="refsect1">
<a name="gst-plugins-bad-libs-h264parser.functions_details"></a><h2>Functions</h2>
@@ -351,6 +394,53 @@
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="type">guint</span></a> offset</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gsize"><span class="type">gsize</span></a> size</code></em>,
<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-h264parser.html#GstH264NalUnit" title="struct GstH264NalUnit"><span class="type">GstH264NalUnit</span></a> *nalu</code></em>);</pre>
+<p>Parses <em class="parameter"><code>data</code></em>
+ and fills <em class="parameter"><code>nalu</code></em>
+ from the next nalu data from <em class="parameter"><code>data</code></em>
+</p>
+<div class="refsect3">
+<a name="gst-h264-parser-identify-nalu.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>nalparser</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-h264parser.html#GstH264NalParser" title="struct GstH264NalParser"><span class="type">GstH264NalParser</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>data</p></td>
+<td class="parameter_description"><p>The data to parse</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>offset</p></td>
+<td class="parameter_description"><p>the offset from which to parse <em class="parameter"><code>data</code></em>
+</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>size</p></td>
+<td class="parameter_description"><p>the size of <em class="parameter"><code>data</code></em>
+</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>nalu</p></td>
+<td class="parameter_description"><p>The <a class="link" href="gst-plugins-bad-libs-h264parser.html#GstH264NalUnit" title="struct GstH264NalUnit"><span class="type">GstH264NalUnit</span></a> where to store parsed nal headers</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-h264-parser-identify-nalu.returns"></a><h4>Returns</h4>
+<p> a <a class="link" href="gst-plugins-bad-libs-h264parser.html#GstH264ParserResult" title="enum GstH264ParserResult"><span class="type">GstH264ParserResult</span></a></p>
+</div>
</div>
<hr>
<div class="refsect2">
@@ -362,6 +452,57 @@
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gsize"><span class="type">gsize</span></a> size</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> nal_length_size</code></em>,
<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-h264parser.html#GstH264NalUnit" title="struct GstH264NalUnit"><span class="type">GstH264NalUnit</span></a> *nalu</code></em>);</pre>
+<p>Parses <em class="parameter"><code>data</code></em>
+ and sets <em class="parameter"><code>nalu</code></em>
+.</p>
+<div class="refsect3">
+<a name="gst-h264-parser-identify-nalu-avc.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>nalparser</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-h264parser.html#GstH264NalParser" title="struct GstH264NalParser"><span class="type">GstH264NalParser</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>data</p></td>
+<td class="parameter_description"><p>The data to parse, must be the beging of the Nal unit</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>offset</p></td>
+<td class="parameter_description"><p>the offset from which to parse <em class="parameter"><code>data</code></em>
+</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>size</p></td>
+<td class="parameter_description"><p>the size of <em class="parameter"><code>data</code></em>
+</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>nal_length_size</p></td>
+<td class="parameter_description"><p>the size in bytes of the AVC nal length prefix.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>nalu</p></td>
+<td class="parameter_description"><p>The <a class="link" href="gst-plugins-bad-libs-h264parser.html#GstH264NalUnit" title="struct GstH264NalUnit"><span class="type">GstH264NalUnit</span></a> where to store parsed nal headers</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-h264-parser-identify-nalu-avc.returns"></a><h4>Returns</h4>
+<p> a <a class="link" href="gst-plugins-bad-libs-h264parser.html#GstH264ParserResult" title="enum GstH264ParserResult"><span class="type">GstH264ParserResult</span></a></p>
+</div>
</div>
<hr>
<div class="refsect2">
@@ -369,6 +510,36 @@
<pre class="programlisting"><a class="link" href="gst-plugins-bad-libs-h264parser.html#GstH264ParserResult" title="enum GstH264ParserResult"><span class="returnvalue">GstH264ParserResult</span></a>
gst_h264_parser_parse_nal (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-h264parser.html#GstH264NalParser" title="struct GstH264NalParser"><span class="type">GstH264NalParser</span></a> *nalparser</code></em>,
<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-h264parser.html#GstH264NalUnit" title="struct GstH264NalUnit"><span class="type">GstH264NalUnit</span></a> *nalu</code></em>);</pre>
+<p>This function should be called in the case one doesn't need to
+parse a specific structure. It is necessary to do so to make
+sure <em class="parameter"><code>nalparser</code></em>
+ is up to date.</p>
+<div class="refsect3">
+<a name="gst-h264-parser-parse-nal.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>nalparser</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-h264parser.html#GstH264NalParser" title="struct GstH264NalParser"><span class="type">GstH264NalParser</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>nalu</p></td>
+<td class="parameter_description"><p>The <a class="link" href="gst-plugins-bad-libs-h264parser.html#GstH264NalUnit" title="struct GstH264NalUnit"><span class="type">GstH264NalUnit</span></a> to parse</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-h264-parser-parse-nal.returns"></a><h4>Returns</h4>
+<p> a <a class="link" href="gst-plugins-bad-libs-h264parser.html#GstH264ParserResult" title="enum GstH264ParserResult"><span class="type">GstH264ParserResult</span></a></p>
+</div>
</div>
<hr>
<div class="refsect2">
@@ -379,6 +550,50 @@
<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-h264parser.html#GstH264SliceHdr" title="struct GstH264SliceHdr"><span class="type">GstH264SliceHdr</span></a> *slice</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> parse_pred_weight_table</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> parse_dec_ref_pic_marking</code></em>);</pre>
+<p>Parses <em class="parameter"><code>data</code></em>
+, and fills the <em class="parameter"><code>slice</code></em>
+ structure.</p>
+<div class="refsect3">
+<a name="gst-h264-parser-parse-slice-hdr.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>nalparser</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-h264parser.html#GstH264NalParser" title="struct GstH264NalParser"><span class="type">GstH264NalParser</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>nalu</p></td>
+<td class="parameter_description"><p>The <a class="link" href="gst-plugins-bad-libs-h264parser.html#GST-H264-NAL-SLICE:CAPS"><span class="type">GST_H264_NAL_SLICE</span></a> <a class="link" href="gst-plugins-bad-libs-h264parser.html#GstH264NalUnit" title="struct GstH264NalUnit"><span class="type">GstH264NalUnit</span></a> to parse</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>slice</p></td>
+<td class="parameter_description"><p>The <a class="link" href="gst-plugins-bad-libs-h264parser.html#GstH264SliceHdr" title="struct GstH264SliceHdr"><span class="type">GstH264SliceHdr</span></a> to fill.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>parse_pred_weight_table</p></td>
+<td class="parameter_description"><p>Whether to parse the pred_weight_table or not</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>parse_dec_ref_pic_marking</p></td>
+<td class="parameter_description"><p>Whether to parse the dec_ref_pic_marking or not</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-h264-parser-parse-slice-hdr.returns"></a><h4>Returns</h4>
+<p> a <a class="link" href="gst-plugins-bad-libs-h264parser.html#GstH264ParserResult" title="enum GstH264ParserResult"><span class="type">GstH264ParserResult</span></a></p>
+</div>
</div>
<hr>
<div class="refsect2">
@@ -388,6 +603,45 @@
<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-h264parser.html#GstH264NalUnit" title="struct GstH264NalUnit"><span class="type">GstH264NalUnit</span></a> *nalu</code></em>,
<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-h264parser.html#GstH264SPS" title="struct GstH264SPS"><span class="type">GstH264SPS</span></a> *sps</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> parse_vui_params</code></em>);</pre>
+<p>Parses <em class="parameter"><code>data</code></em>
+, and fills the <em class="parameter"><code>sps</code></em>
+ structure.</p>
+<div class="refsect3">
+<a name="gst-h264-parser-parse-sps.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>nalparser</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-h264parser.html#GstH264NalParser" title="struct GstH264NalParser"><span class="type">GstH264NalParser</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>nalu</p></td>
+<td class="parameter_description"><p>The <a class="link" href="gst-plugins-bad-libs-h264parser.html#GST-H264-NAL-SPS:CAPS"><span class="type">GST_H264_NAL_SPS</span></a> <a class="link" href="gst-plugins-bad-libs-h264parser.html#GstH264NalUnit" title="struct GstH264NalUnit"><span class="type">GstH264NalUnit</span></a> to parse</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>sps</p></td>
+<td class="parameter_description"><p>The <a class="link" href="gst-plugins-bad-libs-h264parser.html#GstH264SPS" title="struct GstH264SPS"><span class="type">GstH264SPS</span></a> to fill.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>parse_vui_params</p></td>
+<td class="parameter_description"><p>Whether to parse the vui_params or not</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-h264-parser-parse-sps.returns"></a><h4>Returns</h4>
+<p> a <a class="link" href="gst-plugins-bad-libs-h264parser.html#GstH264ParserResult" title="enum GstH264ParserResult"><span class="type">GstH264ParserResult</span></a></p>
+</div>
</div>
<hr>
<div class="refsect2">
@@ -396,6 +650,44 @@
gst_h264_parser_parse_pps (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-h264parser.html#GstH264NalParser" title="struct GstH264NalParser"><span class="type">GstH264NalParser</span></a> *nalparser</code></em>,
<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-h264parser.html#GstH264NalUnit" title="struct GstH264NalUnit"><span class="type">GstH264NalUnit</span></a> *nalu</code></em>,
<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-h264parser.html#GstH264PPS" title="struct GstH264PPS"><span class="type">GstH264PPS</span></a> *pps</code></em>);</pre>
+<p>Parses <em class="parameter"><code>data</code></em>
+, and fills the <em class="parameter"><code>pps</code></em>
+ structure.</p>
+<p>The resulting <em class="parameter"><code>pps</code></em>
+ data structure shall be deallocated with the
+<a class="link" href="gst-plugins-bad-libs-h264parser.html#gst-h264-pps-clear" title="gst_h264_pps_clear ()"><code class="function">gst_h264_pps_clear()</code></a> function when it is no longer needed, or prior
+to parsing a new PPS NAL unit.</p>
+<div class="refsect3">
+<a name="gst-h264-parser-parse-pps.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>nalparser</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-h264parser.html#GstH264NalParser" title="struct GstH264NalParser"><span class="type">GstH264NalParser</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>nalu</p></td>
+<td class="parameter_description"><p>The <a class="link" href="gst-plugins-bad-libs-h264parser.html#GST-H264-NAL-PPS:CAPS"><span class="type">GST_H264_NAL_PPS</span></a> <a class="link" href="gst-plugins-bad-libs-h264parser.html#GstH264NalUnit" title="struct GstH264NalUnit"><span class="type">GstH264NalUnit</span></a> to parse</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>pps</p></td>
+<td class="parameter_description"><p>The <a class="link" href="gst-plugins-bad-libs-h264parser.html#GstH264PPS" title="struct GstH264PPS"><span class="type">GstH264PPS</span></a> to fill.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-h264-parser-parse-pps.returns"></a><h4>Returns</h4>
+<p> a <a class="link" href="gst-plugins-bad-libs-h264parser.html#GstH264ParserResult" title="enum GstH264ParserResult"><span class="type">GstH264ParserResult</span></a></p>
+</div>
</div>
<hr>
<div class="refsect2">
@@ -404,18 +696,75 @@
gst_h264_parser_parse_sei (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-h264parser.html#GstH264NalParser" title="struct GstH264NalParser"><span class="type">GstH264NalParser</span></a> *nalparser</code></em>,
<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-h264parser.html#GstH264NalUnit" title="struct GstH264NalUnit"><span class="type">GstH264NalUnit</span></a> *nalu</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Arrays.html#GArray"><span class="type">GArray</span></a> **messages</code></em>);</pre>
+<p>Parses <em class="parameter"><code>data</code></em>
+, create and fills the <em class="parameter"><code>messages</code></em>
+ array.</p>
+<div class="refsect3">
+<a name="gst-h264-parser-parse-sei.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>nalparser</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-h264parser.html#GstH264NalParser" title="struct GstH264NalParser"><span class="type">GstH264NalParser</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>nalu</p></td>
+<td class="parameter_description"><p>The <a class="link" href="gst-plugins-bad-libs-h264parser.html#GST-H264-NAL-SEI:CAPS"><span class="type">GST_H264_NAL_SEI</span></a> <a class="link" href="gst-plugins-bad-libs-h264parser.html#GstH264NalUnit" title="struct GstH264NalUnit"><span class="type">GstH264NalUnit</span></a> to parse</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>messages</p></td>
+<td class="parameter_description"><p>The GArray of <a class="link" href="gst-plugins-bad-libs-h264parser.html#GstH264SEIMessage" title="struct GstH264SEIMessage"><span class="type">GstH264SEIMessage</span></a> to fill. The caller must free it when done.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-h264-parser-parse-sei.returns"></a><h4>Returns</h4>
+<p> a <a class="link" href="gst-plugins-bad-libs-h264parser.html#GstH264ParserResult" title="enum GstH264ParserResult"><span class="type">GstH264ParserResult</span></a></p>
+</div>
</div>
<hr>
<div class="refsect2">
<a name="gst-h264-nal-parser-new"></a><h3>gst_h264_nal_parser_new ()</h3>
<pre class="programlisting"><a class="link" href="gst-plugins-bad-libs-h264parser.html#GstH264NalParser" title="struct GstH264NalParser"><span class="returnvalue">GstH264NalParser</span></a> *
gst_h264_nal_parser_new (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<p>Creates a new <a class="link" href="gst-plugins-bad-libs-h264parser.html#GstH264NalParser" title="struct GstH264NalParser"><span class="type">GstH264NalParser</span></a>. It should be freed with
+gst_h264_nal_parser_free after use.</p>
+<div class="refsect3">
+<a name="gst-h264-nal-parser-new.returns"></a><h4>Returns</h4>
+<p> a new <a class="link" href="gst-plugins-bad-libs-h264parser.html#GstH264NalParser" title="struct GstH264NalParser"><span class="type">GstH264NalParser</span></a></p>
+</div>
</div>
<hr>
<div class="refsect2">
<a name="gst-h264-nal-parser-free"></a><h3>gst_h264_nal_parser_free ()</h3>
<pre class="programlisting"><span class="returnvalue">void</span>
gst_h264_nal_parser_free (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-h264parser.html#GstH264NalParser" title="struct GstH264NalParser"><span class="type">GstH264NalParser</span></a> *nalparser</code></em>);</pre>
+<p>Frees <em class="parameter"><code>nalparser</code></em>
+ and sets it to <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a></p>
+<div class="refsect3">
+<a name="gst-h264-nal-parser-free.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>nalparser</p></td>
+<td class="parameter_description"><p>the <a class="link" href="gst-plugins-bad-libs-h264parser.html#GstH264NalParser" title="struct GstH264NalParser"><span class="type">GstH264NalParser</span></a> to free</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
</div>
<hr>
<div class="refsect2">
@@ -424,6 +773,40 @@
gst_h264_parse_sps (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-h264parser.html#GstH264NalUnit" title="struct GstH264NalUnit"><span class="type">GstH264NalUnit</span></a> *nalu</code></em>,
<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-h264parser.html#GstH264SPS" title="struct GstH264SPS"><span class="type">GstH264SPS</span></a> *sps</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> parse_vui_params</code></em>);</pre>
+<p>Parses <em class="parameter"><code>data</code></em>
+, and fills the <em class="parameter"><code>sps</code></em>
+ structure.</p>
+<div class="refsect3">
+<a name="gst-h264-parse-sps.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>nalu</p></td>
+<td class="parameter_description"><p>The <a class="link" href="gst-plugins-bad-libs-h264parser.html#GST-H264-NAL-SPS:CAPS"><span class="type">GST_H264_NAL_SPS</span></a> <a class="link" href="gst-plugins-bad-libs-h264parser.html#GstH264NalUnit" title="struct GstH264NalUnit"><span class="type">GstH264NalUnit</span></a> to parse</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>sps</p></td>
+<td class="parameter_description"><p>The <a class="link" href="gst-plugins-bad-libs-h264parser.html#GstH264SPS" title="struct GstH264SPS"><span class="type">GstH264SPS</span></a> to fill.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>parse_vui_params</p></td>
+<td class="parameter_description"><p>Whether to parse the vui_params or not</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-h264-parse-sps.returns"></a><h4>Returns</h4>
+<p> a <a class="link" href="gst-plugins-bad-libs-h264parser.html#GstH264ParserResult" title="enum GstH264ParserResult"><span class="type">GstH264ParserResult</span></a></p>
+</div>
</div>
<hr>
<div class="refsect2">
@@ -432,12 +815,68 @@
gst_h264_parse_pps (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-h264parser.html#GstH264NalParser" title="struct GstH264NalParser"><span class="type">GstH264NalParser</span></a> *nalparser</code></em>,
<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-h264parser.html#GstH264NalUnit" title="struct GstH264NalUnit"><span class="type">GstH264NalUnit</span></a> *nalu</code></em>,
<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-h264parser.html#GstH264PPS" title="struct GstH264PPS"><span class="type">GstH264PPS</span></a> *pps</code></em>);</pre>
+<p>Parses <em class="parameter"><code>data</code></em>
+, and fills the <em class="parameter"><code>pps</code></em>
+ structure.</p>
+<p>The resulting <em class="parameter"><code>pps</code></em>
+ data structure shall be deallocated with the
+<a class="link" href="gst-plugins-bad-libs-h264parser.html#gst-h264-pps-clear" title="gst_h264_pps_clear ()"><code class="function">gst_h264_pps_clear()</code></a> function when it is no longer needed, or prior
+to parsing a new PPS NAL unit.</p>
+<div class="refsect3">
+<a name="gst-h264-parse-pps.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>nalparser</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-h264parser.html#GstH264NalParser" title="struct GstH264NalParser"><span class="type">GstH264NalParser</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>nalu</p></td>
+<td class="parameter_description"><p>The <a class="link" href="gst-plugins-bad-libs-h264parser.html#GST-H264-NAL-PPS:CAPS"><span class="type">GST_H264_NAL_PPS</span></a> <a class="link" href="gst-plugins-bad-libs-h264parser.html#GstH264NalUnit" title="struct GstH264NalUnit"><span class="type">GstH264NalUnit</span></a> to parse</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>pps</p></td>
+<td class="parameter_description"><p>The <a class="link" href="gst-plugins-bad-libs-h264parser.html#GstH264PPS" title="struct GstH264PPS"><span class="type">GstH264PPS</span></a> to fill.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-h264-parse-pps.returns"></a><h4>Returns</h4>
+<p> a <a class="link" href="gst-plugins-bad-libs-h264parser.html#GstH264ParserResult" title="enum GstH264ParserResult"><span class="type">GstH264ParserResult</span></a></p>
+</div>
</div>
<hr>
<div class="refsect2">
<a name="gst-h264-pps-clear"></a><h3>gst_h264_pps_clear ()</h3>
<pre class="programlisting"><span class="returnvalue">void</span>
gst_h264_pps_clear (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-h264parser.html#GstH264PPS" title="struct GstH264PPS"><span class="type">GstH264PPS</span></a> *pps</code></em>);</pre>
+<p>Clears all <em class="parameter"><code>pps</code></em>
+ internal resources.</p>
+<div class="refsect3">
+<a name="gst-h264-pps-clear.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>pps</p></td>
+<td class="parameter_description"><p>The <a class="link" href="gst-plugins-bad-libs-h264parser.html#GstH264PPS" title="struct GstH264PPS"><span class="type">GstH264PPS</span></a> to free</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<p class="since">Since: 1.4</p>
</div>
<hr>
<div class="refsect2">
@@ -446,6 +885,37 @@
gst_h264_quant_matrix_8x8_get_zigzag_from_raster
(<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> out_quant[64]</code></em>,
<em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> quant[64]</code></em>);</pre>
+<p>Converts quantization matrix <em class="parameter"><code>quant</code></em>
+ from raster scan order to
+zigzag scan order and store the resulting factors into <em class="parameter"><code>out_quant</code></em>
+.</p>
+<p>Note: it is an error to pass the same table in both <em class="parameter"><code>quant</code></em>
+ and
+<em class="parameter"><code>out_quant</code></em>
+ arguments.</p>
+<div class="refsect3">
+<a name="gst-h264-quant-matrix-8x8-get-zigzag-from-raster.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>out_quant</p></td>
+<td class="parameter_description"><p> The resulting quantization matrix. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>quant</p></td>
+<td class="parameter_description"><p>The source quantization matrix</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 1.4</p>
</div>
<hr>
<div class="refsect2">
@@ -454,6 +924,37 @@
gst_h264_quant_matrix_8x8_get_raster_from_zigzag
(<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> out_quant[64]</code></em>,
<em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> quant[64]</code></em>);</pre>
+<p>Converts quantization matrix <em class="parameter"><code>quant</code></em>
+ from zigzag scan order to
+raster scan order and store the resulting factors into <em class="parameter"><code>out_quant</code></em>
+.</p>
+<p>Note: it is an error to pass the same table in both <em class="parameter"><code>quant</code></em>
+ and
+<em class="parameter"><code>out_quant</code></em>
+ arguments.</p>
+<div class="refsect3">
+<a name="gst-h264-quant-matrix-8x8-get-raster-from-zigzag.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>out_quant</p></td>
+<td class="parameter_description"><p> The resulting quantization matrix. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>quant</p></td>
+<td class="parameter_description"><p>The source quantization matrix</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 1.4</p>
</div>
<hr>
<div class="refsect2">
@@ -462,6 +963,37 @@
gst_h264_quant_matrix_4x4_get_zigzag_from_raster
(<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> out_quant[16]</code></em>,
<em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> quant[16]</code></em>);</pre>
+<p>Converts quantization matrix <em class="parameter"><code>quant</code></em>
+ from raster scan order to
+zigzag scan order and store the resulting factors into <em class="parameter"><code>out_quant</code></em>
+.</p>
+<p>Note: it is an error to pass the same table in both <em class="parameter"><code>quant</code></em>
+ and
+<em class="parameter"><code>out_quant</code></em>
+ arguments.</p>
+<div class="refsect3">
+<a name="gst-h264-quant-matrix-4x4-get-zigzag-from-raster.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>out_quant</p></td>
+<td class="parameter_description"><p> The resulting quantization matrix. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>quant</p></td>
+<td class="parameter_description"><p>The source quantization matrix</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 1.4</p>
</div>
<hr>
<div class="refsect2">
@@ -470,6 +1002,37 @@
gst_h264_quant_matrix_4x4_get_raster_from_zigzag
(<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> out_quant[16]</code></em>,
<em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> quant[16]</code></em>);</pre>
+<p>Converts quantization matrix <em class="parameter"><code>quant</code></em>
+ from zigzag scan order to
+raster scan order and store the resulting factors into <em class="parameter"><code>out_quant</code></em>
+.</p>
+<p>Note: it is an error to pass the same table in both <em class="parameter"><code>quant</code></em>
+ and
+<em class="parameter"><code>out_quant</code></em>
+ arguments.</p>
+<div class="refsect3">
+<a name="gst-h264-quant-matrix-4x4-get-raster-from-zigzag.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>out_quant</p></td>
+<td class="parameter_description"><p> The resulting quantization matrix. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>quant</p></td>
+<td class="parameter_description"><p>The source quantization matrix</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 1.4</p>
</div>
<hr>
<div class="refsect2">
@@ -480,6 +1043,55 @@
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="type">guint</span></a> pic_struct</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint"><span class="type">gint</span></a> *fps_num</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint"><span class="type">gint</span></a> *fps_den</code></em>);</pre>
+<p>Calculate framerate of a video sequence using <em class="parameter"><code>sps</code></em>
+ VUI information,
+<em class="parameter"><code>field_pic_flag</code></em>
+ from a slice header and <em class="parameter"><code>pic_struct</code></em>
+ from <a class="link" href="gst-plugins-bad-libs-h264parser.html#GstH264PicTiming" title="struct GstH264PicTiming"><span class="type">GstH264PicTiming</span></a> SEI
+message.</p>
+<p>If framerate is variable or can't be determined, <em class="parameter"><code>fps_num</code></em>
+ will be set to 0
+and <em class="parameter"><code>fps_den</code></em>
+ to 1.</p>
+<div class="refsect3">
+<a name="gst-h264-video-calculate-framerate.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>sps</p></td>
+<td class="parameter_description"><p>Current Sequence Parameter Set</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>field_pic_flag</p></td>
+<td class="parameter_description"><p>Current <em class="parameter"><code>field_pic_flag</code></em>
+, obtained from latest slice header</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>pic_struct</p></td>
+<td class="parameter_description"><p><em class="parameter"><code>pic_struct</code></em>
+value if available, 0 otherwise</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>fps_num</p></td>
+<td class="parameter_description"><p> The resulting fps numerator. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>fps_den</p></td>
+<td class="parameter_description"><p> The resulting fps denominator. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
</div>
</div>
<div class="refsect1">
@@ -498,6 +1110,7 @@
<hr>
<div class="refsect2">
<a name="GstH264NalUnitType"></a><h3>enum GstH264NalUnitType</h3>
+<p>Indicates the type of H264 Nal Units</p>
<div class="refsect3">
<a name="GstH264NalUnitType.members"></a><h4>Members</h4>
<div class="informaltable"><table class="informaltable" width="100%" border="0">
@@ -509,103 +1122,143 @@
<tbody>
<tr>
<td class="enum_member_name"><p><a name="GST-H264-NAL-UNKNOWN:CAPS"></a>GST_H264_NAL_UNKNOWN</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>Unknown nal type</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-H264-NAL-SLICE:CAPS"></a>GST_H264_NAL_SLICE</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>Slice nal</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-H264-NAL-SLICE-DPA:CAPS"></a>GST_H264_NAL_SLICE_DPA</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>DPA slice nal</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-H264-NAL-SLICE-DPB:CAPS"></a>GST_H264_NAL_SLICE_DPB</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>DPB slice nal</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-H264-NAL-SLICE-DPC:CAPS"></a>GST_H264_NAL_SLICE_DPC</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>DPC slice nal</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-H264-NAL-SLICE-IDR:CAPS"></a>GST_H264_NAL_SLICE_IDR</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>DPR slice nal</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-H264-NAL-SEI:CAPS"></a>GST_H264_NAL_SEI</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>Supplemental enhancement information (SEI) nal unit</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-H264-NAL-SPS:CAPS"></a>GST_H264_NAL_SPS</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>Sequence parameter set (SPS) nal unit</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-H264-NAL-PPS:CAPS"></a>GST_H264_NAL_PPS</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>Picture parameter set (PPS) nal unit</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-H264-NAL-AU-DELIMITER:CAPS"></a>GST_H264_NAL_AU_DELIMITER</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>Access unit (AU) delimiter nal unit</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-H264-NAL-SEQ-END:CAPS"></a>GST_H264_NAL_SEQ_END</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>End of sequence nal unit</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-H264-NAL-STREAM-END:CAPS"></a>GST_H264_NAL_STREAM_END</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>End of stream nal unit</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-H264-NAL-FILLER-DATA:CAPS"></a>GST_H264_NAL_FILLER_DATA</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>Filler data nal lunit</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-H264-NAL-SPS-EXT:CAPS"></a>GST_H264_NAL_SPS_EXT</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>Sequence parameter set (SPS) extension NAL unit</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-H264-NAL-PREFIX-UNIT:CAPS"></a>GST_H264_NAL_PREFIX_UNIT</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>Prefix NAL unit</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-H264-NAL-SUBSET-SPS:CAPS"></a>GST_H264_NAL_SUBSET_SPS</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>Subset sequence parameter set (SSPS) NAL unit</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-H264-NAL-DEPTH-SPS:CAPS"></a>GST_H264_NAL_DEPTH_SPS</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>Depth parameter set (DPS) NAL unit</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-H264-NAL-SLICE-AUX:CAPS"></a>GST_H264_NAL_SLICE_AUX</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>Auxiliary coded picture without partitioning NAL unit</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-H264-NAL-SLICE-EXT:CAPS"></a>GST_H264_NAL_SLICE_EXT</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>Coded slice extension NAL unit</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-H264-NAL-SLICE-DEPTH:CAPS"></a>GST_H264_NAL_SLICE_DEPTH</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>Coded slice extension for depth or 3D-AVC texture view</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
</tbody>
</table></div>
@@ -614,6 +1267,7 @@
<hr>
<div class="refsect2">
<a name="GstH264ParserResult"></a><h3>enum GstH264ParserResult</h3>
+<p>The result of parsing H264 data.</p>
<div class="refsect3">
<a name="GstH264ParserResult.members"></a><h4>Members</h4>
<div class="informaltable"><table class="informaltable" width="100%" border="0">
@@ -625,33 +1279,45 @@
<tbody>
<tr>
<td class="enum_member_name"><p><a name="GST-H264-PARSER-OK:CAPS"></a>GST_H264_PARSER_OK</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>The parsing succeded</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-H264-PARSER-BROKEN-DATA:CAPS"></a>GST_H264_PARSER_BROKEN_DATA</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>The data to parse is broken</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-H264-PARSER-BROKEN-LINK:CAPS"></a>GST_H264_PARSER_BROKEN_LINK</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>The link to structure needed for the parsing couldn't be found</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-H264-PARSER-ERROR:CAPS"></a>GST_H264_PARSER_ERROR</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>An error occured when parsing</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-H264-PARSER-NO-NAL:CAPS"></a>GST_H264_PARSER_NO_NAL</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>No nal found during the parsing</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-H264-PARSER-NO-NAL-END:CAPS"></a>GST_H264_PARSER_NO_NAL_END</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>Start of the nal found, but not the end.</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
</tbody>
</table></div>
@@ -660,6 +1326,7 @@
<hr>
<div class="refsect2">
<a name="GstH264SEIPayloadType"></a><h3>enum GstH264SEIPayloadType</h3>
+<p>The type of SEI message.</p>
<div class="refsect3">
<a name="GstH264SEIPayloadType.members"></a><h4>Members</h4>
<div class="informaltable"><table class="informaltable" width="100%" border="0">
@@ -671,28 +1338,40 @@
<tbody>
<tr>
<td class="enum_member_name"><p><a name="GST-H264-SEI-BUF-PERIOD:CAPS"></a>GST_H264_SEI_BUF_PERIOD</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>Buffering Period SEI Message</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-H264-SEI-PIC-TIMING:CAPS"></a>GST_H264_SEI_PIC_TIMING</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>Picture Timing SEI Message</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-H264-SEI-RECOVERY-POINT:CAPS"></a>GST_H264_SEI_RECOVERY_POINT</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>Recovery Point SEI Message (D.2.7)</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-H264-SEI-STEREO-VIDEO-INFO:CAPS"></a>GST_H264_SEI_STEREO_VIDEO_INFO</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>stereo video info SEI message (Since: 1.6)</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-H264-SEI-FRAME-PACKING:CAPS"></a>GST_H264_SEI_FRAME_PACKING</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>Frame Packing Arrangement (FPA) message that
+ contains the 3D arrangement for stereoscopic 3D video (Since: 1.6)
+...</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
</tbody>
</table></div>
@@ -701,6 +1380,7 @@
<hr>
<div class="refsect2">
<a name="GstH264SEIPicStructType"></a><h3>enum GstH264SEIPicStructType</h3>
+<p>SEI pic_struct type</p>
<div class="refsect3">
<a name="GstH264SEIPicStructType.members"></a><h4>Members</h4>
<div class="informaltable"><table class="informaltable" width="100%" border="0">
@@ -712,48 +1392,68 @@
<tbody>
<tr>
<td class="enum_member_name"><p><a name="GST-H264-SEI-PIC-STRUCT-FRAME:CAPS"></a>GST_H264_SEI_PIC_STRUCT_FRAME</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>Picture is a frame</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-H264-SEI-PIC-STRUCT-TOP-FIELD:CAPS"></a>GST_H264_SEI_PIC_STRUCT_TOP_FIELD</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>Top field of frame</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-H264-SEI-PIC-STRUCT-BOTTOM-FIELD:CAPS"></a>GST_H264_SEI_PIC_STRUCT_BOTTOM_FIELD</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>Botom field of frame</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-H264-SEI-PIC-STRUCT-TOP-BOTTOM:CAPS"></a>GST_H264_SEI_PIC_STRUCT_TOP_BOTTOM</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>Top bottom field of frame</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-H264-SEI-PIC-STRUCT-BOTTOM-TOP:CAPS"></a>GST_H264_SEI_PIC_STRUCT_BOTTOM_TOP</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>bottom top field of frame</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-H264-SEI-PIC-STRUCT-TOP-BOTTOM-TOP:CAPS"></a>GST_H264_SEI_PIC_STRUCT_TOP_BOTTOM_TOP</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>top bottom top field of frame</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-H264-SEI-PIC-STRUCT-BOTTOM-TOP-BOTTOM:CAPS"></a>GST_H264_SEI_PIC_STRUCT_BOTTOM_TOP_BOTTOM</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>bottom top bottom field of frame</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-H264-SEI-PIC-STRUCT-FRAME-DOUBLING:CAPS"></a>GST_H264_SEI_PIC_STRUCT_FRAME_DOUBLING</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>indicates that the frame should
+ be displayed two times consecutively</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-H264-SEI-PIC-STRUCT-FRAME-TRIPLING:CAPS"></a>GST_H264_SEI_PIC_STRUCT_FRAME_TRIPLING</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>indicates that the frame should be
+ displayed three times consecutively</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
</tbody>
</table></div>
@@ -762,6 +1462,7 @@
<hr>
<div class="refsect2">
<a name="GstH264SliceType"></a><h3>enum GstH264SliceType</h3>
+<p>Type of Picture slice</p>
<div class="refsect3">
<a name="GstH264SliceType.members"></a><h4>Members</h4>
<div class="informaltable"><table class="informaltable" width="100%" border="0">
@@ -831,6 +1532,7 @@
<pre class="programlisting">struct GstH264NalParser {
};
</pre>
+<p>H264 NAL Parser (opaque structure).</p>
</div>
<hr>
<div class="refsect2">
@@ -855,6 +1557,79 @@
} extension;
};
</pre>
+<p>Structure defining the Nal unit headers</p>
+<div class="refsect3">
+<a name="GstH264NalUnit.members"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="300px" class="struct_members_name">
+<col class="struct_members_description">
+<col width="200px" class="struct_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint16"><span class="type">guint16</span></a> <em class="structfield"><code><a name="GstH264NalUnit.ref-idc"></a>ref_idc</code></em>;</p></td>
+<td class="struct_member_description"><p>not equal to 0 specifies that the content of the NAL unit
+contains a sequence parameter set, a sequence parameter set
+extension, a subset sequence parameter set, a picture parameter
+set, a slice of a reference picture, a slice data partition of a
+reference picture, or a prefix NAL unit preceding a slice of a
+reference picture.</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint16"><span class="type">guint16</span></a> <em class="structfield"><code><a name="GstH264NalUnit.type"></a>type</code></em>;</p></td>
+<td class="struct_member_description"><p>A <a class="link" href="gst-plugins-bad-libs-h264parser.html#GstH264NalUnitType" title="enum GstH264NalUnitType"><span class="type">GstH264NalUnitType</span></a></p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstH264NalUnit.idr-pic-flag"></a>idr_pic_flag</code></em>;</p></td>
+<td class="struct_member_description"><p>calculated idr_pic_flag</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="type">guint</span></a> <em class="structfield"><code><a name="GstH264NalUnit.size"></a>size</code></em>;</p></td>
+<td class="struct_member_description"><p>The size of the nal unit starting from <em class="parameter"><code>offset</code></em>
+, thus
+including the header bytes. e.g. <em class="parameter"><code>type</code></em>
+(nal_unit_type)</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="type">guint</span></a> <em class="structfield"><code><a name="GstH264NalUnit.offset"></a>offset</code></em>;</p></td>
+<td class="struct_member_description"><p>The offset of the actual start of the nal unit, thus
+including the header bytes</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="type">guint</span></a> <em class="structfield"><code><a name="GstH264NalUnit.sc-offset"></a>sc_offset</code></em>;</p></td>
+<td class="struct_member_description"><p>The offset of the start code of the nal unit</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> <em class="structfield"><code><a name="GstH264NalUnit.valid"></a>valid</code></em>;</p></td>
+<td class="struct_member_description"><p>If the nal unit is valid, which means it has
+already been parsed</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> *<em class="structfield"><code><a name="GstH264NalUnit.data"></a>data</code></em>;</p></td>
+<td class="struct_member_description"><p>The data from which the Nalu has been parsed</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstH264NalUnit.header-bytes"></a>header_bytes</code></em>;</p></td>
+<td class="struct_member_description"><p>The size of the NALU header in bytes (Since 1.6)</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstH264NalUnit.extension-type"></a>extension_type</code></em>;</p></td>
+<td class="struct_member_description"><p>the extension type (Since 1.6)</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
</div>
<hr>
<div class="refsect2">
@@ -932,6 +1707,274 @@
} extension;
};
</pre>
+<p>H264 Sequence Parameter Set (SPS)</p>
+<div class="refsect3">
+<a name="GstH264SPS.members"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="300px" class="struct_members_name">
+<col class="struct_members_description">
+<col width="200px" class="struct_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint"><span class="type">gint</span></a> <em class="structfield"><code><a name="GstH264SPS.id"></a>id</code></em>;</p></td>
+<td class="struct_member_description"><p>The ID of the sequence parameter set</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstH264SPS.profile-idc"></a>profile_idc</code></em>;</p></td>
+<td class="struct_member_description"><p>indicate the profile to which the coded video sequence conforms</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstH264SPS.constraint-set0-flag"></a>constraint_set0_flag</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstH264SPS.constraint-set1-flag"></a>constraint_set1_flag</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstH264SPS.constraint-set2-flag"></a>constraint_set2_flag</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstH264SPS.constraint-set3-flag"></a>constraint_set3_flag</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstH264SPS.constraint-set4-flag"></a>constraint_set4_flag</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstH264SPS.constraint-set5-flag"></a>constraint_set5_flag</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstH264SPS.level-idc"></a>level_idc</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstH264SPS.chroma-format-idc"></a>chroma_format_idc</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstH264SPS.separate-colour-plane-flag"></a>separate_colour_plane_flag</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstH264SPS.bit-depth-luma-minus8"></a>bit_depth_luma_minus8</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstH264SPS.bit-depth-chroma-minus8"></a>bit_depth_chroma_minus8</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstH264SPS.qpprime-y-zero-transform-bypass-flag"></a>qpprime_y_zero_transform_bypass_flag</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstH264SPS.scaling-matrix-present-flag"></a>scaling_matrix_present_flag</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstH264SPS.scaling-lists-4x4"></a>scaling_lists_4x4</code></em>[6][16];</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstH264SPS.scaling-lists-8x8"></a>scaling_lists_8x8</code></em>[6][64];</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstH264SPS.log2-max-frame-num-minus4"></a>log2_max_frame_num_minus4</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstH264SPS.pic-order-cnt-type"></a>pic_order_cnt_type</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstH264SPS.log2-max-pic-order-cnt-lsb-minus4"></a>log2_max_pic_order_cnt_lsb_minus4</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstH264SPS.delta-pic-order-always-zero-flag"></a>delta_pic_order_always_zero_flag</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint32"><span class="type">gint32</span></a> <em class="structfield"><code><a name="GstH264SPS.offset-for-non-ref-pic"></a>offset_for_non_ref_pic</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint32"><span class="type">gint32</span></a> <em class="structfield"><code><a name="GstH264SPS.offset-for-top-to-bottom-field"></a>offset_for_top_to_bottom_field</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstH264SPS.num-ref-frames-in-pic-order-cnt-cycle"></a>num_ref_frames_in_pic_order_cnt_cycle</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint32"><span class="type">gint32</span></a> <em class="structfield"><code><a name="GstH264SPS.offset-for-ref-frame"></a>offset_for_ref_frame</code></em>[255];</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint32"><span class="type">guint32</span></a> <em class="structfield"><code><a name="GstH264SPS.num-ref-frames"></a>num_ref_frames</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstH264SPS.gaps-in-frame-num-value-allowed-flag"></a>gaps_in_frame_num_value_allowed_flag</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint32"><span class="type">guint32</span></a> <em class="structfield"><code><a name="GstH264SPS.pic-width-in-mbs-minus1"></a>pic_width_in_mbs_minus1</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint32"><span class="type">guint32</span></a> <em class="structfield"><code><a name="GstH264SPS.pic-height-in-map-units-minus1"></a>pic_height_in_map_units_minus1</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstH264SPS.frame-mbs-only-flag"></a>frame_mbs_only_flag</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstH264SPS.mb-adaptive-frame-field-flag"></a>mb_adaptive_frame_field_flag</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstH264SPS.direct-8x8-inference-flag"></a>direct_8x8_inference_flag</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstH264SPS.frame-cropping-flag"></a>frame_cropping_flag</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint32"><span class="type">guint32</span></a> <em class="structfield"><code><a name="GstH264SPS.frame-crop-left-offset"></a>frame_crop_left_offset</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint32"><span class="type">guint32</span></a> <em class="structfield"><code><a name="GstH264SPS.frame-crop-right-offset"></a>frame_crop_right_offset</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint32"><span class="type">guint32</span></a> <em class="structfield"><code><a name="GstH264SPS.frame-crop-top-offset"></a>frame_crop_top_offset</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint32"><span class="type">guint32</span></a> <em class="structfield"><code><a name="GstH264SPS.frame-crop-bottom-offset"></a>frame_crop_bottom_offset</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstH264SPS.vui-parameters-present-flag"></a>vui_parameters_present_flag</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a class="link" href="gst-plugins-bad-libs-h264parser.html#GstH264VUIParams" title="struct GstH264VUIParams"><span class="type">GstH264VUIParams</span></a> <em class="structfield"><code><a name="GstH264SPS.vui-parameters"></a>vui_parameters</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstH264SPS.chroma-array-type"></a>chroma_array_type</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint32"><span class="type">guint32</span></a> <em class="structfield"><code><a name="GstH264SPS.max-frame-num"></a>max_frame_num</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint"><span class="type">gint</span></a> <em class="structfield"><code><a name="GstH264SPS.width"></a>width</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint"><span class="type">gint</span></a> <em class="structfield"><code><a name="GstH264SPS.height"></a>height</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint"><span class="type">gint</span></a> <em class="structfield"><code><a name="GstH264SPS.crop-rect-width"></a>crop_rect_width</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint"><span class="type">gint</span></a> <em class="structfield"><code><a name="GstH264SPS.crop-rect-height"></a>crop_rect_height</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint"><span class="type">gint</span></a> <em class="structfield"><code><a name="GstH264SPS.crop-rect-x"></a>crop_rect_x</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint"><span class="type">gint</span></a> <em class="structfield"><code><a name="GstH264SPS.crop-rect-y"></a>crop_rect_y</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint"><span class="type">gint</span></a> <em class="structfield"><code><a name="GstH264SPS.fps-num-removed"></a>fps_num_removed</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint"><span class="type">gint</span></a> <em class="structfield"><code><a name="GstH264SPS.fps-den-removed"></a>fps_den_removed</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> <em class="structfield"><code><a name="GstH264SPS.valid"></a>valid</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstH264SPS.extension-type"></a>extension_type</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
</div>
<hr>
<div class="refsect2">
@@ -981,6 +2024,7 @@
gboolean valid;
};
</pre>
+<p>H264 Picture Parameter Set</p>
</div>
<hr>
<div class="refsect2">
@@ -1000,6 +2044,78 @@
guint8 time_offset_length;
};
</pre>
+<p>Defines the HRD parameters</p>
+<div class="refsect3">
+<a name="GstH264HRDParams.members"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="300px" class="struct_members_name">
+<col class="struct_members_description">
+<col width="200px" class="struct_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstH264HRDParams.cpb-cnt-minus1"></a>cpb_cnt_minus1</code></em>;</p></td>
+<td class="struct_member_description"><p>plus 1 specifies the number of alternative
+CPB specifications in the bitstream</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstH264HRDParams.bit-rate-scale"></a>bit_rate_scale</code></em>;</p></td>
+<td class="struct_member_description"><p>specifies the maximum input bit rate of the
+SchedSelIdx-th CPB</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstH264HRDParams.cpb-size-scale"></a>cpb_size_scale</code></em>;</p></td>
+<td class="struct_member_description"><p>specifies the CPB size of the SchedSelIdx-th CPB
+<em class="parameter"><code>guint32</code></em>
+bit_rate_value_minus1: specifies the maximum input bit rate for the
+SchedSelIdx-th CPB</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint32"><span class="type">guint32</span></a> <em class="structfield"><code><a name="GstH264HRDParams.bit-rate-value-minus1"></a>bit_rate_value_minus1</code></em>[32];</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint32"><span class="type">guint32</span></a> <em class="structfield"><code><a name="GstH264HRDParams.cpb-size-value-minus1"></a>cpb_size_value_minus1</code></em>[32];</p></td>
+<td class="struct_member_description"><p>is used together with cpb_size_scale to specify the
+SchedSelIdx-th CPB size</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstH264HRDParams.cbr-flag"></a>cbr_flag</code></em>[32];</p></td>
+<td class="struct_member_description"><p>Specifies if running in itermediate bitrate mode or constant</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstH264HRDParams.initial-cpb-removal-delay-length-minus1"></a>initial_cpb_removal_delay_length_minus1</code></em>;</p></td>
+<td class="struct_member_description"><p>specifies the length in bits of
+the cpb_removal_delay syntax element</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstH264HRDParams.cpb-removal-delay-length-minus1"></a>cpb_removal_delay_length_minus1</code></em>;</p></td>
+<td class="struct_member_description"><p>specifies the length in bits of the
+dpb_output_delay syntax element</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstH264HRDParams.dpb-output-delay-length-minus1"></a>dpb_output_delay_length_minus1</code></em>;</p></td>
+<td class="struct_member_description"><div class="blockquote"><blockquote class="blockquote"><p>0 specifies the length in bits of the time_offset syntax element.
+=0 specifies that the time_offset syntax element is not present</p></blockquote></div></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstH264HRDParams.time-offset-length"></a>time_offset_length</code></em>;</p></td>
+<td class="struct_member_description"><p>Length of the time offset</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
</div>
<hr>
<div class="refsect2">
@@ -1059,6 +2175,225 @@
guint par_d;
};
</pre>
+<p>The structure representing the VUI parameters.</p>
+<div class="refsect3">
+<a name="GstH264VUIParams.members"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="300px" class="struct_members_name">
+<col class="struct_members_description">
+<col width="200px" class="struct_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstH264VUIParams.aspect-ratio-info-present-flag"></a>aspect_ratio_info_present_flag</code></em>;</p></td>
+<td class="struct_member_description"><p><a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> specifies that aspect_ratio_idc is present.
+<a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> specifies that aspect_ratio_idc is not present
+<em class="parameter"><code>aspect_ratio_idc</code></em>
+specifies the value of the sample aspect ratio of the luma samples
+<em class="parameter"><code>sar_width</code></em>
+indicates the horizontal size of the sample aspect ratio
+<em class="parameter"><code>sar_height</code></em>
+indicates the vertical size of the sample aspect ratio</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstH264VUIParams.aspect-ratio-idc"></a>aspect_ratio_idc</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint16"><span class="type">guint16</span></a> <em class="structfield"><code><a name="GstH264VUIParams.sar-width"></a>sar_width</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint16"><span class="type">guint16</span></a> <em class="structfield"><code><a name="GstH264VUIParams.sar-height"></a>sar_height</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstH264VUIParams.overscan-info-present-flag"></a>overscan_info_present_flag</code></em>;</p></td>
+<td class="struct_member_description"><p><a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> overscan_appropriate_flag is present <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> otherwise</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstH264VUIParams.overscan-appropriate-flag"></a>overscan_appropriate_flag</code></em>;</p></td>
+<td class="struct_member_description"><p><a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> indicates that the cropped decoded pictures
+output are suitable for display using overscan. <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> the cropped decoded pictures
+output contain visually important information</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstH264VUIParams.video-signal-type-present-flag"></a>video_signal_type_present_flag</code></em>;</p></td>
+<td class="struct_member_description"><p><a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> specifies that video_format, video_full_range_flag and
+colour_description_present_flag are present.</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstH264VUIParams.video-format"></a>video_format</code></em>;</p></td>
+<td class="struct_member_description"><p>indicates the representation of the picture</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstH264VUIParams.video-full-range-flag"></a>video_full_range_flag</code></em>;</p></td>
+<td class="struct_member_description"><p>indicates the black level and range of the luma and chroma signals</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstH264VUIParams.colour-description-present-flag"></a>colour_description_present_flag</code></em>;</p></td>
+<td class="struct_member_description"><p><a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> specifies that colour_primaries,
+transfer_characteristics and matrix_coefficients are present</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstH264VUIParams.colour-primaries"></a>colour_primaries</code></em>;</p></td>
+<td class="struct_member_description"><p>indicates the chromaticity coordinates of the source primaries</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstH264VUIParams.transfer-characteristics"></a>transfer_characteristics</code></em>;</p></td>
+<td class="struct_member_description"><p>indicates the opto-electronic transfer characteristic</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstH264VUIParams.matrix-coefficients"></a>matrix_coefficients</code></em>;</p></td>
+<td class="struct_member_description"><p>describes the matrix coefficients used in deriving luma and chroma signals</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstH264VUIParams.chroma-loc-info-present-flag"></a>chroma_loc_info_present_flag</code></em>;</p></td>
+<td class="struct_member_description"><p><a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> specifies that chroma_sample_loc_type_top_field and
+chroma_sample_loc_type_bottom_field are present, <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> otherwise</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstH264VUIParams.chroma-sample-loc-type-top-field"></a>chroma_sample_loc_type_top_field</code></em>;</p></td>
+<td class="struct_member_description"><p>specify the location of chroma for top field
+<em class="parameter"><code>chroma_sample_loc_type_bottom_field</code></em>
+specify the location of chroma for bottom field</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstH264VUIParams.chroma-sample-loc-type-bottom-field"></a>chroma_sample_loc_type_bottom_field</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstH264VUIParams.timing-info-present-flag"></a>timing_info_present_flag</code></em>;</p></td>
+<td class="struct_member_description"><p><a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> specifies that num_units_in_tick,
+time_scale and fixed_frame_rate_flag are present in the bitstream</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint32"><span class="type">guint32</span></a> <em class="structfield"><code><a name="GstH264VUIParams.num-units-in-tick"></a>num_units_in_tick</code></em>;</p></td>
+<td class="struct_member_description"><p>is the number of time units of a clock operating at the frequency time_scale Hz
+time_scale: is the number of time units that pass in one second</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint32"><span class="type">guint32</span></a> <em class="structfield"><code><a name="GstH264VUIParams.time-scale"></a>time_scale</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstH264VUIParams.fixed-frame-rate-flag"></a>fixed_frame_rate_flag</code></em>;</p></td>
+<td class="struct_member_description"><p><a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> indicates that the temporal distance between the HRD output times
+of any two consecutive pictures in output order is constrained as specified in the spec, <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a>
+otherwise.</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstH264VUIParams.nal-hrd-parameters-present-flag"></a>nal_hrd_parameters_present_flag</code></em>;</p></td>
+<td class="struct_member_description"><p><a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if nal hrd parameters present in the bitstream</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a class="link" href="gst-plugins-bad-libs-h264parser.html#GstH264HRDParams" title="struct GstH264HRDParams"><span class="type">GstH264HRDParams</span></a> <em class="structfield"><code><a name="GstH264VUIParams.nal-hrd-parameters"></a>nal_hrd_parameters</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstH264VUIParams.vcl-hrd-parameters-present-flag"></a>vcl_hrd_parameters_present_flag</code></em>;</p></td>
+<td class="struct_member_description"><p><a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if nal vlc hrd parameters present in the bitstream</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a class="link" href="gst-plugins-bad-libs-h264parser.html#GstH264HRDParams" title="struct GstH264HRDParams"><span class="type">GstH264HRDParams</span></a> <em class="structfield"><code><a name="GstH264VUIParams.vcl-hrd-parameters"></a>vcl_hrd_parameters</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstH264VUIParams.low-delay-hrd-flag"></a>low_delay_hrd_flag</code></em>;</p></td>
+<td class="struct_member_description"><p>specifies the HRD operational mode</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstH264VUIParams.pic-struct-present-flag"></a>pic_struct_present_flag</code></em>;</p></td>
+<td class="struct_member_description"><p><a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> specifies that picture timing SEI messages are present or not</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstH264VUIParams.bitstream-restriction-flag"></a>bitstream_restriction_flag</code></em>;</p></td>
+<td class="struct_member_description"><p><a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> specifies that the following coded video sequence bitstream restriction
+parameters are present</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstH264VUIParams.motion-vectors-over-pic-boundaries-flag"></a>motion_vectors_over_pic_boundaries_flag</code></em>;</p></td>
+<td class="struct_member_description"><p><a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> indicates that no sample outside the
+picture boundaries and no sample at a fractional sample position, <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> indicates that one or more
+samples outside picture boundaries may be used in inter prediction</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint32"><span class="type">guint32</span></a> <em class="structfield"><code><a name="GstH264VUIParams.max-bytes-per-pic-denom"></a>max_bytes_per_pic_denom</code></em>;</p></td>
+<td class="struct_member_description"><p>indicates a number of bytes not exceeded by the sum of the sizes of
+the VCL NAL units associated with any coded picture in the coded video sequence.</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint32"><span class="type">guint32</span></a> <em class="structfield"><code><a name="GstH264VUIParams.max-bits-per-mb-denom"></a>max_bits_per_mb_denom</code></em>;</p></td>
+<td class="struct_member_description"><p>indicates the maximum number of coded bits of macroblock_layer</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint32"><span class="type">guint32</span></a> <em class="structfield"><code><a name="GstH264VUIParams.log2-max-mv-length-horizontal"></a>log2_max_mv_length_horizontal</code></em>;</p></td>
+<td class="struct_member_description"><p>indicate the maximum absolute value of a decoded horizontal
+motion vector component</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint32"><span class="type">guint32</span></a> <em class="structfield"><code><a name="GstH264VUIParams.log2-max-mv-length-vertical"></a>log2_max_mv_length_vertical</code></em>;</p></td>
+<td class="struct_member_description"><p>indicate the maximum absolute value of a decoded vertical
+motion vector component</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint32"><span class="type">guint32</span></a> <em class="structfield"><code><a name="GstH264VUIParams.num-reorder-frames"></a>num_reorder_frames</code></em>;</p></td>
+<td class="struct_member_description"><p>indicates the maximum number of frames, complementary field pairs,
+or non-paired fields that precede any frame,</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint32"><span class="type">guint32</span></a> <em class="structfield"><code><a name="GstH264VUIParams.max-dec-frame-buffering"></a>max_dec_frame_buffering</code></em>;</p></td>
+<td class="struct_member_description"><p>specifies the required size of the HRD decoded picture buffer in
+units of frame buffers.</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="type">guint</span></a> <em class="structfield"><code><a name="GstH264VUIParams.par-n"></a>par_n</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="type">guint</span></a> <em class="structfield"><code><a name="GstH264VUIParams.par-d"></a>par_d</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
</div>
<hr>
<div class="refsect2">
diff --git a/docs/libs/html/gst-plugins-bad-libs-jpegparser.html b/docs/libs/html/gst-plugins-bad-libs-jpegparser.html
index d76b4c7..d74b3a0 100644
--- a/docs/libs/html/gst-plugins-bad-libs-jpegparser.html
+++ b/docs/libs/html/gst-plugins-bad-libs-jpegparser.html
@@ -27,7 +27,7 @@
<div class="refnamediv"><table width="100%"><tr>
<td valign="top">
<h2><span class="refentrytitle"><a name="gst-plugins-bad-libs-jpegparser.top_of_page"></a>jpegparser</span></h2>
-<p>jpegparser</p>
+<p>jpegparser — Convenience library for JPEG bitstream parsing.</p>
</td>
<td class="gallery_image" valign="top" align="right"></td>
</tr></table></div>
@@ -200,6 +200,11 @@
</div>
<div class="refsect1">
<a name="gst-plugins-bad-libs-jpegparser.description"></a><h2>Description</h2>
+<div class="refsect2">
+<a name="id-1.2.4.4.6.2"></a><p>
+Provides useful functions for parsing JPEG images
+</p>
+</div>
</div>
<div class="refsect1">
<a name="gst-plugins-bad-libs-jpegparser.functions_details"></a><h2>Functions</h2>
@@ -210,6 +215,50 @@
<em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> *data</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gsize"><span class="type">gsize</span></a> size</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="type">guint</span></a> offset</code></em>);</pre>
+<p>Parses the JPEG bitstream contained in <em class="parameter"><code>data</code></em>
+, and returns the
+detected segment as a <a class="link" href="gst-plugins-bad-libs-jpegparser.html#GstJpegSegment" title="struct GstJpegSegment"><span class="type">GstJpegSegment</span></a>.</p>
+<p>Note that a valid segment may be returned with a length that exceeds
+the available data. It is up to the caller to make sure there's enough
+data available when parsing the segment.</p>
+<div class="refsect3">
+<a name="gst-jpeg-parse.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>segment</p></td>
+<td class="parameter_description"><p> pointer to a <a class="link" href="gst-plugins-bad-libs-jpegparser.html#GstJpegSegment" title="struct GstJpegSegment"><span class="type">GstJpegSegment</span></a> structure to fill in. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>data</p></td>
+<td class="parameter_description"><p>The data to parse</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>size</p></td>
+<td class="parameter_description"><p>The size of <em class="parameter"><code>data</code></em>
+</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>offset</p></td>
+<td class="parameter_description"><p>The offset from which to start parsing</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-jpeg-parse.returns"></a><h4>Returns</h4>
+<p> TRUE if a packet start code was found.</p>
+</div>
+<p class="since">Since: 1.6</p>
</div>
<hr>
<div class="refsect2">
@@ -217,6 +266,38 @@
<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
gst_jpeg_segment_parse_frame_header (<em class="parameter"><code>const <a class="link" href="gst-plugins-bad-libs-jpegparser.html#GstJpegSegment" title="struct GstJpegSegment"><span class="type">GstJpegSegment</span></a> *segment</code></em>,
<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-jpegparser.html#GstJpegFrameHdr" title="struct GstJpegFrameHdr"><span class="type">GstJpegFrameHdr</span></a> *frame_hdr</code></em>);</pre>
+<p>Parses the <em class="parameter"><code>frame_hdr</code></em>
+ JPEG frame header structure members from <em class="parameter"><code>segment</code></em>
+.</p>
+<p>The caller must make sure there is enough data for the whole segment
+available.</p>
+<div class="refsect3">
+<a name="gst-jpeg-segment-parse-frame-header.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>segment</p></td>
+<td class="parameter_description"><p>the JPEG segment</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>frame_hdr</p></td>
+<td class="parameter_description"><p> The <a class="link" href="gst-plugins-bad-libs-jpegparser.html#GstJpegFrameHdr" title="struct GstJpegFrameHdr"><span class="type">GstJpegFrameHdr</span></a> structure to fill in. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-jpeg-segment-parse-frame-header.returns"></a><h4>Returns</h4>
+<p> TRUE if the frame header was correctly parsed.</p>
+</div>
+<p class="since">Since: 1.6</p>
</div>
<hr>
<div class="refsect2">
@@ -224,6 +305,38 @@
<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
gst_jpeg_segment_parse_scan_header (<em class="parameter"><code>const <a class="link" href="gst-plugins-bad-libs-jpegparser.html#GstJpegSegment" title="struct GstJpegSegment"><span class="type">GstJpegSegment</span></a> *segment</code></em>,
<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-jpegparser.html#GstJpegScanHdr" title="struct GstJpegScanHdr"><span class="type">GstJpegScanHdr</span></a> *scan_hdr</code></em>);</pre>
+<p>Parses the <em class="parameter"><code>scan_hdr</code></em>
+ JPEG scan header structure members from <em class="parameter"><code>segment</code></em>
+.</p>
+<p>The caller must make sure there is enough data for the whole segment
+available.</p>
+<div class="refsect3">
+<a name="gst-jpeg-segment-parse-scan-header.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>segment</p></td>
+<td class="parameter_description"><p>the JPEG segment</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>scan_hdr</p></td>
+<td class="parameter_description"><p> The <a class="link" href="gst-plugins-bad-libs-jpegparser.html#GstJpegScanHdr" title="struct GstJpegScanHdr"><span class="type">GstJpegScanHdr</span></a> structure to fill in. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-jpeg-segment-parse-scan-header.returns"></a><h4>Returns</h4>
+<p> TRUE if the scan header was correctly parsed</p>
+</div>
+<p class="since">Since: 1.6</p>
</div>
<hr>
<div class="refsect2">
@@ -231,6 +344,44 @@
<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
gst_jpeg_segment_parse_huffman_table (<em class="parameter"><code>const <a class="link" href="gst-plugins-bad-libs-jpegparser.html#GstJpegSegment" title="struct GstJpegSegment"><span class="type">GstJpegSegment</span></a> *segment</code></em>,
<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-jpegparser.html#GstJpegHuffmanTables" title="struct GstJpegHuffmanTables"><span class="type">GstJpegHuffmanTables</span></a> *huff_tables</code></em>);</pre>
+<p>Parses the JPEG Huffman table structure members from <em class="parameter"><code>segment</code></em>
+.</p>
+<p>The caller must make sure there is enough data for the whole segment
+available.</p>
+<p>Note: <em class="parameter"><code>huf_tables</code></em>
+ represents the complete set of possible Huffman
+tables. However, the parser will only write to the Huffman table
+specified by the table destination identifier (Th). While doing so,
+the <em class="parameter"><code>valid</code></em>
+ flag of the specified Huffman table will also be set to
+<a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a>;</p>
+<div class="refsect3">
+<a name="gst-jpeg-segment-parse-huffman-table.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>segment</p></td>
+<td class="parameter_description"><p>the JPEG segment</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>huff_tables</p></td>
+<td class="parameter_description"><p> The <a class="link" href="gst-plugins-bad-libs-jpegparser.html#GstJpegHuffmanTables" title="struct GstJpegHuffmanTables"><span class="type">GstJpegHuffmanTables</span></a> structure to fill in. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-jpeg-segment-parse-huffman-table.returns"></a><h4>Returns</h4>
+<p> TRUE if the Huffman table was correctly parsed.</p>
+</div>
+<p class="since">Since: 1.6</p>
</div>
<hr>
<div class="refsect2">
@@ -239,6 +390,44 @@
gst_jpeg_segment_parse_quantization_table
(<em class="parameter"><code>const <a class="link" href="gst-plugins-bad-libs-jpegparser.html#GstJpegSegment" title="struct GstJpegSegment"><span class="type">GstJpegSegment</span></a> *segment</code></em>,
<em class="parameter"><code><a href="gst-plugins-bad-libs-jpegparser.html#GstJpegQuantTable"><span class="type">GstJpegQuantTables</span></a> *quant_tables</code></em>);</pre>
+<p>Parses the JPEG quantization table structure members from <em class="parameter"><code>segment</code></em>
+.</p>
+<p>The caller must make sure there is enough data for the whole segment
+available.</p>
+<p>Note: <em class="parameter"><code>quant_tables</code></em>
+ represents the complete set of possible
+quantization tables. However, the parser will only write to the
+quantization table specified by the table destination identifier
+(Tq). While doing so, the <em class="parameter"><code>valid</code></em>
+ flag of the specified quantization
+table will also be set to <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a>.</p>
+<div class="refsect3">
+<a name="gst-jpeg-segment-parse-quantization-table.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>segment</p></td>
+<td class="parameter_description"><p>the JPEG segment</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>quant_tables</p></td>
+<td class="parameter_description"><p> The <a href="gst-plugins-bad-libs-jpegparser.html#GstJpegQuantTable"><span class="type">GstJpegQuantTables</span></a> structure to fill in. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-jpeg-segment-parse-quantization-table.returns"></a><h4>Returns</h4>
+<p> TRUE if the quantization table was correctly parsed.</p>
+</div>
+<p class="since">Since: 1.6</p>
</div>
<hr>
<div class="refsect2">
@@ -247,6 +436,35 @@
gst_jpeg_segment_parse_restart_interval
(<em class="parameter"><code>const <a class="link" href="gst-plugins-bad-libs-jpegparser.html#GstJpegSegment" title="struct GstJpegSegment"><span class="type">GstJpegSegment</span></a> *segment</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="type">guint</span></a> *interval</code></em>);</pre>
+<p>The caller must make sure there is enough data for the whole segment
+available.</p>
+<div class="refsect3">
+<a name="gst-jpeg-segment-parse-restart-interval.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>segment</p></td>
+<td class="parameter_description"><p>the JPEG segment</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>interval</p></td>
+<td class="parameter_description"><p> The parsed restart interval value. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-jpeg-segment-parse-restart-interval.returns"></a><h4>Returns</h4>
+<p> TRUE if the restart interval value was correctly parsed.</p>
+</div>
+<p class="since">Since: 1.6</p>
</div>
<hr>
<div class="refsect2">
@@ -260,6 +478,25 @@
<a name="gst-jpeg-get-default-huffman-tables"></a><h3>gst_jpeg_get_default_huffman_tables ()</h3>
<pre class="programlisting"><span class="returnvalue">void</span>
gst_jpeg_get_default_huffman_tables (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-jpegparser.html#GstJpegHuffmanTables" title="struct GstJpegHuffmanTables"><span class="type">GstJpegHuffmanTables</span></a> *huff_tables</code></em>);</pre>
+<p>Fills in <em class="parameter"><code>huf_tables</code></em>
+ with the default AC/DC Huffman tables, as
+specified by the JPEG standard.</p>
+<div class="refsect3">
+<a name="gst-jpeg-get-default-huffman-tables.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>huf_tables</p></td>
+<td class="parameter_description"><p> The default DC/AC Huffman tables to fill in. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span></td>
+</tr></tbody>
+</table></div>
+</div>
+<p class="since">Since: 1.6</p>
</div>
</div>
<div class="refsect1">
@@ -268,18 +505,24 @@
<a name="GST-JPEG-MAX-FRAME-COMPONENTS:CAPS"></a><h3>GST_JPEG_MAX_FRAME_COMPONENTS</h3>
<pre class="programlisting">#define GST_JPEG_MAX_FRAME_COMPONENTS 256
</pre>
+<p>Maximum number of image components in a frame (Nf).</p>
+<p class="since">Since: 1.6</p>
</div>
<hr>
<div class="refsect2">
<a name="GST-JPEG-MAX-SCAN-COMPONENTS:CAPS"></a><h3>GST_JPEG_MAX_SCAN_COMPONENTS</h3>
<pre class="programlisting">#define GST_JPEG_MAX_SCAN_COMPONENTS 4
</pre>
+<p>Maximum number of image components in a scan (Ns).</p>
+<p class="since">Since: 1.6</p>
</div>
<hr>
<div class="refsect2">
<a name="GST-JPEG-MAX-QUANT-ELEMENTS:CAPS"></a><h3>GST_JPEG_MAX_QUANT_ELEMENTS</h3>
<pre class="programlisting">#define GST_JPEG_MAX_QUANT_ELEMENTS 64
</pre>
+<p>Number of elements in the quantization table.</p>
+<p class="since">Since: 1.6</p>
</div>
<hr>
<div class="refsect2">
@@ -320,6 +563,7 @@
<hr>
<div class="refsect2">
<a name="GstJpegEntropyCodingMode"></a><h3>enum GstJpegEntropyCodingMode</h3>
+<p>JPEG entropy coding mode.</p>
<div class="refsect3">
<a name="GstJpegEntropyCodingMode.members"></a><h4>Members</h4>
<div class="informaltable"><table class="informaltable" width="100%" border="0">
@@ -331,21 +575,27 @@
<tbody>
<tr>
<td class="enum_member_name"><p><a name="GST-JPEG-ENTROPY-CODING-HUFFMAN:CAPS"></a>GST_JPEG_ENTROPY_CODING_HUFFMAN</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>Huffman coding</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-JPEG-ENTROPY-CODING-ARITHMETIC:CAPS"></a>GST_JPEG_ENTROPY_CODING_ARITHMETIC</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>arithmetic coding</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
</tbody>
</table></div>
</div>
+<p class="since">Since: 1.6</p>
</div>
<hr>
<div class="refsect2">
<a name="GstJpegProfile"></a><h3>enum GstJpegProfile</h3>
+<p>JPEG encoding processes.</p>
<div class="refsect3">
<a name="GstJpegProfile.members"></a><h4>Members</h4>
<div class="informaltable"><table class="informaltable" width="100%" border="0">
@@ -357,27 +607,36 @@
<tbody>
<tr>
<td class="enum_member_name"><p><a name="GST-JPEG-PROFILE-BASELINE:CAPS"></a>GST_JPEG_PROFILE_BASELINE</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>Baseline DCT</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-JPEG-PROFILE-EXTENDED:CAPS"></a>GST_JPEG_PROFILE_EXTENDED</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>Extended sequential DCT</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-JPEG-PROFILE-PROGRESSIVE:CAPS"></a>GST_JPEG_PROFILE_PROGRESSIVE</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>Progressive DCT</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-JPEG-PROFILE-LOSSLESS:CAPS"></a>GST_JPEG_PROFILE_LOSSLESS</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>Lossless (sequential)</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
</tbody>
</table></div>
</div>
+<p class="since">Since: 1.6</p>
</div>
<hr>
<div class="refsect2">
@@ -389,6 +648,45 @@
gssize size;
};
</pre>
+<p>A structure that contains the type of a segment, its offset and its size.</p>
+<div class="refsect3">
+<a name="GstJpegSegment.members"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="300px" class="struct_members_name">
+<col class="struct_members_description">
+<col width="200px" class="struct_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="struct_member_name"><p><span class="type">GstJpegMarker</span> <em class="structfield"><code><a name="GstJpegSegment.marker"></a>marker</code></em>;</p></td>
+<td class="struct_member_description"><p>The type of the segment that starts at <em class="parameter"><code>offset</code></em>
+</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p>const <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> *<em class="structfield"><code><a name="GstJpegSegment.data"></a>data</code></em>;</p></td>
+<td class="struct_member_description"><p>the data containing the jpeg segment starting at <em class="parameter"><code>offset</code></em>
+</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="type">guint</span></a> <em class="structfield"><code><a name="GstJpegSegment.offset"></a>offset</code></em>;</p></td>
+<td class="struct_member_description"><p>The offset to the segment start in bytes. This is the
+exact start of the segment, no marker code included</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gssize"><span class="type">gssize</span></a> <em class="structfield"><code><a name="GstJpegSegment.size"></a>size</code></em>;</p></td>
+<td class="struct_member_description"><p>The size of the segment in bytes, or -1 if the end was not
+found. It is the exact size of the segment, without the sync byte and
+marker code but including any length bytes.</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 1.6</p>
</div>
<hr>
<div class="refsect2">
@@ -401,6 +699,45 @@
GstJpegFrameComponent components[GST_JPEG_MAX_FRAME_COMPONENTS];
};
</pre>
+<p>Frame header.</p>
+<div class="refsect3">
+<a name="GstJpegFrameHdr.members"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="300px" class="struct_members_name">
+<col class="struct_members_description">
+<col width="200px" class="struct_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstJpegFrameHdr.sample-precision"></a>sample_precision</code></em>;</p></td>
+<td class="struct_member_description"><p>Sample precision (P)</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint16"><span class="type">guint16</span></a> <em class="structfield"><code><a name="GstJpegFrameHdr.width"></a>width</code></em>;</p></td>
+<td class="struct_member_description"><p>Number of samples per line (X)</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint16"><span class="type">guint16</span></a> <em class="structfield"><code><a name="GstJpegFrameHdr.height"></a>height</code></em>;</p></td>
+<td class="struct_member_description"><p>Number of lines (Y)</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstJpegFrameHdr.num-components"></a>num_components</code></em>;</p></td>
+<td class="struct_member_description"><p>Number of image components in frame (Nf)</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a class="link" href="gst-plugins-bad-libs-jpegparser.html#GstJpegFrameComponent" title="struct GstJpegFrameComponent"><span class="type">GstJpegFrameComponent</span></a> <em class="structfield"><code><a name="GstJpegFrameHdr.components"></a>components</code></em>[GST_JPEG_MAX_FRAME_COMPONENTS];</p></td>
+<td class="struct_member_description"><p>Image components</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 1.6</p>
</div>
<hr>
<div class="refsect2">
@@ -412,6 +749,40 @@
guint8 quant_table_selector; /* 0 .. 3 */
};
</pre>
+<p>Component-specification parameters.</p>
+<div class="refsect3">
+<a name="GstJpegFrameComponent.members"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="300px" class="struct_members_name">
+<col class="struct_members_description">
+<col width="200px" class="struct_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstJpegFrameComponent.identifier"></a>identifier</code></em>;</p></td>
+<td class="struct_member_description"><p>Component identifier (Ci)</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstJpegFrameComponent.horizontal-factor"></a>horizontal_factor</code></em>;</p></td>
+<td class="struct_member_description"><p>Horizontal sampling factor (Hi)</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstJpegFrameComponent.vertical-factor"></a>vertical_factor</code></em>;</p></td>
+<td class="struct_member_description"><p>Vertical sampling factor (Vi)</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstJpegFrameComponent.quant-table-selector"></a>quant_table_selector</code></em>;</p></td>
+<td class="struct_member_description"><p>Quantization table destination selector (Tqi)</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 1.6</p>
</div>
<hr>
<div class="refsect2">
@@ -421,6 +792,30 @@
GstJpegScanComponent components[GST_JPEG_MAX_SCAN_COMPONENTS];
};
</pre>
+<p>Scan header.</p>
+<div class="refsect3">
+<a name="GstJpegScanHdr.members"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="300px" class="struct_members_name">
+<col class="struct_members_description">
+<col width="200px" class="struct_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstJpegScanHdr.num-components"></a>num_components</code></em>;</p></td>
+<td class="struct_member_description"><p>Number of image components in scan (Ns)</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a class="link" href="gst-plugins-bad-libs-jpegparser.html#GstJpegScanComponent" title="struct GstJpegScanComponent"><span class="type">GstJpegScanComponent</span></a> <em class="structfield"><code><a name="GstJpegScanHdr.components"></a>components</code></em>[GST_JPEG_MAX_SCAN_COMPONENTS];</p></td>
+<td class="struct_member_description"><p>Image components</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 1.6</p>
</div>
<hr>
<div class="refsect2">
@@ -431,6 +826,35 @@
guint8 ac_selector; /* 0 .. 3 */
};
</pre>
+<p>Component-specification parameters.</p>
+<div class="refsect3">
+<a name="GstJpegScanComponent.members"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="300px" class="struct_members_name">
+<col class="struct_members_description">
+<col width="200px" class="struct_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstJpegScanComponent.component-selector"></a>component_selector</code></em>;</p></td>
+<td class="struct_member_description"><p>Scan component selector (Csj)</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstJpegScanComponent.dc-selector"></a>dc_selector</code></em>;</p></td>
+<td class="struct_member_description"><p>DC entropy coding table destination selector (Tdj)</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstJpegScanComponent.ac-selector"></a>ac_selector</code></em>;</p></td>
+<td class="struct_member_description"><p>AC entropy coding table destination selector (Taj)</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 1.6</p>
</div>
<hr>
<div class="refsect2">
@@ -440,6 +864,31 @@
GstJpegHuffmanTable ac_tables[GST_JPEG_MAX_SCAN_COMPONENTS];
};
</pre>
+<p>Helper data structure that holds all AC/DC Huffman tables used to
+decode an image.</p>
+<div class="refsect3">
+<a name="GstJpegHuffmanTables.members"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="300px" class="struct_members_name">
+<col class="struct_members_description">
+<col width="200px" class="struct_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="struct_member_name"><p><a class="link" href="gst-plugins-bad-libs-jpegparser.html#GstJpegHuffmanTable" title="struct GstJpegHuffmanTable"><span class="type">GstJpegHuffmanTable</span></a> <em class="structfield"><code><a name="GstJpegHuffmanTables.dc-tables"></a>dc_tables</code></em>[GST_JPEG_MAX_SCAN_COMPONENTS];</p></td>
+<td class="struct_member_description"><p>DC Huffman tables</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a class="link" href="gst-plugins-bad-libs-jpegparser.html#GstJpegHuffmanTable" title="struct GstJpegHuffmanTable"><span class="type">GstJpegHuffmanTable</span></a> <em class="structfield"><code><a name="GstJpegHuffmanTables.ac-tables"></a>ac_tables</code></em>[GST_JPEG_MAX_SCAN_COMPONENTS];</p></td>
+<td class="struct_member_description"><p>AC Huffman tables</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 1.6</p>
</div>
<hr>
<div class="refsect2">
@@ -450,6 +899,36 @@
gboolean valid;
};
</pre>
+<p>Huffman table.</p>
+<div class="refsect3">
+<a name="GstJpegHuffmanTable.members"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="300px" class="struct_members_name">
+<col class="struct_members_description">
+<col width="200px" class="struct_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstJpegHuffmanTable.huf-bits"></a>huf_bits</code></em>[16];</p></td>
+<td class="struct_member_description"><p>Number of Huffman codes of length i + 1 (Li)</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstJpegHuffmanTable.huf-values"></a>huf_values</code></em>[256];</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> <em class="structfield"><code><a name="GstJpegHuffmanTable.valid"></a>valid</code></em>;</p></td>
+<td class="struct_member_description"><p>If the Huffman table is valid, which means it has already
+been parsed</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 1.6</p>
</div>
<hr>
<div class="refsect2">
@@ -460,6 +939,36 @@
gboolean valid;
};
</pre>
+<p>Quantization table.</p>
+<div class="refsect3">
+<a name="GstJpegQuantTable.members"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="300px" class="struct_members_name">
+<col class="struct_members_description">
+<col width="200px" class="struct_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstJpegQuantTable.quant-precision"></a>quant_precision</code></em>;</p></td>
+<td class="struct_member_description"><p>Quantization table element precision (Pq)</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint16"><span class="type">guint16</span></a> <em class="structfield"><code><a name="GstJpegQuantTable.quant-table"></a>quant_table</code></em>[GST_JPEG_MAX_QUANT_ELEMENTS];</p></td>
+<td class="struct_member_description"><p>Quantization table elements (Qk)</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> <em class="structfield"><code><a name="GstJpegQuantTable.valid"></a>valid</code></em>;</p></td>
+<td class="struct_member_description"><p>If the quantization table is valid, which means it has
+already been parsed</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 1.6</p>
</div>
</div>
</div>
diff --git a/docs/libs/html/gst-plugins-bad-libs-mpeg4parser.html b/docs/libs/html/gst-plugins-bad-libs-mpeg4parser.html
index a8d0536..54a9a29 100644
--- a/docs/libs/html/gst-plugins-bad-libs-mpeg4parser.html
+++ b/docs/libs/html/gst-plugins-bad-libs-mpeg4parser.html
@@ -27,7 +27,8 @@
<div class="refnamediv"><table width="100%"><tr>
<td valign="top">
<h2><span class="refentrytitle"><a name="gst-plugins-bad-libs-mpeg4parser.top_of_page"></a>mpeg4parser</span></h2>
-<p>mpeg4parser</p>
+<p>mpeg4parser — Convenience library for parsing mpeg4 part 2 video
+bitstream.</p>
</td>
<td class="gallery_image" valign="top" align="right"></td>
</tr></table></div>
@@ -196,6 +197,8 @@
</div>
<div class="refsect1">
<a name="gst-plugins-bad-libs-mpeg4parser.description"></a><h2>Description</h2>
+<p>For more details about the structures, you can refer to the
+specifications: ISO-IEC-14496-2_2004_MPEG4_VISUAL.pdf</p>
</div>
<div class="refsect1">
<a name="gst-plugins-bad-libs-mpeg4parser.functions_details"></a><h2>Functions</h2>
@@ -208,6 +211,58 @@
<em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> *data</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="type">guint</span></a> offset</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gsize"><span class="type">gsize</span></a> size</code></em>);</pre>
+<p>Parses <em class="parameter"><code>data</code></em>
+ and fills <em class="parameter"><code>packet</code></em>
+ with the information of the next packet
+found.</p>
+<div class="refsect3">
+<a name="gst-mpeg4-parse.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>packet</p></td>
+<td class="parameter_description"><p>The <a class="link" href="gst-plugins-bad-libs-mpeg4parser.html#GstMpeg4Packet" title="struct GstMpeg4Packet"><span class="type">GstMpeg4Packet</span></a> to fill</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>skip_user_data</p></td>
+<td class="parameter_description"><p><a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> to skip user data packet <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> otherwise</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>vop</p></td>
+<td class="parameter_description"><p>The last parsed <a class="link" href="gst-plugins-bad-libs-mpeg4parser.html#GstMpeg4VideoObjectPlane" title="struct GstMpeg4VideoObjectPlane"><span class="type">GstMpeg4VideoObjectPlane</span></a> or <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if you do
+not need to detect the resync codes.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>offset</p></td>
+<td class="parameter_description"><p>offset from which to start the parsing</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>data</p></td>
+<td class="parameter_description"><p>The data to parse</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>size</p></td>
+<td class="parameter_description"><p>The size of the <em class="parameter"><code>data</code></em>
+to parse</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-mpeg4-parse.returns"></a><h4>Returns</h4>
+<p> a <a class="link" href="gst-plugins-bad-libs-mpeg4parser.html#GstMpeg4ParseResult" title="enum GstMpeg4ParseResult"><span class="type">GstMpeg4ParseResult</span></a></p>
+</div>
</div>
<hr>
<div class="refsect2">
@@ -218,6 +273,52 @@
<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-mpeg4parser.html#GstMpeg4VideoObjectLayer" title="struct GstMpeg4VideoObjectLayer"><span class="type">GstMpeg4VideoObjectLayer</span></a> *vol</code></em>,
<em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> *data</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gsize"><span class="type">gsize</span></a> size</code></em>);</pre>
+<p>Parses <em class="parameter"><code>data</code></em>
+ containing the video object plane packet, and fills the <em class="parameter"><code>vol</code></em>
+
+structure.</p>
+<div class="refsect3">
+<a name="gst-mpeg4-parse-video-object-plane.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>vop</p></td>
+<td class="parameter_description"><p>The <a class="link" href="gst-plugins-bad-libs-mpeg4parser.html#GstMpeg4VideoObjectPlane" title="struct GstMpeg4VideoObjectPlane"><span class="type">GstMpeg4VideoObjectPlane</span></a> currently being parsed</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>sprite_trajectory</p></td>
+<td class="parameter_description"><p>A <a class="link" href="gst-plugins-bad-libs-mpeg4parser.html#GstMpeg4SpriteTrajectory" title="struct GstMpeg4SpriteTrajectory"><span class="type">GstMpeg4SpriteTrajectory</span></a> to fill or <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>vol</p></td>
+<td class="parameter_description"><p>The <a class="link" href="gst-plugins-bad-libs-mpeg4parser.html#GstMpeg4VideoObjectLayer" title="struct GstMpeg4VideoObjectLayer"><span class="type">GstMpeg4VideoObjectLayer</span></a> structure to fill</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>data</p></td>
+<td class="parameter_description"><p>The data to parse</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>size</p></td>
+<td class="parameter_description"><p>The size of the <em class="parameter"><code>data</code></em>
+to parse</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-mpeg4-parse-video-object-plane.returns"></a><h4>Returns</h4>
+<p> a <a class="link" href="gst-plugins-bad-libs-mpeg4parser.html#GstMpeg4ParseResult" title="enum GstMpeg4ParseResult"><span class="type">GstMpeg4ParseResult</span></a></p>
+</div>
</div>
<hr>
<div class="refsect2">
@@ -226,6 +327,42 @@
gst_mpeg4_parse_group_of_vop (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-mpeg4parser.html#GstMpeg4GroupOfVOP" title="struct GstMpeg4GroupOfVOP"><span class="type">GstMpeg4GroupOfVOP</span></a> *gov</code></em>,
<em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> *data</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gsize"><span class="type">gsize</span></a> size</code></em>);</pre>
+<p>Parses <em class="parameter"><code>data</code></em>
+ containing the group of video object plane packet, and fills
+the <em class="parameter"><code>gov</code></em>
+ structure.</p>
+<div class="refsect3">
+<a name="gst-mpeg4-parse-group-of-vop.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>gov</p></td>
+<td class="parameter_description"><p>The <a class="link" href="gst-plugins-bad-libs-mpeg4parser.html#GstMpeg4GroupOfVOP" title="struct GstMpeg4GroupOfVOP"><span class="type">GstMpeg4GroupOfVOP</span></a> structure to fill</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>data</p></td>
+<td class="parameter_description"><p>The data to parse</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>size</p></td>
+<td class="parameter_description"><p>The size of the <em class="parameter"><code>data</code></em>
+to parse</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-mpeg4-parse-group-of-vop.returns"></a><h4>Returns</h4>
+<p> a <a class="link" href="gst-plugins-bad-libs-mpeg4parser.html#GstMpeg4ParseResult" title="enum GstMpeg4ParseResult"><span class="type">GstMpeg4ParseResult</span></a></p>
+</div>
</div>
<hr>
<div class="refsect2">
@@ -235,6 +372,47 @@
<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-mpeg4parser.html#GstMpeg4VisualObject" title="struct GstMpeg4VisualObject"><span class="type">GstMpeg4VisualObject</span></a> *vo</code></em>,
<em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> *data</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gsize"><span class="type">gsize</span></a> size</code></em>);</pre>
+<p>Parses <em class="parameter"><code>data</code></em>
+ containing the video object layer packet, and fills
+the <em class="parameter"><code>vol</code></em>
+ structure.</p>
+<div class="refsect3">
+<a name="gst-mpeg4-parse-video-object-layer.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>vol</p></td>
+<td class="parameter_description"><p>The <a class="link" href="gst-plugins-bad-libs-mpeg4parser.html#GstMpeg4VideoObjectLayer" title="struct GstMpeg4VideoObjectLayer"><span class="type">GstMpeg4VideoObjectLayer</span></a> structure to fill</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>vo</p></td>
+<td class="parameter_description"><p>The <a class="link" href="gst-plugins-bad-libs-mpeg4parser.html#GstMpeg4VisualObject" title="struct GstMpeg4VisualObject"><span class="type">GstMpeg4VisualObject</span></a> currently being parsed or <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>data</p></td>
+<td class="parameter_description"><p>The data to parse</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>size</p></td>
+<td class="parameter_description"><p>The size of the <em class="parameter"><code>data</code></em>
+to parse</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-mpeg4-parse-video-object-layer.returns"></a><h4>Returns</h4>
+<p> a <a class="link" href="gst-plugins-bad-libs-mpeg4parser.html#GstMpeg4ParseResult" title="enum GstMpeg4ParseResult"><span class="type">GstMpeg4ParseResult</span></a></p>
+</div>
</div>
<hr>
<div class="refsect2">
@@ -244,6 +422,48 @@
<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-mpeg4parser.html#GstMpeg4VideoSignalType" title="struct GstMpeg4VideoSignalType"><span class="type">GstMpeg4VideoSignalType</span></a> *signal_type</code></em>,
<em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> *data</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gsize"><span class="type">gsize</span></a> size</code></em>);</pre>
+<p>Parses <em class="parameter"><code>data</code></em>
+ containing the visual object packet, and fills
+the <em class="parameter"><code>vo</code></em>
+ structure.</p>
+<div class="refsect3">
+<a name="gst-mpeg4-parse-visual-object.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>vo</p></td>
+<td class="parameter_description"><p>The <a class="link" href="gst-plugins-bad-libs-mpeg4parser.html#GstMpeg4VisualObject" title="struct GstMpeg4VisualObject"><span class="type">GstMpeg4VisualObject</span></a> structure to fill</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>signal_type</p></td>
+<td class="parameter_description"><p>The <a class="link" href="gst-plugins-bad-libs-mpeg4parser.html#GstMpeg4VideoSignalType" title="struct GstMpeg4VideoSignalType"><span class="type">GstMpeg4VideoSignalType</span></a> to fill or <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>data</p></td>
+<td class="parameter_description"><p>The data to parse, should contain the vo_start_code
+but not the start code prefix</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>size</p></td>
+<td class="parameter_description"><p>The size of the <em class="parameter"><code>data</code></em>
+to parse</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-mpeg4-parse-visual-object.returns"></a><h4>Returns</h4>
+<p> a <a class="link" href="gst-plugins-bad-libs-mpeg4parser.html#GstMpeg4ParseResult" title="enum GstMpeg4ParseResult"><span class="type">GstMpeg4ParseResult</span></a></p>
+</div>
</div>
<hr>
<div class="refsect2">
@@ -253,6 +473,43 @@
(<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-mpeg4parser.html#GstMpeg4VisualObjectSequence" title="struct GstMpeg4VisualObjectSequence"><span class="type">GstMpeg4VisualObjectSequence</span></a> *vos</code></em>,
<em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> *data</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gsize"><span class="type">gsize</span></a> size</code></em>);</pre>
+<p>Parses <em class="parameter"><code>data</code></em>
+ containing the visual object sequence packet, and fills
+the <em class="parameter"><code>vos</code></em>
+ structure.</p>
+<div class="refsect3">
+<a name="gst-mpeg4-parse-visual-object-sequence.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>vos</p></td>
+<td class="parameter_description"><p>The <a class="link" href="gst-plugins-bad-libs-mpeg4parser.html#GstMpeg4VisualObjectSequence" title="struct GstMpeg4VisualObjectSequence"><span class="type">GstMpeg4VisualObjectSequence</span></a> structure to fill</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>data</p></td>
+<td class="parameter_description"><p>The data to parse, should contain the visual_object_sequence_start_code
+but not the start code prefix</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>size</p></td>
+<td class="parameter_description"><p>The size of the <em class="parameter"><code>data</code></em>
+to parse</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-mpeg4-parse-visual-object-sequence.returns"></a><h4>Returns</h4>
+<p> a <a class="link" href="gst-plugins-bad-libs-mpeg4parser.html#GstMpeg4ParseResult" title="enum GstMpeg4ParseResult"><span class="type">GstMpeg4ParseResult</span></a></p>
+</div>
</div>
<hr>
<div class="refsect2">
@@ -264,12 +521,63 @@
<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-mpeg4parser.html#GstMpeg4SpriteTrajectory" title="struct GstMpeg4SpriteTrajectory"><span class="type">GstMpeg4SpriteTrajectory</span></a> *sprite_trajectory</code></em>,
<em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> *data</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gsize"><span class="type">gsize</span></a> size</code></em>);</pre>
+<p>Parsers <em class="parameter"><code>data</code></em>
+ containing the video packet header
+and fills the <em class="parameter"><code>videopackethdr</code></em>
+ structure</p>
+<div class="refsect3">
+<a name="gst-mpeg4-parse-video-packet-header.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>videopackethdr</p></td>
+<td class="parameter_description"><p>The <a class="link" href="gst-plugins-bad-libs-mpeg4parser.html#GstMpeg4VideoPacketHdr" title="struct GstMpeg4VideoPacketHdr"><span class="type">GstMpeg4VideoPacketHdr</span></a> structure to fill</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>vol</p></td>
+<td class="parameter_description"><p>The last parsed <a class="link" href="gst-plugins-bad-libs-mpeg4parser.html#GstMpeg4VideoObjectLayer" title="struct GstMpeg4VideoObjectLayer"><span class="type">GstMpeg4VideoObjectLayer</span></a>, will be updated
+with the informations found during the parsing</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>vop</p></td>
+<td class="parameter_description"><p>The last parsed <a class="link" href="gst-plugins-bad-libs-mpeg4parser.html#GstMpeg4VideoObjectPlane" title="struct GstMpeg4VideoObjectPlane"><span class="type">GstMpeg4VideoObjectPlane</span></a>, will be updated
+with the informations found during the parsing</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>sprite_trajectory</p></td>
+<td class="parameter_description"><p>A <a class="link" href="gst-plugins-bad-libs-mpeg4parser.html#GstMpeg4SpriteTrajectory" title="struct GstMpeg4SpriteTrajectory"><span class="type">GstMpeg4SpriteTrajectory</span></a> to fill or <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>
+with the informations found during the parsing</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>data</p></td>
+<td class="parameter_description"><p>The data to parse, should be set after the resync marker.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>size</p></td>
+<td class="parameter_description"><p>The size of the data to parse</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
</div>
</div>
<div class="refsect1">
<a name="gst-plugins-bad-libs-mpeg4parser.other_details"></a><h2>Types and Values</h2>
<div class="refsect2">
<a name="GstMpeg4StartCode"></a><h3>enum GstMpeg4StartCode</h3>
+<p>Defines the different startcodes present in the bitstream as
+defined in: Table 6-3 — Start code values</p>
<div class="refsect3">
<a name="GstMpeg4StartCode.members"></a><h4>Members</h4>
<div class="informaltable"><table class="informaltable" width="100%" border="0">
@@ -406,6 +714,8 @@
<hr>
<div class="refsect2">
<a name="GstMpeg4VisualObjectType"></a><h3>enum GstMpeg4VisualObjectType</h3>
+<p>Defines the different visual object types as
+defined in: Table 6-5 -- Meaning of visual object type</p>
<div class="refsect3">
<a name="GstMpeg4VisualObjectType.members"></a><h4>Members</h4>
<div class="informaltable"><table class="informaltable" width="100%" border="0">
@@ -447,6 +757,8 @@
<hr>
<div class="refsect2">
<a name="GstMpeg4AspectRatioInfo"></a><h3>enum GstMpeg4AspectRatioInfo</h3>
+<p>Defines the different pixel aspect ratios as
+defined in: Table 6-12 -- Meaning of pixel aspect ratio</p>
<div class="refsect3">
<a name="GstMpeg4AspectRatioInfo.members"></a><h4>Members</h4>
<div class="informaltable"><table class="informaltable" width="100%" border="0">
@@ -458,33 +770,45 @@
<tbody>
<tr>
<td class="enum_member_name"><p><a name="GST-MPEG4-SQUARE:CAPS"></a>GST_MPEG4_SQUARE</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>1:1 square</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-MPEG4-625-TYPE-4-3:CAPS"></a>GST_MPEG4_625_TYPE_4_3</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>12:11 (625-type for 4:3 picture)</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-MPEG4-525-TYPE-4-3:CAPS"></a>GST_MPEG4_525_TYPE_4_3</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>10:11 (525-type for 4:3 picture)</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-MPEG4-625-TYPE-16-9:CAPS"></a>GST_MPEG4_625_TYPE_16_9</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>16:11 (625-type stretched for 16:9 picture)</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-MPEG4-525-TYPE-16-9:CAPS"></a>GST_MPEG4_525_TYPE_16_9</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>40:33 (525-type stretched for 16:9 picture)</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-MPEG4-EXTENDED-PAR:CAPS"></a>GST_MPEG4_EXTENDED_PAR</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>Extended par</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
</tbody>
</table></div>
@@ -493,6 +817,7 @@
<hr>
<div class="refsect2">
<a name="GstMpeg4ParseResult"></a><h3>enum GstMpeg4ParseResult</h3>
+<p>Result type of any parsing function.</p>
<div class="refsect3">
<a name="GstMpeg4ParseResult.members"></a><h4>Members</h4>
<div class="informaltable"><table class="informaltable" width="100%" border="0">
@@ -504,23 +829,31 @@
<tbody>
<tr>
<td class="enum_member_name"><p><a name="GST-MPEG4-PARSER-OK:CAPS"></a>GST_MPEG4_PARSER_OK</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>The parsing went well</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-MPEG4-PARSER-BROKEN-DATA:CAPS"></a>GST_MPEG4_PARSER_BROKEN_DATA</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>The bitstream was broken</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-MPEG4-PARSER-NO-PACKET:CAPS"></a>GST_MPEG4_PARSER_NO_PACKET</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>There was no packet in the buffer</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-MPEG4-PARSER-NO-PACKET-END:CAPS"></a>GST_MPEG4_PARSER_NO_PACKET_END</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>There was no packet end in the buffer</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-MPEG4-PARSER-ERROR:CAPS"></a>GST_MPEG4_PARSER_ERROR</p></td>
@@ -534,6 +867,8 @@
<hr>
<div class="refsect2">
<a name="GstMpeg4VideoObjectCodingType"></a><h3>enum GstMpeg4VideoObjectCodingType</h3>
+<p>The vop coding types as defined in:
+Table 6-20 -- Meaning of vop_coding_type</p>
<div class="refsect3">
<a name="GstMpeg4VideoObjectCodingType.members"></a><h4>Members</h4>
<div class="informaltable"><table class="informaltable" width="100%" border="0">
@@ -545,23 +880,31 @@
<tbody>
<tr>
<td class="enum_member_name"><p><a name="GST-MPEG4-I-VOP:CAPS"></a>GST_MPEG4_I_VOP</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>intra-coded (I)</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-MPEG4-P-VOP:CAPS"></a>GST_MPEG4_P_VOP</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>predictive-coded (P)</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-MPEG4-B-VOP:CAPS"></a>GST_MPEG4_B_VOP</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>bidirectionally-predictive-coded (B)</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-MPEG4-S-VOP:CAPS"></a>GST_MPEG4_S_VOP</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>sprite (S)</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
</tbody>
</table></div>
@@ -570,6 +913,8 @@
<hr>
<div class="refsect2">
<a name="GstMpeg4ChromaFormat"></a><h3>enum GstMpeg4ChromaFormat</h3>
+<p>The chroma format in use as
+defined in: Table 6-13 -- Meaning of chroma_format</p>
<div class="refsect3">
<a name="GstMpeg4ChromaFormat.members"></a><h4>Members</h4>
<div class="informaltable"><table class="informaltable" width="100%" border="0">
@@ -589,6 +934,8 @@
<hr>
<div class="refsect2">
<a name="GstMpeg4VideoObjectLayerShape"></a><h3>enum GstMpeg4VideoObjectLayerShape</h3>
+<p>The different video object layer shapes as defined in:
+Table 6-16 — Video Object Layer shape type</p>
<div class="refsect3">
<a name="GstMpeg4VideoObjectLayerShape.members"></a><h4>Members</h4>
<div class="informaltable"><table class="informaltable" width="100%" border="0">
@@ -625,6 +972,9 @@
<hr>
<div class="refsect2">
<a name="GstMpeg4SpriteEnable"></a><h3>enum GstMpeg4SpriteEnable</h3>
+<p>Indicates the usage of static sprite coding
+or global motion compensation (GMC) as defined in:
+Table V2 - 2 -- Meaning of sprite_enable codewords</p>
<div class="refsect3">
<a name="GstMpeg4SpriteEnable.members"></a><h4>Members</h4>
<div class="informaltable"><table class="informaltable" width="100%" border="0">
@@ -656,6 +1006,10 @@
<hr>
<div class="refsect2">
<a name="GstMpeg4Profile"></a><h3>enum GstMpeg4Profile</h3>
+<p>Different defined profiles as defined in:
+9- Profiles and levels</p>
+<p>It is computed using:
+Table G.1 — FLC table for profile_and_level_indication</p>
<div class="refsect3">
<a name="GstMpeg4Profile.members"></a><h4>Members</h4>
<div class="informaltable"><table class="informaltable" width="100%" border="0">
@@ -772,6 +1126,10 @@
<hr>
<div class="refsect2">
<a name="GstMpeg4Level"></a><h3>enum GstMpeg4Level</h3>
+<p>Different levels as defined in:
+9- Profiles and levels</p>
+<p>It is computed using:
+Table G.1 — FLC table for profile_and_level_indication</p>
<div class="refsect3">
<a name="GstMpeg4Level.members"></a><h4>Members</h4>
<div class="informaltable"><table class="informaltable" width="100%" border="0">
@@ -837,6 +1195,8 @@
GstMpeg4Profile profile;
};
</pre>
+<p>The visual object sequence structure as defined in:
+6.2.2 Visual Object Sequence and Visual Object</p>
</div>
<hr>
<div class="refsect2">
@@ -850,6 +1210,8 @@
GstMpeg4VisualObjectType type;
};
</pre>
+<p>The visual object structure as defined in:
+6.2.2 Visual Object Sequence and Visual Object</p>
</div>
<hr>
<div class="refsect2">
@@ -865,6 +1227,8 @@
guint8 matrix_coefficients;
};
</pre>
+<p>The video signal type structure as defined in:
+6.2.2 Visual Object Sequence and Visual Object.</p>
</div>
<hr>
<div class="refsect2">
@@ -899,6 +1263,8 @@
guint size;
};
</pre>
+<p>The video plane short header structure as defined in:
+6.2.5.2 Video Plane with Short Header</p>
</div>
<hr>
<div class="refsect2">
@@ -996,6 +1362,8 @@
GstMpeg4VideoPlaneShortHdr short_hdr;
};
</pre>
+<p>The video object layer structure as defined in:
+6.2.3 Video Object Layer</p>
</div>
<hr>
<div class="refsect2">
@@ -1005,6 +1373,9 @@
guint16 sprite_ref_points[63]; /* Defined as "dv" in 6.2.5.4 */
};
</pre>
+<p>The sprite trajectory structure as defined in:
+7.8.4 Sprite reference point decoding and
+6.2.5.4 Sprite coding</p>
</div>
<hr>
<div class="refsect2">
@@ -1018,6 +1389,8 @@
guint8 broken_link;
};
</pre>
+<p>The group of video object plane structure as defined in:
+6.2.4 Group of Video Object Plane</p>
</div>
<hr>
<div class="refsect2">
@@ -1071,6 +1444,8 @@
guint size;
};
</pre>
+<p>The Video object plane structure as defined in:
+6.2.5 Video Object Plane and Video Plane with Short Header</p>
</div>
<hr>
<div class="refsect2">
@@ -1084,6 +1459,47 @@
GstMpeg4StartCode type;
};
</pre>
+<p>A structure that contains the type of a packet, its offset and its size</p>
+<div class="refsect3">
+<a name="GstMpeg4Packet.members"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="300px" class="struct_members_name">
+<col class="struct_members_description">
+<col width="200px" class="struct_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="struct_member_name"><p>const <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> *<em class="structfield"><code><a name="GstMpeg4Packet.data"></a>data</code></em>;</p></td>
+<td class="struct_member_description"><p>the data containing packet starting at <em class="parameter"><code>offset</code></em>
+</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="type">guint</span></a> <em class="structfield"><code><a name="GstMpeg4Packet.offset"></a>offset</code></em>;</p></td>
+<td class="struct_member_description"><p>offset of the start of the packet (without the 3 bytes startcode), but
+including the <a class="link" href="gst-plugins-bad-libs-mpeg4parser.html#GstMpeg4StartCode" title="enum GstMpeg4StartCode"><span class="type">GstMpeg4StartCode</span></a> byte.</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gsize"><span class="type">gsize</span></a> <em class="structfield"><code><a name="GstMpeg4Packet.size"></a>size</code></em>;</p></td>
+<td class="struct_member_description"><p>The size in bytes of the packet or <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#G-MAXUINT:CAPS"><code class="literal">G_MAXUINT</code></a> if the end wasn't found.</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="type">guint</span></a> <em class="structfield"><code><a name="GstMpeg4Packet.marker-size"></a>marker_size</code></em>;</p></td>
+<td class="struct_member_description"><p>The size in bit of the resync marker.</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a class="link" href="gst-plugins-bad-libs-mpeg4parser.html#GstMpeg4StartCode" title="enum GstMpeg4StartCode"><span class="type">GstMpeg4StartCode</span></a> <em class="structfield"><code><a name="GstMpeg4Packet.type"></a>type</code></em>;</p></td>
+<td class="struct_member_description"><p>the type of the packet that start at <em class="parameter"><code>offset</code></em>
+</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
</div>
<hr>
<div class="refsect2">
@@ -1095,6 +1511,40 @@
guint size;
};
</pre>
+<p>The video packet header structure as defined in:
+6.2.5.2 Video Plane with Short Header</p>
+<div class="refsect3">
+<a name="GstMpeg4VideoPacketHdr.members"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="300px" class="struct_members_name">
+<col class="struct_members_description">
+<col width="200px" class="struct_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstMpeg4VideoPacketHdr.header-extension-code"></a>header_extension_code</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint16"><span class="type">guint16</span></a> <em class="structfield"><code><a name="GstMpeg4VideoPacketHdr.macroblock-number"></a>macroblock_number</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint16"><span class="type">guint16</span></a> <em class="structfield"><code><a name="GstMpeg4VideoPacketHdr.quant-scale"></a>quant_scale</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="type">guint</span></a> <em class="structfield"><code><a name="GstMpeg4VideoPacketHdr.size"></a>size</code></em>;</p></td>
+<td class="struct_member_description"><p>Size of the header in bit.</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
</div>
</div>
</div>
diff --git a/docs/libs/html/gst-plugins-bad-libs-mpegvideoparser.html b/docs/libs/html/gst-plugins-bad-libs-mpegvideoparser.html
index 84f946b..82f7c7a 100644
--- a/docs/libs/html/gst-plugins-bad-libs-mpegvideoparser.html
+++ b/docs/libs/html/gst-plugins-bad-libs-mpegvideoparser.html
@@ -27,7 +27,8 @@
<div class="refnamediv"><table width="100%"><tr>
<td valign="top">
<h2><span class="refentrytitle"><a name="gst-plugins-bad-libs-mpegvideoparser.top_of_page"></a>mpegvideoparser</span></h2>
-<p>mpegvideoparser</p>
+<p>mpegvideoparser — Convenience library for mpeg1 and 2 video
+bitstream parsing.</p>
</td>
<td class="gallery_image" valign="top" align="right"></td>
</tr></table></div>
@@ -196,6 +197,11 @@
</div>
<div class="refsect1">
<a name="gst-plugins-bad-libs-mpegvideoparser.description"></a><h2>Description</h2>
+<div class="refsect2">
+<a name="id-1.2.4.5.6.2"></a><p>
+Provides useful functions for mpeg videos bitstream parsing.
+</p>
+</div>
</div>
<div class="refsect1">
<a name="gst-plugins-bad-libs-mpegvideoparser.functions_details"></a><h2>Functions</h2>
@@ -206,6 +212,49 @@
<em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> *data</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gsize"><span class="type">gsize</span></a> size</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="type">guint</span></a> offset</code></em>);</pre>
+<p>Parses the MPEG 1/2 video bitstream contained in <em class="parameter"><code>data</code></em>
+, and returns the
+offset, and if known also the size, in <em class="parameter"><code>packet</code></em>
+. This function will scan
+the data to find the next packet if needed.</p>
+<div class="refsect3">
+<a name="gst-mpeg-video-parse.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>packet</p></td>
+<td class="parameter_description"><p>a <span class="type">GstMpegVideoPacket</span> to fill with the data and offset of the
+next packet found</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>data</p></td>
+<td class="parameter_description"><p>The data to parse</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>size</p></td>
+<td class="parameter_description"><p>The size of <em class="parameter"><code>data</code></em>
+</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>offset</p></td>
+<td class="parameter_description"><p>The offset from which to start parsing</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-mpeg-video-parse.returns"></a><h4>Returns</h4>
+<p> TRUE if a packet start code was found, otherwise FALSE.</p>
+</div>
</div>
<hr>
<div class="refsect2">
@@ -215,7 +264,51 @@
<em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> *data</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gsize"><span class="type">gsize</span></a> size</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="type">guint</span></a> offset</code></em>);</pre>
-<div class="warning"><p><code class="literal">gst_mpeg_video_parse_sequence_header</code> is deprecated and should not be used in newly-written code.</p></div>
+<div class="warning">
+<p><code class="literal">gst_mpeg_video_parse_sequence_header</code> is deprecated and should not be used in newly-written code.</p>
+<p>Use <code class="function">gst_mpeg_video_packet_parse_sequence_header()</code> instead.</p>
+</div>
+<p>Parses the <em class="parameter"><code>seqhdr</code></em>
+ Mpeg Video Sequence Header structure members from <em class="parameter"><code>data</code></em>
+</p>
+<div class="refsect3">
+<a name="gst-mpeg-video-parse-sequence-header.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>seqhdr</p></td>
+<td class="parameter_description"><p> The <a class="link" href="gst-plugins-bad-libs-mpegvideoparser.html#GstMpegVideoSequenceHdr" title="struct GstMpegVideoSequenceHdr"><span class="type">GstMpegVideoSequenceHdr</span></a> structure to fill. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>data</p></td>
+<td class="parameter_description"><p>The data from which to parse the sequence header</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>size</p></td>
+<td class="parameter_description"><p>The size of <em class="parameter"><code>data</code></em>
+</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>offset</p></td>
+<td class="parameter_description"><p>The offset in byte from which to start parsing <em class="parameter"><code>data</code></em>
+</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-mpeg-video-parse-sequence-header.returns"></a><h4>Returns</h4>
+<p> <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the seqhdr could be parsed correctly, <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> otherwise.</p>
+</div>
</div>
<hr>
<div class="refsect2">
@@ -225,7 +318,51 @@
<em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> *data</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gsize"><span class="type">gsize</span></a> size</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="type">guint</span></a> offset</code></em>);</pre>
-<div class="warning"><p><code class="literal">gst_mpeg_video_parse_picture_header</code> is deprecated and should not be used in newly-written code.</p></div>
+<div class="warning">
+<p><code class="literal">gst_mpeg_video_parse_picture_header</code> is deprecated and should not be used in newly-written code.</p>
+<p>Use <code class="function">gst_mpeg_video_packet_parse_picture_header()</code> instead.</p>
+</div>
+<p>Parsers the <em class="parameter"><code>hdr</code></em>
+ Mpeg Video Picture Header structure members from <em class="parameter"><code>data</code></em>
+</p>
+<div class="refsect3">
+<a name="gst-mpeg-video-parse-picture-header.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>hdr</p></td>
+<td class="parameter_description"><p> The <a class="link" href="gst-plugins-bad-libs-mpegvideoparser.html#GstMpegVideoPictureHdr" title="struct GstMpegVideoPictureHdr"><span class="type">GstMpegVideoPictureHdr</span></a> structure to fill. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>data</p></td>
+<td class="parameter_description"><p>The data from which to parse the picture header</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>size</p></td>
+<td class="parameter_description"><p>The size of <em class="parameter"><code>data</code></em>
+</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>offset</p></td>
+<td class="parameter_description"><p>The offset in byte from which to start the parsing</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-mpeg-video-parse-picture-header.returns"></a><h4>Returns</h4>
+<p> <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the picture sequence could be parsed correctly, <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a>
+otherwise.</p>
+</div>
</div>
<hr>
<div class="refsect2">
@@ -236,7 +373,51 @@
<em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> *data</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gsize"><span class="type">gsize</span></a> size</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="type">guint</span></a> offset</code></em>);</pre>
-<div class="warning"><p><code class="literal">gst_mpeg_video_parse_picture_extension</code> is deprecated and should not be used in newly-written code.</p></div>
+<div class="warning">
+<p><code class="literal">gst_mpeg_video_parse_picture_extension</code> is deprecated and should not be used in newly-written code.</p>
+<p>Use <code class="function">gst_mpeg_video_packet_parse_picture_extension()</code> instead.</p>
+</div>
+<p>Parse the <em class="parameter"><code>ext</code></em>
+ Mpeg Video Picture Extension structure members from <em class="parameter"><code>data</code></em>
+</p>
+<div class="refsect3">
+<a name="gst-mpeg-video-parse-picture-extension.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>ext</p></td>
+<td class="parameter_description"><p> The <a class="link" href="gst-plugins-bad-libs-mpegvideoparser.html#GstMpegVideoPictureExt" title="struct GstMpegVideoPictureExt"><span class="type">GstMpegVideoPictureExt</span></a> structure to fill. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>data</p></td>
+<td class="parameter_description"><p>The data from which to parse the picture extension</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>size</p></td>
+<td class="parameter_description"><p>The size of <em class="parameter"><code>data</code></em>
+</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>offset</p></td>
+<td class="parameter_description"><p>The offset in byte from which to start the parsing</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-mpeg-video-parse-picture-extension.returns"></a><h4>Returns</h4>
+<p> <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the picture extension could be parsed correctly,
+<a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> otherwise.</p>
+</div>
</div>
<hr>
<div class="refsect2">
@@ -246,7 +427,50 @@
<em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> *data</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gsize"><span class="type">gsize</span></a> size</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="type">guint</span></a> offset</code></em>);</pre>
-<div class="warning"><p><code class="literal">gst_mpeg_video_parse_gop</code> is deprecated and should not be used in newly-written code.</p></div>
+<div class="warning">
+<p><code class="literal">gst_mpeg_video_parse_gop</code> is deprecated and should not be used in newly-written code.</p>
+<p>Use <code class="function">gst_mpeg_video_packet_parse_gop()</code> instead.</p>
+</div>
+<p>Parses the <em class="parameter"><code>gop</code></em>
+ Mpeg Video Group of Picture structure members from <em class="parameter"><code>data</code></em>
+</p>
+<div class="refsect3">
+<a name="gst-mpeg-video-parse-gop.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>gop</p></td>
+<td class="parameter_description"><p> The <a class="link" href="gst-plugins-bad-libs-mpegvideoparser.html#GstMpegVideoGop" title="struct GstMpegVideoGop"><span class="type">GstMpegVideoGop</span></a> structure to fill. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>data</p></td>
+<td class="parameter_description"><p>The data from which to parse the gop</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>size</p></td>
+<td class="parameter_description"><p>The size of <em class="parameter"><code>data</code></em>
+</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>offset</p></td>
+<td class="parameter_description"><p>The offset in byte from which to start the parsing</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-mpeg-video-parse-gop.returns"></a><h4>Returns</h4>
+<p> <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the gop could be parsed correctly, <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> otherwise.</p>
+</div>
</div>
<hr>
<div class="refsect2">
@@ -257,7 +481,51 @@
<em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> *data</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gsize"><span class="type">gsize</span></a> size</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="type">guint</span></a> offset</code></em>);</pre>
-<div class="warning"><p><code class="literal">gst_mpeg_video_parse_sequence_extension</code> is deprecated and should not be used in newly-written code.</p></div>
+<div class="warning">
+<p><code class="literal">gst_mpeg_video_parse_sequence_extension</code> is deprecated and should not be used in newly-written code.</p>
+<p>Use <code class="function">gst_mpeg_video_packet_parse_sequence_extension()</code> instead.</p>
+</div>
+<p>Parses the <em class="parameter"><code>seqext</code></em>
+ Mpeg Video Sequence Extension structure members from <em class="parameter"><code>data</code></em>
+</p>
+<div class="refsect3">
+<a name="gst-mpeg-video-parse-sequence-extension.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>seqext</p></td>
+<td class="parameter_description"><p> The <a class="link" href="gst-plugins-bad-libs-mpegvideoparser.html#GstMpegVideoSequenceExt" title="struct GstMpegVideoSequenceExt"><span class="type">GstMpegVideoSequenceExt</span></a> structure to fill. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>data</p></td>
+<td class="parameter_description"><p>The data from which to parse the sequence extension</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>size</p></td>
+<td class="parameter_description"><p>The size of <em class="parameter"><code>data</code></em>
+</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>offset</p></td>
+<td class="parameter_description"><p>The offset in byte from which to start parsing <em class="parameter"><code>data</code></em>
+</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-mpeg-video-parse-sequence-extension.returns"></a><h4>Returns</h4>
+<p> <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the seqext could be parsed correctly, <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> otherwise.</p>
+</div>
</div>
<hr>
<div class="refsect2">
@@ -279,7 +547,52 @@
<em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> *data</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gsize"><span class="type">gsize</span></a> size</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="type">guint</span></a> offset</code></em>);</pre>
-<div class="warning"><p><code class="literal">gst_mpeg_video_parse_quant_matrix_extension</code> is deprecated and should not be used in newly-written code.</p></div>
+<div class="warning">
+<p><code class="literal">gst_mpeg_video_parse_quant_matrix_extension</code> is deprecated and should not be used in newly-written code.</p>
+<p>Use <code class="function">gst_mpeg_video_packet_parse_quant_matrix_extension()</code> instead.</p>
+</div>
+<p>Parses the <em class="parameter"><code>quant</code></em>
+ Mpeg Video Quant Matrix Extension structure members from
+<em class="parameter"><code>data</code></em>
+</p>
+<div class="refsect3">
+<a name="gst-mpeg-video-parse-quant-matrix-extension.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>quant</p></td>
+<td class="parameter_description"><p> The <a class="link" href="gst-plugins-bad-libs-mpegvideoparser.html#GstMpegVideoQuantMatrixExt" title="struct GstMpegVideoQuantMatrixExt"><span class="type">GstMpegVideoQuantMatrixExt</span></a> structure to fill. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>data</p></td>
+<td class="parameter_description"><p>The data from which to parse the Quantization Matrix extension</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>size</p></td>
+<td class="parameter_description"><p>The size of <em class="parameter"><code>data</code></em>
+</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>offset</p></td>
+<td class="parameter_description"><p>The offset in byte from which to start the parsing</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-mpeg-video-parse-quant-matrix-extension.returns"></a><h4>Returns</h4>
+<p> <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the quant matrix extension could be parsed correctly,
+<a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> otherwise.</p>
+</div>
</div>
<hr>
<div class="refsect2">
@@ -297,6 +610,37 @@
gst_mpeg_video_quant_matrix_get_raster_from_zigzag
(<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> out_quant[64]</code></em>,
<em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> quant[64]</code></em>);</pre>
+<p>Converts quantization matrix <em class="parameter"><code>quant</code></em>
+ from zigzag scan order to
+raster scan order and store the resulting factors into <em class="parameter"><code>out_quant</code></em>
+.</p>
+<p>Note: it is an error to pass the same table in both <em class="parameter"><code>quant</code></em>
+ and
+<em class="parameter"><code>out_quant</code></em>
+ arguments.</p>
+<div class="refsect3">
+<a name="gst-mpeg-video-quant-matrix-get-raster-from-zigzag.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>out_quant</p></td>
+<td class="parameter_description"><p> The resulting quantization matrix. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>quant</p></td>
+<td class="parameter_description"><p>The source quantization matrix</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 1.2</p>
</div>
<hr>
<div class="refsect2">
@@ -305,12 +649,44 @@
gst_mpeg_video_quant_matrix_get_zigzag_from_raster
(<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> out_quant[64]</code></em>,
<em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> quant[64]</code></em>);</pre>
+<p>Converts quantization matrix <em class="parameter"><code>quant</code></em>
+ from raster scan order to
+zigzag scan order and store the resulting factors into <em class="parameter"><code>out_quant</code></em>
+.</p>
+<p>Note: it is an error to pass the same table in both <em class="parameter"><code>quant</code></em>
+ and
+<em class="parameter"><code>out_quant</code></em>
+ arguments.</p>
+<div class="refsect3">
+<a name="gst-mpeg-video-quant-matrix-get-zigzag-from-raster.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>out_quant</p></td>
+<td class="parameter_description"><p> The resulting quantization matrix. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>quant</p></td>
+<td class="parameter_description"><p>The source quantization matrix</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 1.2</p>
</div>
</div>
<div class="refsect1">
<a name="gst-plugins-bad-libs-mpegvideoparser.other_details"></a><h2>Types and Values</h2>
<div class="refsect2">
<a name="GstMpegVideoPacketTypeCode"></a><h3>enum GstMpegVideoPacketTypeCode</h3>
+<p>Indicates the type of MPEG packet</p>
<div class="refsect3">
<a name="GstMpegVideoPacketTypeCode.members"></a><h4>Members</h4>
<div class="informaltable"><table class="informaltable" width="100%" border="0">
@@ -322,48 +698,66 @@
<tbody>
<tr>
<td class="enum_member_name"><p><a name="GST-MPEG-VIDEO-PACKET-PICTURE:CAPS"></a>GST_MPEG_VIDEO_PACKET_PICTURE</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>Picture packet starting code</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-MPEG-VIDEO-PACKET-SLICE-MIN:CAPS"></a>GST_MPEG_VIDEO_PACKET_SLICE_MIN</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>Slice min packet starting code</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-MPEG-VIDEO-PACKET-SLICE-MAX:CAPS"></a>GST_MPEG_VIDEO_PACKET_SLICE_MAX</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>Slice max packet starting code</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-MPEG-VIDEO-PACKET-USER-DATA:CAPS"></a>GST_MPEG_VIDEO_PACKET_USER_DATA</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>User data packet starting code</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-MPEG-VIDEO-PACKET-SEQUENCE:CAPS"></a>GST_MPEG_VIDEO_PACKET_SEQUENCE</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>Sequence packet starting code</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-MPEG-VIDEO-PACKET-EXTENSION:CAPS"></a>GST_MPEG_VIDEO_PACKET_EXTENSION</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>Extension packet starting code</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-MPEG-VIDEO-PACKET-SEQUENCE-END:CAPS"></a>GST_MPEG_VIDEO_PACKET_SEQUENCE_END</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>Sequence end packet code</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-MPEG-VIDEO-PACKET-GOP:CAPS"></a>GST_MPEG_VIDEO_PACKET_GOP</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>Group of Picture packet starting code</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-MPEG-VIDEO-PACKET-NONE:CAPS"></a>GST_MPEG_VIDEO_PACKET_NONE</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>None packet code</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
</tbody>
</table></div>
@@ -372,6 +766,9 @@
<hr>
<div class="refsect2">
<a name="GstMpegVideoPacketExtensionCode"></a><h3>enum GstMpegVideoPacketExtensionCode</h3>
+<p>Indicates what type of packets are in this block, some are mutually
+exclusive though - ie, sequence packs are accumulated separately. GOP &
+Picture may occur together or separately.</p>
<div class="refsect3">
<a name="GstMpegVideoPacketExtensionCode.members"></a><h4>Members</h4>
<div class="informaltable"><table class="informaltable" width="100%" border="0">
@@ -383,28 +780,38 @@
<tbody>
<tr>
<td class="enum_member_name"><p><a name="GST-MPEG-VIDEO-PACKET-EXT-SEQUENCE:CAPS"></a>GST_MPEG_VIDEO_PACKET_EXT_SEQUENCE</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>Sequence extension code</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-MPEG-VIDEO-PACKET-EXT-SEQUENCE-DISPLAY:CAPS"></a>GST_MPEG_VIDEO_PACKET_EXT_SEQUENCE_DISPLAY</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>Sequence Display extension code</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-MPEG-VIDEO-PACKET-EXT-QUANT-MATRIX:CAPS"></a>GST_MPEG_VIDEO_PACKET_EXT_QUANT_MATRIX</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>Quantization Matrix extension code</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-MPEG-VIDEO-PACKET-EXT-SEQUENCE-SCALABLE:CAPS"></a>GST_MPEG_VIDEO_PACKET_EXT_SEQUENCE_SCALABLE</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>Sequence Scalable extension code</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-MPEG-VIDEO-PACKET-EXT-PICTURE:CAPS"></a>GST_MPEG_VIDEO_PACKET_EXT_PICTURE</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>Picture coding extension</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
</tbody>
</table></div>
@@ -413,6 +820,7 @@
<hr>
<div class="refsect2">
<a name="GstMpegVideoLevel"></a><h3>enum GstMpegVideoLevel</h3>
+<p>Mpeg-2 Levels.</p>
<div class="refsect3">
<a name="GstMpegVideoLevel.members"></a><h4>Members</h4>
<div class="informaltable"><table class="informaltable" width="100%" border="0">
@@ -424,23 +832,31 @@
<tbody>
<tr>
<td class="enum_member_name"><p><a name="GST-MPEG-VIDEO-LEVEL-HIGH:CAPS"></a>GST_MPEG_VIDEO_LEVEL_HIGH</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>High level (HL)</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-MPEG-VIDEO-LEVEL-HIGH-1440:CAPS"></a>GST_MPEG_VIDEO_LEVEL_HIGH_1440</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>High 1440 level (H-14)</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-MPEG-VIDEO-LEVEL-MAIN:CAPS"></a>GST_MPEG_VIDEO_LEVEL_MAIN</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>Main level (ML)</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-MPEG-VIDEO-LEVEL-LOW:CAPS"></a>GST_MPEG_VIDEO_LEVEL_LOW</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>Low level (LL)</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
</tbody>
</table></div>
@@ -449,6 +865,7 @@
<hr>
<div class="refsect2">
<a name="GstMpegVideoProfile"></a><h3>enum GstMpegVideoProfile</h3>
+<p>Mpeg-2 Profiles.</p>
<div class="refsect3">
<a name="GstMpegVideoProfile.members"></a><h4>Members</h4>
<div class="informaltable"><table class="informaltable" width="100%" border="0">
@@ -460,33 +877,45 @@
<tbody>
<tr>
<td class="enum_member_name"><p><a name="GST-MPEG-VIDEO-PROFILE-422:CAPS"></a>GST_MPEG_VIDEO_PROFILE_422</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>4:2:2 profile (422)</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-MPEG-VIDEO-PROFILE-HIGH:CAPS"></a>GST_MPEG_VIDEO_PROFILE_HIGH</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>High profile (HP)</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-MPEG-VIDEO-PROFILE-SPATIALLY-SCALABLE:CAPS"></a>GST_MPEG_VIDEO_PROFILE_SPATIALLY_SCALABLE</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>Spatially Scalable profile (Spatial)</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-MPEG-VIDEO-PROFILE-SNR-SCALABLE:CAPS"></a>GST_MPEG_VIDEO_PROFILE_SNR_SCALABLE</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>SNR Scalable profile (SNR)</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-MPEG-VIDEO-PROFILE-MAIN:CAPS"></a>GST_MPEG_VIDEO_PROFILE_MAIN</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>Main profile (MP)</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-MPEG-VIDEO-PROFILE-SIMPLE:CAPS"></a>GST_MPEG_VIDEO_PROFILE_SIMPLE</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>Simple profile (SP)</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
</tbody>
</table></div>
@@ -495,6 +924,7 @@
<hr>
<div class="refsect2">
<a name="GstMpegVideoPictureType"></a><h3>enum GstMpegVideoPictureType</h3>
+<p>Picture type.</p>
<div class="refsect3">
<a name="GstMpegVideoPictureType.members"></a><h4>Members</h4>
<div class="informaltable"><table class="informaltable" width="100%" border="0">
@@ -506,23 +936,31 @@
<tbody>
<tr>
<td class="enum_member_name"><p><a name="GST-MPEG-VIDEO-PICTURE-TYPE-I:CAPS"></a>GST_MPEG_VIDEO_PICTURE_TYPE_I</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>Intra-coded (I) frame</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-MPEG-VIDEO-PICTURE-TYPE-P:CAPS"></a>GST_MPEG_VIDEO_PICTURE_TYPE_P</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>Predictive-codec (P) frame</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-MPEG-VIDEO-PICTURE-TYPE-B:CAPS"></a>GST_MPEG_VIDEO_PICTURE_TYPE_B</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>Bidirectionally predictive-coded (B) frame</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-MPEG-VIDEO-PICTURE-TYPE-D:CAPS"></a>GST_MPEG_VIDEO_PICTURE_TYPE_D</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>D frame</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
</tbody>
</table></div>
@@ -531,6 +969,7 @@
<hr>
<div class="refsect2">
<a name="GstMpegVideoPictureStructure"></a><h3>enum GstMpegVideoPictureStructure</h3>
+<p>Picture structure type.</p>
<div class="refsect3">
<a name="GstMpegVideoPictureStructure.members"></a><h4>Members</h4>
<div class="informaltable"><table class="informaltable" width="100%" border="0">
@@ -542,18 +981,24 @@
<tbody>
<tr>
<td class="enum_member_name"><p><a name="GST-MPEG-VIDEO-PICTURE-STRUCTURE-TOP-FIELD:CAPS"></a>GST_MPEG_VIDEO_PICTURE_STRUCTURE_TOP_FIELD</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>Top field</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-MPEG-VIDEO-PICTURE-STRUCTURE-BOTTOM-FIELD:CAPS"></a>GST_MPEG_VIDEO_PICTURE_STRUCTURE_BOTTOM_FIELD</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>Bottom field</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GST-MPEG-VIDEO-PICTURE-STRUCTURE-FRAME:CAPS"></a>GST_MPEG_VIDEO_PICTURE_STRUCTURE_FRAME</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>Frame picture</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
</tbody>
</table></div>
@@ -582,6 +1027,99 @@
guint bitrate;
};
</pre>
+<p>The Mpeg2 Video Sequence Header structure.</p>
+<div class="refsect3">
+<a name="GstMpegVideoSequenceHdr.members"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="300px" class="struct_members_name">
+<col class="struct_members_description">
+<col width="200px" class="struct_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint16"><span class="type">guint16</span></a> <em class="structfield"><code><a name="GstMpegVideoSequenceHdr.width"></a>width</code></em>;</p></td>
+<td class="struct_member_description"><p>Width of each frame</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint16"><span class="type">guint16</span></a> <em class="structfield"><code><a name="GstMpegVideoSequenceHdr.height"></a>height</code></em>;</p></td>
+<td class="struct_member_description"><p>Height of each frame</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstMpegVideoSequenceHdr.aspect-ratio-info"></a>aspect_ratio_info</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstMpegVideoSequenceHdr.frame-rate-code"></a>frame_rate_code</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint32"><span class="type">guint32</span></a> <em class="structfield"><code><a name="GstMpegVideoSequenceHdr.bitrate-value"></a>bitrate_value</code></em>;</p></td>
+<td class="struct_member_description"><p>Value of the bitrate as is in the stream (400bps unit)</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint16"><span class="type">guint16</span></a> <em class="structfield"><code><a name="GstMpegVideoSequenceHdr.vbv-buffer-size-value"></a>vbv_buffer_size_value</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstMpegVideoSequenceHdr.constrained-parameters-flag"></a>constrained_parameters_flag</code></em>;</p></td>
+<td class="struct_member_description"><p><a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if this stream uses contrained parameters.</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstMpegVideoSequenceHdr.load-intra-quantiser-matrix"></a>load_intra_quantiser_matrix</code></em>;</p></td>
+<td class="struct_member_description"><p><a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> indicates the presence of intra_quantiser_matrix</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstMpegVideoSequenceHdr.intra-quantizer-matrix"></a>intra_quantizer_matrix</code></em>[64];</p></td>
+<td class="struct_member_description"><p>intra-quantization table, in zigzag scan order</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstMpegVideoSequenceHdr.load-non-intra-quantiser-matrix"></a>load_non_intra_quantiser_matrix</code></em>;</p></td>
+<td class="struct_member_description"><p><a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> indicates the presence of non_intra_quantiser_matrix</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstMpegVideoSequenceHdr.non-intra-quantizer-matrix"></a>non_intra_quantizer_matrix</code></em>[64];</p></td>
+<td class="struct_member_description"><p>non-intra quantization table, in zigzag scan order</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="type">guint</span></a> <em class="structfield"><code><a name="GstMpegVideoSequenceHdr.par-w"></a>par_w</code></em>;</p></td>
+<td class="struct_member_description"><p>Calculated Pixel Aspect Ratio width</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="type">guint</span></a> <em class="structfield"><code><a name="GstMpegVideoSequenceHdr.par-h"></a>par_h</code></em>;</p></td>
+<td class="struct_member_description"><p>Calculated Pixel Aspect Ratio height</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="type">guint</span></a> <em class="structfield"><code><a name="GstMpegVideoSequenceHdr.fps-n"></a>fps_n</code></em>;</p></td>
+<td class="struct_member_description"><p>Calculated Framrate nominator</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="type">guint</span></a> <em class="structfield"><code><a name="GstMpegVideoSequenceHdr.fps-d"></a>fps_d</code></em>;</p></td>
+<td class="struct_member_description"><p>Calculated Framerate denominator</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="type">guint</span></a> <em class="structfield"><code><a name="GstMpegVideoSequenceHdr.bitrate"></a>bitrate</code></em>;</p></td>
+<td class="struct_member_description"><p>the real bitrate of the Mpeg video stream in bits per second, 0 if VBR stream</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
</div>
<hr>
<div class="refsect2">
@@ -606,6 +1144,83 @@
guint8 profile_level_escape_bit;
};
</pre>
+<p>The Mpeg2 Video Sequence Extension structure.</p>
+<div class="refsect3">
+<a name="GstMpegVideoSequenceExt.members"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="300px" class="struct_members_name">
+<col class="struct_members_description">
+<col width="200px" class="struct_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstMpegVideoSequenceExt.profile"></a>profile</code></em>;</p></td>
+<td class="struct_member_description"><p>mpeg2 decoder profile</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstMpegVideoSequenceExt.level"></a>level</code></em>;</p></td>
+<td class="struct_member_description"><p>mpeg2 decoder level</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstMpegVideoSequenceExt.progressive"></a>progressive</code></em>;</p></td>
+<td class="struct_member_description"><p><a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the frames are progressive <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> otherwise</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstMpegVideoSequenceExt.chroma-format"></a>chroma_format</code></em>;</p></td>
+<td class="struct_member_description"><p>indicates the chrominance format</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstMpegVideoSequenceExt.horiz-size-ext"></a>horiz_size_ext</code></em>;</p></td>
+<td class="struct_member_description"><p>Horizontal size</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstMpegVideoSequenceExt.vert-size-ext"></a>vert_size_ext</code></em>;</p></td>
+<td class="struct_member_description"><p>Vertical size</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint16"><span class="type">guint16</span></a> <em class="structfield"><code><a name="GstMpegVideoSequenceExt.bitrate-ext"></a>bitrate_ext</code></em>;</p></td>
+<td class="struct_member_description"><p>The bitrate</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstMpegVideoSequenceExt.vbv-buffer-size-extension"></a>vbv_buffer_size_extension</code></em>;</p></td>
+<td class="struct_member_description"><p>VBV vuffer size</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstMpegVideoSequenceExt.low-delay"></a>low_delay</code></em>;</p></td>
+<td class="struct_member_description"><p><a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the sequence doesn't contain any B-pictures, <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a>
+otherwise</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstMpegVideoSequenceExt.fps-n-ext"></a>fps_n_ext</code></em>;</p></td>
+<td class="struct_member_description"><p>Framerate nominator code</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstMpegVideoSequenceExt.fps-d-ext"></a>fps_d_ext</code></em>;</p></td>
+<td class="struct_member_description"><p>Framerate denominator code</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstMpegVideoSequenceExt.profile-level-escape-bit"></a>profile_level_escape_bit</code></em>;</p></td>
+<td class="struct_member_description"><p>Escape bit. If set, the meaning of the
+<em class="parameter"><code>profile</code></em>
+and <em class="parameter"><code>level</code></em>
+fields is different.</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
</div>
<hr>
<div class="refsect2">
@@ -620,6 +1235,51 @@
guint8 f_code[2][2];
};
</pre>
+<p>The Mpeg2 Video Picture Header structure.</p>
+<div class="refsect3">
+<a name="GstMpegVideoPictureHdr.members"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="300px" class="struct_members_name">
+<col class="struct_members_description">
+<col width="200px" class="struct_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint16"><span class="type">guint16</span></a> <em class="structfield"><code><a name="GstMpegVideoPictureHdr.tsn"></a>tsn</code></em>;</p></td>
+<td class="struct_member_description"><p>Temporal Sequence Number</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstMpegVideoPictureHdr.pic-type"></a>pic_type</code></em>;</p></td>
+<td class="struct_member_description"><p>Type of the frame</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint16"><span class="type">guint16</span></a> <em class="structfield"><code><a name="GstMpegVideoPictureHdr.vbv-delay"></a>vbv_delay</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstMpegVideoPictureHdr.full-pel-forward-vector"></a>full_pel_forward_vector</code></em>;</p></td>
+<td class="struct_member_description"><p>the full pel forward flag of
+the frame: 0 or 1.</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstMpegVideoPictureHdr.full-pel-backward-vector"></a>full_pel_backward_vector</code></em>;</p></td>
+<td class="struct_member_description"><p>the full pel backward flag
+of the frame: 0 or 1.</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstMpegVideoPictureHdr.f-code"></a>f_code</code></em>[2][2];</p></td>
+<td class="struct_member_description"><p>F code</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
</div>
<hr>
<div class="refsect2">
@@ -633,6 +1293,54 @@
guint8 broken_link;
};
</pre>
+<p>The Mpeg Video Group of Picture structure.</p>
+<div class="refsect3">
+<a name="GstMpegVideoGop.members"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="300px" class="struct_members_name">
+<col class="struct_members_description">
+<col width="200px" class="struct_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstMpegVideoGop.drop-frame-flag"></a>drop_frame_flag</code></em>;</p></td>
+<td class="struct_member_description"><p>Drop Frame Flag</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstMpegVideoGop.hour"></a>hour</code></em>;</p></td>
+<td class="struct_member_description"><p>Hour (0-23)</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstMpegVideoGop.minute"></a>minute</code></em>;</p></td>
+<td class="struct_member_description"><p>Minute (O-59)</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstMpegVideoGop.second"></a>second</code></em>;</p></td>
+<td class="struct_member_description"><p>Second (0-59)</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstMpegVideoGop.frame"></a>frame</code></em>;</p></td>
+<td class="struct_member_description"><p>Frame (0-59)</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstMpegVideoGop.closed-gop"></a>closed_gop</code></em>;</p></td>
+<td class="struct_member_description"><p>Closed Gop</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstMpegVideoGop.broken-link"></a>broken_link</code></em>;</p></td>
+<td class="struct_member_description"><p>Broken link</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
</div>
<hr>
<div class="refsect2">
@@ -659,6 +1367,109 @@
guint8 sub_carrier_phase;
};
</pre>
+<p>The Mpeg2 Video Picture Extension structure.</p>
+<div class="refsect3">
+<a name="GstMpegVideoPictureExt.members"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="300px" class="struct_members_name">
+<col class="struct_members_description">
+<col width="200px" class="struct_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstMpegVideoPictureExt.f-code"></a>f_code</code></em>[2][2];</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstMpegVideoPictureExt.intra-dc-precision"></a>intra_dc_precision</code></em>;</p></td>
+<td class="struct_member_description"><p>Intra DC precision</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstMpegVideoPictureExt.picture-structure"></a>picture_structure</code></em>;</p></td>
+<td class="struct_member_description"><p>Structure of the picture</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstMpegVideoPictureExt.top-field-first"></a>top_field_first</code></em>;</p></td>
+<td class="struct_member_description"><p>Top field first</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstMpegVideoPictureExt.frame-pred-frame-dct"></a>frame_pred_frame_dct</code></em>;</p></td>
+<td class="struct_member_description"><p>Frame</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstMpegVideoPictureExt.concealment-motion-vectors"></a>concealment_motion_vectors</code></em>;</p></td>
+<td class="struct_member_description"><p>Concealment Motion Vectors</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstMpegVideoPictureExt.q-scale-type"></a>q_scale_type</code></em>;</p></td>
+<td class="struct_member_description"><p>Q Scale Type</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstMpegVideoPictureExt.intra-vlc-format"></a>intra_vlc_format</code></em>;</p></td>
+<td class="struct_member_description"><p>Intra Vlc Format</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstMpegVideoPictureExt.alternate-scan"></a>alternate_scan</code></em>;</p></td>
+<td class="struct_member_description"><p>Alternate Scan</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstMpegVideoPictureExt.repeat-first-field"></a>repeat_first_field</code></em>;</p></td>
+<td class="struct_member_description"><p>Repeat First Field</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstMpegVideoPictureExt.chroma-420-type"></a>chroma_420_type</code></em>;</p></td>
+<td class="struct_member_description"><p>Chroma 420 Type</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstMpegVideoPictureExt.progressive-frame"></a>progressive_frame</code></em>;</p></td>
+<td class="struct_member_description"><p><a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the frame is progressive <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> otherwise</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstMpegVideoPictureExt.composite-display"></a>composite_display</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstMpegVideoPictureExt.v-axis"></a>v_axis</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstMpegVideoPictureExt.field-sequence"></a>field_sequence</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstMpegVideoPictureExt.sub-carrier"></a>sub_carrier</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstMpegVideoPictureExt.burst-amplitude"></a>burst_amplitude</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstMpegVideoPictureExt.sub-carrier-phase"></a>sub_carrier_phase</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
</div>
<hr>
<div class="refsect2">
@@ -674,6 +1485,9 @@
guint8 chroma_non_intra_quantiser_matrix[64];
};
</pre>
+<p>The Quant Matrix Extension structure that exposes quantization
+matrices in zigzag scan order. i.e. the original encoded scan
+order.</p>
</div>
</div>
</div>
diff --git a/docs/libs/html/gst-plugins-bad-libs-vc1parser.html b/docs/libs/html/gst-plugins-bad-libs-vc1parser.html
index ad54d97..ccae74d 100644
--- a/docs/libs/html/gst-plugins-bad-libs-vc1parser.html
+++ b/docs/libs/html/gst-plugins-bad-libs-vc1parser.html
@@ -27,7 +27,8 @@
<div class="refnamediv"><table width="100%"><tr>
<td valign="top">
<h2><span class="refentrytitle"><a name="gst-plugins-bad-libs-vc1parser.top_of_page"></a>vc1parser</span></h2>
-<p>vc1parser</p>
+<p>vc1parser — Convenience library for parsing vc1 video
+bitstream.</p>
</td>
<td class="gallery_image" valign="top" align="right"></td>
</tr></table></div>
@@ -256,6 +257,8 @@
</div>
<div class="refsect1">
<a name="gst-plugins-bad-libs-vc1parser.description"></a><h2>Description</h2>
+<p>For more details about the structures, look at the
+smpte specifications (S421m-2006.pdf).</p>
</div>
<div class="refsect1">
<a name="gst-plugins-bad-libs-vc1parser.functions_details"></a><h2>Functions</h2>
@@ -265,6 +268,41 @@
gst_vc1_identify_next_bdu (<em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> *data</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gsize"><span class="type">gsize</span></a> size</code></em>,
<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-vc1parser.html#GstVC1BDU" title="struct GstVC1BDU"><span class="type">GstVC1BDU</span></a> *bdu</code></em>);</pre>
+<p>Parses <em class="parameter"><code>data</code></em>
+ and fills <em class="parameter"><code>bdu</code></em>
+ fields</p>
+<div class="refsect3">
+<a name="gst-vc1-identify-next-bdu.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>data</p></td>
+<td class="parameter_description"><p>The data to parse</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>size</p></td>
+<td class="parameter_description"><p>the size of <em class="parameter"><code>data</code></em>
+</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>bdu</p></td>
+<td class="parameter_description"><p> The <a class="link" href="gst-plugins-bad-libs-vc1parser.html#GstVC1BDU" title="struct GstVC1BDU"><span class="type">GstVC1BDU</span></a> where to store parsed bdu headers. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-vc1-identify-next-bdu.returns"></a><h4>Returns</h4>
+<p> a <a class="link" href="gst-plugins-bad-libs-vc1parser.html#GstVC1ParserResult" title="enum GstVC1ParserResult"><span class="type">GstVC1ParserResult</span></a></p>
+</div>
</div>
<hr>
<div class="refsect2">
@@ -273,6 +311,41 @@
gst_vc1_parse_sequence_header (<em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> *data</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gsize"><span class="type">gsize</span></a> size</code></em>,
<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-vc1parser.html#GstVC1SeqHdr" title="struct GstVC1SeqHdr"><span class="type">GstVC1SeqHdr</span></a> *seqhdr</code></em>);</pre>
+<p>Parses <em class="parameter"><code>data</code></em>
+, and fills <em class="parameter"><code>seqhdr</code></em>
+ fields.</p>
+<div class="refsect3">
+<a name="gst-vc1-parse-sequence-header.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>data</p></td>
+<td class="parameter_description"><p>The data to parse</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>size</p></td>
+<td class="parameter_description"><p>the size of <em class="parameter"><code>data</code></em>
+</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>seqhdr</p></td>
+<td class="parameter_description"><p>The <a class="link" href="gst-plugins-bad-libs-vc1parser.html#GstVC1SeqHdr" title="struct GstVC1SeqHdr"><span class="type">GstVC1SeqHdr</span></a> to set.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-vc1-parse-sequence-header.returns"></a><h4>Returns</h4>
+<p> a <a class="link" href="gst-plugins-bad-libs-vc1parser.html#GstVC1ParserResult" title="enum GstVC1ParserResult"><span class="type">GstVC1ParserResult</span></a></p>
+</div>
</div>
<hr>
<div class="refsect2">
@@ -281,6 +354,41 @@
gst_vc1_parse_sequence_layer (<em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> *data</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gsize"><span class="type">gsize</span></a> size</code></em>,
<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-vc1parser.html#GstVC1SeqLayer" title="struct GstVC1SeqLayer"><span class="type">GstVC1SeqLayer</span></a> *seqlayer</code></em>);</pre>
+<p>Parses <em class="parameter"><code>data</code></em>
+, and fills <em class="parameter"><code>seqlayer</code></em>
+ fields.</p>
+<div class="refsect3">
+<a name="gst-vc1-parse-sequence-layer.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>data</p></td>
+<td class="parameter_description"><p>The data to parse</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>size</p></td>
+<td class="parameter_description"><p>the size of <em class="parameter"><code>data</code></em>
+</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>seqlayer</p></td>
+<td class="parameter_description"><p>The <a class="link" href="gst-plugins-bad-libs-vc1parser.html#GstVC1SeqLayer" title="struct GstVC1SeqLayer"><span class="type">GstVC1SeqLayer</span></a> to set.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-vc1-parse-sequence-layer.returns"></a><h4>Returns</h4>
+<p> a <a class="link" href="gst-plugins-bad-libs-vc1parser.html#GstVC1ParserResult" title="enum GstVC1ParserResult"><span class="type">GstVC1ParserResult</span></a></p>
+</div>
</div>
<hr>
<div class="refsect2">
@@ -290,6 +398,41 @@
(<em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> *data</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gsize"><span class="type">gsize</span></a> size</code></em>,
<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-vc1parser.html#GstVC1SeqStructA" title="struct GstVC1SeqStructA"><span class="type">GstVC1SeqStructA</span></a> *structa</code></em>);</pre>
+<p>Parses <em class="parameter"><code>data</code></em>
+, and fills <em class="parameter"><code>structa</code></em>
+ fields.</p>
+<div class="refsect3">
+<a name="gst-vc1-parse-sequence-header-struct-a.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>data</p></td>
+<td class="parameter_description"><p>The data to parse</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>size</p></td>
+<td class="parameter_description"><p>the size of <em class="parameter"><code>data</code></em>
+</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>structa</p></td>
+<td class="parameter_description"><p>The <a class="link" href="gst-plugins-bad-libs-vc1parser.html#GstVC1SeqStructA" title="struct GstVC1SeqStructA"><span class="type">GstVC1SeqStructA</span></a> to set.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-vc1-parse-sequence-header-struct-a.returns"></a><h4>Returns</h4>
+<p> a <a class="link" href="gst-plugins-bad-libs-vc1parser.html#GstVC1ParserResult" title="enum GstVC1ParserResult"><span class="type">GstVC1ParserResult</span></a></p>
+</div>
</div>
<hr>
<div class="refsect2">
@@ -299,6 +442,41 @@
(<em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> *data</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gsize"><span class="type">gsize</span></a> size</code></em>,
<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-vc1parser.html#GstVC1SeqStructB" title="struct GstVC1SeqStructB"><span class="type">GstVC1SeqStructB</span></a> *structb</code></em>);</pre>
+<p>Parses <em class="parameter"><code>data</code></em>
+, and fills <em class="parameter"><code>structb</code></em>
+ fields.</p>
+<div class="refsect3">
+<a name="gst-vc1-parse-sequence-header-struct-b.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>data</p></td>
+<td class="parameter_description"><p>The data to parse</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>size</p></td>
+<td class="parameter_description"><p>the size of <em class="parameter"><code>data</code></em>
+</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>structb</p></td>
+<td class="parameter_description"><p>The <a class="link" href="gst-plugins-bad-libs-vc1parser.html#GstVC1SeqStructB" title="struct GstVC1SeqStructB"><span class="type">GstVC1SeqStructB</span></a> to set.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-vc1-parse-sequence-header-struct-b.returns"></a><h4>Returns</h4>
+<p> a <a class="link" href="gst-plugins-bad-libs-vc1parser.html#GstVC1ParserResult" title="enum GstVC1ParserResult"><span class="type">GstVC1ParserResult</span></a></p>
+</div>
</div>
<hr>
<div class="refsect2">
@@ -308,6 +486,41 @@
(<em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> *data</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gsize"><span class="type">gsize</span></a> size</code></em>,
<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-vc1parser.html#GstVC1SeqStructC" title="struct GstVC1SeqStructC"><span class="type">GstVC1SeqStructC</span></a> *structc</code></em>);</pre>
+<p>Parses <em class="parameter"><code>data</code></em>
+, and fills <em class="parameter"><code>structc</code></em>
+ fields.</p>
+<div class="refsect3">
+<a name="gst-vc1-parse-sequence-header-struct-c.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>data</p></td>
+<td class="parameter_description"><p>The data to parse</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>size</p></td>
+<td class="parameter_description"><p>the size of <em class="parameter"><code>data</code></em>
+</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>structc</p></td>
+<td class="parameter_description"><p>The <a class="link" href="gst-plugins-bad-libs-vc1parser.html#GstVC1SeqStructC" title="struct GstVC1SeqStructC"><span class="type">GstVC1SeqStructC</span></a> to set.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-vc1-parse-sequence-header-struct-c.returns"></a><h4>Returns</h4>
+<p> a <a class="link" href="gst-plugins-bad-libs-vc1parser.html#GstVC1ParserResult" title="enum GstVC1ParserResult"><span class="type">GstVC1ParserResult</span></a></p>
+</div>
</div>
<hr>
<div class="refsect2">
@@ -317,6 +530,46 @@
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gsize"><span class="type">gsize</span></a> size</code></em>,
<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-vc1parser.html#GstVC1EntryPointHdr" title="struct GstVC1EntryPointHdr"><span class="type">GstVC1EntryPointHdr</span></a> *entrypoint</code></em>,
<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-vc1parser.html#GstVC1SeqHdr" title="struct GstVC1SeqHdr"><span class="type">GstVC1SeqHdr</span></a> *seqhdr</code></em>);</pre>
+<p>Parses <em class="parameter"><code>data</code></em>
+, and sets <em class="parameter"><code>entrypoint</code></em>
+ fields.</p>
+<div class="refsect3">
+<a name="gst-vc1-parse-entry-point-header.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>data</p></td>
+<td class="parameter_description"><p>The data to parse</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>size</p></td>
+<td class="parameter_description"><p>the size of <em class="parameter"><code>data</code></em>
+</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>entrypoint</p></td>
+<td class="parameter_description"><p> The <a class="link" href="gst-plugins-bad-libs-vc1parser.html#GstVC1EntryPointHdr" title="struct GstVC1EntryPointHdr"><span class="type">GstVC1EntryPointHdr</span></a> to set. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>seqhdr</p></td>
+<td class="parameter_description"><p>The <a class="link" href="gst-plugins-bad-libs-vc1parser.html#GstVC1SeqHdr" title="struct GstVC1SeqHdr"><span class="type">GstVC1SeqHdr</span></a> currently being parsed</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-vc1-parse-entry-point-header.returns"></a><h4>Returns</h4>
+<p> a <a class="link" href="gst-plugins-bad-libs-vc1parser.html#GstVC1EntryPointHdr" title="struct GstVC1EntryPointHdr"><span class="type">GstVC1EntryPointHdr</span></a></p>
+</div>
</div>
<hr>
<div class="refsect2">
@@ -327,12 +580,63 @@
<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-vc1parser.html#GstVC1FrameHdr" title="struct GstVC1FrameHdr"><span class="type">GstVC1FrameHdr</span></a> *framehdr</code></em>,
<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-vc1parser.html#GstVC1SeqHdr" title="struct GstVC1SeqHdr"><span class="type">GstVC1SeqHdr</span></a> *seqhdr</code></em>,
<em class="parameter"><code><span class="type">GstVC1BitPlanes</span> *bitplanes</code></em>);</pre>
+<p>Parses <em class="parameter"><code>data</code></em>
+, and fills <em class="parameter"><code>entrypoint</code></em>
+ fields.</p>
+<div class="refsect3">
+<a name="gst-vc1-parse-frame-header.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>data</p></td>
+<td class="parameter_description"><p>The data to parse</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>size</p></td>
+<td class="parameter_description"><p>the size of <em class="parameter"><code>data</code></em>
+</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>framehdr</p></td>
+<td class="parameter_description"><p>The <a class="link" href="gst-plugins-bad-libs-vc1parser.html#GstVC1FrameHdr" title="struct GstVC1FrameHdr"><span class="type">GstVC1FrameHdr</span></a> to fill.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>seqhdr</p></td>
+<td class="parameter_description"><p>The <a class="link" href="gst-plugins-bad-libs-vc1parser.html#GstVC1SeqHdr" title="struct GstVC1SeqHdr"><span class="type">GstVC1SeqHdr</span></a> currently being parsed</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>bitplanes</p></td>
+<td class="parameter_description"><p>The <span class="type">GstVC1BitPlanes</span> to store bitplanes in or <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-vc1-parse-frame-header.returns"></a><h4>Returns</h4>
+<p> a <a class="link" href="gst-plugins-bad-libs-vc1parser.html#GstVC1ParserResult" title="enum GstVC1ParserResult"><span class="type">GstVC1ParserResult</span></a></p>
+</div>
</div>
<hr>
<div class="refsect2">
<a name="gst-vc1-bitplanes-new"></a><h3>gst_vc1_bitplanes_new ()</h3>
<pre class="programlisting"><span class="returnvalue">GstVC1BitPlanes</span> *
gst_vc1_bitplanes_new (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<p>Creates a new <span class="type">GstVC1BitPlanes</span>. It should be freed with
+<a class="link" href="gst-plugins-bad-libs-vc1parser.html#gst-vc1-bitplanes-free" title="gst_vc1_bitplanes_free ()"><code class="function">gst_vc1_bitplanes_free()</code></a> after use.</p>
+<div class="refsect3">
+<a name="gst-vc1-bitplanes-new.returns"></a><h4>Returns</h4>
+<p> a new <span class="type">GstVC1BitPlanes</span></p>
+</div>
</div>
<hr>
<div class="refsect2">
@@ -352,6 +656,39 @@
<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
gst_vc1_bitplanes_ensure_size (<em class="parameter"><code><span class="type">GstVC1BitPlanes</span> *bitplanes</code></em>,
<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-vc1parser.html#GstVC1SeqHdr" title="struct GstVC1SeqHdr"><span class="type">GstVC1SeqHdr</span></a> *seqhdr</code></em>);</pre>
+<p>Fills the <em class="parameter"><code>bitplanes</code></em>
+ structure from <em class="parameter"><code>seqhdr</code></em>
+, this function
+should be called after <a class="link" href="gst-plugins-bad-libs-vc1parser.html#gst-vc1-parse-sequence-header" title="gst_vc1_parse_sequence_header ()"><span class="type">gst_vc1_parse_sequence_header</span></a> if
+in simple or main mode, or after <a class="link" href="gst-plugins-bad-libs-vc1parser.html#gst-vc1-parse-entry-point-header" title="gst_vc1_parse_entry_point_header ()"><span class="type">gst_vc1_parse_entry_point_header</span></a>
+if in advanced mode.</p>
+<div class="refsect3">
+<a name="gst-vc1-bitplanes-ensure-size.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>bitplanes</p></td>
+<td class="parameter_description"><p>The <span class="type">GstVC1BitPlanes</span> to reset</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>seqhdr</p></td>
+<td class="parameter_description"><p>The <a class="link" href="gst-plugins-bad-libs-vc1parser.html#GstVC1SeqHdr" title="struct GstVC1SeqHdr"><span class="type">GstVC1SeqHdr</span></a> from which to set <em class="parameter"><code>bitplanes</code></em>
+</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gst-vc1-bitplanes-ensure-size.returns"></a><h4>Returns</h4>
+<p> <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if everything went fine, <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> otherwise</p>
+</div>
</div>
</div>
<div class="refsect1">
@@ -777,6 +1114,7 @@
GstVC1AdvancedSeqHdr advanced;
};
</pre>
+<p>Structure for sequence headers in any profile.</p>
</div>
<hr>
<div class="refsect2">
@@ -827,6 +1165,7 @@
GstVC1EntryPointHdr entrypoint;
};
</pre>
+<p>Structure for the advanced profile sequence headers specific parameters.</p>
</div>
<hr>
<div class="refsect2">
@@ -942,6 +1281,7 @@
guint8 hrd_full[MAX_HRD_NUM_LEAKY_BUCKETS];
};
</pre>
+<p>Structure for entrypoint header, this will be used only in advanced profiles</p>
</div>
<hr>
<div class="refsect2">
@@ -975,6 +1315,11 @@
guint header_size;
};
</pre>
+<p>Structure that represent picture in any profile or mode.
+You should look at <em class="parameter"><code>ptype</code></em>
+ and <em class="parameter"><code>profile</code></em>
+ to know what is currently
+in use.</p>
</div>
<hr>
<div class="refsect2">
@@ -1054,6 +1399,258 @@
guint8 intcompfield;
};
</pre>
+<div class="refsect3">
+<a name="GstVC1PicAdvanced.members"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="300px" class="struct_members_name">
+<col class="struct_members_description">
+<col width="200px" class="struct_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="struct_member_name"><p><span class="type">GstVC1FrameCodingMode</span> <em class="structfield"><code><a name="GstVC1PicAdvanced.fcm"></a>fcm</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstVC1PicAdvanced.tfcntr"></a>tfcntr</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstVC1PicAdvanced.rptfrm"></a>rptfrm</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstVC1PicAdvanced.tff"></a>tff</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstVC1PicAdvanced.rff"></a>rff</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstVC1PicAdvanced.ps-present"></a>ps_present</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint32"><span class="type">guint32</span></a> <em class="structfield"><code><a name="GstVC1PicAdvanced.ps-hoffset"></a>ps_hoffset</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint32"><span class="type">guint32</span></a> <em class="structfield"><code><a name="GstVC1PicAdvanced.ps-voffset"></a>ps_voffset</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint16"><span class="type">guint16</span></a> <em class="structfield"><code><a name="GstVC1PicAdvanced.ps-width"></a>ps_width</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint16"><span class="type">guint16</span></a> <em class="structfield"><code><a name="GstVC1PicAdvanced.ps-height"></a>ps_height</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstVC1PicAdvanced.rndctrl"></a>rndctrl</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstVC1PicAdvanced.uvsamp"></a>uvsamp</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstVC1PicAdvanced.postproc"></a>postproc</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstVC1PicAdvanced.mvrange"></a>mvrange</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstVC1PicAdvanced.mvmode"></a>mvmode</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstVC1PicAdvanced.mvtab"></a>mvtab</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstVC1PicAdvanced.cbptab"></a>cbptab</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstVC1PicAdvanced.ttmbf"></a>ttmbf</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstVC1PicAdvanced.ttfrm"></a>ttfrm</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint16"><span class="type">guint16</span></a> <em class="structfield"><code><a name="GstVC1PicAdvanced.bfraction"></a>bfraction</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstVC1PicAdvanced.mvmode2"></a>mvmode2</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstVC1PicAdvanced.lumscale"></a>lumscale</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstVC1PicAdvanced.lumshift"></a>lumshift</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstVC1PicAdvanced.bf"></a>bf</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstVC1PicAdvanced.condover"></a>condover</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstVC1PicAdvanced.transacfrm2"></a>transacfrm2</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstVC1PicAdvanced.acpred"></a>acpred</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstVC1PicAdvanced.overflags"></a>overflags</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstVC1PicAdvanced.mvtypemb"></a>mvtypemb</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstVC1PicAdvanced.skipmb"></a>skipmb</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstVC1PicAdvanced.directmb"></a>directmb</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstVC1PicAdvanced.forwardmb"></a>forwardmb</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstVC1PicAdvanced.fieldtx"></a>fieldtx</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstVC1PicAdvanced.intcomp"></a>intcomp</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstVC1PicAdvanced.dmvrange"></a>dmvrange</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstVC1PicAdvanced.mbmodetab"></a>mbmodetab</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstVC1PicAdvanced.imvtab"></a>imvtab</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstVC1PicAdvanced.icbptab"></a>icbptab</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstVC1PicAdvanced.mvbptab2"></a>mvbptab2</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstVC1PicAdvanced.mvbptab4"></a>mvbptab4</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstVC1PicAdvanced.mvswitch4"></a>mvswitch4</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint16"><span class="type">guint16</span></a> <em class="structfield"><code><a name="GstVC1PicAdvanced.refdist"></a>refdist</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstVC1PicAdvanced.fptype"></a>fptype</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstVC1PicAdvanced.numref"></a>numref</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstVC1PicAdvanced.reffield"></a>reffield</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstVC1PicAdvanced.lumscale2"></a>lumscale2</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstVC1PicAdvanced.lumshift2"></a>lumshift2</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstVC1PicAdvanced.intcompfield"></a>intcompfield</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
</div>
<hr>
<div class="refsect2">
@@ -1095,6 +1692,108 @@
guint8 directmb; /* B pic main profile only */
};
</pre>
+<div class="refsect3">
+<a name="GstVC1PicSimpleMain.members"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="300px" class="struct_members_name">
+<col class="struct_members_description">
+<col width="200px" class="struct_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstVC1PicSimpleMain.frmcnt"></a>frmcnt</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstVC1PicSimpleMain.mvrange"></a>mvrange</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstVC1PicSimpleMain.rangeredfrm"></a>rangeredfrm</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstVC1PicSimpleMain.respic"></a>respic</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstVC1PicSimpleMain.transacfrm2"></a>transacfrm2</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstVC1PicSimpleMain.bf"></a>bf</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstVC1PicSimpleMain.mvmode"></a>mvmode</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstVC1PicSimpleMain.mvtab"></a>mvtab</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstVC1PicSimpleMain.ttmbf"></a>ttmbf</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstVC1PicSimpleMain.mvmode2"></a>mvmode2</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstVC1PicSimpleMain.lumscale"></a>lumscale</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstVC1PicSimpleMain.lumshift"></a>lumshift</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstVC1PicSimpleMain.cbptab"></a>cbptab</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstVC1PicSimpleMain.ttfrm"></a>ttfrm</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint16"><span class="type">guint16</span></a> <em class="structfield"><code><a name="GstVC1PicSimpleMain.bfraction"></a>bfraction</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstVC1PicSimpleMain.mvtypemb"></a>mvtypemb</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstVC1PicSimpleMain.skipmb"></a>skipmb</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstVC1PicSimpleMain.directmb"></a>directmb</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
</div>
<hr>
<div class="refsect2">
@@ -1139,6 +1838,7 @@
guint8 * data;
};
</pre>
+<p>Structure that represents a Bitstream Data Unit.</p>
</div>
</div>
</div>
diff --git a/docs/libs/html/gstreamer-libs-hierarchy.html b/docs/libs/html/gstreamer-libs-hierarchy.html
index 0ded4c5..94793a3 100644
--- a/docs/libs/html/gstreamer-libs-hierarchy.html
+++ b/docs/libs/html/gstreamer-libs-hierarchy.html
@@ -42,13 +42,13 @@
<span class="lineart">│</span> <span class="lineart">├──</span> <a class="link" href="GstGLColorConvert.html" title="GstGLColorConvert">GstGLColorConvert</a>
<span class="lineart">│</span> <span class="lineart">├──</span> <a class="link" href="GstGLContext.html" title="GstGLContext">GstGLContext</a>
<span class="lineart">│</span> <span class="lineart">├──</span> <a class="link" href="GstGLDisplay.html" title="GstGLDisplay">GstGLDisplay</a>
+ <span class="lineart">│</span> <span class="lineart">├──</span> <a class="link" href="GstGLFramebuffer.html" title="GstGLFramebuffer">GstGLFramebuffer</a>
<span class="lineart">│</span> <span class="lineart">├──</span> <a class="link" href="GstGLShader.html" title="GstGLShader">GstGLShader</a>
<span class="lineart">│</span> <span class="lineart">├──</span> <a class="link" href=".html#GstGLSLStage">GstGLSLStage</a>
<span class="lineart">│</span> <span class="lineart">├──</span> <a class="link" href="GstGLUpload.html" title="GstGLUpload">GstGLUpload</a>
<span class="lineart">│</span> <span class="lineart">├──</span> GstGLViewConvert
<span class="lineart">│</span> <span class="lineart">├──</span> <a class="link" href="GstGLWindow.html" title="GstGLWindow">GstGLWindow</a>
<span class="lineart">│</span> <span class="lineart">╰──</span> <a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer">GstPlayer</a>
- <span class="lineart">├──</span> <a class="link" href="GstGLFramebuffer.html" title="GstGLFramebuffer">GstGLFramebuffer</a>
<span class="lineart">├──</span> <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerStreamInfo">GstPlayerStreamInfo</a>
<span class="lineart">│</span> <span class="lineart">├──</span> <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerAudioInfo">GstPlayerAudioInfo</a>
<span class="lineart">│</span> <span class="lineart">├──</span> <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerSubtitleInfo">GstPlayerSubtitleInfo</a>
@@ -59,22 +59,22 @@
<span class="lineart">├──</span> <a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayerSignalDispatcher">GstPlayerSignalDispatcher</a>
<span class="lineart">╰──</span> <a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayerVideoRenderer">GstPlayerVideoRenderer</a>
<a href="https://developer.gnome.org/gobject/unstable/gobject-Boxed-Types.html">GBoxed</a>
- <span class="lineart">├──</span> <a class="link" href="gst-plugins-bad-libs-gstmpegtssection.html#GstMpegtsSection">GstMpegtsSection</a>
- <span class="lineart">├──</span> <a class="link" href="gst-plugins-bad-libs-gstmpegtsdescriptor.html#GstMpegtsDescriptor">GstMpegtsDescriptor</a>
+ <span class="lineart">├──</span> <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsSection">GstMpegtsSection</a>
+ <span class="lineart">├──</span> <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GstMpegtsDescriptor">GstMpegtsDescriptor</a>
<span class="lineart">╰──</span> <a class="link" href="gst-plugins-bad-libs-gstplayer-visualization.html#GstPlayerVisualization">GstPlayerVisualization</a>
<a href="https://developer.gnome.org/gobject/unstable/gobject-Enumeration-and-Flag-Types.html">GEnum</a>
- <span class="lineart">├──</span> <a class="link" href="gst-plugins-bad-libs-gstmpegtssection.html#GstMpegtsSectionType" title="enum GstMpegtsSectionType">GstMpegtsSectionType</a>
- <span class="lineart">├──</span> <a class="link" href="gst-plugins-bad-libs-gstmpegtssection.html#GstMpegtsSectionTableID" title="enum GstMpegtsSectionTableID">GstMpegtsSectionTableID</a>
- <span class="lineart">├──</span> <a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#GstMpegtsCableOuterFECScheme" title="enum GstMpegtsCableOuterFECScheme">GstMpegtsCableOuterFECScheme</a>
- <span class="lineart">├──</span> <a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#GstMpegtsModulationType" title="enum GstMpegtsModulationType">GstMpegtsModulationType</a>
- <span class="lineart">├──</span> <a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#GstMpegtsSatellitePolarizationType" title="enum GstMpegtsSatellitePolarizationType">GstMpegtsSatellitePolarizationType</a>
- <span class="lineart">├──</span> <a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#GstMpegtsSatelliteRolloff" title="enum GstMpegtsSatelliteRolloff">GstMpegtsSatelliteRolloff</a>
- <span class="lineart">├──</span> <a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#GstMpegtsDVBCodeRate" title="enum GstMpegtsDVBCodeRate">GstMpegtsDVBCodeRate</a>
- <span class="lineart">├──</span> <a class="link" href="gst-plugins-bad-libs-gstmpegtsdescriptor.html#GstMpegtsDescriptorType" title="enum GstMpegtsDescriptorType">GstMpegtsDescriptorType</a>
- <span class="lineart">├──</span> <a class="link" href="gst-plugins-bad-libs-gstmpegtsdescriptor.html#GstMpegtsIso639AudioType" title="enum GstMpegtsIso639AudioType">GstMpegtsIso639AudioType</a>
- <span class="lineart">├──</span> <a class="link" href="gst-plugins-bad-libs-gst-dvb-section.html#GstMpegtsRunningStatus" title="enum GstMpegtsRunningStatus">GstMpegtsRunningStatus</a>
- <span class="lineart">├──</span> <a class="link" href="gst-plugins-bad-libs-gst-dvb-descriptor.html#GstMpegtsDVBServiceType" title="enum GstMpegtsDVBServiceType">GstMpegtsDVBServiceType</a>
- <span class="lineart">├──</span> <a class="link" href="gst-plugins-bad-libs-gstmpegtssection.html#GstMpegtsStreamType" title="enum GstMpegtsStreamType">GstMpegtsStreamType</a>
+ <span class="lineart">├──</span> <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsSectionType" title="enum GstMpegtsSectionType">GstMpegtsSectionType</a>
+ <span class="lineart">├──</span> <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsSectionTableID" title="enum GstMpegtsSectionTableID">GstMpegtsSectionTableID</a>
+ <span class="lineart">├──</span> <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsCableOuterFECScheme" title="enum GstMpegtsCableOuterFECScheme">GstMpegtsCableOuterFECScheme</a>
+ <span class="lineart">├──</span> <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsModulationType" title="enum GstMpegtsModulationType">GstMpegtsModulationType</a>
+ <span class="lineart">├──</span> <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsSatellitePolarizationType" title="enum GstMpegtsSatellitePolarizationType">GstMpegtsSatellitePolarizationType</a>
+ <span class="lineart">├──</span> <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsSatelliteRolloff" title="enum GstMpegtsSatelliteRolloff">GstMpegtsSatelliteRolloff</a>
+ <span class="lineart">├──</span> <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsDVBCodeRate" title="enum GstMpegtsDVBCodeRate">GstMpegtsDVBCodeRate</a>
+ <span class="lineart">├──</span> <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GstMpegtsDescriptorType" title="enum GstMpegtsDescriptorType">GstMpegtsDescriptorType</a>
+ <span class="lineart">├──</span> <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GstMpegtsIso639AudioType" title="enum GstMpegtsIso639AudioType">GstMpegtsIso639AudioType</a>
+ <span class="lineart">├──</span> <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#GstMpegtsRunningStatus" title="enum GstMpegtsRunningStatus">GstMpegtsRunningStatus</a>
+ <span class="lineart">├──</span> <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsDVBServiceType" title="enum GstMpegtsDVBServiceType">GstMpegtsDVBServiceType</a>
+ <span class="lineart">├──</span> <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsStreamType" title="enum GstMpegtsStreamType">GstMpegtsStreamType</a>
<span class="lineart">├──</span> <a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayerColorBalanceType" title="enum GstPlayerColorBalanceType">GstPlayerColorBalanceType</a>
<span class="lineart">├──</span> <a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayerError" title="enum GstPlayerError">GstPlayerError</a>
<span class="lineart">├──</span> <a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayerState" title="enum GstPlayerState">GstPlayerState</a>
diff --git a/docs/libs/html/gstreamer-plugins-bad.html b/docs/libs/html/gstreamer-plugins-bad.html
index 874b3fc..cefe5f7 100644
--- a/docs/libs/html/gstreamer-plugins-bad.html
+++ b/docs/libs/html/gstreamer-plugins-bad.html
@@ -33,19 +33,23 @@
<dt><span class="chapter"><a href="codecparsers.html">Bitstream parsing Library</a></span></dt>
<dd><dl>
<dt>
-<span class="refentrytitle"><a href="gst-plugins-bad-libs-h264parser.html">h264parser</a></span><span class="refpurpose"></span>
+<span class="refentrytitle"><a href="gst-plugins-bad-libs-h264parser.html">h264parser</a></span><span class="refpurpose"> — Convenience library for h264 video
+bitstream parsing.</span>
</dt>
<dt>
-<span class="refentrytitle"><a href="gst-plugins-bad-libs-jpegparser.html">jpegparser</a></span><span class="refpurpose"></span>
+<span class="refentrytitle"><a href="gst-plugins-bad-libs-jpegparser.html">jpegparser</a></span><span class="refpurpose"> — Convenience library for JPEG bitstream parsing.</span>
</dt>
<dt>
-<span class="refentrytitle"><a href="gst-plugins-bad-libs-mpegvideoparser.html">mpegvideoparser</a></span><span class="refpurpose"></span>
+<span class="refentrytitle"><a href="gst-plugins-bad-libs-mpegvideoparser.html">mpegvideoparser</a></span><span class="refpurpose"> — Convenience library for mpeg1 and 2 video
+bitstream parsing.</span>
</dt>
<dt>
-<span class="refentrytitle"><a href="gst-plugins-bad-libs-mpeg4parser.html">mpeg4parser</a></span><span class="refpurpose"></span>
+<span class="refentrytitle"><a href="gst-plugins-bad-libs-mpeg4parser.html">mpeg4parser</a></span><span class="refpurpose"> — Convenience library for parsing mpeg4 part 2 video
+bitstream.</span>
</dt>
<dt>
-<span class="refentrytitle"><a href="gst-plugins-bad-libs-vc1parser.html">vc1parser</a></span><span class="refpurpose"></span>
+<span class="refentrytitle"><a href="gst-plugins-bad-libs-vc1parser.html">vc1parser</a></span><span class="refpurpose"> — Convenience library for parsing vc1 video
+bitstream.</span>
</dt>
<dt>
<span class="refentrytitle"><a href="gst-plugins-bad-libs-gstmpegvideometa.html">gstmpegvideometa</a></span><span class="refpurpose"></span>
@@ -54,38 +58,39 @@
<dt><span class="chapter"><a href="mpegts.html">Mpeg TS helper library</a></span></dt>
<dd><dl>
<dt>
-<span class="refentrytitle"><a href="gst-plugins-bad-libs-gstmpegts.html">gstmpegts</a></span><span class="refpurpose"></span>
+<span class="refentrytitle"><a href="gst-plugins-bad-libs-Mpeg-ts-helper-library.html">Mpeg-ts helper library</a></span><span class="refpurpose"> — Mpeg-ts helper library for plugins and applications</span>
</dt>
<dt>
-<span class="refentrytitle"><a href="gst-plugins-bad-libs-gstmpegtssection.html">gstmpegtssection</a></span><span class="refpurpose"></span>
+<span class="refentrytitle"><a href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html">Base MPEG-TS sections</a></span><span class="refpurpose"> — Sections for ITU H.222.0 | ISO/IEC 13818-1</span>
</dt>
<dt>
-<span class="refentrytitle"><a href="gst-plugins-bad-libs-gstmpegtsdescriptor.html">gstmpegtsdescriptor</a></span><span class="refpurpose"></span>
+<span class="refentrytitle"><a href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html">Base MPEG-TS descriptors</a></span><span class="refpurpose"> — Descriptors for ITU H.222.0 | ISO/IEC 13818-1</span>
</dt>
<dt>
-<span class="refentrytitle"><a href="gst-plugins-bad-libs-gst-atsc-section.html">gst-atsc-section</a></span><span class="refpurpose"></span>
+<span class="refentrytitle"><a href="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html">ATSC variants of MPEG-TS sections</a></span><span class="refpurpose"> — Sections for the various ATSC specifications</span>
</dt>
<dt>
-<span class="refentrytitle"><a href="gst-plugins-bad-libs-gst-dvb-section.html">gst-dvb-section</a></span><span class="refpurpose"></span>
+<span class="refentrytitle"><a href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html">DVB variants of MPEG-TS sections</a></span><span class="refpurpose"> — Sections for the various DVB specifications</span>
</dt>
<dt>
-<span class="refentrytitle"><a href="gst-plugins-bad-libs-gst-atsc-descriptor.html">gst-atsc-descriptor</a></span><span class="refpurpose"></span>
+<span class="refentrytitle"><a href="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-descriptors.html">ATSC variants of MPEG-TS descriptors</a></span><span class="refpurpose"> — Descriptors for the various ATSC specifications</span>
</dt>
<dt>
-<span class="refentrytitle"><a href="gst-plugins-bad-libs-gst-dvb-descriptor.html">gst-dvb-descriptor</a></span><span class="refpurpose"></span>
+<span class="refentrytitle"><a href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html">DVB variants of MPEG-TS descriptors</a></span><span class="refpurpose"> — Descriptors for the various DVB specifications</span>
</dt>
<dt>
-<span class="refentrytitle"><a href="gst-plugins-bad-libs-gst-isdb-descriptor.html">gst-isdb-descriptor</a></span><span class="refpurpose"></span>
+<span class="refentrytitle"><a href="gst-plugins-bad-libs-ISDB-variants-of-MPEG-TS-descriptors.html">ISDB variants of MPEG-TS descriptors</a></span><span class="refpurpose"> — Descriptors for the various ISDB specifications</span>
</dt>
</dl></dd>
<dt><span class="chapter"><a href="tools.html">Useful elements</a></span></dt>
<dd><dl><dt>
-<span class="refentrytitle"><a href="gst-plugins-bad-libs-GstInsertbin.html">GstInsertbin</a></span><span class="refpurpose"></span>
+<span class="refentrytitle"><a href="gst-plugins-bad-libs-GstInsertbin.html">GstInsertbin</a></span><span class="refpurpose"> — A <span class="type">GstBin</span> to insertally link filter-like elements.</span>
</dt></dl></dd>
<dt><span class="chapter"><a href="base.html">GStreamer Base classes from gst-plugins-bad</a></span></dt>
<dd><dl>
<dt>
-<span class="refentrytitle"><a href="gst-plugins-bad-libs-GstAggregator.html">GstAggregator</a></span><span class="refpurpose"></span>
+<span class="refentrytitle"><a href="gst-plugins-bad-libs-GstAggregator.html">GstAggregator</a></span><span class="refpurpose"> — manages a set of pads with the purpose of
+aggregating their buffers.</span>
</dt>
<dt>
<span class="refentrytitle"><a href="gst-plugins-bad-libs-GstAggregatorPad.html">GstAggregatorPad</a></span><span class="refpurpose"></span>
@@ -94,7 +99,7 @@
<dt><span class="chapter"><a href="video.html">Video helpers and baseclasses</a></span></dt>
<dd><dl>
<dt>
-<span class="refentrytitle"><a href="gst-plugins-bad-libs-GstVideoAggregator.html">GstVideoAggregator</a></span><span class="refpurpose"></span>
+<span class="refentrytitle"><a href="gst-plugins-bad-libs-GstVideoAggregator.html">GstVideoAggregator</a></span><span class="refpurpose"> — Base class for video aggregators</span>
</dt>
<dt>
<span class="refentrytitle"><a href="gst-plugins-bad-libs-GstVideoAggregatorPad.html">GstVideoAggregatorPad</a></span><span class="refpurpose"></span>
@@ -106,22 +111,22 @@
<span class="refentrytitle"><a href="gst-plugins-bad-libs-GstGLAPI.html">GstGLAPI</a></span><span class="refpurpose"></span>
</dt>
<dt>
-<span class="refentrytitle"><a href="gst-plugins-bad-libs-gstglbasememory.html">GstGLBaseMemory</a></span><span class="refpurpose"></span>
+<span class="refentrytitle"><a href="gst-plugins-bad-libs-gstglbasememory.html">GstGLBaseMemory</a></span><span class="refpurpose"> — memory subclass for GL buffers</span>
</dt>
<dt>
-<span class="refentrytitle"><a href="GstGLBaseFilter.html">GstGLBaseFilter</a></span><span class="refpurpose"></span>
+<span class="refentrytitle"><a href="GstGLBaseFilter.html">GstGLBaseFilter</a></span><span class="refpurpose"> — <span class="type">GstBaseTransform</span> subclass for transformin OpenGL resources</span>
</dt>
<dt>
-<span class="refentrytitle"><a href="gst-plugins-bad-libs-GstGLBuffer.html">GstGLBuffer</a></span><span class="refpurpose"></span>
+<span class="refentrytitle"><a href="gst-plugins-bad-libs-GstGLBuffer.html">GstGLBuffer</a></span><span class="refpurpose"> — memory subclass for GL buffers</span>
</dt>
<dt>
-<span class="refentrytitle"><a href="GstGLBufferPool.html">GstGLBufferPool</a></span><span class="refpurpose"></span>
+<span class="refentrytitle"><a href="GstGLBufferPool.html">GstGLBufferPool</a></span><span class="refpurpose"> — buffer pool for <span class="type">GstGLMemory</span> objects</span>
</dt>
<dt>
-<span class="refentrytitle"><a href="GstGLColorConvert.html">GstGLColorConvert</a></span><span class="refpurpose"></span>
+<span class="refentrytitle"><a href="GstGLColorConvert.html">GstGLColorConvert</a></span><span class="refpurpose"> — an object that converts between color spaces/formats</span>
</dt>
<dt>
-<span class="refentrytitle"><a href="GstGLContext.html">GstGLContext</a></span><span class="refpurpose"></span>
+<span class="refentrytitle"><a href="GstGLContext.html">GstGLContext</a></span><span class="refpurpose"> — OpenGL context abstraction</span>
</dt>
<dt>
<span class="refentrytitle"><a href="gst-plugins-bad-libs-GstGLContextCocoa.html">GstGLContextCocoa</a></span><span class="refpurpose"></span>
@@ -139,7 +144,7 @@
<span class="refentrytitle"><a href="gst-plugins-bad-libs-GstGLContextWGL.html">GstGLContextWGL</a></span><span class="refpurpose"></span>
</dt>
<dt>
-<span class="refentrytitle"><a href="GstGLDisplay.html">GstGLDisplay</a></span><span class="refpurpose"></span>
+<span class="refentrytitle"><a href="GstGLDisplay.html">GstGLDisplay</a></span><span class="refpurpose"> — window system display connection abstraction</span>
</dt>
<dt>
<span class="refentrytitle"><a href="gst-plugins-bad-libs-GstEGLImageMemory.html">GstEGLImageMemory</a></span><span class="refpurpose"></span>
@@ -151,28 +156,28 @@
<span class="refentrytitle"><a href="GstGLFramebuffer.html">GstGLFramebuffer</a></span><span class="refpurpose"></span>
</dt>
<dt>
-<span class="refentrytitle"><a href="gst-plugins-bad-libs-GstGLMemory.html">GstGLMemory</a></span><span class="refpurpose"></span>
+<span class="refentrytitle"><a href="gst-plugins-bad-libs-GstGLMemory.html">GstGLMemory</a></span><span class="refpurpose"> — memory subclass for GL textures</span>
</dt>
<dt>
-<span class="refentrytitle"><a href="gst-plugins-bad-libs-gstglmemorypbo.html">GstGLMemoryPBO</a></span><span class="refpurpose"></span>
+<span class="refentrytitle"><a href="gst-plugins-bad-libs-gstglmemorypbo.html">GstGLMemoryPBO</a></span><span class="refpurpose"> — memory subclass for GL textures</span>
</dt>
<dt>
-<span class="refentrytitle"><a href="GstGLShader.html">GstGLShader</a></span><span class="refpurpose"></span>
+<span class="refentrytitle"><a href="GstGLShader.html">GstGLShader</a></span><span class="refpurpose"> — object representing an OpenGL shader program</span>
</dt>
<dt>
-<span class="refentrytitle"><a href="gst-plugins-bad-libs-GstGLSL.html">GstGLSL</a></span><span class="refpurpose"></span>
+<span class="refentrytitle"><a href="gst-plugins-bad-libs-GstGLSL.html">GstGLSL</a></span><span class="refpurpose"> — helpers for dealing with OpenGL shaders</span>
</dt>
<dt>
-<span class="refentrytitle"><a href=".html"></a></span><span class="refpurpose"></span>
+<span class="refentrytitle"><a href=".html">GstGLSLStage</a></span><span class="refpurpose"> — object for dealing with OpenGL shader stages</span>
</dt>
<dt>
<span class="refentrytitle"><a href="gst-plugins-bad-libs-GstGLSyncMeta.html">GstGLSyncMeta</a></span><span class="refpurpose"></span>
</dt>
<dt>
-<span class="refentrytitle"><a href="GstGLUpload.html">GstGLUpload</a></span><span class="refpurpose"></span>
+<span class="refentrytitle"><a href="GstGLUpload.html">GstGLUpload</a></span><span class="refpurpose"> — an object that uploads to GL textures</span>
</dt>
<dt>
-<span class="refentrytitle"><a href="GstGLWindow.html">GstGLWindow</a></span><span class="refpurpose"></span>
+<span class="refentrytitle"><a href="GstGLWindow.html">GstGLWindow</a></span><span class="refpurpose"> — window/surface abstraction</span>
</dt>
<dt>
<span class="refentrytitle"><a href="gst-plugins-bad-libs-GstGLWindowAndroid.html">GstGLWindowAndroid</a></span><span class="refpurpose"></span>
@@ -193,7 +198,7 @@
<span class="refentrytitle"><a href="gst-plugins-bad-libs-GstGLWindowX11.html">GstGLWindowX11</a></span><span class="refpurpose"></span>
</dt>
<dt>
-<span class="refentrytitle"><a href="gst-plugins-bad-libs-gstgldebug.html">OpenGL Debugging</a></span><span class="refpurpose"></span>
+<span class="refentrytitle"><a href="gst-plugins-bad-libs-OpenGL-debugging.html">OpenGL debugging</a></span><span class="refpurpose"> — helper routines for dealing with OpenGL debugging</span>
</dt>
<dt>
<span class="refentrytitle"><a href="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html">OpenGL Miscellaneous Utilities</a></span><span class="refpurpose"></span>
@@ -205,24 +210,24 @@
<dt><span class="chapter"><a href="player.html">Player Library</a></span></dt>
<dd><dl>
<dt>
-<span class="refentrytitle"><a href="gst-plugins-bad-libs-gstplayer.html">gstplayer</a></span><span class="refpurpose"></span>
+<span class="refentrytitle"><a href="gst-plugins-bad-libs-gstplayer.html">gstplayer</a></span><span class="refpurpose"> — Player</span>
</dt>
<dt>
-<span class="refentrytitle"><a href="gst-plugins-bad-libs-gstplayer-mediainfo.html">gstplayer-mediainfo</a></span><span class="refpurpose"></span>
+<span class="refentrytitle"><a href="gst-plugins-bad-libs-gstplayer-mediainfo.html">gstplayer-mediainfo</a></span><span class="refpurpose"> — Player Media Information</span>
</dt>
<dt>
-<span class="refentrytitle"><a href="gst-plugins-bad-libs-gstplayer-gmaincontextsignaldispatcher.html">gstplayer-gmaincontextsignaldispatcher</a></span><span class="refpurpose"></span>
+<span class="refentrytitle"><a href="gst-plugins-bad-libs-gstplayer-gmaincontextsignaldispatcher.html">gstplayer-gmaincontextsignaldispatcher</a></span><span class="refpurpose"> — Player GLib MainContext dispatcher</span>
</dt>
<dt>
-<span class="refentrytitle"><a href="gst-plugins-bad-libs-gstplayer-videooverlayvideorenderer.html">gstplayer-videooverlayvideorenderer</a></span><span class="refpurpose"></span>
+<span class="refentrytitle"><a href="gst-plugins-bad-libs-gstplayer-videooverlayvideorenderer.html">gstplayer-videooverlayvideorenderer</a></span><span class="refpurpose"> — Player Video Overlay Video Renderer</span>
</dt>
<dt>
-<span class="refentrytitle"><a href="gst-plugins-bad-libs-gstplayer-visualization.html">gstplayer-visualization</a></span><span class="refpurpose"></span>
+<span class="refentrytitle"><a href="gst-plugins-bad-libs-gstplayer-visualization.html">gstplayer-visualization</a></span><span class="refpurpose"> — Player Visualization</span>
</dt>
</dl></dd>
<dt><span class="chapter"><a href="ch08.html">Interfaces</a></span></dt>
<dd><dl><dt>
-<span class="refentrytitle"><a href="gst-plugins-bad-libs-GstPhotography.html">GstPhotography</a></span><span class="refpurpose"></span>
+<span class="refentrytitle"><a href="gst-plugins-bad-libs-GstPhotography.html">GstPhotography</a></span><span class="refpurpose"> — Interface for digital image capture elements</span>
</dt></dl></dd>
</dl>
</div>
diff --git a/docs/libs/html/home.png b/docs/libs/html/home.png
index 9346b33..4bf6d92 100644
--- a/docs/libs/html/home.png
+++ b/docs/libs/html/home.png
Binary files differ
diff --git a/docs/libs/html/index.html b/docs/libs/html/index.html
index ff61318..f505aba 100644
--- a/docs/libs/html/index.html
+++ b/docs/libs/html/index.html
@@ -15,7 +15,7 @@
<div>
<div><table class="navigation" id="top" width="100%" cellpadding="2" cellspacing="0"><tr><th valign="middle"><p class="title">GStreamer Bad Plugins 1.0 Library Reference Manual</p></th></tr></table></div>
<div><p class="releaseinfo">
- for GStreamer Bad Library 1.0 (1.9.1)
+ for GStreamer Bad Library 1.0 (1.9.2)
<a class="ulink" href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-bad-libs/html/" target="_top">http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-bad-libs/html/</a>.
</p></div>
</div>
@@ -32,19 +32,23 @@
<dt><span class="chapter"><a href="codecparsers.html">Bitstream parsing Library</a></span></dt>
<dd><dl>
<dt>
-<span class="refentrytitle"><a href="gst-plugins-bad-libs-h264parser.html">h264parser</a></span><span class="refpurpose"></span>
+<span class="refentrytitle"><a href="gst-plugins-bad-libs-h264parser.html">h264parser</a></span><span class="refpurpose"> — Convenience library for h264 video
+bitstream parsing.</span>
</dt>
<dt>
-<span class="refentrytitle"><a href="gst-plugins-bad-libs-jpegparser.html">jpegparser</a></span><span class="refpurpose"></span>
+<span class="refentrytitle"><a href="gst-plugins-bad-libs-jpegparser.html">jpegparser</a></span><span class="refpurpose"> — Convenience library for JPEG bitstream parsing.</span>
</dt>
<dt>
-<span class="refentrytitle"><a href="gst-plugins-bad-libs-mpegvideoparser.html">mpegvideoparser</a></span><span class="refpurpose"></span>
+<span class="refentrytitle"><a href="gst-plugins-bad-libs-mpegvideoparser.html">mpegvideoparser</a></span><span class="refpurpose"> — Convenience library for mpeg1 and 2 video
+bitstream parsing.</span>
</dt>
<dt>
-<span class="refentrytitle"><a href="gst-plugins-bad-libs-mpeg4parser.html">mpeg4parser</a></span><span class="refpurpose"></span>
+<span class="refentrytitle"><a href="gst-plugins-bad-libs-mpeg4parser.html">mpeg4parser</a></span><span class="refpurpose"> — Convenience library for parsing mpeg4 part 2 video
+bitstream.</span>
</dt>
<dt>
-<span class="refentrytitle"><a href="gst-plugins-bad-libs-vc1parser.html">vc1parser</a></span><span class="refpurpose"></span>
+<span class="refentrytitle"><a href="gst-plugins-bad-libs-vc1parser.html">vc1parser</a></span><span class="refpurpose"> — Convenience library for parsing vc1 video
+bitstream.</span>
</dt>
<dt>
<span class="refentrytitle"><a href="gst-plugins-bad-libs-gstmpegvideometa.html">gstmpegvideometa</a></span><span class="refpurpose"></span>
@@ -53,38 +57,39 @@
<dt><span class="chapter"><a href="mpegts.html">Mpeg TS helper library</a></span></dt>
<dd><dl>
<dt>
-<span class="refentrytitle"><a href="gst-plugins-bad-libs-gstmpegts.html">gstmpegts</a></span><span class="refpurpose"></span>
+<span class="refentrytitle"><a href="gst-plugins-bad-libs-Mpeg-ts-helper-library.html">Mpeg-ts helper library</a></span><span class="refpurpose"> — Mpeg-ts helper library for plugins and applications</span>
</dt>
<dt>
-<span class="refentrytitle"><a href="gst-plugins-bad-libs-gstmpegtssection.html">gstmpegtssection</a></span><span class="refpurpose"></span>
+<span class="refentrytitle"><a href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html">Base MPEG-TS sections</a></span><span class="refpurpose"> — Sections for ITU H.222.0 | ISO/IEC 13818-1</span>
</dt>
<dt>
-<span class="refentrytitle"><a href="gst-plugins-bad-libs-gstmpegtsdescriptor.html">gstmpegtsdescriptor</a></span><span class="refpurpose"></span>
+<span class="refentrytitle"><a href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html">Base MPEG-TS descriptors</a></span><span class="refpurpose"> — Descriptors for ITU H.222.0 | ISO/IEC 13818-1</span>
</dt>
<dt>
-<span class="refentrytitle"><a href="gst-plugins-bad-libs-gst-atsc-section.html">gst-atsc-section</a></span><span class="refpurpose"></span>
+<span class="refentrytitle"><a href="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html">ATSC variants of MPEG-TS sections</a></span><span class="refpurpose"> — Sections for the various ATSC specifications</span>
</dt>
<dt>
-<span class="refentrytitle"><a href="gst-plugins-bad-libs-gst-dvb-section.html">gst-dvb-section</a></span><span class="refpurpose"></span>
+<span class="refentrytitle"><a href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html">DVB variants of MPEG-TS sections</a></span><span class="refpurpose"> — Sections for the various DVB specifications</span>
</dt>
<dt>
-<span class="refentrytitle"><a href="gst-plugins-bad-libs-gst-atsc-descriptor.html">gst-atsc-descriptor</a></span><span class="refpurpose"></span>
+<span class="refentrytitle"><a href="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-descriptors.html">ATSC variants of MPEG-TS descriptors</a></span><span class="refpurpose"> — Descriptors for the various ATSC specifications</span>
</dt>
<dt>
-<span class="refentrytitle"><a href="gst-plugins-bad-libs-gst-dvb-descriptor.html">gst-dvb-descriptor</a></span><span class="refpurpose"></span>
+<span class="refentrytitle"><a href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html">DVB variants of MPEG-TS descriptors</a></span><span class="refpurpose"> — Descriptors for the various DVB specifications</span>
</dt>
<dt>
-<span class="refentrytitle"><a href="gst-plugins-bad-libs-gst-isdb-descriptor.html">gst-isdb-descriptor</a></span><span class="refpurpose"></span>
+<span class="refentrytitle"><a href="gst-plugins-bad-libs-ISDB-variants-of-MPEG-TS-descriptors.html">ISDB variants of MPEG-TS descriptors</a></span><span class="refpurpose"> — Descriptors for the various ISDB specifications</span>
</dt>
</dl></dd>
<dt><span class="chapter"><a href="tools.html">Useful elements</a></span></dt>
<dd><dl><dt>
-<span class="refentrytitle"><a href="gst-plugins-bad-libs-GstInsertbin.html">GstInsertbin</a></span><span class="refpurpose"></span>
+<span class="refentrytitle"><a href="gst-plugins-bad-libs-GstInsertbin.html">GstInsertbin</a></span><span class="refpurpose"> — A <span class="type">GstBin</span> to insertally link filter-like elements.</span>
</dt></dl></dd>
<dt><span class="chapter"><a href="base.html">GStreamer Base classes from gst-plugins-bad</a></span></dt>
<dd><dl>
<dt>
-<span class="refentrytitle"><a href="gst-plugins-bad-libs-GstAggregator.html">GstAggregator</a></span><span class="refpurpose"></span>
+<span class="refentrytitle"><a href="gst-plugins-bad-libs-GstAggregator.html">GstAggregator</a></span><span class="refpurpose"> — manages a set of pads with the purpose of
+aggregating their buffers.</span>
</dt>
<dt>
<span class="refentrytitle"><a href="gst-plugins-bad-libs-GstAggregatorPad.html">GstAggregatorPad</a></span><span class="refpurpose"></span>
@@ -93,7 +98,7 @@
<dt><span class="chapter"><a href="video.html">Video helpers and baseclasses</a></span></dt>
<dd><dl>
<dt>
-<span class="refentrytitle"><a href="gst-plugins-bad-libs-GstVideoAggregator.html">GstVideoAggregator</a></span><span class="refpurpose"></span>
+<span class="refentrytitle"><a href="gst-plugins-bad-libs-GstVideoAggregator.html">GstVideoAggregator</a></span><span class="refpurpose"> — Base class for video aggregators</span>
</dt>
<dt>
<span class="refentrytitle"><a href="gst-plugins-bad-libs-GstVideoAggregatorPad.html">GstVideoAggregatorPad</a></span><span class="refpurpose"></span>
@@ -105,22 +110,22 @@
<span class="refentrytitle"><a href="gst-plugins-bad-libs-GstGLAPI.html">GstGLAPI</a></span><span class="refpurpose"></span>
</dt>
<dt>
-<span class="refentrytitle"><a href="gst-plugins-bad-libs-gstglbasememory.html">GstGLBaseMemory</a></span><span class="refpurpose"></span>
+<span class="refentrytitle"><a href="gst-plugins-bad-libs-gstglbasememory.html">GstGLBaseMemory</a></span><span class="refpurpose"> — memory subclass for GL buffers</span>
</dt>
<dt>
-<span class="refentrytitle"><a href="GstGLBaseFilter.html">GstGLBaseFilter</a></span><span class="refpurpose"></span>
+<span class="refentrytitle"><a href="GstGLBaseFilter.html">GstGLBaseFilter</a></span><span class="refpurpose"> — <span class="type">GstBaseTransform</span> subclass for transformin OpenGL resources</span>
</dt>
<dt>
-<span class="refentrytitle"><a href="gst-plugins-bad-libs-GstGLBuffer.html">GstGLBuffer</a></span><span class="refpurpose"></span>
+<span class="refentrytitle"><a href="gst-plugins-bad-libs-GstGLBuffer.html">GstGLBuffer</a></span><span class="refpurpose"> — memory subclass for GL buffers</span>
</dt>
<dt>
-<span class="refentrytitle"><a href="GstGLBufferPool.html">GstGLBufferPool</a></span><span class="refpurpose"></span>
+<span class="refentrytitle"><a href="GstGLBufferPool.html">GstGLBufferPool</a></span><span class="refpurpose"> — buffer pool for <span class="type">GstGLMemory</span> objects</span>
</dt>
<dt>
-<span class="refentrytitle"><a href="GstGLColorConvert.html">GstGLColorConvert</a></span><span class="refpurpose"></span>
+<span class="refentrytitle"><a href="GstGLColorConvert.html">GstGLColorConvert</a></span><span class="refpurpose"> — an object that converts between color spaces/formats</span>
</dt>
<dt>
-<span class="refentrytitle"><a href="GstGLContext.html">GstGLContext</a></span><span class="refpurpose"></span>
+<span class="refentrytitle"><a href="GstGLContext.html">GstGLContext</a></span><span class="refpurpose"> — OpenGL context abstraction</span>
</dt>
<dt>
<span class="refentrytitle"><a href="gst-plugins-bad-libs-GstGLContextCocoa.html">GstGLContextCocoa</a></span><span class="refpurpose"></span>
@@ -138,7 +143,7 @@
<span class="refentrytitle"><a href="gst-plugins-bad-libs-GstGLContextWGL.html">GstGLContextWGL</a></span><span class="refpurpose"></span>
</dt>
<dt>
-<span class="refentrytitle"><a href="GstGLDisplay.html">GstGLDisplay</a></span><span class="refpurpose"></span>
+<span class="refentrytitle"><a href="GstGLDisplay.html">GstGLDisplay</a></span><span class="refpurpose"> — window system display connection abstraction</span>
</dt>
<dt>
<span class="refentrytitle"><a href="gst-plugins-bad-libs-GstEGLImageMemory.html">GstEGLImageMemory</a></span><span class="refpurpose"></span>
@@ -150,28 +155,28 @@
<span class="refentrytitle"><a href="GstGLFramebuffer.html">GstGLFramebuffer</a></span><span class="refpurpose"></span>
</dt>
<dt>
-<span class="refentrytitle"><a href="gst-plugins-bad-libs-GstGLMemory.html">GstGLMemory</a></span><span class="refpurpose"></span>
+<span class="refentrytitle"><a href="gst-plugins-bad-libs-GstGLMemory.html">GstGLMemory</a></span><span class="refpurpose"> — memory subclass for GL textures</span>
</dt>
<dt>
-<span class="refentrytitle"><a href="gst-plugins-bad-libs-gstglmemorypbo.html">GstGLMemoryPBO</a></span><span class="refpurpose"></span>
+<span class="refentrytitle"><a href="gst-plugins-bad-libs-gstglmemorypbo.html">GstGLMemoryPBO</a></span><span class="refpurpose"> — memory subclass for GL textures</span>
</dt>
<dt>
-<span class="refentrytitle"><a href="GstGLShader.html">GstGLShader</a></span><span class="refpurpose"></span>
+<span class="refentrytitle"><a href="GstGLShader.html">GstGLShader</a></span><span class="refpurpose"> — object representing an OpenGL shader program</span>
</dt>
<dt>
-<span class="refentrytitle"><a href="gst-plugins-bad-libs-GstGLSL.html">GstGLSL</a></span><span class="refpurpose"></span>
+<span class="refentrytitle"><a href="gst-plugins-bad-libs-GstGLSL.html">GstGLSL</a></span><span class="refpurpose"> — helpers for dealing with OpenGL shaders</span>
</dt>
<dt>
-<span class="refentrytitle"><a href=".html"></a></span><span class="refpurpose"></span>
+<span class="refentrytitle"><a href=".html">GstGLSLStage</a></span><span class="refpurpose"> — object for dealing with OpenGL shader stages</span>
</dt>
<dt>
<span class="refentrytitle"><a href="gst-plugins-bad-libs-GstGLSyncMeta.html">GstGLSyncMeta</a></span><span class="refpurpose"></span>
</dt>
<dt>
-<span class="refentrytitle"><a href="GstGLUpload.html">GstGLUpload</a></span><span class="refpurpose"></span>
+<span class="refentrytitle"><a href="GstGLUpload.html">GstGLUpload</a></span><span class="refpurpose"> — an object that uploads to GL textures</span>
</dt>
<dt>
-<span class="refentrytitle"><a href="GstGLWindow.html">GstGLWindow</a></span><span class="refpurpose"></span>
+<span class="refentrytitle"><a href="GstGLWindow.html">GstGLWindow</a></span><span class="refpurpose"> — window/surface abstraction</span>
</dt>
<dt>
<span class="refentrytitle"><a href="gst-plugins-bad-libs-GstGLWindowAndroid.html">GstGLWindowAndroid</a></span><span class="refpurpose"></span>
@@ -192,7 +197,7 @@
<span class="refentrytitle"><a href="gst-plugins-bad-libs-GstGLWindowX11.html">GstGLWindowX11</a></span><span class="refpurpose"></span>
</dt>
<dt>
-<span class="refentrytitle"><a href="gst-plugins-bad-libs-gstgldebug.html">OpenGL Debugging</a></span><span class="refpurpose"></span>
+<span class="refentrytitle"><a href="gst-plugins-bad-libs-OpenGL-debugging.html">OpenGL debugging</a></span><span class="refpurpose"> — helper routines for dealing with OpenGL debugging</span>
</dt>
<dt>
<span class="refentrytitle"><a href="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html">OpenGL Miscellaneous Utilities</a></span><span class="refpurpose"></span>
@@ -204,29 +209,30 @@
<dt><span class="chapter"><a href="player.html">Player Library</a></span></dt>
<dd><dl>
<dt>
-<span class="refentrytitle"><a href="gst-plugins-bad-libs-gstplayer.html">gstplayer</a></span><span class="refpurpose"></span>
+<span class="refentrytitle"><a href="gst-plugins-bad-libs-gstplayer.html">gstplayer</a></span><span class="refpurpose"> — Player</span>
</dt>
<dt>
-<span class="refentrytitle"><a href="gst-plugins-bad-libs-gstplayer-mediainfo.html">gstplayer-mediainfo</a></span><span class="refpurpose"></span>
+<span class="refentrytitle"><a href="gst-plugins-bad-libs-gstplayer-mediainfo.html">gstplayer-mediainfo</a></span><span class="refpurpose"> — Player Media Information</span>
</dt>
<dt>
-<span class="refentrytitle"><a href="gst-plugins-bad-libs-gstplayer-gmaincontextsignaldispatcher.html">gstplayer-gmaincontextsignaldispatcher</a></span><span class="refpurpose"></span>
+<span class="refentrytitle"><a href="gst-plugins-bad-libs-gstplayer-gmaincontextsignaldispatcher.html">gstplayer-gmaincontextsignaldispatcher</a></span><span class="refpurpose"> — Player GLib MainContext dispatcher</span>
</dt>
<dt>
-<span class="refentrytitle"><a href="gst-plugins-bad-libs-gstplayer-videooverlayvideorenderer.html">gstplayer-videooverlayvideorenderer</a></span><span class="refpurpose"></span>
+<span class="refentrytitle"><a href="gst-plugins-bad-libs-gstplayer-videooverlayvideorenderer.html">gstplayer-videooverlayvideorenderer</a></span><span class="refpurpose"> — Player Video Overlay Video Renderer</span>
</dt>
<dt>
-<span class="refentrytitle"><a href="gst-plugins-bad-libs-gstplayer-visualization.html">gstplayer-visualization</a></span><span class="refpurpose"></span>
+<span class="refentrytitle"><a href="gst-plugins-bad-libs-gstplayer-visualization.html">gstplayer-visualization</a></span><span class="refpurpose"> — Player Visualization</span>
</dt>
</dl></dd>
<dt><span class="chapter"><a href="ch08.html">Interfaces</a></span></dt>
<dd><dl><dt>
-<span class="refentrytitle"><a href="gst-plugins-bad-libs-GstPhotography.html">GstPhotography</a></span><span class="refpurpose"></span>
+<span class="refentrytitle"><a href="gst-plugins-bad-libs-GstPhotography.html">GstPhotography</a></span><span class="refpurpose"> — Interface for digital image capture elements</span>
</dt></dl></dd>
</dl></dd>
<dt><span class="part"><a href="gstreamer-libs-hierarchy.html">II. Object Hierarchy</a></span></dt>
<dt><span class="index"><a href="api-index-full.html">Index</a></span></dt>
<dt><span class="index"><a href="api-index-deprecated.html">Index of deprecated API</a></span></dt>
+<dt><span class="glossary"><a href="annotation-glossary.html">Annotation Glossary</a></span></dt>
</dl></div>
</div>
<div class="footer">
diff --git a/docs/libs/html/left-insensitive.png b/docs/libs/html/left-insensitive.png
index 3269393..82cba0a 100644
--- a/docs/libs/html/left-insensitive.png
+++ b/docs/libs/html/left-insensitive.png
Binary files differ
diff --git a/docs/libs/html/left.png b/docs/libs/html/left.png
index 2abde03..8444ec0 100644
--- a/docs/libs/html/left.png
+++ b/docs/libs/html/left.png
Binary files differ
diff --git a/docs/libs/html/mpegts.html b/docs/libs/html/mpegts.html
index b91dcb7..3850144 100644
--- a/docs/libs/html/mpegts.html
+++ b/docs/libs/html/mpegts.html
@@ -7,7 +7,7 @@
<link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Library Reference Manual">
<link rel="up" href="gstreamer-plugins-bad.html" title="Part I. GStreamer Bad Plugins Libraries">
<link rel="prev" href="gst-plugins-bad-libs-gstmpegvideometa.html" title="gstmpegvideometa">
-<link rel="next" href="gst-plugins-bad-libs-gstmpegts.html" title="gstmpegts">
+<link rel="next" href="gst-plugins-bad-libs-Mpeg-ts-helper-library.html" title="Mpeg-ts helper library">
<meta name="generator" content="GTK-Doc V1.25 (XML mode)">
<link rel="stylesheet" href="style.css" type="text/css">
</head>
@@ -17,35 +17,35 @@
<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
<td><a accesskey="u" href="gstreamer-plugins-bad.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
<td><a accesskey="p" href="gst-plugins-bad-libs-gstmpegvideometa.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="gst-plugins-bad-libs-gstmpegts.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+<td><a accesskey="n" href="gst-plugins-bad-libs-Mpeg-ts-helper-library.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
</tr></table>
<div class="chapter">
<div class="titlepage"><div><div><h2 class="title">
<a name="mpegts"></a>Mpeg TS helper library</h2></div></div></div>
<div class="toc"><dl class="toc">
<dt>
-<span class="refentrytitle"><a href="gst-plugins-bad-libs-gstmpegts.html">gstmpegts</a></span><span class="refpurpose"></span>
+<span class="refentrytitle"><a href="gst-plugins-bad-libs-Mpeg-ts-helper-library.html">Mpeg-ts helper library</a></span><span class="refpurpose"> — Mpeg-ts helper library for plugins and applications</span>
</dt>
<dt>
-<span class="refentrytitle"><a href="gst-plugins-bad-libs-gstmpegtssection.html">gstmpegtssection</a></span><span class="refpurpose"></span>
+<span class="refentrytitle"><a href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html">Base MPEG-TS sections</a></span><span class="refpurpose"> — Sections for ITU H.222.0 | ISO/IEC 13818-1</span>
</dt>
<dt>
-<span class="refentrytitle"><a href="gst-plugins-bad-libs-gstmpegtsdescriptor.html">gstmpegtsdescriptor</a></span><span class="refpurpose"></span>
+<span class="refentrytitle"><a href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html">Base MPEG-TS descriptors</a></span><span class="refpurpose"> — Descriptors for ITU H.222.0 | ISO/IEC 13818-1</span>
</dt>
<dt>
-<span class="refentrytitle"><a href="gst-plugins-bad-libs-gst-atsc-section.html">gst-atsc-section</a></span><span class="refpurpose"></span>
+<span class="refentrytitle"><a href="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html">ATSC variants of MPEG-TS sections</a></span><span class="refpurpose"> — Sections for the various ATSC specifications</span>
</dt>
<dt>
-<span class="refentrytitle"><a href="gst-plugins-bad-libs-gst-dvb-section.html">gst-dvb-section</a></span><span class="refpurpose"></span>
+<span class="refentrytitle"><a href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html">DVB variants of MPEG-TS sections</a></span><span class="refpurpose"> — Sections for the various DVB specifications</span>
</dt>
<dt>
-<span class="refentrytitle"><a href="gst-plugins-bad-libs-gst-atsc-descriptor.html">gst-atsc-descriptor</a></span><span class="refpurpose"></span>
+<span class="refentrytitle"><a href="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-descriptors.html">ATSC variants of MPEG-TS descriptors</a></span><span class="refpurpose"> — Descriptors for the various ATSC specifications</span>
</dt>
<dt>
-<span class="refentrytitle"><a href="gst-plugins-bad-libs-gst-dvb-descriptor.html">gst-dvb-descriptor</a></span><span class="refpurpose"></span>
+<span class="refentrytitle"><a href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html">DVB variants of MPEG-TS descriptors</a></span><span class="refpurpose"> — Descriptors for the various DVB specifications</span>
</dt>
<dt>
-<span class="refentrytitle"><a href="gst-plugins-bad-libs-gst-isdb-descriptor.html">gst-isdb-descriptor</a></span><span class="refpurpose"></span>
+<span class="refentrytitle"><a href="gst-plugins-bad-libs-ISDB-variants-of-MPEG-TS-descriptors.html">ISDB variants of MPEG-TS descriptors</a></span><span class="refpurpose"> — Descriptors for the various ISDB specifications</span>
</dt>
</dl></div>
<p>
diff --git a/docs/libs/html/player.html b/docs/libs/html/player.html
index bf84f65..8835c9b 100644
--- a/docs/libs/html/player.html
+++ b/docs/libs/html/player.html
@@ -24,19 +24,19 @@
<a name="player"></a>Player Library</h2></div></div></div>
<div class="toc"><dl class="toc">
<dt>
-<span class="refentrytitle"><a href="gst-plugins-bad-libs-gstplayer.html">gstplayer</a></span><span class="refpurpose"></span>
+<span class="refentrytitle"><a href="gst-plugins-bad-libs-gstplayer.html">gstplayer</a></span><span class="refpurpose"> — Player</span>
</dt>
<dt>
-<span class="refentrytitle"><a href="gst-plugins-bad-libs-gstplayer-mediainfo.html">gstplayer-mediainfo</a></span><span class="refpurpose"></span>
+<span class="refentrytitle"><a href="gst-plugins-bad-libs-gstplayer-mediainfo.html">gstplayer-mediainfo</a></span><span class="refpurpose"> — Player Media Information</span>
</dt>
<dt>
-<span class="refentrytitle"><a href="gst-plugins-bad-libs-gstplayer-gmaincontextsignaldispatcher.html">gstplayer-gmaincontextsignaldispatcher</a></span><span class="refpurpose"></span>
+<span class="refentrytitle"><a href="gst-plugins-bad-libs-gstplayer-gmaincontextsignaldispatcher.html">gstplayer-gmaincontextsignaldispatcher</a></span><span class="refpurpose"> — Player GLib MainContext dispatcher</span>
</dt>
<dt>
-<span class="refentrytitle"><a href="gst-plugins-bad-libs-gstplayer-videooverlayvideorenderer.html">gstplayer-videooverlayvideorenderer</a></span><span class="refpurpose"></span>
+<span class="refentrytitle"><a href="gst-plugins-bad-libs-gstplayer-videooverlayvideorenderer.html">gstplayer-videooverlayvideorenderer</a></span><span class="refpurpose"> — Player Video Overlay Video Renderer</span>
</dt>
<dt>
-<span class="refentrytitle"><a href="gst-plugins-bad-libs-gstplayer-visualization.html">gstplayer-visualization</a></span><span class="refpurpose"></span>
+<span class="refentrytitle"><a href="gst-plugins-bad-libs-gstplayer-visualization.html">gstplayer-visualization</a></span><span class="refpurpose"> — Player Visualization</span>
</dt>
</dl></div>
</div>
diff --git a/docs/libs/html/right-insensitive.png b/docs/libs/html/right-insensitive.png
index 4c95785..7a90b99 100644
--- a/docs/libs/html/right-insensitive.png
+++ b/docs/libs/html/right-insensitive.png
Binary files differ
diff --git a/docs/libs/html/right.png b/docs/libs/html/right.png
index 76260ec..55f3359 100644
--- a/docs/libs/html/right.png
+++ b/docs/libs/html/right.png
Binary files differ
diff --git a/docs/libs/html/tools.html b/docs/libs/html/tools.html
index 075787c..f47790c 100644
--- a/docs/libs/html/tools.html
+++ b/docs/libs/html/tools.html
@@ -6,7 +6,7 @@
<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
<link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Library Reference Manual">
<link rel="up" href="gstreamer-plugins-bad.html" title="Part I. GStreamer Bad Plugins Libraries">
-<link rel="prev" href="gst-plugins-bad-libs-gst-isdb-descriptor.html" title="gst-isdb-descriptor">
+<link rel="prev" href="gst-plugins-bad-libs-ISDB-variants-of-MPEG-TS-descriptors.html" title="ISDB variants of MPEG-TS descriptors">
<link rel="next" href="gst-plugins-bad-libs-GstInsertbin.html" title="GstInsertbin">
<meta name="generator" content="GTK-Doc V1.25 (XML mode)">
<link rel="stylesheet" href="style.css" type="text/css">
@@ -16,14 +16,14 @@
<td width="100%" align="left" class="shortcuts"></td>
<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
<td><a accesskey="u" href="gstreamer-plugins-bad.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
-<td><a accesskey="p" href="gst-plugins-bad-libs-gst-isdb-descriptor.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="p" href="gst-plugins-bad-libs-ISDB-variants-of-MPEG-TS-descriptors.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
<td><a accesskey="n" href="gst-plugins-bad-libs-GstInsertbin.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
</tr></table>
<div class="chapter">
<div class="titlepage"><div><div><h2 class="title">
<a name="tools"></a>Useful elements</h2></div></div></div>
<div class="toc"><dl class="toc"><dt>
-<span class="refentrytitle"><a href="gst-plugins-bad-libs-GstInsertbin.html">GstInsertbin</a></span><span class="refpurpose"></span>
+<span class="refentrytitle"><a href="gst-plugins-bad-libs-GstInsertbin.html">GstInsertbin</a></span><span class="refpurpose"> — A <span class="type">GstBin</span> to insertally link filter-like elements.</span>
</dt></dl></div>
</div>
<div class="footer">
diff --git a/docs/libs/html/up-insensitive.png b/docs/libs/html/up-insensitive.png
index f404986..fdb8cc7 100644
--- a/docs/libs/html/up-insensitive.png
+++ b/docs/libs/html/up-insensitive.png
Binary files differ
diff --git a/docs/libs/html/up.png b/docs/libs/html/up.png
index 80b4b37..c1aad52 100644
--- a/docs/libs/html/up.png
+++ b/docs/libs/html/up.png
Binary files differ
diff --git a/docs/libs/html/video.html b/docs/libs/html/video.html
index fc428a7..2d591f4 100644
--- a/docs/libs/html/video.html
+++ b/docs/libs/html/video.html
@@ -24,7 +24,7 @@
<a name="video"></a>Video helpers and baseclasses</h2></div></div></div>
<div class="toc"><dl class="toc">
<dt>
-<span class="refentrytitle"><a href="gst-plugins-bad-libs-GstVideoAggregator.html">GstVideoAggregator</a></span><span class="refpurpose"></span>
+<span class="refentrytitle"><a href="gst-plugins-bad-libs-GstVideoAggregator.html">GstVideoAggregator</a></span><span class="refpurpose"> — Base class for video aggregators</span>
</dt>
<dt>
<span class="refentrytitle"><a href="gst-plugins-bad-libs-GstVideoAggregatorPad.html">GstVideoAggregatorPad</a></span><span class="refpurpose"></span>
diff --git a/docs/plugins/Makefile.in b/docs/plugins/Makefile.in
index 7363cce..89de720 100644
--- a/docs/plugins/Makefile.in
+++ b/docs/plugins/Makefile.in
@@ -318,6 +318,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -367,6 +369,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/docs/plugins/gst-plugins-bad-plugins-docs.sgml b/docs/plugins/gst-plugins-bad-plugins-docs.sgml
index 662fd79..dea2355 100644
--- a/docs/plugins/gst-plugins-bad-plugins-docs.sgml
+++ b/docs/plugins/gst-plugins-bad-plugins-docs.sgml
@@ -23,6 +23,7 @@
<xi:include href="xml/element-assrender.xml" />
<xi:include href="xml/element-audiointerleave.xml" />
<xi:include href="xml/element-audiomixer.xml" />
+ <xi:include href="xml/element-audioparse.xml" />
<xi:include href="xml/element-autoconvert.xml" />
<xi:include href="xml/element-bs2b.xml" />
<xi:include href="xml/element-bulge.xml" />
@@ -57,6 +58,52 @@
<xi:include href="xml/element-fisheye.xml" />
<xi:include href="xml/element-fpsdisplaysink.xml" />
<xi:include href="xml/element-gaussianblur.xml" />
+ <xi:include href="xml/element-glcolorbalance.xml" />
+ <xi:include href="xml/element-glcolorconvert.xml" />
+ <xi:include href="xml/element-glcolorscale.xml" />
+ <xi:include href="xml/element-gldeinterlace.xml" />
+ <xi:include href="xml/element-gldifferencematte.xml" />
+ <xi:include href="xml/element-gldownload.xml" />
+ <xi:include href="xml/element-gleffects_blur.xml" />
+ <xi:include href="xml/element-gleffects_bulge.xml" />
+ <xi:include href="xml/element-gleffects_fisheye.xml" />
+ <xi:include href="xml/element-gleffects_glow.xml" />
+ <xi:include href="xml/element-gleffects_heat.xml" />
+ <xi:include href="xml/element-gleffects_identity.xml" />
+ <xi:include href="xml/element-gleffects_laplacian.xml" />
+ <xi:include href="xml/element-gleffects_lumaxpro.xml" />
+ <xi:include href="xml/element-gleffects_mirror.xml" />
+ <xi:include href="xml/element-gleffects_sepia.xml" />
+ <xi:include href="xml/element-gleffects_sin.xml" />
+ <xi:include href="xml/element-gleffects_sobel.xml" />
+ <xi:include href="xml/element-gleffects_square.xml" />
+ <xi:include href="xml/element-gleffects_squeeze.xml" />
+ <xi:include href="xml/element-gleffects_stretch.xml" />
+ <xi:include href="xml/element-gleffects_tunnel.xml" />
+ <xi:include href="xml/element-gleffects_twirl.xml" />
+ <xi:include href="xml/element-gleffects.xml" />
+ <xi:include href="xml/element-gleffects_xpro.xml" />
+ <xi:include href="xml/element-gleffects_xray.xml" />
+ <xi:include href="xml/element-glfilterapp.xml" />
+ <xi:include href="xml/element-glfilterbin.xml" />
+ <xi:include href="xml/element-glfiltercube.xml" />
+ <xi:include href="xml/element-glfilterglass.xml" />
+ <xi:include href="xml/element-glimagesinkelement.xml" />
+ <xi:include href="xml/element-glimagesink.xml" />
+ <xi:include href="xml/element-glmixerbin.xml" />
+ <xi:include href="xml/element-glmosaic.xml" />
+ <xi:include href="xml/element-gloverlay.xml" />
+ <xi:include href="xml/element-glshader.xml" />
+ <xi:include href="xml/element-glsinkbin.xml" />
+ <xi:include href="xml/element-glsrcbin.xml" />
+ <xi:include href="xml/element-glstereomix.xml" />
+ <xi:include href="xml/element-glstereosplit.xml" />
+ <xi:include href="xml/element-gltestsrc.xml" />
+ <xi:include href="xml/element-gltransformation.xml" />
+ <xi:include href="xml/element-glupload.xml" />
+ <xi:include href="xml/element-glvideomixerelement.xml" />
+ <xi:include href="xml/element-glvideomixer.xml" />
+ <xi:include href="xml/element-glviewconvert.xml" />
<xi:include href="xml/element-jpegparse.xml" />
<xi:include href="xml/element-kaleidoscope.xml" />
<xi:include href="xml/element-liveadder.xml" />
@@ -75,6 +122,8 @@
<xi:include href="xml/element-openalsink.xml" />
<xi:include href="xml/element-pcapparse.xml" />
<xi:include href="xml/element-pinch.xml" />
+ <xi:include href="xml/element-rawaudioparse.xml" />
+ <xi:include href="xml/element-rawvideoparse.xml" />
<xi:include href="xml/element-rfbsrc.xml" />
<xi:include href="xml/element-rtmpsink.xml" />
<xi:include href="xml/element-rtmpsrc.xml" />
@@ -93,6 +142,8 @@
<xi:include href="xml/element-opencvtextoverlay.xml" />
<xi:include href="xml/element-tunnel.xml" />
<xi:include href="xml/element-twirl.xml" />
+ <xi:include href="xml/element-unalignedaudioparse.xml" />
+ <xi:include href="xml/element-unalignedvideoparse.xml" />
<xi:include href="xml/element-videoparse.xml" />
<xi:include href="xml/element-waterripple.xml" />
<xi:include href="xml/element-zbar.xml" />
@@ -138,6 +189,7 @@
<xi:include href="xml/plugin-neon.xml" />
<xi:include href="xml/plugin-ofa.xml" />
<xi:include href="xml/plugin-openal.xml" />
+ <xi:include href="xml/plugin-opengl.xml" />
<xi:include href="xml/plugin-opencv.xml" />
<xi:include href="xml/plugin-pcapparse.xml" />
<xi:include href="xml/plugin-rawparse.xml" />
diff --git a/docs/plugins/gst-plugins-bad-plugins-sections.txt b/docs/plugins/gst-plugins-bad-plugins-sections.txt
index 386658a..ba933c1 100644
--- a/docs/plugins/gst-plugins-bad-plugins-sections.txt
+++ b/docs/plugins/gst-plugins-bad-plugins-sections.txt
@@ -31,6 +31,22 @@
</SECTION>
<SECTION>
+<FILE>element-audioparse</FILE>
+<TITLE>audioparse</TITLE>
+GstAudioParse
+<SUBSECTION Standard>
+GstAudioParseClass
+GST_AUDIO_PARSE
+GST_AUDIO_PARSE_CAST
+GST_IS_AUDIO_PARSE
+GST_AUDIO_PARSE_CLASS
+GST_IS_AUDIO_PARSE_CLASS
+GST_TYPE_AUDIO_PARSE
+<SUBSECTION Private>
+gst_audio_parse_get_type
+</SECTION>
+
+<SECTION>
<FILE>element-dvbbasebin</FILE>
<TITLE>dvbbasebin</TITLE>
GstBaseBin
@@ -3892,6 +3908,22 @@
</SECTION>
<SECTION>
+<FILE>element-unalignedvideoparse</FILE>
+<TITLE>unalignedvideoparse</TITLE>
+GstUnalignedVideoParse
+<SUBSECTION Standard>
+GstUnalignedVideoParseClass
+GST_UNALIGNED_VIDEO_PARSE
+GST_UNALIGNED_VIDEO_PARSE_CAST
+GST_IS_UNALIGNED_VIDEO_PARSE
+GST_UNALIGNED_VIDEO_PARSE_CLASS
+GST_IS_UNALIGNED_VIDEO_PARSE_CLASS
+GST_TYPE_UNALIGNED_VIDEO_PARSE
+<SUBSECTION Private>
+gst_unaligned_video_parse_get_type
+</SECTION>
+
+<SECTION>
<FILE>element-uvch264mjpgdemux</FILE>
<TITLE>uvch264mjpgdemux</TITLE>
GstUvcH264MjpgDemux
@@ -4052,6 +4084,38 @@
</SECTION>
<SECTION>
+<FILE>element-rawaudioparse</FILE>
+<TITLE>rawaudioparse</TITLE>
+GstRawAudioParse
+<SUBSECTION Standard>
+GstRawAudioParseClass
+GST_RAW_AUDIO_PARSE
+GST_RAW_AUDIO_PARSE_CAST
+GST_IS_AUDIO_PARSE
+GST_RAW_AUDIO_PARSE_CLASS
+GST_IS_AUDIO_PARSE_CLASS
+GST_TYPE_AUDIO_PARSE
+<SUBSECTION Private>
+gst_raw_audio_parse_get_type
+</SECTION>
+
+<SECTION>
+<FILE>element-rawvideoparse</FILE>
+<TITLE>rawvideoparse</TITLE>
+GstRawVideoParse
+<SUBSECTION Standard>
+GstRawVideoParseClass
+GST_RAW_VIDEO_PARSE
+GST_RAW_VIDEO_PARSE_CAST
+GST_IS_VIDEO_PARSE
+GST_RAW_VIDEO_PARSE_CLASS
+GST_IS_VIDEO_PARSE_CLASS
+GST_TYPE_VIDEO_PARSE
+<SUBSECTION Private>
+gst_raw_video_parse_get_type
+</SECTION>
+
+<SECTION>
<FILE>element-videosegmentclip</FILE>
<TITLE>videosegmentclip</TITLE>
GstVideoSegmentClip
diff --git a/docs/plugins/gst-plugins-bad-plugins.args b/docs/plugins/gst-plugins-bad-plugins.args
index ce94f99..25b4ac0 100644
--- a/docs/plugins/gst-plugins-bad-plugins.args
+++ b/docs/plugins/gst-plugins-bad-plugins.args
@@ -58965,7 +58965,7 @@
<FLAGS>rw</FLAGS>
<NICK>Eyes profile</NICK>
<BLURB>Location of Haar cascade file to use for eye-pair detection.</BLURB>
-<DEFAULT>"/usr/share/opencv/haarcascades/haarcascade_mcs_eyepair_small.xml"</DEFAULT>
+<DEFAULT>"/usr/share/OpenCV/haarcascades/haarcascade_mcs_eyepair_small.xml"</DEFAULT>
</ARG>
<ARG>
@@ -59015,7 +59015,7 @@
<FLAGS>rw</FLAGS>
<NICK>Mouth profile</NICK>
<BLURB>Location of Haar cascade file to use for mouth detection.</BLURB>
-<DEFAULT>"/usr/share/opencv/haarcascades/haarcascade_mcs_mouth.xml"</DEFAULT>
+<DEFAULT>"/usr/share/OpenCV/haarcascades/haarcascade_mcs_mouth.xml"</DEFAULT>
</ARG>
<ARG>
@@ -59025,7 +59025,7 @@
<FLAGS>rw</FLAGS>
<NICK>Nose profile</NICK>
<BLURB>Location of Haar cascade file to use for nose detection.</BLURB>
-<DEFAULT>"/usr/share/opencv/haarcascades/haarcascade_mcs_nose.xml"</DEFAULT>
+<DEFAULT>"/usr/share/OpenCV/haarcascades/haarcascade_mcs_nose.xml"</DEFAULT>
</ARG>
<ARG>
@@ -59035,7 +59035,7 @@
<FLAGS>rw</FLAGS>
<NICK>Face profile</NICK>
<BLURB>Location of Haar cascade file to use for face detection.</BLURB>
-<DEFAULT>"/usr/share/opencv/haarcascades/haarcascade_frontalface_default.xml"</DEFAULT>
+<DEFAULT>"/usr/share/OpenCV/haarcascades/haarcascade_frontalface_default.xml"</DEFAULT>
</ARG>
<ARG>
@@ -59075,7 +59075,7 @@
<FLAGS>rw</FLAGS>
<NICK>Profile</NICK>
<BLURB>Location of Haar cascade file to use for face blurion.</BLURB>
-<DEFAULT>"/usr/share/opencv/haarcascades/haarcascade_frontalface_default.xml"</DEFAULT>
+<DEFAULT>"/usr/share/OpenCV/haarcascades/haarcascade_frontalface_default.xml"</DEFAULT>
</ARG>
<ARG>
@@ -60041,11 +60041,11 @@
<ARG>
<NAME>GstDashDemux::max-bitrate</NAME>
<TYPE>guint</TYPE>
-<RANGE>>= 1000</RANGE>
+<RANGE></RANGE>
<FLAGS>rw</FLAGS>
<NICK>Max bitrate</NICK>
-<BLURB>Max of bitrate supported by target decoder.</BLURB>
-<DEFAULT>24000000</DEFAULT>
+<BLURB>Max of bitrate supported by target video decoder (0 = no maximum).</BLURB>
+<DEFAULT>0</DEFAULT>
</ARG>
<ARG>
@@ -60069,6 +60069,36 @@
</ARG>
<ARG>
+<NAME>GstDashDemux::max-video-framerate</NAME>
+<TYPE>GstFraction</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Max video framerate</NICK>
+<BLURB>Max video framerate to select (0/1 = no maximum).</BLURB>
+<DEFAULT></DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstDashDemux::max-video-height</NAME>
+<TYPE>guint</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Max video height</NICK>
+<BLURB>Max video height to select (0 = no maximum).</BLURB>
+<DEFAULT>0</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstDashDemux::max-video-width</NAME>
+<TYPE>guint</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Max video width</NICK>
+<BLURB>Max video width to select (0 = no maximum).</BLURB>
+<DEFAULT>0</DEFAULT>
+</ARG>
+
+<ARG>
<NAME>GstSkinDetect::method</NAME>
<TYPE>GstSkindetectMethod</TYPE>
<RANGE></RANGE>
@@ -67841,6 +67871,16 @@
</ARG>
<ARG>
+<NAME>GstDecklinkVideoSrc::timecode-format</NAME>
+<TYPE>GstDecklinkTimecodeFormat</TYPE>
+<RANGE></RANGE>
+<FLAGS>rwx</FLAGS>
+<NICK>Timecode format</NICK>
+<BLURB>Timecode format type to use for input.</BLURB>
+<DEFAULT>bmdTimecodeRP188Any</DEFAULT>
+</ARG>
+
+<ARG>
<NAME>GstDecklinkVideoSink::device-number</NAME>
<TYPE>gint</TYPE>
<RANGE>>= 0</RANGE>
@@ -67871,6 +67911,16 @@
</ARG>
<ARG>
+<NAME>GstDecklinkVideoSink::timecode-format</NAME>
+<TYPE>GstDecklinkTimecodeFormat</TYPE>
+<RANGE></RANGE>
+<FLAGS>rwx</FLAGS>
+<NICK>Timecode format</NICK>
+<BLURB>Timecode format type to use for playback.</BLURB>
+<DEFAULT>bmdTimecodeRP188Any</DEFAULT>
+</ARG>
+
+<ARG>
<NAME>GstDecklinkAudioSrc::alignment-threshold</NAME>
<TYPE>guint64</TYPE>
<RANGE><= 18446744073709551614</RANGE>
@@ -68052,7 +68102,7 @@
<ARG>
<NAME>GstOpenh264Enc::slice-mode</NAME>
-<TYPE>GstOpenh264encSliceModes</TYPE>
+<TYPE>GstOpenh264EncSliceModes</TYPE>
<RANGE></RANGE>
<FLAGS>rw</FLAGS>
<NICK>Slice mode</NICK>
@@ -72201,6 +72251,16 @@
</ARG>
<ARG>
+<NAME>GstWebrtcDsp::delay-agnostic</NAME>
+<TYPE>gboolean</TYPE>
+<RANGE></RANGE>
+<FLAGS>rwx</FLAGS>
+<NICK>Delay Agnostic</NICK>
+<BLURB>Enable or disable the delay agnostic mode.</BLURB>
+<DEFAULT>FALSE</DEFAULT>
+</ARG>
+
+<ARG>
<NAME>GstDC1394Src::dma</NAME>
<TYPE>guint</TYPE>
<RANGE>>= 1</RANGE>
@@ -72240,3 +72300,253 @@
<DEFAULT>-1</DEFAULT>
</ARG>
+<ARG>
+<NAME>GstTimeCodeWait::target-timecode</NAME>
+<TYPE>GstVideoTimeCode*</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Target timecode (object)</NICK>
+<BLURB>Timecode to wait for (object).</BLURB>
+<DEFAULT></DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstTimeCodeWait::target-timecode-string</NAME>
+<TYPE>gchar*</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Target timecode (string)</NICK>
+<BLURB>Timecode to wait for (string). Must take the form 00:00:00:00.</BLURB>
+<DEFAULT>"00:00:00:00"</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstTimeCodeStamper::daily-jam</NAME>
+<TYPE>GDateTime*</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Daily jam</NICK>
+<BLURB>The daily jam of the timecode.</BLURB>
+<DEFAULT></DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstTimeCodeStamper::drop-frame</NAME>
+<TYPE>gboolean</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Override existing timecode</NICK>
+<BLURB>Use drop-frame timecodes for 29.97 and 59.94 FPS.</BLURB>
+<DEFAULT>FALSE</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstTimeCodeStamper::override-existing</NAME>
+<TYPE>gboolean</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Override existing timecode</NICK>
+<BLURB>If set to true, any existing timecode will be overridden.</BLURB>
+<DEFAULT>FALSE</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstTimeCodeStamper::source-clock</NAME>
+<TYPE>GstClock*</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Source clock to use for first timecode</NICK>
+<BLURB>If unset, the timecode will refer to the stream time.</BLURB>
+<DEFAULT></DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstRawVideoParse::format</NAME>
+<TYPE>GstVideoFormat</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Format</NICK>
+<BLURB>Format of frames in raw stream.</BLURB>
+<DEFAULT>GST_VIDEO_FORMAT_I420</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstRawVideoParse::frame-stride</NAME>
+<TYPE>guint</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Frame stride</NICK>
+<BLURB>Stride between whole frames (0 = frames are tightly packed together).</BLURB>
+<DEFAULT>0</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstRawVideoParse::framerate</NAME>
+<TYPE>GstFraction</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Frame rate</NICK>
+<BLURB>Rate of frames in raw stream.</BLURB>
+<DEFAULT></DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstRawVideoParse::height</NAME>
+<TYPE>gint</TYPE>
+<RANGE>>= 0</RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Height</NICK>
+<BLURB>Height of frames in raw stream.</BLURB>
+<DEFAULT>240</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstRawVideoParse::interlaced</NAME>
+<TYPE>gboolean</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Interlaced flag</NICK>
+<BLURB>True if frames in raw stream are interlaced.</BLURB>
+<DEFAULT>FALSE</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstRawVideoParse::pixel-aspect-ratio</NAME>
+<TYPE>GstFraction</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Pixel aspect ratio</NICK>
+<BLURB>Pixel aspect ratio of frames in raw stream.</BLURB>
+<DEFAULT></DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstRawVideoParse::plane-offsets</NAME>
+<TYPE>GValueArray*</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Plane offsets</NICK>
+<BLURB>Offsets of the planets in bytes.</BLURB>
+<DEFAULT></DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstRawVideoParse::plane-strides</NAME>
+<TYPE>GValueArray*</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Plane strides</NICK>
+<BLURB>Strides of the planets in bytes.</BLURB>
+<DEFAULT></DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstRawVideoParse::top-field-first</NAME>
+<TYPE>gboolean</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Top field first</NICK>
+<BLURB>True if top field in frames in raw stream come first (not used if frames aren't interlaced).</BLURB>
+<DEFAULT>FALSE</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstRawVideoParse::width</NAME>
+<TYPE>gint</TYPE>
+<RANGE>>= 0</RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Width</NICK>
+<BLURB>Width of frames in raw stream.</BLURB>
+<DEFAULT>320</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstRawAudioParse::channel-positions</NAME>
+<TYPE>GValueArray*</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Channel positions</NICK>
+<BLURB>Channel positions used on the output.</BLURB>
+<DEFAULT></DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstRawAudioParse::format</NAME>
+<TYPE>GstRawAudioParseFormat</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Format</NICK>
+<BLURB>Format of the raw audio stream.</BLURB>
+<DEFAULT>PCM</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstRawAudioParse::interleaved</NAME>
+<TYPE>gboolean</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Interleaved layout</NICK>
+<BLURB>True if audio has interleaved layout.</BLURB>
+<DEFAULT>TRUE</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstRawAudioParse::num-channels</NAME>
+<TYPE>gint</TYPE>
+<RANGE>>= 1</RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Number of channels</NICK>
+<BLURB>Number of channels in raw stream.</BLURB>
+<DEFAULT>2</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstRawAudioParse::pcm-format</NAME>
+<TYPE>GstAudioFormat</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>PCM format</NICK>
+<BLURB>Format of audio samples in PCM stream (ignored if format property is not set to pcm).</BLURB>
+<DEFAULT>GST_AUDIO_FORMAT_UNKNOWN</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstRawAudioParse::sample-rate</NAME>
+<TYPE>gint</TYPE>
+<RANGE>>= 1</RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Sample rate</NICK>
+<BLURB>Rate of audio samples in raw stream.</BLURB>
+<DEFAULT>44100</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstQtSrc::use-default-fbo</NAME>
+<TYPE>gboolean</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>If use default fbo</NICK>
+<BLURB>When set TRUE, it will not create new fbo for qml render thread.</BLURB>
+<DEFAULT>FALSE</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstQtSrc::window</NAME>
+<TYPE>gpointer</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>QQuickWindow</NICK>
+<BLURB>The QQuickWindow to place in the object heirachy.</BLURB>
+<DEFAULT></DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstFdkAacEnc::bitrate</NAME>
+<TYPE>gint</TYPE>
+<RANGE>>= 0</RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Bitrate</NICK>
+<BLURB>Target Audio Bitrate (0 = fixed value based on sample rate and channel count).</BLURB>
+<DEFAULT>0</DEFAULT>
+</ARG>
+
diff --git a/docs/plugins/gst-plugins-bad-plugins.hierarchy b/docs/plugins/gst-plugins-bad-plugins.hierarchy
index 2405c41..2a879f1 100644
--- a/docs/plugins/gst-plugins-bad-plugins.hierarchy
+++ b/docs/plugins/gst-plugins-bad-plugins.hierarchy
@@ -36,12 +36,14 @@
ADPCMDec
GstDtsDec
GstFaad
+ GstFdkAacDec
GstGSMDec
GstSbcDec
GstSirenDec
GstAudioEncoder
ADPCMEnc
GstFaac
+ GstFdkAacEnc
GstGSMEnc
GstSbcEnc
GstSirenEnc
@@ -66,6 +68,9 @@
GstMpegvParse
GstOpusParse
GstPngParse
+ GstRawBaseParse
+ GstRawAudioParse
+ GstRawVideoParse
GstVC1Parse
GstBaseSink
GstAudioBaseSink
@@ -115,6 +120,7 @@
GstDvbSrc
GstGLTestSrc
GstMMS
+ GstQtSrc
GstRTMPSrc
GstRfbSrc
GstShmSrc
@@ -138,6 +144,8 @@
ladspa-sine-so-sine-fcaa
GstOFA
GstStereo
+ GstWebrtcDsp
+ GstWebrtcEchoProbe
GstBayer2RGB
GstDebugSpy
GstDtmfDetect
@@ -181,6 +189,7 @@
GstIvtc
GstRGB2Bayer
GstRemoveSilence
+ GstTimeCodeStamper
GstVideoFilter
GstBurn
GstChromaHold
@@ -247,6 +256,7 @@
GstDashDemux
GstHLSDemux
GstMssDemux
+ GstAudioParse
GstAutoConvert
GstAutoVideoConvert
GstBaseCameraSrc
@@ -268,6 +278,8 @@
GstSDPDemux
GstSdpSrc
GstUnalignedAudioParse
+ GstUnalignedVideoParse
+ GstVideoParse
GstViewfinderBin
RsnDvdBin
GstBz2dec
@@ -309,9 +321,6 @@
GstPitch
GstRTPBasePayload
GstRtpAsfPay
- GstRawParse
- GstAudioParse
- GstVideoParse
GstRtpOnvifParse
GstRtpOnvifTimestamp
GstSFDec
@@ -326,6 +335,7 @@
GstTagMux
GstId3Mux
GstTeletextDec
+ GstTimeCodeWait
GstUvcH264MjpgDemux
GstVideoDecoder
GstLibde265Dec
diff --git a/docs/plugins/gst-plugins-bad-plugins.interfaces b/docs/plugins/gst-plugins-bad-plugins.interfaces
index 1a5967c..53b47ca 100644
--- a/docs/plugins/gst-plugins-bad-plugins.interfaces
+++ b/docs/plugins/gst-plugins-bad-plugins.interfaces
@@ -8,6 +8,7 @@
GstAudioEncoder GstPreset
GstAudioInterleave GstChildProxy
GstAudioMixer GstChildProxy
+GstAudioParse GstChildProxy
GstAutoConvert GstChildProxy
GstAutoVideoConvert GstChildProxy
GstBaseCameraSrc GstChildProxy
@@ -32,6 +33,7 @@
GstFPSDisplaySink GstChildProxy
GstFaac GstPreset
GstFaceOverlay GstChildProxy
+GstFdkAacEnc GstPreset
GstFreeverb GstPreset
GstGLBaseMixer GstChildProxy
GstGLColorBalance GstColorBalance
@@ -82,12 +84,14 @@
GstSirenEnc GstPreset
GstTagMux GstTagSetter
GstUnalignedAudioParse GstChildProxy
+GstUnalignedVideoParse GstChildProxy
GstUvcH264Src GstChildProxy
GstVCDSrc GstURIHandler
GstVP8Enc GstPreset GstTagSetter
GstVP8Enc GstTagSetter GstPreset
GstVideoAggregator GstChildProxy
GstVideoEncoder GstPreset
+GstVideoParse GstChildProxy
GstViewfinderBin GstChildProxy
GstVoAacEnc GstPreset
GstVoAmrWbEnc GstPreset
diff --git a/docs/plugins/html/ch01.html b/docs/plugins/html/ch01.html
index f4d2a1e..1c001f7 100644
--- a/docs/plugins/html/ch01.html
+++ b/docs/plugins/html/ch01.html
@@ -42,6 +42,9 @@
<span class="refentrytitle"><a href="gst-plugins-bad-plugins-audiomixer.html">audiomixer</a></span><span class="refpurpose"></span>
</dt>
<dt>
+<span class="refentrytitle"><a href="gst-plugins-bad-plugins-audioparse.html">audioparse</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
<span class="refentrytitle"><a href="gst-plugins-bad-plugins-autoconvert.html">autoconvert</a></span><span class="refpurpose"></span>
</dt>
<dt>
@@ -141,6 +144,144 @@
<span class="refentrytitle"><a href="gst-plugins-bad-plugins-gaussianblur.html">gaussianblur</a></span><span class="refpurpose"></span>
</dt>
<dt>
+<span class="refentrytitle"><a href="gst-plugins-bad-plugins-glcolorbalance.html">glcolorbalance</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-bad-plugins-glcolorconvert.html">glcolorconvert</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-bad-plugins-glcolorscale.html">glcolorscale</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-bad-plugins-gldeinterlace.html">gldeinterlace</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-bad-plugins-gldifferencematte.html">gldifferencematte</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-bad-plugins-gldownload.html">gldownload</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-bad-plugins-gleffects-blur.html">gleffects_blur</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-bad-plugins-gleffects-bulge.html">gleffects_bulge</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-bad-plugins-gleffects-fisheye.html">gleffects_fisheye</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-bad-plugins-gleffects-glow.html">gleffects_glow</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-bad-plugins-gleffects-heat.html">gleffects_heat</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-bad-plugins-gleffects-identity.html">gleffects_identity</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-bad-plugins-gleffects-laplacian.html">gleffects_laplacian</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-bad-plugins-gleffects-lumaxpro.html">gleffects_lumaxpro</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-bad-plugins-gleffects-mirror.html">gleffects_mirror</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-bad-plugins-gleffects-sepia.html">gleffects_sepia</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-bad-plugins-gleffects-sin.html">gleffects_sin</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-bad-plugins-gleffects-sobel.html">gleffects_sobel</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-bad-plugins-gleffects-square.html">gleffects_square</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-bad-plugins-gleffects-squeeze.html">gleffects_squeeze</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-bad-plugins-gleffects-stretch.html">gleffects_stretch</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-bad-plugins-gleffects-tunnel.html">gleffects_tunnel</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-bad-plugins-gleffects-twirl.html">gleffects_twirl</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-bad-plugins-gleffects.html">gleffects</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-bad-plugins-gleffects-xpro.html">gleffects_xpro</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-bad-plugins-gleffects-xray.html">gleffects_xray</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-bad-plugins-glfilterapp.html">glfilterapp</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-bad-plugins-glfilterbin.html">glfilterbin</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-bad-plugins-glfiltercube.html">glfiltercube</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-bad-plugins-glfilterglass.html">glfilterglass</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-bad-plugins-glimagesinkelement.html">glimagesinkelement</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-bad-plugins-glimagesink.html">glimagesink</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-bad-plugins-glmixerbin.html">glmixerbin</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-bad-plugins-glmosaic.html">glmosaic</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-bad-plugins-gloverlay.html">gloverlay</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-bad-plugins-glshader.html">glshader</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-bad-plugins-glsinkbin.html">glsinkbin</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-bad-plugins-glsrcbin.html">glsrcbin</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-bad-plugins-glstereomix.html">glstereomix</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-bad-plugins-glstereosplit.html">glstereosplit</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-bad-plugins-gltestsrc.html">gltestsrc</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-bad-plugins-gltransformation.html">gltransformation</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-bad-plugins-glupload.html">glupload</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-bad-plugins-glvideomixerelement.html">glvideomixerelement</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-bad-plugins-glvideomixer.html">glvideomixer</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-bad-plugins-glviewconvert.html">glviewconvert</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
<span class="refentrytitle"><a href="gst-plugins-bad-plugins-jpegparse.html">jpegparse</a></span><span class="refpurpose"> — JPEG parser</span>
</dt>
<dt>
@@ -195,6 +336,12 @@
<span class="refentrytitle"><a href="gst-plugins-bad-plugins-pinch.html">pinch</a></span><span class="refpurpose"></span>
</dt>
<dt>
+<span class="refentrytitle"><a href="gst-plugins-bad-plugins-rawaudioparse.html">rawaudioparse</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-bad-plugins-rawvideoparse.html">rawvideoparse</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
<span class="refentrytitle"><a href="gst-plugins-bad-plugins-rfbsrc.html">rfbsrc</a></span><span class="refpurpose"></span>
</dt>
<dt>
@@ -249,6 +396,12 @@
<span class="refentrytitle"><a href="gst-plugins-bad-plugins-twirl.html">twirl</a></span><span class="refpurpose"></span>
</dt>
<dt>
+<span class="refentrytitle"><a href="gst-plugins-bad-plugins-unalignedaudioparse.html">unalignedaudioparse</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-bad-plugins-unalignedvideoparse.html">unalignedvideoparse</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
<span class="refentrytitle"><a href="gst-plugins-bad-plugins-videoparse.html">videoparse</a></span><span class="refpurpose"></span>
</dt>
<dt>
diff --git a/docs/plugins/html/ch02.html b/docs/plugins/html/ch02.html
index a375336..276d2eb 100644
--- a/docs/plugins/html/ch02.html
+++ b/docs/plugins/html/ch02.html
@@ -123,6 +123,9 @@
<span class="refentrytitle"><a href="gst-plugins-bad-plugins-plugin-openal.html">openal</a></span><span class="refpurpose"> — OpenAL plugin library</span>
</dt>
<dt>
+<span class="refentrytitle"><a href="gst-plugins-bad-plugins-plugin-opengl.html">opengl</a></span><span class="refpurpose"> — OpenGL plugin</span>
+</dt>
+<dt>
<span class="refentrytitle"><a href="gst-plugins-bad-plugins-plugin-opencv.html">opencv</a></span><span class="refpurpose"> — GStreamer OpenCV Plugins</span>
</dt>
<dt>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-1.0.devhelp2 b/docs/plugins/html/gst-plugins-bad-plugins-1.0.devhelp2
index 948d2cf..0741f2b 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-1.0.devhelp2
+++ b/docs/plugins/html/gst-plugins-bad-plugins-1.0.devhelp2
@@ -8,6 +8,7 @@
<sub name="assrender" link="gst-plugins-bad-plugins-assrender.html"/>
<sub name="audiointerleave" link="gst-plugins-bad-plugins-audiointerleave.html"/>
<sub name="audiomixer" link="gst-plugins-bad-plugins-audiomixer.html"/>
+ <sub name="audioparse" link="gst-plugins-bad-plugins-audioparse.html"/>
<sub name="autoconvert" link="gst-plugins-bad-plugins-autoconvert.html"/>
<sub name="bs2b" link="gst-plugins-bad-plugins-bs2b.html"/>
<sub name="bulge" link="gst-plugins-bad-plugins-bulge.html"/>
@@ -41,6 +42,52 @@
<sub name="fisheye" link="gst-plugins-bad-plugins-fisheye.html"/>
<sub name="fpsdisplaysink" link="gst-plugins-bad-plugins-fpsdisplaysink.html"/>
<sub name="gaussianblur" link="gst-plugins-bad-plugins-gaussianblur.html"/>
+ <sub name="glcolorbalance" link="gst-plugins-bad-plugins-glcolorbalance.html"/>
+ <sub name="glcolorconvert" link="gst-plugins-bad-plugins-glcolorconvert.html"/>
+ <sub name="glcolorscale" link="gst-plugins-bad-plugins-glcolorscale.html"/>
+ <sub name="gldeinterlace" link="gst-plugins-bad-plugins-gldeinterlace.html"/>
+ <sub name="gldifferencematte" link="gst-plugins-bad-plugins-gldifferencematte.html"/>
+ <sub name="gldownload" link="gst-plugins-bad-plugins-gldownload.html"/>
+ <sub name="gleffects_blur" link="gst-plugins-bad-plugins-gleffects-blur.html"/>
+ <sub name="gleffects_bulge" link="gst-plugins-bad-plugins-gleffects-bulge.html"/>
+ <sub name="gleffects_fisheye" link="gst-plugins-bad-plugins-gleffects-fisheye.html"/>
+ <sub name="gleffects_glow" link="gst-plugins-bad-plugins-gleffects-glow.html"/>
+ <sub name="gleffects_heat" link="gst-plugins-bad-plugins-gleffects-heat.html"/>
+ <sub name="gleffects_identity" link="gst-plugins-bad-plugins-gleffects-identity.html"/>
+ <sub name="gleffects_laplacian" link="gst-plugins-bad-plugins-gleffects-laplacian.html"/>
+ <sub name="gleffects_lumaxpro" link="gst-plugins-bad-plugins-gleffects-lumaxpro.html"/>
+ <sub name="gleffects_mirror" link="gst-plugins-bad-plugins-gleffects-mirror.html"/>
+ <sub name="gleffects_sepia" link="gst-plugins-bad-plugins-gleffects-sepia.html"/>
+ <sub name="gleffects_sin" link="gst-plugins-bad-plugins-gleffects-sin.html"/>
+ <sub name="gleffects_sobel" link="gst-plugins-bad-plugins-gleffects-sobel.html"/>
+ <sub name="gleffects_square" link="gst-plugins-bad-plugins-gleffects-square.html"/>
+ <sub name="gleffects_squeeze" link="gst-plugins-bad-plugins-gleffects-squeeze.html"/>
+ <sub name="gleffects_stretch" link="gst-plugins-bad-plugins-gleffects-stretch.html"/>
+ <sub name="gleffects_tunnel" link="gst-plugins-bad-plugins-gleffects-tunnel.html"/>
+ <sub name="gleffects_twirl" link="gst-plugins-bad-plugins-gleffects-twirl.html"/>
+ <sub name="gleffects" link="gst-plugins-bad-plugins-gleffects.html"/>
+ <sub name="gleffects_xpro" link="gst-plugins-bad-plugins-gleffects-xpro.html"/>
+ <sub name="gleffects_xray" link="gst-plugins-bad-plugins-gleffects-xray.html"/>
+ <sub name="glfilterapp" link="gst-plugins-bad-plugins-glfilterapp.html"/>
+ <sub name="glfilterbin" link="gst-plugins-bad-plugins-glfilterbin.html"/>
+ <sub name="glfiltercube" link="gst-plugins-bad-plugins-glfiltercube.html"/>
+ <sub name="glfilterglass" link="gst-plugins-bad-plugins-glfilterglass.html"/>
+ <sub name="glimagesinkelement" link="gst-plugins-bad-plugins-glimagesinkelement.html"/>
+ <sub name="glimagesink" link="gst-plugins-bad-plugins-glimagesink.html"/>
+ <sub name="glmixerbin" link="gst-plugins-bad-plugins-glmixerbin.html"/>
+ <sub name="glmosaic" link="gst-plugins-bad-plugins-glmosaic.html"/>
+ <sub name="gloverlay" link="gst-plugins-bad-plugins-gloverlay.html"/>
+ <sub name="glshader" link="gst-plugins-bad-plugins-glshader.html"/>
+ <sub name="glsinkbin" link="gst-plugins-bad-plugins-glsinkbin.html"/>
+ <sub name="glsrcbin" link="gst-plugins-bad-plugins-glsrcbin.html"/>
+ <sub name="glstereomix" link="gst-plugins-bad-plugins-glstereomix.html"/>
+ <sub name="glstereosplit" link="gst-plugins-bad-plugins-glstereosplit.html"/>
+ <sub name="gltestsrc" link="gst-plugins-bad-plugins-gltestsrc.html"/>
+ <sub name="gltransformation" link="gst-plugins-bad-plugins-gltransformation.html"/>
+ <sub name="glupload" link="gst-plugins-bad-plugins-glupload.html"/>
+ <sub name="glvideomixerelement" link="gst-plugins-bad-plugins-glvideomixerelement.html"/>
+ <sub name="glvideomixer" link="gst-plugins-bad-plugins-glvideomixer.html"/>
+ <sub name="glviewconvert" link="gst-plugins-bad-plugins-glviewconvert.html"/>
<sub name="jpegparse" link="gst-plugins-bad-plugins-jpegparse.html"/>
<sub name="kaleidoscope" link="gst-plugins-bad-plugins-kaleidoscope.html"/>
<sub name="liveadder" link="gst-plugins-bad-plugins-liveadder.html"/>
@@ -59,6 +106,8 @@
<sub name="openalsink" link="gst-plugins-bad-plugins-openalsink.html"/>
<sub name="pcapparse" link="gst-plugins-bad-plugins-pcapparse.html"/>
<sub name="pinch" link="gst-plugins-bad-plugins-pinch.html"/>
+ <sub name="rawaudioparse" link="gst-plugins-bad-plugins-rawaudioparse.html"/>
+ <sub name="rawvideoparse" link="gst-plugins-bad-plugins-rawvideoparse.html"/>
<sub name="rfbsrc" link="gst-plugins-bad-plugins-rfbsrc.html"/>
<sub name="rtmpsink" link="gst-plugins-bad-plugins-rtmpsink.html"/>
<sub name="rtmpsrc" link="gst-plugins-bad-plugins-rtmpsrc.html"/>
@@ -77,6 +126,8 @@
<sub name="opencvtextoverlay" link="gst-plugins-bad-plugins-opencvtextoverlay.html"/>
<sub name="tunnel" link="gst-plugins-bad-plugins-tunnel.html"/>
<sub name="twirl" link="gst-plugins-bad-plugins-twirl.html"/>
+ <sub name="unalignedaudioparse" link="gst-plugins-bad-plugins-unalignedaudioparse.html"/>
+ <sub name="unalignedvideoparse" link="gst-plugins-bad-plugins-unalignedvideoparse.html"/>
<sub name="videoparse" link="gst-plugins-bad-plugins-videoparse.html"/>
<sub name="waterripple" link="gst-plugins-bad-plugins-waterripple.html"/>
<sub name="zbar" link="gst-plugins-bad-plugins-zbar.html"/>
@@ -120,6 +171,7 @@
<sub name="neon" link="gst-plugins-bad-plugins-plugin-neon.html"/>
<sub name="ofa" link="gst-plugins-bad-plugins-plugin-ofa.html"/>
<sub name="openal" link="gst-plugins-bad-plugins-plugin-openal.html"/>
+ <sub name="opengl" link="gst-plugins-bad-plugins-plugin-opengl.html"/>
<sub name="opencv" link="gst-plugins-bad-plugins-plugin-opencv.html"/>
<sub name="pcapparse" link="gst-plugins-bad-plugins-plugin-pcapparse.html"/>
<sub name="rawparse" link="gst-plugins-bad-plugins-plugin-rawparse.html"/>
@@ -154,6 +206,18 @@
<keyword type="property" name="The “discont-wait” property" link="gst-plugins-bad-plugins-audiomixer.html#GstAudioMixer--discont-wait"/>
<keyword type="property" name="The “blocksize” property" link="gst-plugins-bad-plugins-audiomixer.html#GstAudioMixer--blocksize"/>
<keyword type="property" name="The “output-buffer-duration” property" link="gst-plugins-bad-plugins-audiomixer.html#GstAudioMixer--output-buffer-duration"/>
+ <keyword type="struct" name="struct GstAudioParse" link="gst-plugins-bad-plugins-audioparse.html#GstAudioParse-struct"/>
+ <keyword type="property" name="The “channels” property" link="gst-plugins-bad-plugins-audioparse.html#GstAudioParse--channels"/>
+ <keyword type="property" name="The “depth” property" link="gst-plugins-bad-plugins-audioparse.html#GstAudioParse--depth"/>
+ <keyword type="property" name="The “endianness” property" link="gst-plugins-bad-plugins-audioparse.html#GstAudioParse--endianness"/>
+ <keyword type="property" name="The “format” property" link="gst-plugins-bad-plugins-audioparse.html#GstAudioParse--format"/>
+ <keyword type="property" name="The “rate” property" link="gst-plugins-bad-plugins-audioparse.html#GstAudioParse--rate"/>
+ <keyword type="property" name="The “signed” property" link="gst-plugins-bad-plugins-audioparse.html#GstAudioParse--signed"/>
+ <keyword type="property" name="The “width” property" link="gst-plugins-bad-plugins-audioparse.html#GstAudioParse--width"/>
+ <keyword type="property" name="The “channel-positions” property" link="gst-plugins-bad-plugins-audioparse.html#GstAudioParse--channel-positions"/>
+ <keyword type="property" name="The “interleaved” property" link="gst-plugins-bad-plugins-audioparse.html#GstAudioParse--interleaved"/>
+ <keyword type="property" name="The “raw-format” property" link="gst-plugins-bad-plugins-audioparse.html#GstAudioParse--raw-format"/>
+ <keyword type="property" name="The “use-sink-caps” property" link="gst-plugins-bad-plugins-audioparse.html#GstAudioParse--use-sink-caps"/>
<keyword type="struct" name="struct GstAutoConvert" link="gst-plugins-bad-plugins-autoconvert.html#GstAutoConvert-struct"/>
<keyword type="property" name="The “factories” property" link="gst-plugins-bad-plugins-autoconvert.html#GstAutoConvert--factories"/>
<keyword type="property" name="The “initial-identity” property" link="gst-plugins-bad-plugins-autoconvert.html#GstAutoConvert--initial-identity"/>
@@ -165,7 +229,7 @@
<keyword type="struct" name="struct GstBurn" link="gst-plugins-bad-plugins-burn.html#GstBurn-struct"/>
<keyword type="property" name="The “silent” property" link="gst-plugins-bad-plugins-burn.html#GstBurn--silent"/>
<keyword type="property" name="The “adjustment” property" link="gst-plugins-bad-plugins-burn.html#GstBurn--adjustment"/>
- <keyword type="typedef" name="GstChromium" link="gst-plugins-bad-plugins-chromium.html#GstChromium"/>
+ <keyword type="struct" name="struct GstChromium" link="gst-plugins-bad-plugins-chromium.html#GstChromium-struct"/>
<keyword type="property" name="The “silent” property" link="gst-plugins-bad-plugins-chromium.html#GstChromium--silent"/>
<keyword type="property" name="The “edge-a” property" link="gst-plugins-bad-plugins-chromium.html#GstChromium--edge-a"/>
<keyword type="property" name="The “edge-b” property" link="gst-plugins-bad-plugins-chromium.html#GstChromium--edge-b"/>
@@ -326,8 +390,133 @@
<keyword type="property" name="The “last-message” property" link="gst-plugins-bad-plugins-fpsdisplaysink.html#GstFPSDisplaySink--last-message"/>
<keyword type="property" name="The “silent” property" link="gst-plugins-bad-plugins-fpsdisplaysink.html#GstFPSDisplaySink--silent"/>
<keyword type="signal" name="The “fps-measurements” signal" link="gst-plugins-bad-plugins-fpsdisplaysink.html#GstFPSDisplaySink-fps-measurements"/>
- <keyword type="typedef" name="GstGaussianBlur" link="gst-plugins-bad-plugins-gaussianblur.html#GstGaussianBlur"/>
+ <keyword type="struct" name="struct GstGaussianBlur" link="gst-plugins-bad-plugins-gaussianblur.html#GstGaussianBlur-struct"/>
<keyword type="property" name="The “sigma” property" link="gst-plugins-bad-plugins-gaussianblur.html#GstGaussianBlur--sigma"/>
+ <keyword type="struct" name="struct GstGLColorBalance" link="gst-plugins-bad-plugins-glcolorbalance.html#GstGLColorBalance-struct"/>
+ <keyword type="property" name="The “brightness” property" link="gst-plugins-bad-plugins-glcolorbalance.html#GstGLColorBalance--brightness"/>
+ <keyword type="property" name="The “contrast” property" link="gst-plugins-bad-plugins-glcolorbalance.html#GstGLColorBalance--contrast"/>
+ <keyword type="property" name="The “hue” property" link="gst-plugins-bad-plugins-glcolorbalance.html#GstGLColorBalance--hue"/>
+ <keyword type="property" name="The “saturation” property" link="gst-plugins-bad-plugins-glcolorbalance.html#GstGLColorBalance--saturation"/>
+ <keyword type="struct" name="struct GstGLColorConvertElement" link="gst-plugins-bad-plugins-glcolorconvert.html#GstGLColorConvertElement-struct"/>
+ <keyword type="struct" name="struct GstGLColorscale" link="gst-plugins-bad-plugins-glcolorscale.html#GstGLColorscale-struct"/>
+ <keyword type="struct" name="struct GstGLDeinterlace" link="gst-plugins-bad-plugins-gldeinterlace.html#GstGLDeinterlace-struct"/>
+ <keyword type="property" name="The “method” property" link="gst-plugins-bad-plugins-gldeinterlace.html#GstGLDeinterlace--method"/>
+ <keyword type="struct" name="struct GstGLDifferenceMatte" link="gst-plugins-bad-plugins-gldifferencematte.html#GstGLDifferenceMatte-struct"/>
+ <keyword type="property" name="The “location” property" link="gst-plugins-bad-plugins-gldifferencematte.html#GstGLDifferenceMatte--location"/>
+ <keyword type="struct" name="struct GstGLDownloadElement" link="gst-plugins-bad-plugins-gldownload.html#GstGLDownloadElement-struct"/>
+ <keyword type="struct" name="struct GstGLFilterApp" link="gst-plugins-bad-plugins-glfilterapp.html#GstGLFilterApp-struct"/>
+ <keyword type="property" name="The “client-data” property" link="gst-plugins-bad-plugins-glfilterapp.html#GstGLFilterApp--client-data"/>
+ <keyword type="property" name="The “client-draw-callback” property" link="gst-plugins-bad-plugins-glfilterapp.html#GstGLFilterApp--client-draw-callback"/>
+ <keyword type="property" name="The “client-reshape-callback” property" link="gst-plugins-bad-plugins-glfilterapp.html#GstGLFilterApp--client-reshape-callback"/>
+ <keyword type="signal" name="The “client-draw” signal" link="gst-plugins-bad-plugins-glfilterapp.html#GstGLFilterApp-client-draw"/>
+ <keyword type="struct" name="struct GstGLFilterBin" link="gst-plugins-bad-plugins-glfilterbin.html#GstGLFilterBin-struct"/>
+ <keyword type="property" name="The “filter” property" link="gst-plugins-bad-plugins-glfilterbin.html#GstGLFilterBin--filter"/>
+ <keyword type="signal" name="The “create-element” signal" link="gst-plugins-bad-plugins-glfilterbin.html#GstGLFilterBin-create-element"/>
+ <keyword type="struct" name="struct GstGLFilterCube" link="gst-plugins-bad-plugins-glfiltercube.html#GstGLFilterCube-struct"/>
+ <keyword type="property" name="The “aspect” property" link="gst-plugins-bad-plugins-glfiltercube.html#GstGLFilterCube--aspect"/>
+ <keyword type="property" name="The “blue” property" link="gst-plugins-bad-plugins-glfiltercube.html#GstGLFilterCube--blue"/>
+ <keyword type="property" name="The “fovy” property" link="gst-plugins-bad-plugins-glfiltercube.html#GstGLFilterCube--fovy"/>
+ <keyword type="property" name="The “green” property" link="gst-plugins-bad-plugins-glfiltercube.html#GstGLFilterCube--green"/>
+ <keyword type="property" name="The “red” property" link="gst-plugins-bad-plugins-glfiltercube.html#GstGLFilterCube--red"/>
+ <keyword type="property" name="The “zfar” property" link="gst-plugins-bad-plugins-glfiltercube.html#GstGLFilterCube--zfar"/>
+ <keyword type="property" name="The “znear” property" link="gst-plugins-bad-plugins-glfiltercube.html#GstGLFilterCube--znear"/>
+ <keyword type="struct" name="struct GstGLFilterGlass" link="gst-plugins-bad-plugins-glfilterglass.html#GstGLFilterGlass-struct"/>
+ <keyword type="struct" name="struct GstGLImageSink" link="gst-plugins-bad-plugins-glimagesinkelement.html#GstGLImageSink-struct"/>
+ <keyword type="property" name="The “display” property" link="gst-plugins-bad-plugins-glimagesinkelement.html#GstGLImageSink--display"/>
+ <keyword type="property" name="The “client-data” property" link="gst-plugins-bad-plugins-glimagesinkelement.html#GstGLImageSink--client-data"/>
+ <keyword type="property" name="The “client-draw-callback” property" link="gst-plugins-bad-plugins-glimagesinkelement.html#GstGLImageSink--client-draw-callback"/>
+ <keyword type="property" name="The “client-reshape-callback” property" link="gst-plugins-bad-plugins-glimagesinkelement.html#GstGLImageSink--client-reshape-callback"/>
+ <keyword type="property" name="The “force-aspect-ratio” property" link="gst-plugins-bad-plugins-glimagesinkelement.html#GstGLImageSink--force-aspect-ratio"/>
+ <keyword type="property" name="The “other-context” property" link="gst-plugins-bad-plugins-glimagesinkelement.html#GstGLImageSink--other-context"/>
+ <keyword type="property" name="The “pixel-aspect-ratio” property" link="gst-plugins-bad-plugins-glimagesinkelement.html#GstGLImageSink--pixel-aspect-ratio"/>
+ <keyword type="property" name="The “context” property" link="gst-plugins-bad-plugins-glimagesinkelement.html#GstGLImageSink--context"/>
+ <keyword type="property" name="The “handle-events” property" link="gst-plugins-bad-plugins-glimagesinkelement.html#GstGLImageSink--handle-events"/>
+ <keyword type="property" name="The “ignore-alpha” property" link="gst-plugins-bad-plugins-glimagesinkelement.html#GstGLImageSink--ignore-alpha"/>
+ <keyword type="property" name="The “output-multiview-downmix-mode” property" link="gst-plugins-bad-plugins-glimagesinkelement.html#GstGLImageSink--output-multiview-downmix-mode"/>
+ <keyword type="property" name="The “output-multiview-flags” property" link="gst-plugins-bad-plugins-glimagesinkelement.html#GstGLImageSink--output-multiview-flags"/>
+ <keyword type="property" name="The “output-multiview-mode” property" link="gst-plugins-bad-plugins-glimagesinkelement.html#GstGLImageSink--output-multiview-mode"/>
+ <keyword type="property" name="The “rotate-method” property" link="gst-plugins-bad-plugins-glimagesinkelement.html#GstGLImageSink--rotate-method"/>
+ <keyword type="signal" name="The “client-draw” signal" link="gst-plugins-bad-plugins-glimagesinkelement.html#GstGLImageSink-client-draw"/>
+ <keyword type="signal" name="The “client-reshape” signal" link="gst-plugins-bad-plugins-glimagesinkelement.html#GstGLImageSink-client-reshape"/>
+ <keyword type="struct" name="struct GstGLMixerBin" link="gst-plugins-bad-plugins-glmixerbin.html#GstGLMixerBin-struct"/>
+ <keyword type="property" name="The “latency” property" link="gst-plugins-bad-plugins-glmixerbin.html#GstGLMixerBin--latency"/>
+ <keyword type="property" name="The “mixer” property" link="gst-plugins-bad-plugins-glmixerbin.html#GstGLMixerBin--mixer"/>
+ <keyword type="property" name="The “start-time” property" link="gst-plugins-bad-plugins-glmixerbin.html#GstGLMixerBin--start-time"/>
+ <keyword type="property" name="The “start-time-selection” property" link="gst-plugins-bad-plugins-glmixerbin.html#GstGLMixerBin--start-time-selection"/>
+ <keyword type="signal" name="The “create-element” signal" link="gst-plugins-bad-plugins-glmixerbin.html#GstGLMixerBin-create-element"/>
+ <keyword type="struct" name="struct GstGLMosaic" link="gst-plugins-bad-plugins-glmosaic.html#GstGLMosaic-struct"/>
+ <keyword type="struct" name="struct GstGLOverlay" link="gst-plugins-bad-plugins-gloverlay.html#GstGLOverlay-struct"/>
+ <keyword type="property" name="The “angle-png” property" link="gst-plugins-bad-plugins-gloverlay.html#GstGLOverlay--angle-png"/>
+ <keyword type="property" name="The “angle-video” property" link="gst-plugins-bad-plugins-gloverlay.html#GstGLOverlay--angle-video"/>
+ <keyword type="property" name="The “location” property" link="gst-plugins-bad-plugins-gloverlay.html#GstGLOverlay--location"/>
+ <keyword type="property" name="The “proportion-png” property" link="gst-plugins-bad-plugins-gloverlay.html#GstGLOverlay--proportion-png"/>
+ <keyword type="property" name="The “proportion-video” property" link="gst-plugins-bad-plugins-gloverlay.html#GstGLOverlay--proportion-video"/>
+ <keyword type="property" name="The “ratio-video” property" link="gst-plugins-bad-plugins-gloverlay.html#GstGLOverlay--ratio-video"/>
+ <keyword type="property" name="The “rotate-png” property" link="gst-plugins-bad-plugins-gloverlay.html#GstGLOverlay--rotate-png"/>
+ <keyword type="property" name="The “rotate-video” property" link="gst-plugins-bad-plugins-gloverlay.html#GstGLOverlay--rotate-video"/>
+ <keyword type="property" name="The “video-top” property" link="gst-plugins-bad-plugins-gloverlay.html#GstGLOverlay--video-top"/>
+ <keyword type="property" name="The “xpos-png” property" link="gst-plugins-bad-plugins-gloverlay.html#GstGLOverlay--xpos-png"/>
+ <keyword type="property" name="The “xpos-video” property" link="gst-plugins-bad-plugins-gloverlay.html#GstGLOverlay--xpos-video"/>
+ <keyword type="property" name="The “ypos-png” property" link="gst-plugins-bad-plugins-gloverlay.html#GstGLOverlay--ypos-png"/>
+ <keyword type="property" name="The “ypos-video” property" link="gst-plugins-bad-plugins-gloverlay.html#GstGLOverlay--ypos-video"/>
+ <keyword type="property" name="The “alpha” property" link="gst-plugins-bad-plugins-gloverlay.html#GstGLOverlay--alpha"/>
+ <keyword type="property" name="The “offset-x” property" link="gst-plugins-bad-plugins-gloverlay.html#GstGLOverlay--offset-x"/>
+ <keyword type="property" name="The “offset-y” property" link="gst-plugins-bad-plugins-gloverlay.html#GstGLOverlay--offset-y"/>
+ <keyword type="property" name="The “overlay-height” property" link="gst-plugins-bad-plugins-gloverlay.html#GstGLOverlay--overlay-height"/>
+ <keyword type="property" name="The “overlay-width” property" link="gst-plugins-bad-plugins-gloverlay.html#GstGLOverlay--overlay-width"/>
+ <keyword type="property" name="The “relative-x” property" link="gst-plugins-bad-plugins-gloverlay.html#GstGLOverlay--relative-x"/>
+ <keyword type="property" name="The “relative-y” property" link="gst-plugins-bad-plugins-gloverlay.html#GstGLOverlay--relative-y"/>
+ <keyword type="struct" name="struct GstGLFilterShader" link="gst-plugins-bad-plugins-glshader.html#GstGLFilterShader-struct"/>
+ <keyword type="property" name="The “location” property" link="gst-plugins-bad-plugins-glshader.html#GstGLFilterShader--location"/>
+ <keyword type="property" name="The “preset” property" link="gst-plugins-bad-plugins-glshader.html#GstGLFilterShader--preset"/>
+ <keyword type="property" name="The “vars” property" link="gst-plugins-bad-plugins-glshader.html#GstGLFilterShader--vars"/>
+ <keyword type="property" name="The “fragment” property" link="gst-plugins-bad-plugins-glshader.html#GstGLFilterShader--fragment"/>
+ <keyword type="property" name="The “shader” property" link="gst-plugins-bad-plugins-glshader.html#GstGLFilterShader--shader"/>
+ <keyword type="property" name="The “uniforms” property" link="gst-plugins-bad-plugins-glshader.html#GstGLFilterShader--uniforms"/>
+ <keyword type="property" name="The “update-shader” property" link="gst-plugins-bad-plugins-glshader.html#GstGLFilterShader--update-shader"/>
+ <keyword type="property" name="The “vertex” property" link="gst-plugins-bad-plugins-glshader.html#GstGLFilterShader--vertex"/>
+ <keyword type="signal" name="The “create-shader” signal" link="gst-plugins-bad-plugins-glshader.html#GstGLFilterShader-create-shader"/>
+ <keyword type="struct" name="struct GstGLSinkBin" link="gst-plugins-bad-plugins-glsinkbin.html#GstGLSinkBin-struct"/>
+ <keyword type="property" name="The “force-aspect-ratio” property" link="gst-plugins-bad-plugins-glsinkbin.html#GstGLSinkBin--force-aspect-ratio"/>
+ <keyword type="property" name="The “sink” property" link="gst-plugins-bad-plugins-glsinkbin.html#GstGLSinkBin--sink"/>
+ <keyword type="property" name="The “async” property" link="gst-plugins-bad-plugins-glsinkbin.html#GstGLSinkBin--async"/>
+ <keyword type="property" name="The “blocksize” property" link="gst-plugins-bad-plugins-glsinkbin.html#GstGLSinkBin--blocksize"/>
+ <keyword type="property" name="The “enable-last-sample” property" link="gst-plugins-bad-plugins-glsinkbin.html#GstGLSinkBin--enable-last-sample"/>
+ <keyword type="property" name="The “last-sample” property" link="gst-plugins-bad-plugins-glsinkbin.html#GstGLSinkBin--last-sample"/>
+ <keyword type="property" name="The “max-bitrate” property" link="gst-plugins-bad-plugins-glsinkbin.html#GstGLSinkBin--max-bitrate"/>
+ <keyword type="property" name="The “max-lateness” property" link="gst-plugins-bad-plugins-glsinkbin.html#GstGLSinkBin--max-lateness"/>
+ <keyword type="property" name="The “qos” property" link="gst-plugins-bad-plugins-glsinkbin.html#GstGLSinkBin--qos"/>
+ <keyword type="property" name="The “render-delay” property" link="gst-plugins-bad-plugins-glsinkbin.html#GstGLSinkBin--render-delay"/>
+ <keyword type="property" name="The “sync” property" link="gst-plugins-bad-plugins-glsinkbin.html#GstGLSinkBin--sync"/>
+ <keyword type="property" name="The “throttle-time” property" link="gst-plugins-bad-plugins-glsinkbin.html#GstGLSinkBin--throttle-time"/>
+ <keyword type="property" name="The “ts-offset” property" link="gst-plugins-bad-plugins-glsinkbin.html#GstGLSinkBin--ts-offset"/>
+ <keyword type="property" name="The “brightness” property" link="gst-plugins-bad-plugins-glsinkbin.html#GstGLSinkBin--brightness"/>
+ <keyword type="property" name="The “contrast” property" link="gst-plugins-bad-plugins-glsinkbin.html#GstGLSinkBin--contrast"/>
+ <keyword type="property" name="The “hue” property" link="gst-plugins-bad-plugins-glsinkbin.html#GstGLSinkBin--hue"/>
+ <keyword type="property" name="The “saturation” property" link="gst-plugins-bad-plugins-glsinkbin.html#GstGLSinkBin--saturation"/>
+ <keyword type="signal" name="The “create-element” signal" link="gst-plugins-bad-plugins-glsinkbin.html#GstGLSinkBin-create-element"/>
+ <keyword type="struct" name="struct GstGLSrcBin" link="gst-plugins-bad-plugins-glsrcbin.html#GstGLSrcBin-struct"/>
+ <keyword type="property" name="The “src” property" link="gst-plugins-bad-plugins-glsrcbin.html#GstGLSrcBin--src"/>
+ <keyword type="signal" name="The “create-element” signal" link="gst-plugins-bad-plugins-glsrcbin.html#GstGLSrcBin-create-element"/>
+ <keyword type="struct" name="struct GstGLStereoMix" link="gst-plugins-bad-plugins-glstereomix.html#GstGLStereoMix-struct"/>
+ <keyword type="property" name="The “downmix-mode” property" link="gst-plugins-bad-plugins-glstereomix.html#GstGLStereoMix--downmix-mode"/>
+ <keyword type="struct" name="struct GstGLStereoSplit" link="gst-plugins-bad-plugins-glstereosplit.html#GstGLStereoSplit-struct"/>
+ <keyword type="struct" name="GstGLTestSrc" link="gst-plugins-bad-plugins-gltestsrc.html#GstGLTestSrc-struct"/>
+ <keyword type="enum" name="enum GstGLTestSrcPattern" link="gst-plugins-bad-plugins-gltestsrc.html#GstGLTestSrcPattern"/>
+ <keyword type="property" name="The “is-live” property" link="gst-plugins-bad-plugins-gltestsrc.html#GstGLTestSrc--is-live"/>
+ <keyword type="property" name="The “pattern” property" link="gst-plugins-bad-plugins-gltestsrc.html#GstGLTestSrc--pattern"/>
+ <keyword type="property" name="The “timestamp-offset” property" link="gst-plugins-bad-plugins-gltestsrc.html#GstGLTestSrc--timestamp-offset"/>
+ <keyword type="struct" name="struct GstGLTransformation" link="gst-plugins-bad-plugins-gltransformation.html#GstGLTransformation"/>
+ <keyword type="struct" name="struct GstGLUploadElement" link="gst-plugins-bad-plugins-glupload.html#GstGLUploadElement-struct"/>
+ <keyword type="struct" name="struct GstGLVideoMixer" link="gst-plugins-bad-plugins-glvideomixerelement.html#GstGLVideoMixer-struct"/>
+ <keyword type="enum" name="enum GstGLVideoMixerBackground" link="gst-plugins-bad-plugins-glvideomixerelement.html#GstGLVideoMixerBackground"/>
+ <keyword type="property" name="The “background” property" link="gst-plugins-bad-plugins-glvideomixerelement.html#GstGLVideoMixer--background"/>
+ <keyword type="struct" name="struct GstGLViewConvertElement" link="gst-plugins-bad-plugins-glviewconvert.html#GstGLViewConvertElement-struct"/>
+ <keyword type="property" name="The “downmix-mode” property" link="gst-plugins-bad-plugins-glviewconvert.html#GstGLViewConvertElement--downmix-mode"/>
+ <keyword type="property" name="The “input-flags-override” property" link="gst-plugins-bad-plugins-glviewconvert.html#GstGLViewConvertElement--input-flags-override"/>
+ <keyword type="property" name="The “input-mode-override” property" link="gst-plugins-bad-plugins-glviewconvert.html#GstGLViewConvertElement--input-mode-override"/>
+ <keyword type="property" name="The “output-flags-override” property" link="gst-plugins-bad-plugins-glviewconvert.html#GstGLViewConvertElement--output-flags-override"/>
+ <keyword type="property" name="The “output-mode-override” property" link="gst-plugins-bad-plugins-glviewconvert.html#GstGLViewConvertElement--output-mode-override"/>
<keyword type="struct" name="struct GstJpegParse" link="gst-plugins-bad-plugins-jpegparse.html#GstJpegParse-struct"/>
<keyword type="struct" name="struct GstKaleidoscope" link="gst-plugins-bad-plugins-kaleidoscope.html#GstKaleidoscope-struct"/>
<keyword type="property" name="The “angle” property" link="gst-plugins-bad-plugins-kaleidoscope.html#GstKaleidoscope--angle"/>
@@ -438,6 +627,24 @@
<keyword type="property" name="The “ts-offset” property" link="gst-plugins-bad-plugins-pcapparse.html#GstPcapParse--ts-offset"/>
<keyword type="struct" name="struct GstPinch" link="gst-plugins-bad-plugins-pinch.html#GstPinch-struct"/>
<keyword type="property" name="The “intensity” property" link="gst-plugins-bad-plugins-pinch.html#GstPinch--intensity"/>
+ <keyword type="struct" name="struct GstRawAudioParse" link="gst-plugins-bad-plugins-rawaudioparse.html#GstRawAudioParse-struct"/>
+ <keyword type="property" name="The “channel-positions” property" link="gst-plugins-bad-plugins-rawaudioparse.html#GstRawAudioParse--channel-positions"/>
+ <keyword type="property" name="The “format” property" link="gst-plugins-bad-plugins-rawaudioparse.html#GstRawAudioParse--format"/>
+ <keyword type="property" name="The “interleaved” property" link="gst-plugins-bad-plugins-rawaudioparse.html#GstRawAudioParse--interleaved"/>
+ <keyword type="property" name="The “num-channels” property" link="gst-plugins-bad-plugins-rawaudioparse.html#GstRawAudioParse--num-channels"/>
+ <keyword type="property" name="The “pcm-format” property" link="gst-plugins-bad-plugins-rawaudioparse.html#GstRawAudioParse--pcm-format"/>
+ <keyword type="property" name="The “sample-rate” property" link="gst-plugins-bad-plugins-rawaudioparse.html#GstRawAudioParse--sample-rate"/>
+ <keyword type="struct" name="struct GstRawVideoParse" link="gst-plugins-bad-plugins-rawvideoparse.html#GstRawVideoParse-struct"/>
+ <keyword type="property" name="The “format” property" link="gst-plugins-bad-plugins-rawvideoparse.html#GstRawVideoParse--format"/>
+ <keyword type="property" name="The “frame-stride” property" link="gst-plugins-bad-plugins-rawvideoparse.html#GstRawVideoParse--frame-stride"/>
+ <keyword type="property" name="The “framerate” property" link="gst-plugins-bad-plugins-rawvideoparse.html#GstRawVideoParse--framerate"/>
+ <keyword type="property" name="The “height” property" link="gst-plugins-bad-plugins-rawvideoparse.html#GstRawVideoParse--height"/>
+ <keyword type="property" name="The “interlaced” property" link="gst-plugins-bad-plugins-rawvideoparse.html#GstRawVideoParse--interlaced"/>
+ <keyword type="property" name="The “pixel-aspect-ratio” property" link="gst-plugins-bad-plugins-rawvideoparse.html#GstRawVideoParse--pixel-aspect-ratio"/>
+ <keyword type="property" name="The “plane-offsets” property" link="gst-plugins-bad-plugins-rawvideoparse.html#GstRawVideoParse--plane-offsets"/>
+ <keyword type="property" name="The “plane-strides” property" link="gst-plugins-bad-plugins-rawvideoparse.html#GstRawVideoParse--plane-strides"/>
+ <keyword type="property" name="The “top-field-first” property" link="gst-plugins-bad-plugins-rawvideoparse.html#GstRawVideoParse--top-field-first"/>
+ <keyword type="property" name="The “width” property" link="gst-plugins-bad-plugins-rawvideoparse.html#GstRawVideoParse--width"/>
<keyword type="struct" name="struct GstRfbSrc" link="gst-plugins-bad-plugins-rfbsrc.html#GstRfbSrc-struct"/>
<keyword type="property" name="The “host” property" link="gst-plugins-bad-plugins-rfbsrc.html#GstRfbSrc--host"/>
<keyword type="property" name="The “port” property" link="gst-plugins-bad-plugins-rfbsrc.html#GstRfbSrc--port"/>
@@ -509,6 +716,8 @@
<keyword type="struct" name="struct GstTunnel" link="gst-plugins-bad-plugins-tunnel.html#GstTunnel-struct"/>
<keyword type="struct" name="struct GstTwirl" link="gst-plugins-bad-plugins-twirl.html#GstTwirl-struct"/>
<keyword type="property" name="The “angle” property" link="gst-plugins-bad-plugins-twirl.html#GstTwirl--angle"/>
+ <keyword type="struct" name="GstUnalignedAudioParse" link="gst-plugins-bad-plugins-unalignedaudioparse.html#GstUnalignedAudioParse-struct"/>
+ <keyword type="struct" name="GstUnalignedVideoParse" link="gst-plugins-bad-plugins-unalignedvideoparse.html#GstUnalignedVideoParse-struct"/>
<keyword type="struct" name="struct GstVideoParse" link="gst-plugins-bad-plugins-videoparse.html#GstVideoParse-struct"/>
<keyword type="property" name="The “alpha-mask” property" link="gst-plugins-bad-plugins-videoparse.html#GstVideoParse--alpha-mask"/>
<keyword type="property" name="The “blue-mask” property" link="gst-plugins-bad-plugins-videoparse.html#GstVideoParse--blue-mask"/>
@@ -541,7 +750,7 @@
<keyword type="property" name="The “band-mode” property" link="gst-plugins-bad-plugins-voamrwbenc.html#GstVoAmrWbEnc--band-mode"/>
<keyword type="struct" name="struct GstWaveScope" link="gst-plugins-bad-plugins-wavescope.html#GstWaveScope-struct"/>
<keyword type="property" name="The “style” property" link="gst-plugins-bad-plugins-wavescope.html#GstWaveScope--style"/>
- <keyword type="struct" name="GstWebrtcDsp" link="gst-plugins-bad-plugins-webrtcdsp.html#GstWebrtcDsp"/>
+ <keyword type="struct" name="GstWebrtcDsp" link="gst-plugins-bad-plugins-webrtcdsp.html#GstWebrtcDsp-struct"/>
<keyword type="property" name="The “echo-cancel” property" link="gst-plugins-bad-plugins-webrtcdsp.html#GstWebrtcDsp--echo-cancel"/>
<keyword type="property" name="The “experimental-agc” property" link="gst-plugins-bad-plugins-webrtcdsp.html#GstWebrtcDsp--experimental-agc"/>
<keyword type="property" name="The “extended-filter” property" link="gst-plugins-bad-plugins-webrtcdsp.html#GstWebrtcDsp--extended-filter"/>
@@ -551,7 +760,8 @@
<keyword type="property" name="The “probe” property" link="gst-plugins-bad-plugins-webrtcdsp.html#GstWebrtcDsp--probe"/>
<keyword type="property" name="The “echo-suppression-level” property" link="gst-plugins-bad-plugins-webrtcdsp.html#GstWebrtcDsp--echo-suppression-level"/>
<keyword type="property" name="The “noise-suppression-level” property" link="gst-plugins-bad-plugins-webrtcdsp.html#GstWebrtcDsp--noise-suppression-level"/>
- <keyword type="struct" name="struct GstWebrtcEchoProbe" link="gst-plugins-bad-plugins-webrtcechoprobe.html#GstWebrtcEchoProbe"/>
+ <keyword type="property" name="The “delay-agnostic” property" link="gst-plugins-bad-plugins-webrtcdsp.html#GstWebrtcDsp--delay-agnostic"/>
+ <keyword type="struct" name="struct GstWebrtcEchoProbe" link="gst-plugins-bad-plugins-webrtcechoprobe.html#GstWebrtcEchoProbe-struct"/>
<keyword type="constant" name="GST_COLOR_EFFECTS_PRESET_NONE" link="gst-plugins-bad-plugins-coloreffects.html#GST-COLOR-EFFECTS-PRESET-NONE:CAPS"/>
<keyword type="constant" name="GST_COLOR_EFFECTS_PRESET_HEAT" link="gst-plugins-bad-plugins-coloreffects.html#GST-COLOR-EFFECTS-PRESET-HEAT:CAPS"/>
<keyword type="constant" name="GST_COLOR_EFFECTS_PRESET_SEPIA" link="gst-plugins-bad-plugins-coloreffects.html#GST-COLOR-EFFECTS-PRESET-SEPIA:CAPS"/>
@@ -566,6 +776,24 @@
<keyword type="constant" name="GST_FACEDETECT_UPDATES_ON_CHANGE" link="gst-plugins-bad-plugins-facedetect.html#GST-FACEDETECT-UPDATES-ON-CHANGE:CAPS"/>
<keyword type="constant" name="GST_FACEDETECT_UPDATES_ON_FACE" link="gst-plugins-bad-plugins-facedetect.html#GST-FACEDETECT-UPDATES-ON-FACE:CAPS"/>
<keyword type="constant" name="GST_FACEDETECT_UPDATES_NONE" link="gst-plugins-bad-plugins-facedetect.html#GST-FACEDETECT-UPDATES-NONE:CAPS"/>
+ <keyword type="constant" name="GST_GL_TEST_SRC_SMPTE" link="gst-plugins-bad-plugins-gltestsrc.html#GST-GL-TEST-SRC-SMPTE:CAPS"/>
+ <keyword type="constant" name="GST_GL_TEST_SRC_SNOW" link="gst-plugins-bad-plugins-gltestsrc.html#GST-GL-TEST-SRC-SNOW:CAPS"/>
+ <keyword type="constant" name="GST_GL_TEST_SRC_BLACK" link="gst-plugins-bad-plugins-gltestsrc.html#GST-GL-TEST-SRC-BLACK:CAPS"/>
+ <keyword type="constant" name="GST_GL_TEST_SRC_WHITE" link="gst-plugins-bad-plugins-gltestsrc.html#GST-GL-TEST-SRC-WHITE:CAPS"/>
+ <keyword type="constant" name="GST_GL_TEST_SRC_RED" link="gst-plugins-bad-plugins-gltestsrc.html#GST-GL-TEST-SRC-RED:CAPS"/>
+ <keyword type="constant" name="GST_GL_TEST_SRC_GREEN" link="gst-plugins-bad-plugins-gltestsrc.html#GST-GL-TEST-SRC-GREEN:CAPS"/>
+ <keyword type="constant" name="GST_GL_TEST_SRC_BLUE" link="gst-plugins-bad-plugins-gltestsrc.html#GST-GL-TEST-SRC-BLUE:CAPS"/>
+ <keyword type="constant" name="GST_GL_TEST_SRC_CHECKERS1" link="gst-plugins-bad-plugins-gltestsrc.html#GST-GL-TEST-SRC-CHECKERS1:CAPS"/>
+ <keyword type="constant" name="GST_GL_TEST_SRC_CHECKERS2" link="gst-plugins-bad-plugins-gltestsrc.html#GST-GL-TEST-SRC-CHECKERS2:CAPS"/>
+ <keyword type="constant" name="GST_GL_TEST_SRC_CHECKERS4" link="gst-plugins-bad-plugins-gltestsrc.html#GST-GL-TEST-SRC-CHECKERS4:CAPS"/>
+ <keyword type="constant" name="GST_GL_TEST_SRC_CHECKERS8" link="gst-plugins-bad-plugins-gltestsrc.html#GST-GL-TEST-SRC-CHECKERS8:CAPS"/>
+ <keyword type="constant" name="GST_GL_TEST_SRC_CIRCULAR" link="gst-plugins-bad-plugins-gltestsrc.html#GST-GL-TEST-SRC-CIRCULAR:CAPS"/>
+ <keyword type="constant" name="GST_GL_TEST_SRC_BLINK" link="gst-plugins-bad-plugins-gltestsrc.html#GST-GL-TEST-SRC-BLINK:CAPS"/>
+ <keyword type="constant" name="GST_GL_TEST_SRC_MANDELBROT" link="gst-plugins-bad-plugins-gltestsrc.html#GST-GL-TEST-SRC-MANDELBROT:CAPS"/>
+ <keyword type="constant" name="GST_GL_VIDEO_MIXER_BACKGROUND_CHECKER" link="gst-plugins-bad-plugins-glvideomixerelement.html#GST-GL-VIDEO-MIXER-BACKGROUND-CHECKER:CAPS"/>
+ <keyword type="constant" name="GST_GL_VIDEO_MIXER_BACKGROUND_BLACK" link="gst-plugins-bad-plugins-glvideomixerelement.html#GST-GL-VIDEO-MIXER-BACKGROUND-BLACK:CAPS"/>
+ <keyword type="constant" name="GST_GL_VIDEO_MIXER_BACKGROUND_WHITE" link="gst-plugins-bad-plugins-glvideomixerelement.html#GST-GL-VIDEO-MIXER-BACKGROUND-WHITE:CAPS"/>
+ <keyword type="constant" name="GST_GL_VIDEO_MIXER_BACKGROUND_TRANSPARENT" link="gst-plugins-bad-plugins-glvideomixerelement.html#GST-GL-VIDEO-MIXER-BACKGROUND-TRANSPARENT:CAPS"/>
<keyword type="constant" name="GST_MIRROR_MODE_LEFT" link="gst-plugins-bad-plugins-mirror.html#GST-MIRROR-MODE-LEFT:CAPS"/>
<keyword type="constant" name="GST_MIRROR_MODE_RIGHT" link="gst-plugins-bad-plugins-mirror.html#GST-MIRROR-MODE-RIGHT:CAPS"/>
<keyword type="constant" name="GST_MIRROR_MODE_TOP" link="gst-plugins-bad-plugins-mirror.html#GST-MIRROR-MODE-TOP:CAPS"/>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-audiomixer.html b/docs/plugins/html/gst-plugins-bad-plugins-audiomixer.html
index efa9fd0..ce7e6d8 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-audiomixer.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-audiomixer.html
@@ -7,7 +7,7 @@
<link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
<link rel="up" href="ch01.html" title="gst-plugins-bad Elements">
<link rel="prev" href="gst-plugins-bad-plugins-audiointerleave.html" title="audiointerleave">
-<link rel="next" href="gst-plugins-bad-plugins-autoconvert.html" title="autoconvert">
+<link rel="next" href="gst-plugins-bad-plugins-audioparse.html" title="audioparse">
<meta name="generator" content="GTK-Doc V1.25 (XML mode)">
<link rel="stylesheet" href="style.css" type="text/css">
</head>
@@ -23,7 +23,7 @@
<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
<td><a accesskey="u" href="ch01.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
<td><a accesskey="p" href="gst-plugins-bad-plugins-audiointerleave.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="gst-plugins-bad-plugins-autoconvert.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+<td><a accesskey="n" href="gst-plugins-bad-plugins-audioparse.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
</tr></table>
<div class="refentry">
<a name="gst-plugins-bad-plugins-audiomixer"></a><div class="titlepage"></div>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-audioparse.html b/docs/plugins/html/gst-plugins-bad-plugins-audioparse.html
new file mode 100644
index 0000000..24c8141
--- /dev/null
+++ b/docs/plugins/html/gst-plugins-bad-plugins-audioparse.html
@@ -0,0 +1,339 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>audioparse: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
+<link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
+<link rel="up" href="ch01.html" title="gst-plugins-bad Elements">
+<link rel="prev" href="gst-plugins-bad-plugins-audiomixer.html" title="audiomixer">
+<link rel="next" href="gst-plugins-bad-plugins-autoconvert.html" title="autoconvert">
+<meta name="generator" content="GTK-Doc V1.25 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
+<td width="100%" align="left" class="shortcuts">
+<a href="#" class="shortcut">Top</a><span id="nav_description"> <span class="dim">|</span>
+ <a href="#gst-plugins-bad-plugins-audioparse.description" class="shortcut">Description</a></span><span id="nav_hierarchy"> <span class="dim">|</span>
+ <a href="#gst-plugins-bad-plugins-audioparse.object-hierarchy" class="shortcut">Object Hierarchy</a></span><span id="nav_interfaces"> <span class="dim">|</span>
+ <a href="#gst-plugins-bad-plugins-audioparse.implemented-interfaces" class="shortcut">Implemented Interfaces</a></span><span id="nav_properties"> <span class="dim">|</span>
+ <a href="#gst-plugins-bad-plugins-audioparse.properties" class="shortcut">Properties</a></span>
+</td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
+<td><a accesskey="p" href="gst-plugins-bad-plugins-audiomixer.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="gst-plugins-bad-plugins-autoconvert.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="gst-plugins-bad-plugins-audioparse"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-bad-plugins-audioparse.top_of_page"></a>audioparse</span></h2>
+<p>audioparse</p>
+</td>
+<td class="gallery_image" valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-audioparse.properties"></a><h2>Properties</h2>
+<div class="informaltable"><table class="informaltable" border="0">
+<colgroup>
+<col width="150px" class="properties_type">
+<col width="300px" class="properties_name">
+<col width="200px" class="properties_flags">
+</colgroup>
+<tbody>
+<tr>
+<td class="property_type"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint"><span class="type">gint</span></a></td>
+<td class="property_name"><a class="link" href="gst-plugins-bad-plugins-audioparse.html#GstAudioParse--channels" title="The “channels” property">channels</a></td>
+<td class="property_flags">Read / Write</td>
+</tr>
+<tr>
+<td class="property_type"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint"><span class="type">gint</span></a></td>
+<td class="property_name"><a class="link" href="gst-plugins-bad-plugins-audioparse.html#GstAudioParse--depth" title="The “depth” property">depth</a></td>
+<td class="property_flags">Read / Write</td>
+</tr>
+<tr>
+<td class="property_type"><span class="type">GstAudioParseEndianness</span></td>
+<td class="property_name"><a class="link" href="gst-plugins-bad-plugins-audioparse.html#GstAudioParse--endianness" title="The “endianness” property">endianness</a></td>
+<td class="property_flags">Read / Write</td>
+</tr>
+<tr>
+<td class="property_type"><span class="type">GstAudioParseFormat</span></td>
+<td class="property_name"><a class="link" href="gst-plugins-bad-plugins-audioparse.html#GstAudioParse--format" title="The “format” property">format</a></td>
+<td class="property_flags">Read / Write</td>
+</tr>
+<tr>
+<td class="property_type"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint"><span class="type">gint</span></a></td>
+<td class="property_name"><a class="link" href="gst-plugins-bad-plugins-audioparse.html#GstAudioParse--rate" title="The “rate” property">rate</a></td>
+<td class="property_flags">Read / Write</td>
+</tr>
+<tr>
+<td class="property_type"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></td>
+<td class="property_name"><a class="link" href="gst-plugins-bad-plugins-audioparse.html#GstAudioParse--signed" title="The “signed” property">signed</a></td>
+<td class="property_flags">Read / Write</td>
+</tr>
+<tr>
+<td class="property_type"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint"><span class="type">gint</span></a></td>
+<td class="property_name"><a class="link" href="gst-plugins-bad-plugins-audioparse.html#GstAudioParse--width" title="The “width” property">width</a></td>
+<td class="property_flags">Read / Write</td>
+</tr>
+<tr>
+<td class="property_type">
+<a href="/usr/share/gtk-doc/html/gobjectgobject-Value-arrays.html#GValueArray"><span class="type">GValueArray</span></a> *</td>
+<td class="property_name"><a class="link" href="gst-plugins-bad-plugins-audioparse.html#GstAudioParse--channel-positions" title="The “channel-positions” property">channel-positions</a></td>
+<td class="property_flags">Read / Write</td>
+</tr>
+<tr>
+<td class="property_type"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></td>
+<td class="property_name"><a class="link" href="gst-plugins-bad-plugins-audioparse.html#GstAudioParse--interleaved" title="The “interleaved” property">interleaved</a></td>
+<td class="property_flags">Read / Write</td>
+</tr>
+<tr>
+<td class="property_type"><a href="/usr/share/gtk-doc/html/gst-plugins-base-libs-1.0gst-plugins-base-libs-gstaudio.html#GstAudioFormat"><span class="type">GstAudioFormat</span></a></td>
+<td class="property_name"><a class="link" href="gst-plugins-bad-plugins-audioparse.html#GstAudioParse--raw-format" title="The “raw-format” property">raw-format</a></td>
+<td class="property_flags">Read / Write</td>
+</tr>
+<tr>
+<td class="property_type"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></td>
+<td class="property_name"><a class="link" href="gst-plugins-bad-plugins-audioparse.html#GstAudioParse--use-sink-caps" title="The “use-sink-caps” property">use-sink-caps</a></td>
+<td class="property_flags">Read / Write</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<a name="GstAudioParse"></a><div class="refsect1">
+<a name="gst-plugins-bad-plugins-audioparse.other"></a><h2>Types and Values</h2>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="name">
+<col class="description">
+</colgroup>
+<tbody><tr>
+<td class="datatype_keyword">struct</td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-plugins-audioparse.html#GstAudioParse-struct" title="struct GstAudioParse">GstAudioParse</a></td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-audioparse.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="screen"> <a href="/usr/share/gtk-doc/html/gobjectgobject-The-Base-Object-Type.html#GObject-struct">GObject</a>
+ <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gobjectgobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
+ <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstObject.html#GstObject-struct">GstObject</a>
+ <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#GstElement-struct">GstElement</a>
+ <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstBin.html#GstBin-struct">GstBin</a>
+ <span class="lineart">╰──</span> GstAudioParse
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-audioparse.implemented-interfaces"></a><h2>Implemented Interfaces</h2>
+<p>
+GstAudioParse implements
+ <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstChildProxy.html#GstChildProxy-struct">GstChildProxy</a>.</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-audioparse.description"></a><h2>Description</h2>
+<p>Converts a byte stream into audio frames.</p>
+<div class="note">This element is deprecated. Use <a class="link" href="gst-plugins-bad-plugins-rawaudioparse.html#GstRawAudioParse"><span class="type">GstRawAudioParse</span></a> instead.</div>
+<div class="refsynopsisdiv">
+<h2>Synopsis</h2>
+<div class="refsect2">
+<a name="id-1.2.8.8.4.1"></a><h3>Element Information</h3>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term">plugin</span></p></td>
+<td>
+ <a class="link" href="gst-plugins-bad-plugins-plugin-rawparse.html#plugin-rawparse">rawparse</a>
+ </td>
+</tr>
+<tr>
+<td><p><span class="term">author</span></p></td>
+<td>Sebastian Dröge <sebastian.droege@collabora.co.uk></td>
+</tr>
+<tr>
+<td><p><span class="term">class</span></p></td>
+<td>Filter/Audio</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="id-1.2.8.8.4.2"></a><h3>Element Pads</h3>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>ANY</td>
+</tr>
+</tbody>
+</table></div>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>src</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>source</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>audio/x-raw, format=(string){ S8, U8, S16LE, S16BE, U16LE, U16BE, S24_32LE, S24_32BE, U24_32LE, U24_32BE, S32LE, S32BE, U32LE, U32BE, S24LE, S24BE, U24LE, U24BE, S20LE, S20BE, U20LE, U20BE, S18LE, S18BE, U18LE, U18BE, F32LE, F32BE, F64LE, F64BE }, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ], layout=(string){ interleaved, non-interleaved }</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> audio/x-unaligned-raw, format=(string){ S8, U8, S16LE, S16BE, U16LE, U16BE, S24_32LE, S24_32BE, U24_32LE, U24_32BE, S32LE, S32BE, U32LE, U32BE, S24LE, S24BE, U24LE, U24BE, S20LE, S20BE, U20LE, U20BE, S18LE, S18BE, U18LE, U18BE, F32LE, F32BE, F64LE, F64BE }, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ], layout=(string){ interleaved, non-interleaved }</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> audio/x-alaw, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> audio/x-mulaw, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ]</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-audioparse.functions_details"></a><h2>Functions</h2>
+<p></p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-audioparse.other_details"></a><h2>Types and Values</h2>
+<div class="refsect2">
+<a name="GstAudioParse-struct"></a><h3>struct GstAudioParse</h3>
+<pre class="programlisting">struct GstAudioParse;</pre>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-audioparse.property-details"></a><h2>Property Details</h2>
+<div class="refsect2">
+<a name="GstAudioParse--channels"></a><h3>The <code class="literal">“channels”</code> property</h3>
+<pre class="programlisting"> “channels” <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint"><span class="type">gint</span></a></pre>
+<p>Number of channels in raw stream.</p>
+<p>Flags: Read / Write</p>
+<p>Allowed values: [1,64]</p>
+<p>Default value: 2</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstAudioParse--depth"></a><h3>The <code class="literal">“depth”</code> property</h3>
+<pre class="programlisting"> “depth” <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint"><span class="type">gint</span></a></pre>
+<p>Depth of audio samples in raw stream.</p>
+<p>Flags: Read / Write</p>
+<p>Allowed values: >= 1</p>
+<p>Default value: 16</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstAudioParse--endianness"></a><h3>The <code class="literal">“endianness”</code> property</h3>
+<pre class="programlisting"> “endianness” <span class="type">GstAudioParseEndianness</span></pre>
+<p>Endianness of audio samples in raw stream.</p>
+<p>Flags: Read / Write</p>
+<p>Default value: Little Endian</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstAudioParse--format"></a><h3>The <code class="literal">“format”</code> property</h3>
+<pre class="programlisting"> “format” <span class="type">GstAudioParseFormat</span></pre>
+<p>Format of audio samples in raw stream.</p>
+<p>Flags: Read / Write</p>
+<p>Default value: Raw</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstAudioParse--rate"></a><h3>The <code class="literal">“rate”</code> property</h3>
+<pre class="programlisting"> “rate” <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint"><span class="type">gint</span></a></pre>
+<p>Rate of audio samples in raw stream.</p>
+<p>Flags: Read / Write</p>
+<p>Allowed values: >= 1</p>
+<p>Default value: 44100</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstAudioParse--signed"></a><h3>The <code class="literal">“signed”</code> property</h3>
+<pre class="programlisting"> “signed” <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></pre>
+<p>Sign of audio samples in raw stream.</p>
+<p>Flags: Read / Write</p>
+<p>Default value: TRUE</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstAudioParse--width"></a><h3>The <code class="literal">“width”</code> property</h3>
+<pre class="programlisting"> “width” <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint"><span class="type">gint</span></a></pre>
+<p>Width of audio samples in raw stream.</p>
+<p>Flags: Read / Write</p>
+<p>Allowed values: >= 1</p>
+<p>Default value: 16</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstAudioParse--channel-positions"></a><h3>The <code class="literal">“channel-positions”</code> property</h3>
+<pre class="programlisting"> “channel-positions” <a href="/usr/share/gtk-doc/html/gobjectgobject-Value-arrays.html#GValueArray"><span class="type">GValueArray</span></a> *</pre>
+<p>Channel positions used on the output.</p>
+<p>Flags: Read / Write</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstAudioParse--interleaved"></a><h3>The <code class="literal">“interleaved”</code> property</h3>
+<pre class="programlisting"> “interleaved” <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></pre>
+<p>True if audio has interleaved layout.</p>
+<p>Flags: Read / Write</p>
+<p>Default value: TRUE</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstAudioParse--raw-format"></a><h3>The <code class="literal">“raw-format”</code> property</h3>
+<pre class="programlisting"> “raw-format” <a href="/usr/share/gtk-doc/html/gst-plugins-base-libs-1.0gst-plugins-base-libs-gstaudio.html#GstAudioFormat"><span class="type">GstAudioFormat</span></a></pre>
+<p>Format of audio samples in raw stream.</p>
+<p>Flags: Read / Write</p>
+<p>Default value: GST_AUDIO_FORMAT_S16LE</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstAudioParse--use-sink-caps"></a><h3>The <code class="literal">“use-sink-caps”</code> property</h3>
+<pre class="programlisting"> “use-sink-caps” <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></pre>
+<p>Use the sink caps for the format, only performing timestamping.</p>
+<p>Flags: Read / Write</p>
+<p>Default value: FALSE</p>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>Generated by GTK-Doc V1.25</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-autoconvert.html b/docs/plugins/html/gst-plugins-bad-plugins-autoconvert.html
index b352b06..2432e32 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-autoconvert.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-autoconvert.html
@@ -6,7 +6,7 @@
<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
<link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
<link rel="up" href="ch01.html" title="gst-plugins-bad Elements">
-<link rel="prev" href="gst-plugins-bad-plugins-audiomixer.html" title="audiomixer">
+<link rel="prev" href="gst-plugins-bad-plugins-audioparse.html" title="audioparse">
<link rel="next" href="gst-plugins-bad-plugins-bs2b.html" title="bs2b">
<meta name="generator" content="GTK-Doc V1.25 (XML mode)">
<link rel="stylesheet" href="style.css" type="text/css">
@@ -22,7 +22,7 @@
</td>
<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
<td><a accesskey="u" href="ch01.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
-<td><a accesskey="p" href="gst-plugins-bad-plugins-audiomixer.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="p" href="gst-plugins-bad-plugins-audioparse.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
<td><a accesskey="n" href="gst-plugins-bad-plugins-bs2b.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
</tr></table>
<div class="refentry">
@@ -98,7 +98,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="id-1.2.8.8.4.1"></a><h3>Element Information</h3>
+<a name="id-1.2.9.8.4.1"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
@@ -124,7 +124,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="id-1.2.8.8.4.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.9.8.4.2"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-bs2b.html b/docs/plugins/html/gst-plugins-bad-plugins-bs2b.html
index 7411cd8..610db8d 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-bs2b.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-bs2b.html
@@ -92,7 +92,7 @@
It does so by mixing the left and right channel in a way that simulates
a stereo speaker setup while using headphones.</p>
<div class="refsect2">
-<a name="id-1.2.9.8.3"></a><h3>Example pipelines</h3>
+<a name="id-1.2.10.8.3"></a><h3>Example pipelines</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -108,7 +108,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="id-1.2.9.8.4.1"></a><h3>Element Information</h3>
+<a name="id-1.2.10.8.4.1"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
@@ -134,7 +134,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="id-1.2.9.8.4.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.10.8.4.2"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-bulge.html b/docs/plugins/html/gst-plugins-bad-plugins-bulge.html
index 0c63bd8..63ec883 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-bulge.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-bulge.html
@@ -79,7 +79,7 @@
<p>Bugle is a geometric image transform element. It adds a protuberance in the
center point.</p>
<div class="refsect2">
-<a name="id-1.2.10.7.3"></a><h3>Example launch line</h3>
+<a name="id-1.2.11.7.3"></a><h3>Example launch line</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -95,7 +95,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="id-1.2.10.7.4.1"></a><h3>Element Information</h3>
+<a name="id-1.2.11.7.4.1"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
@@ -121,7 +121,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="id-1.2.10.7.4.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.11.7.4.2"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-burn.html b/docs/plugins/html/gst-plugins-bad-plugins-burn.html
index b073437..5a1242b 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-burn.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-burn.html
@@ -83,7 +83,7 @@
<a name="gst-plugins-bad-plugins-burn.description"></a><h2>Description</h2>
<p>Burn adjusts the colors of a video stream in realtime.</p>
<div class="refsect2">
-<a name="id-1.2.11.7.3"></a><h3>Example launch line</h3>
+<a name="id-1.2.12.7.3"></a><h3>Example launch line</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -99,7 +99,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="id-1.2.11.7.4.1"></a><h3>Element Information</h3>
+<a name="id-1.2.12.7.4.1"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
@@ -125,7 +125,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="id-1.2.11.7.4.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.12.7.4.2"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-camerabin.html b/docs/plugins/html/gst-plugins-bad-plugins-camerabin.html
index f0def8f..0236422 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-camerabin.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-camerabin.html
@@ -33,10 +33,126 @@
</tr></table></div>
<div class="refsect1">
<a name="gst-plugins-bad-plugins-camerabin.description"></a><h2>Description</h2>
+<p>CameraBin is a high-level camera object that encapsulates gstreamer
+elements, providing an API for controlling a digital camera.</p>
+<div class="note">
+Note that camerabin is still UNSTABLE and under development.
+</div>
+<p>CameraBin has the following main features:</p>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
+<li class="listitem">
+Record videos
+</li>
+<li class="listitem">
+Capture pictures
+</li>
+<li class="listitem">
+Display a viewfinder
+</li>
+<li class="listitem">
+Post preview images for each capture (video and image)
+</li>
+</ul></div>
+<div class="refsect2">
+<a name="id-1.2.13.3.6"></a><h3>Usage</h3>
+<p>
+Camerabin can be created using <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElementFactory.html#gst-element-factory-make"><code class="function">gst_element_factory_make()</code></a> just like
+any other element. Video or image capture mode can be selected using
+the <span class="type">“mode”</span> property and the file to save the capture is
+selected using <span class="type">“location”</span> property.
+
+After creating camerabin, applications might want to do some
+customization (there's a section about this below), then select
+the desired mode and start capturing.
+
+In image capture mode, just send a <span class="type">“start-capture”</span> and a
+picture will be captured. When the picture is stored on the selected
+location, a <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstMessage.html#GST-MESSAGE-ELEMENT:CAPS"><code class="literal">GST_MESSAGE_ELEMENT</code></a> named 'image-done' will be posted on
+the <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstBus.html#GstBus-struct"><span class="type">GstBus</span></a>.
+
+In video capture mode, send a <span class="type">“start-capture”</span> to start
+recording, then send a <span class="type">“stop-capture”</span> to stop recording.
+Note that both signals are asynchronous, so, calling
+<span class="type">“stop-capture”</span> doesn't guarantee that the video has been
+properly finished yet. Applications should wait for the 'video-done'
+message to be posted on the bus.
+
+In both modes, if <span class="type">“post-previews”</span> is <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a>, a <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstBuffer.html#GstBuffer-struct"><span class="type">GstBuffer</span></a>
+will be post to the <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstBus.html#GstBus-struct"><span class="type">GstBus</span></a> in a field named 'buffer', in a
+'preview-image' message of type <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstMessage.html#GST-MESSAGE-ELEMENT:CAPS"><code class="literal">GST_MESSAGE_ELEMENT</code></a>.
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="id-1.2.13.3.7"></a><h3>Customization</h3>
+<p>
+Camerabin provides various customization properties, allowing the user
+to set custom filters, selecting the viewfinder sink and formats to
+use to encode the captured images/videos.
+
+<a href="/usr/share/gtk-doc/html/gst-plugins-base-libs-1.0gst-plugins-base-libs-encoding-profile.html#GstEncodingProfile-struct"><span class="type">GstEncodingProfile</span></a>s are used to tell camerabin which formats it
+should encode the captures to, those should be set to
+<span class="type">“image-profile”</span> and <span class="type">“video-profile”</span>. Default is
+jpeg for images, and ogg (theora and vorbis) for video. If a profile without
+an audio stream is set for video, audio will be disabled on recordings.
+
+<span class="type">“preview-caps”</span> can be used to select which format preview
+images should be posted on the <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstBus.html#GstBus-struct"><span class="type">GstBus</span></a>. It has to be a raw video format.
+
+Camerabin has a <span class="type">“camera-source”</span> property so applications can
+set their source that will provide buffers for the viewfinder and for
+captures. This camera source is a special type of source that has 3 pads.
+To use a 'regular' source with a single pad you should use
+<span class="type">GstWrapperCameraBinSource</span>, it will adapt your source and provide 3 pads.
+
+Applications can also select the desired viewfinder sink using
+<span class="type">“viewfinder-sink”</span>, it is also possible to select the audio
+source using <span class="type">“audio-source”</span>.
+
+The viewfinder resolution can be configured using
+<span class="type">“viewfinder-caps”</span>, these <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstCaps.html#GstCaps-struct"><span class="type">GstCaps</span></a> should be a subset of
+<span class="type">“viewfinder-supported-caps”</span>.
+
+To select the desired resolution for captures, camerabin provides
+<span class="type">“image-capture-caps”</span> and <span class="type">“video-capture-caps”</span>,
+these caps must be a subset of what the source can produce. The allowed
+caps can be probed using <span class="type">“image-capture-supported-caps”</span> and
+<span class="type">“video-capture-supported-caps”</span>. In an analogous way, there
+are <span class="type">“audio-capture-caps”</span> and
+<span class="type">“audio-capture-supported-caps”</span>.
+
+Camerabin also allows applications to insert custom <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#GstElement-struct"><span class="type">GstElements</span></a> on any
+of its branches: video capture, image capture, viewfinder and preview.
+Check <span class="type">“video-filter”</span>, <span class="type">“image-filter”</span>,
+<span class="type">“viewfinder-filter”</span> and <span class="type">“preview-filter”</span>.
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="id-1.2.13.3.8"></a><h3>Example launch line</h3>
+<p>
+Unfortunately, camerabin can't be really used from gst-launch-1.0, as you
+need to send signals to control it. The following pipeline might be able
+to show the viewfinder using all the default elements.
+</p>
+<div class="informalexample">
+ <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
+ <tbody>
+ <tr>
+ <td class="listing_lines" align="right"><pre>1</pre></td>
+ <td class="listing_code"><pre class="programlisting">gst<span class="gtkdoc opt">-</span>launch<span class="gtkdoc opt">-</span><span class="number">1.0</span> <span class="gtkdoc opt">-</span>v <span class="gtkdoc opt">-</span>m camerabin</pre></td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+
+<p>
+</p>
+</div>
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="id-1.2.12.3.2.1"></a><h3>Element Information</h3>
+<a name="id-1.2.13.3.9.1"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
@@ -62,7 +178,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="id-1.2.12.3.2.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.13.3.9.2"></a><h3>Element Pads</h3>
</div>
</div>
</div>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-chromium.html b/docs/plugins/html/gst-plugins-bad-plugins-chromium.html
index da80981..4b76f1e 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-chromium.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-chromium.html
@@ -68,8 +68,8 @@
<col class="description">
</colgroup>
<tbody><tr>
-<td class="typedef_keyword">typedef</td>
-<td class="function_name"><a class="link" href="gst-plugins-bad-plugins-chromium.html#GstChromium">GstChromium</a></td>
+<td class="datatype_keyword">struct</td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-plugins-chromium.html#GstChromium-struct" title="struct GstChromium">GstChromium</a></td>
</tr></tbody>
</table></div>
</div>
@@ -88,7 +88,7 @@
<a name="gst-plugins-bad-plugins-chromium.description"></a><h2>Description</h2>
<p>Chromium breaks the colors of a video stream in realtime.</p>
<div class="refsect2">
-<a name="id-1.2.13.7.3"></a><h3>Example launch line</h3>
+<a name="id-1.2.14.7.3"></a><h3>Example launch line</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -104,7 +104,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="id-1.2.13.7.4.1"></a><h3>Element Information</h3>
+<a name="id-1.2.14.7.4.1"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
@@ -130,7 +130,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="id-1.2.13.7.4.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.14.7.4.2"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
@@ -189,9 +189,8 @@
<div class="refsect1">
<a name="gst-plugins-bad-plugins-chromium.other_details"></a><h2>Types and Values</h2>
<div class="refsect2">
-<a name="GstChromium"></a><h3>GstChromium</h3>
-<pre class="programlisting">typedef struct GstChromium GstChromium;
-</pre>
+<a name="GstChromium-struct"></a><h3>struct GstChromium</h3>
+<pre class="programlisting">struct GstChromium;</pre>
</div>
</div>
<div class="refsect1">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-circle.html b/docs/plugins/html/gst-plugins-bad-plugins-circle.html
index 868ec80..a025dde 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-circle.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-circle.html
@@ -91,7 +91,7 @@
<p>Circle is a geometric image transform element. It warps the picture into an
arc shaped form.</p>
<div class="refsect2">
-<a name="id-1.2.14.7.3"></a><h3>Example launch line</h3>
+<a name="id-1.2.15.7.3"></a><h3>Example launch line</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -107,7 +107,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="id-1.2.14.7.4.1"></a><h3>Element Information</h3>
+<a name="id-1.2.15.7.4.1"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
@@ -133,7 +133,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="id-1.2.14.7.4.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.15.7.4.2"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-coloreffects.html b/docs/plugins/html/gst-plugins-bad-plugins-coloreffects.html
index 9adb740..0cc39c4 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-coloreffects.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-coloreffects.html
@@ -82,7 +82,7 @@
<a name="gst-plugins-bad-plugins-coloreffects.description"></a><h2>Description</h2>
<p>Map colors of the video input to a lookup table</p>
<div class="refsect2">
-<a name="id-1.2.15.7.3"></a><h3>Example launch line</h3>
+<a name="id-1.2.16.7.3"></a><h3>Example launch line</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -100,7 +100,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="id-1.2.15.7.4.1"></a><h3>Element Information</h3>
+<a name="id-1.2.16.7.4.1"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
@@ -126,7 +126,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="id-1.2.15.7.4.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.16.7.4.2"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
@@ -192,7 +192,7 @@
<hr>
<div class="refsect2">
<a name="GstColorEffectsPreset"></a><h3>enum GstColorEffectsPreset</h3>
-<p>The lookup table to use to convert input colors</p>
+<p>How to split the video frame and which side reflect</p>
<div class="refsect3">
<a name="GstColorEffectsPreset.members"></a><h4>Members</h4>
<div class="informaltable"><table class="informaltable" width="100%" border="0">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-compositor.html b/docs/plugins/html/gst-plugins-bad-plugins-compositor.html
index 968bf0d..47d9e71 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-compositor.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-compositor.html
@@ -122,7 +122,7 @@
</li>
</ul></div>
<div class="refsect2">
-<a name="id-1.2.16.8.6"></a><h3>Sample pipelines</h3>
+<a name="id-1.2.17.8.6"></a><h3>Sample pipelines</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -221,7 +221,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="id-1.2.16.8.7.1"></a><h3>Element Information</h3>
+<a name="id-1.2.17.8.7.1"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
@@ -247,7 +247,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="id-1.2.16.8.7.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.17.8.7.2"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-cvdilate.html b/docs/plugins/html/gst-plugins-bad-plugins-cvdilate.html
index 50c3922..e740efd 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-cvdilate.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-cvdilate.html
@@ -62,7 +62,7 @@
<a name="gst-plugins-bad-plugins-cvdilate.description"></a><h2>Description</h2>
<p>Dilates the image with the cvDilate OpenCV function.</p>
<div class="refsect2">
-<a name="id-1.2.17.6.3"></a><h3>Example launch line</h3>
+<a name="id-1.2.18.6.3"></a><h3>Example launch line</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -78,7 +78,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="id-1.2.17.6.4.1"></a><h3>Element Information</h3>
+<a name="id-1.2.18.6.4.1"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
@@ -104,7 +104,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="id-1.2.17.6.4.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.18.6.4.2"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-cvequalizehist.html b/docs/plugins/html/gst-plugins-bad-plugins-cvequalizehist.html
index e31ee3d..cabaa3c 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-cvequalizehist.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-cvequalizehist.html
@@ -62,7 +62,7 @@
<p>Equalizes the histogram of a grayscale image with the cvEqualizeHist OpenCV
function.</p>
<div class="refsect2">
-<a name="id-1.2.19.6.3"></a><h3>Example launch line</h3>
+<a name="id-1.2.20.6.3"></a><h3>Example launch line</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -78,7 +78,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="id-1.2.19.6.4.1"></a><h3>Element Information</h3>
+<a name="id-1.2.20.6.4.1"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
@@ -104,7 +104,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="id-1.2.19.6.4.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.20.6.4.2"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-cverode.html b/docs/plugins/html/gst-plugins-bad-plugins-cverode.html
index 0601245..b2fe282 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-cverode.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-cverode.html
@@ -62,7 +62,7 @@
<a name="gst-plugins-bad-plugins-cverode.description"></a><h2>Description</h2>
<p>Erodes the image with the cvErode OpenCV function.</p>
<div class="refsect2">
-<a name="id-1.2.18.6.3"></a><h3>Example launch line</h3>
+<a name="id-1.2.19.6.3"></a><h3>Example launch line</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -78,7 +78,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="id-1.2.18.6.4.1"></a><h3>Element Information</h3>
+<a name="id-1.2.19.6.4.1"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
@@ -104,7 +104,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="id-1.2.18.6.4.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.19.6.4.2"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-cvlaplace.html b/docs/plugins/html/gst-plugins-bad-plugins-cvlaplace.html
index d09961b..22d241c 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-cvlaplace.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-cvlaplace.html
@@ -94,7 +94,7 @@
<a name="gst-plugins-bad-plugins-cvlaplace.description"></a><h2>Description</h2>
<p>Applies cvLaplace OpenCV function to the image.</p>
<div class="refsect2">
-<a name="id-1.2.20.7.3"></a><h3>Example launch line</h3>
+<a name="id-1.2.21.7.3"></a><h3>Example launch line</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -110,7 +110,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="id-1.2.20.7.4.1"></a><h3>Element Information</h3>
+<a name="id-1.2.21.7.4.1"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
@@ -136,7 +136,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="id-1.2.20.7.4.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.21.7.4.2"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-cvsmooth.html b/docs/plugins/html/gst-plugins-bad-plugins-cvsmooth.html
index 8f1476d..271f3ab 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-cvsmooth.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-cvsmooth.html
@@ -119,7 +119,7 @@
<a name="gst-plugins-bad-plugins-cvsmooth.description"></a><h2>Description</h2>
<p>Smooths the image using thes cvSmooth OpenCV function.</p>
<div class="refsect2">
-<a name="id-1.2.21.7.3"></a><h3>Example launch line</h3>
+<a name="id-1.2.22.7.3"></a><h3>Example launch line</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -135,7 +135,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="id-1.2.21.7.4.1"></a><h3>Element Information</h3>
+<a name="id-1.2.22.7.4.1"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
@@ -161,7 +161,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="id-1.2.21.7.4.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.22.7.4.2"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-cvsobel.html b/docs/plugins/html/gst-plugins-bad-plugins-cvsobel.html
index ae72eb7..b761de3 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-cvsobel.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-cvsobel.html
@@ -94,7 +94,7 @@
<a name="gst-plugins-bad-plugins-cvsobel.description"></a><h2>Description</h2>
<p>Applies the cvSobel OpenCV function to the image.</p>
<div class="refsect2">
-<a name="id-1.2.22.7.3"></a><h3>Example launch line</h3>
+<a name="id-1.2.23.7.3"></a><h3>Example launch line</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -110,7 +110,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="id-1.2.22.7.4.1"></a><h3>Element Information</h3>
+<a name="id-1.2.23.7.4.1"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
@@ -136,7 +136,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="id-1.2.22.7.4.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.23.7.4.2"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-dataurisrc.html b/docs/plugins/html/gst-plugins-bad-plugins-dataurisrc.html
index baa0ce1..2365ca4 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-dataurisrc.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-dataurisrc.html
@@ -83,7 +83,7 @@
<a name="gst-plugins-bad-plugins-dataurisrc.description"></a><h2>Description</h2>
<p>dataurisrc handles data: URIs, see <a class="ulink" href="http://tools.ietf.org/html/rfc2397" target="_top">RFC 2397</a> for more information.</p>
<div class="refsect2">
-<a name="id-1.2.23.8.3"></a><h3>Example launch line</h3>
+<a name="id-1.2.24.8.3"></a><h3>Example launch line</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -99,7 +99,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="id-1.2.23.8.4.1"></a><h3>Element Information</h3>
+<a name="id-1.2.24.8.4.1"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
@@ -125,7 +125,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="id-1.2.23.8.4.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.24.8.4.2"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-diffuse.html b/docs/plugins/html/gst-plugins-bad-plugins-diffuse.html
index 81a0a83..4713000 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-diffuse.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-diffuse.html
@@ -78,7 +78,7 @@
<p>Diffuse is a geometric image transform element. It diffuses the image by
moving its pixels in random directions.</p>
<div class="refsect2">
-<a name="id-1.2.24.7.3"></a><h3>Example launch line</h3>
+<a name="id-1.2.25.7.3"></a><h3>Example launch line</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -94,7 +94,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="id-1.2.24.7.4.1"></a><h3>Element Information</h3>
+<a name="id-1.2.25.7.4.1"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
@@ -120,7 +120,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="id-1.2.24.7.4.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.25.7.4.2"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-dilate.html b/docs/plugins/html/gst-plugins-bad-plugins-dilate.html
index 85a5b4d..6d8d482 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-dilate.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-dilate.html
@@ -83,7 +83,7 @@
<a name="gst-plugins-bad-plugins-dilate.description"></a><h2>Description</h2>
<p>Dilate adjusts the colors of a video stream in realtime.</p>
<div class="refsect2">
-<a name="id-1.2.25.7.3"></a><h3>Example launch line</h3>
+<a name="id-1.2.26.7.3"></a><h3>Example launch line</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -99,7 +99,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="id-1.2.25.7.4.1"></a><h3>Element Information</h3>
+<a name="id-1.2.26.7.4.1"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
@@ -125,7 +125,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="id-1.2.25.7.4.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.26.7.4.2"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-dodge.html b/docs/plugins/html/gst-plugins-bad-plugins-dodge.html
index 21a0ec1..0b69182 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-dodge.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-dodge.html
@@ -76,7 +76,7 @@
<a name="gst-plugins-bad-plugins-dodge.description"></a><h2>Description</h2>
<p>Dodge saturates the colors of a video stream in realtime.</p>
<div class="refsect2">
-<a name="id-1.2.26.7.3"></a><h3>Example launch line</h3>
+<a name="id-1.2.27.7.3"></a><h3>Example launch line</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -92,7 +92,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="id-1.2.26.7.4.1"></a><h3>Element Information</h3>
+<a name="id-1.2.27.7.4.1"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
@@ -118,7 +118,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="id-1.2.26.7.4.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.27.7.4.2"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-dtmfdetect.html b/docs/plugins/html/gst-plugins-bad-plugins-dtmfdetect.html
index 43092e6..f804dd8 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-dtmfdetect.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-dtmfdetect.html
@@ -81,7 +81,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="id-1.2.27.6.5.1"></a><h3>Element Information</h3>
+<a name="id-1.2.28.6.5.1"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
@@ -107,7 +107,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="id-1.2.27.6.5.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.28.6.5.2"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-dtsdec.html b/docs/plugins/html/gst-plugins-bad-plugins-dtsdec.html
index 7b494d7..d67f234 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-dtsdec.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-dtsdec.html
@@ -75,7 +75,7 @@
<a name="gst-plugins-bad-plugins-dtsdec.description"></a><h2>Description</h2>
<p>Digital Theatre System (DTS) audio decoder</p>
<div class="refsect2">
-<a name="id-1.2.28.7.3"></a><h3>Example launch line</h3>
+<a name="id-1.2.29.7.3"></a><h3>Example launch line</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -102,7 +102,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="id-1.2.28.7.4.1"></a><h3>Element Information</h3>
+<a name="id-1.2.29.7.4.1"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
@@ -128,7 +128,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="id-1.2.28.7.4.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.29.7.4.2"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-dvbsrc.html b/docs/plugins/html/gst-plugins-bad-plugins-dvbsrc.html
index a71cc8d..200f335 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-dvbsrc.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-dvbsrc.html
@@ -369,7 +369,7 @@
<p>dvbsrc can be used to capture media from DVB cards. Supported DTV
broadcasting standards include DVB-T/C/S, ATSC, ISDB-T and DTMB.</p>
<div class="refsect2">
-<a name="id-1.2.29.8.3"></a><h3>Example launch line</h3>
+<a name="id-1.2.30.8.3"></a><h3>Example launch line</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -429,7 +429,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="id-1.2.29.8.4.1"></a><h3>Element Information</h3>
+<a name="id-1.2.30.8.4.1"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
@@ -456,7 +456,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="id-1.2.29.8.4.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.30.8.4.2"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-dvdspu.html b/docs/plugins/html/gst-plugins-bad-plugins-dvdspu.html
index 3c2c75c..17629d0 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-dvdspu.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-dvdspu.html
@@ -58,7 +58,7 @@
<a name="gst-plugins-bad-plugins-dvdspu.description"></a><h2>Description</h2>
<p>DVD sub picture overlay element.</p>
<div class="refsect2">
-<a name="id-1.2.30.6.3"></a><h3>Example launch line</h3>
+<a name="id-1.2.31.6.3"></a><h3>Example launch line</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -74,7 +74,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="id-1.2.30.6.4.1"></a><h3>Element Information</h3>
+<a name="id-1.2.31.6.4.1"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
@@ -100,7 +100,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="id-1.2.30.6.4.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.31.6.4.2"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-edgedetect.html b/docs/plugins/html/gst-plugins-bad-plugins-edgedetect.html
index 5802825..f105b6a 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-edgedetect.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-edgedetect.html
@@ -94,7 +94,7 @@
<a name="gst-plugins-bad-plugins-edgedetect.description"></a><h2>Description</h2>
<p>Performs canny edge detection on videos and images</p>
<div class="refsect2">
-<a name="id-1.2.32.7.3"></a><h3>Example launch line</h3>
+<a name="id-1.2.33.7.3"></a><h3>Example launch line</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -110,7 +110,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="id-1.2.32.7.4.1"></a><h3>Element Information</h3>
+<a name="id-1.2.33.7.4.1"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
@@ -136,7 +136,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="id-1.2.32.7.4.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.33.7.4.2"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-exclusion.html b/docs/plugins/html/gst-plugins-bad-plugins-exclusion.html
index 23fac6e..d34c0e9 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-exclusion.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-exclusion.html
@@ -83,7 +83,7 @@
<a name="gst-plugins-bad-plugins-exclusion.description"></a><h2>Description</h2>
<p>Exclusion saturates the colors of a video stream in realtime.</p>
<div class="refsect2">
-<a name="id-1.2.31.7.3"></a><h3>Example launch line</h3>
+<a name="id-1.2.32.7.3"></a><h3>Example launch line</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -99,7 +99,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="id-1.2.31.7.4.1"></a><h3>Element Information</h3>
+<a name="id-1.2.32.7.4.1"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
@@ -125,7 +125,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="id-1.2.31.7.4.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.32.7.4.2"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-faac.html b/docs/plugins/html/gst-plugins-bad-plugins-faac.html
index faac749..082180e 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-faac.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-faac.html
@@ -119,7 +119,7 @@
<a name="gst-plugins-bad-plugins-faac.description"></a><h2>Description</h2>
<p>faac encodes raw audio to AAC (MPEG-4 part 3) streams.</p>
<div class="refsect2">
-<a name="id-1.2.33.8.3"></a><h3>Example launch line</h3>
+<a name="id-1.2.34.8.3"></a><h3>Example launch line</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -135,7 +135,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="id-1.2.33.8.4.1"></a><h3>Element Information</h3>
+<a name="id-1.2.34.8.4.1"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
@@ -161,7 +161,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="id-1.2.33.8.4.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.34.8.4.2"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-faad.html b/docs/plugins/html/gst-plugins-bad-plugins-faad.html
index c066761..b29896b 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-faad.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-faad.html
@@ -59,7 +59,7 @@
<a name="gst-plugins-bad-plugins-faad.description"></a><h2>Description</h2>
<p>faad decodes AAC (MPEG-4 part 3) stream.</p>
<div class="refsect2">
-<a name="id-1.2.34.6.3"></a><h3>Example launch lines</h3>
+<a name="id-1.2.35.6.3"></a><h3>Example launch lines</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -86,7 +86,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="id-1.2.34.6.4.1"></a><h3>Element Information</h3>
+<a name="id-1.2.35.6.4.1"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
@@ -112,7 +112,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="id-1.2.34.6.4.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.35.6.4.2"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-faceblur.html b/docs/plugins/html/gst-plugins-bad-plugins-faceblur.html
index 75812ff..c51e369 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-faceblur.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-faceblur.html
@@ -105,7 +105,7 @@
<a name="gst-plugins-bad-plugins-faceblur.description"></a><h2>Description</h2>
<p>Blurs faces in images and videos.</p>
<div class="refsect2">
-<a name="id-1.2.35.7.3"></a><h3>Example launch line</h3>
+<a name="id-1.2.36.7.3"></a><h3>Example launch line</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -121,7 +121,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="id-1.2.35.7.4.1"></a><h3>Element Information</h3>
+<a name="id-1.2.36.7.4.1"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
@@ -147,7 +147,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="id-1.2.35.7.4.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.36.7.4.2"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
@@ -217,7 +217,7 @@
<pre class="programlisting"> “profile” <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</pre>
<p>Location of Haar cascade file to use for face blurion.</p>
<p>Flags: Read / Write</p>
-<p>Default value: "/usr/share/opencv/haarcascades/haarcascade_frontalface_default.xml"</p>
+<p>Default value: "/usr/share/OpenCV/haarcascades/haarcascade_frontalface_default.xml"</p>
</div>
<hr>
<div class="refsect2">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-facedetect.html b/docs/plugins/html/gst-plugins-bad-plugins-facedetect.html
index 4562a01..b2e77fa 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-facedetect.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-facedetect.html
@@ -148,7 +148,7 @@
until the size is <= GstFaceDetect::min-size-width or
GstFaceDetect::min-size-height.</p>
<div class="refsect2">
-<a name="id-1.2.36.7.4"></a><h3>Example launch line</h3>
+<a name="id-1.2.37.7.4"></a><h3>Example launch line</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -176,7 +176,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="id-1.2.36.7.5.1"></a><h3>Element Information</h3>
+<a name="id-1.2.37.7.5.1"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
@@ -202,7 +202,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="id-1.2.36.7.5.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.37.7.5.2"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
@@ -325,7 +325,7 @@
<pre class="programlisting"> “eyes-profile” <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</pre>
<p>Location of Haar cascade file to use for eye-pair detection.</p>
<p>Flags: Read / Write</p>
-<p>Default value: "/usr/share/opencv/haarcascades/haarcascade_mcs_eyepair_small.xml"</p>
+<p>Default value: "/usr/share/OpenCV/haarcascades/haarcascade_mcs_eyepair_small.xml"</p>
</div>
<hr>
<div class="refsect2">
@@ -368,7 +368,7 @@
<pre class="programlisting"> “mouth-profile” <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</pre>
<p>Location of Haar cascade file to use for mouth detection.</p>
<p>Flags: Read / Write</p>
-<p>Default value: "/usr/share/opencv/haarcascades/haarcascade_mcs_mouth.xml"</p>
+<p>Default value: "/usr/share/OpenCV/haarcascades/haarcascade_mcs_mouth.xml"</p>
</div>
<hr>
<div class="refsect2">
@@ -376,7 +376,7 @@
<pre class="programlisting"> “nose-profile” <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</pre>
<p>Location of Haar cascade file to use for nose detection.</p>
<p>Flags: Read / Write</p>
-<p>Default value: "/usr/share/opencv/haarcascades/haarcascade_mcs_nose.xml"</p>
+<p>Default value: "/usr/share/OpenCV/haarcascades/haarcascade_mcs_nose.xml"</p>
</div>
<hr>
<div class="refsect2">
@@ -384,7 +384,7 @@
<pre class="programlisting"> “profile” <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</pre>
<p>Location of Haar cascade file to use for face detection.</p>
<p>Flags: Read / Write</p>
-<p>Default value: "/usr/share/opencv/haarcascades/haarcascade_frontalface_default.xml"</p>
+<p>Default value: "/usr/share/OpenCV/haarcascades/haarcascade_frontalface_default.xml"</p>
</div>
<hr>
<div class="refsect2">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-festival.html b/docs/plugins/html/gst-plugins-bad-plugins-festival.html
index 367e450..7c970e5 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-festival.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-festival.html
@@ -61,7 +61,7 @@
in server mode, started as </p>
<pre class="screen">festival --server</pre>
<div class="refsect2">
-<a name="id-1.2.37.6.5"></a><h3>Example pipeline</h3>
+<a name="id-1.2.38.6.5"></a><h3>Example pipeline</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -77,7 +77,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="id-1.2.37.6.6.1"></a><h3>Element Information</h3>
+<a name="id-1.2.38.6.6.1"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
@@ -103,7 +103,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="id-1.2.37.6.6.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.38.6.6.2"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-fisheye.html b/docs/plugins/html/gst-plugins-bad-plugins-fisheye.html
index f6ed0e8..2de95f9 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-fisheye.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-fisheye.html
@@ -62,7 +62,7 @@
<p>Fisheye is a geometric image transform element. It simulates a fisheye lens
by zooming on the center of the image and compressing the edges.</p>
<div class="refsect2">
-<a name="id-1.2.38.6.3"></a><h3>Example launch line</h3>
+<a name="id-1.2.39.6.3"></a><h3>Example launch line</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -78,7 +78,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="id-1.2.38.6.4.1"></a><h3>Element Information</h3>
+<a name="id-1.2.39.6.4.1"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
@@ -104,7 +104,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="id-1.2.38.6.4.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.39.6.4.2"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-fpsdisplaysink.html b/docs/plugins/html/gst-plugins-bad-plugins-fpsdisplaysink.html
index 0955f02..68b482a 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-fpsdisplaysink.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-fpsdisplaysink.html
@@ -152,7 +152,7 @@
<a name="gst-plugins-bad-plugins-fpsdisplaysink.description"></a><h2>Description</h2>
<p>Can display the current and average framerate as a testoverlay or on stdout.</p>
<div class="refsect2">
-<a name="id-1.2.39.9.3"></a><h3>Example launch lines</h3>
+<a name="id-1.2.40.9.3"></a><h3>Example launch lines</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -174,7 +174,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="id-1.2.39.9.4.1"></a><h3>Element Information</h3>
+<a name="id-1.2.40.9.4.1"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
@@ -200,7 +200,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="id-1.2.39.9.4.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.40.9.4.2"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-gaussianblur.html b/docs/plugins/html/gst-plugins-bad-plugins-gaussianblur.html
index 9c23870..e56bb7c 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-gaussianblur.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-gaussianblur.html
@@ -7,7 +7,7 @@
<link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
<link rel="up" href="ch01.html" title="gst-plugins-bad Elements">
<link rel="prev" href="gst-plugins-bad-plugins-fpsdisplaysink.html" title="fpsdisplaysink">
-<link rel="next" href="gst-plugins-bad-plugins-jpegparse.html" title="jpegparse">
+<link rel="next" href="gst-plugins-bad-plugins-glcolorbalance.html" title="glcolorbalance">
<meta name="generator" content="GTK-Doc V1.25 (XML mode)">
<link rel="stylesheet" href="style.css" type="text/css">
</head>
@@ -22,7 +22,7 @@
<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
<td><a accesskey="u" href="ch01.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
<td><a accesskey="p" href="gst-plugins-bad-plugins-fpsdisplaysink.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="gst-plugins-bad-plugins-jpegparse.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+<td><a accesskey="n" href="gst-plugins-bad-plugins-glcolorbalance.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
</tr></table>
<div class="refentry">
<a name="gst-plugins-bad-plugins-gaussianblur"></a><div class="titlepage"></div>
@@ -56,8 +56,8 @@
<col class="description">
</colgroup>
<tbody><tr>
-<td class="typedef_keyword">typedef</td>
-<td class="function_name"><a class="link" href="gst-plugins-bad-plugins-gaussianblur.html#GstGaussianBlur">GstGaussianBlur</a></td>
+<td class="datatype_keyword">struct</td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-plugins-gaussianblur.html#GstGaussianBlur-struct" title="struct GstGaussianBlur">GstGaussianBlur</a></td>
</tr></tbody>
</table></div>
</div>
@@ -76,7 +76,7 @@
<a name="gst-plugins-bad-plugins-gaussianblur.description"></a><h2>Description</h2>
<p>Gaussianblur blurs the video stream in realtime.</p>
<div class="refsect2">
-<a name="id-1.2.40.7.3"></a><h3>Example launch line</h3>
+<a name="id-1.2.41.7.3"></a><h3>Example launch line</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -92,7 +92,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="id-1.2.40.7.4.1"></a><h3>Element Information</h3>
+<a name="id-1.2.41.7.4.1"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
@@ -118,7 +118,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="id-1.2.40.7.4.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.41.7.4.2"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
@@ -177,9 +177,8 @@
<div class="refsect1">
<a name="gst-plugins-bad-plugins-gaussianblur.other_details"></a><h2>Types and Values</h2>
<div class="refsect2">
-<a name="GstGaussianBlur"></a><h3>GstGaussianBlur</h3>
-<pre class="programlisting">typedef struct GstGaussianBlur GstGaussianBlur;
-</pre>
+<a name="GstGaussianBlur-struct"></a><h3>struct GstGaussianBlur</h3>
+<pre class="programlisting">struct GstGaussianBlur;</pre>
</div>
</div>
<div class="refsect1">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-glcolorbalance.html b/docs/plugins/html/gst-plugins-bad-plugins-glcolorbalance.html
new file mode 100644
index 0000000..39f9b61
--- /dev/null
+++ b/docs/plugins/html/gst-plugins-bad-plugins-glcolorbalance.html
@@ -0,0 +1,261 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>glcolorbalance: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
+<link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
+<link rel="up" href="ch01.html" title="gst-plugins-bad Elements">
+<link rel="prev" href="gst-plugins-bad-plugins-gaussianblur.html" title="gaussianblur">
+<link rel="next" href="gst-plugins-bad-plugins-glcolorconvert.html" title="glcolorconvert">
+<meta name="generator" content="GTK-Doc V1.25 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
+<td width="100%" align="left" class="shortcuts">
+<a href="#" class="shortcut">Top</a><span id="nav_description"> <span class="dim">|</span>
+ <a href="#gst-plugins-bad-plugins-glcolorbalance.description" class="shortcut">Description</a></span><span id="nav_hierarchy"> <span class="dim">|</span>
+ <a href="#gst-plugins-bad-plugins-glcolorbalance.object-hierarchy" class="shortcut">Object Hierarchy</a></span><span id="nav_interfaces"> <span class="dim">|</span>
+ <a href="#gst-plugins-bad-plugins-glcolorbalance.implemented-interfaces" class="shortcut">Implemented Interfaces</a></span><span id="nav_properties"> <span class="dim">|</span>
+ <a href="#gst-plugins-bad-plugins-glcolorbalance.properties" class="shortcut">Properties</a></span>
+</td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
+<td><a accesskey="p" href="gst-plugins-bad-plugins-gaussianblur.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="gst-plugins-bad-plugins-glcolorconvert.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="gst-plugins-bad-plugins-glcolorbalance"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-bad-plugins-glcolorbalance.top_of_page"></a>glcolorbalance</span></h2>
+<p>glcolorbalance</p>
+</td>
+<td class="gallery_image" valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-glcolorbalance.properties"></a><h2>Properties</h2>
+<div class="informaltable"><table class="informaltable" border="0">
+<colgroup>
+<col width="150px" class="properties_type">
+<col width="300px" class="properties_name">
+<col width="200px" class="properties_flags">
+</colgroup>
+<tbody>
+<tr>
+<td class="property_type"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a></td>
+<td class="property_name"><a class="link" href="gst-plugins-bad-plugins-glcolorbalance.html#GstGLColorBalance--brightness" title="The “brightness” property">brightness</a></td>
+<td class="property_flags">Read / Write</td>
+</tr>
+<tr>
+<td class="property_type"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a></td>
+<td class="property_name"><a class="link" href="gst-plugins-bad-plugins-glcolorbalance.html#GstGLColorBalance--contrast" title="The “contrast” property">contrast</a></td>
+<td class="property_flags">Read / Write</td>
+</tr>
+<tr>
+<td class="property_type"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a></td>
+<td class="property_name"><a class="link" href="gst-plugins-bad-plugins-glcolorbalance.html#GstGLColorBalance--hue" title="The “hue” property">hue</a></td>
+<td class="property_flags">Read / Write</td>
+</tr>
+<tr>
+<td class="property_type"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a></td>
+<td class="property_name"><a class="link" href="gst-plugins-bad-plugins-glcolorbalance.html#GstGLColorBalance--saturation" title="The “saturation” property">saturation</a></td>
+<td class="property_flags">Read / Write</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<a name="GstGLColorBalance"></a><div class="refsect1">
+<a name="gst-plugins-bad-plugins-glcolorbalance.other"></a><h2>Types and Values</h2>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="name">
+<col class="description">
+</colgroup>
+<tbody><tr>
+<td class="datatype_keyword">struct</td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-plugins-glcolorbalance.html#GstGLColorBalance-struct" title="struct GstGLColorBalance">GstGLColorBalance</a></td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-glcolorbalance.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="screen"> <a href="/usr/share/gtk-doc/html/gobjectgobject-The-Base-Object-Type.html#GObject-struct">GObject</a>
+ <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gobjectgobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
+ <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstObject.html#GstObject-struct">GstObject</a>
+ <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#GstElement-struct">GstElement</a>
+ <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-libs-1.0GstBaseTransform.html#GstBaseTransform-struct">GstBaseTransform</a>
+ <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gst-plugins-bad-libs-1.0GstGLBaseFilter.html#GstGLBaseFilter-struct">GstGLBaseFilter</a>
+ <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gst-plugins-bad-libs-1.0GstGLFilter.html#GstGLFilter-struct">GstGLFilter</a>
+ <span class="lineart">╰──</span> GstGLColorBalance
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-glcolorbalance.implemented-interfaces"></a><h2>Implemented Interfaces</h2>
+<p>
+GstGLColorBalance implements
+ <a href="/usr/share/gtk-doc/html/gst-plugins-base-libs-1.0gst-plugins-base-libs-gstcolorbalance.html#GstColorBalance-struct">GstColorBalance</a>.</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-glcolorbalance.description"></a><h2>Description</h2>
+<p>Adjusts brightness, contrast, hue, saturation on a video stream.</p>
+<div class="refsect2">
+<a name="id-1.2.42.8.3"></a><h3>Example launch line</h3>
+<div class="informalexample">
+ <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
+ <tbody>
+ <tr>
+ <td class="listing_lines" align="right"><pre>1</pre></td>
+ <td class="listing_code"><pre class="programlisting">gst<span class="gtkdoc opt">-</span>launch<span class="gtkdoc opt">-</span><span class="number">1.0</span> videotestsrc <span class="gtkdoc opt">!</span> glupload <span class="gtkdoc opt">!</span> glcolorbalance saturation<span class="gtkdoc opt">=</span><span class="number">0.0</span> <span class="gtkdoc opt">!</span> glcolorconvert <span class="gtkdoc opt">!</span> gldownload <span class="gtkdoc opt">!</span> ximagesink</pre></td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+ This pipeline converts the image to black and white by setting the
+saturation to 0.0.
+</div>
+<div class="refsynopsisdiv">
+<h2>Synopsis</h2>
+<div class="refsect2">
+<a name="id-1.2.42.8.4.1"></a><h3>Element Information</h3>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term">plugin</span></p></td>
+<td>
+ <a class="link" href="gst-plugins-bad-plugins-plugin-opengl.html#plugin-opengl">opengl</a>
+ </td>
+</tr>
+<tr>
+<td><p><span class="term">author</span></p></td>
+<td>Matthew Waters <matthew@centricular.com></td>
+</tr>
+<tr>
+<td><p><span class="term">class</span></p></td>
+<td>Filter/Effect/Video</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="id-1.2.42.8.4.2"></a><h3>Element Pads</h3>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>video/x-raw(ANY), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</td>
+</tr>
+</tbody>
+</table></div>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>src</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>source</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw(ANY), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-glcolorbalance.functions_details"></a><h2>Functions</h2>
+<p></p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-glcolorbalance.other_details"></a><h2>Types and Values</h2>
+<div class="refsect2">
+<a name="GstGLColorBalance-struct"></a><h3>struct GstGLColorBalance</h3>
+<pre class="programlisting">struct GstGLColorBalance;</pre>
+<p>Opaque data structure.</p>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-glcolorbalance.property-details"></a><h2>Property Details</h2>
+<div class="refsect2">
+<a name="GstGLColorBalance--brightness"></a><h3>The <code class="literal">“brightness”</code> property</h3>
+<pre class="programlisting"> “brightness” <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a></pre>
+<p>brightness.</p>
+<p>Flags: Read / Write</p>
+<p>Allowed values: [-1,1]</p>
+<p>Default value: 0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstGLColorBalance--contrast"></a><h3>The <code class="literal">“contrast”</code> property</h3>
+<pre class="programlisting"> “contrast” <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a></pre>
+<p>contrast.</p>
+<p>Flags: Read / Write</p>
+<p>Allowed values: [0,2]</p>
+<p>Default value: 1</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstGLColorBalance--hue"></a><h3>The <code class="literal">“hue”</code> property</h3>
+<pre class="programlisting"> “hue” <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a></pre>
+<p>hue.</p>
+<p>Flags: Read / Write</p>
+<p>Allowed values: [-1,1]</p>
+<p>Default value: 0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstGLColorBalance--saturation"></a><h3>The <code class="literal">“saturation”</code> property</h3>
+<pre class="programlisting"> “saturation” <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a></pre>
+<p>saturation.</p>
+<p>Flags: Read / Write</p>
+<p>Allowed values: [0,2]</p>
+<p>Default value: 1</p>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>Generated by GTK-Doc V1.25</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-glcolorconvert.html b/docs/plugins/html/gst-plugins-bad-plugins-glcolorconvert.html
new file mode 100644
index 0000000..5734d16
--- /dev/null
+++ b/docs/plugins/html/gst-plugins-bad-plugins-glcolorconvert.html
@@ -0,0 +1,165 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>glcolorconvert: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
+<link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
+<link rel="up" href="ch01.html" title="gst-plugins-bad Elements">
+<link rel="prev" href="gst-plugins-bad-plugins-glcolorbalance.html" title="glcolorbalance">
+<link rel="next" href="gst-plugins-bad-plugins-glcolorscale.html" title="glcolorscale">
+<meta name="generator" content="GTK-Doc V1.25 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
+<td width="100%" align="left" class="shortcuts">
+<a href="#" class="shortcut">Top</a><span id="nav_description"> <span class="dim">|</span>
+ <a href="#gst-plugins-bad-plugins-glcolorconvert.description" class="shortcut">Description</a></span><span id="nav_hierarchy"> <span class="dim">|</span>
+ <a href="#gst-plugins-bad-plugins-glcolorconvert.object-hierarchy" class="shortcut">Object Hierarchy</a></span>
+</td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
+<td><a accesskey="p" href="gst-plugins-bad-plugins-glcolorbalance.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="gst-plugins-bad-plugins-glcolorscale.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="gst-plugins-bad-plugins-glcolorconvert"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-bad-plugins-glcolorconvert.top_of_page"></a>glcolorconvert</span></h2>
+<p>glcolorconvert</p>
+</td>
+<td class="gallery_image" valign="top" align="right"></td>
+</tr></table></div>
+<a name="GstGLColorConvertElement"></a><div class="refsect1">
+<a name="gst-plugins-bad-plugins-glcolorconvert.other"></a><h2>Types and Values</h2>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="name">
+<col class="description">
+</colgroup>
+<tbody><tr>
+<td class="datatype_keyword">struct</td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-plugins-glcolorconvert.html#GstGLColorConvertElement-struct" title="struct GstGLColorConvertElement">GstGLColorConvertElement</a></td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-glcolorconvert.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="screen"> <a href="/usr/share/gtk-doc/html/gobjectgobject-The-Base-Object-Type.html#GObject-struct">GObject</a>
+ <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gobjectgobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
+ <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstObject.html#GstObject-struct">GstObject</a>
+ <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#GstElement-struct">GstElement</a>
+ <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-libs-1.0GstBaseTransform.html#GstBaseTransform-struct">GstBaseTransform</a>
+ <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gst-plugins-bad-libs-1.0GstGLBaseFilter.html#GstGLBaseFilter-struct">GstGLBaseFilter</a>
+ <span class="lineart">╰──</span> GstGLColorConvertElement
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-glcolorconvert.description"></a><h2>Description</h2>
+<div class="refsynopsisdiv">
+<h2>Synopsis</h2>
+<div class="refsect2">
+<a name="id-1.2.43.6.2.1"></a><h3>Element Information</h3>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term">plugin</span></p></td>
+<td>
+ <a class="link" href="gst-plugins-bad-plugins-plugin-opengl.html#plugin-opengl">opengl</a>
+ </td>
+</tr>
+<tr>
+<td><p><span class="term">author</span></p></td>
+<td>Matthew Waters <matthew@centricular.com></td>
+</tr>
+<tr>
+<td><p><span class="term">class</span></p></td>
+<td>Filter/Converter/Video</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="id-1.2.43.6.2.2"></a><h3>Element Pads</h3>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>video/x-raw(memory:GLMemory), format=(string){ RGBA, RGB, RGBx, BGR, BGRx, BGRA, xRGB, xBGR, ARGB, ABGR, Y444, I420, YV12, Y42B, Y41B, NV12, NV21, YUY2, UYVY, AYUV, GRAY8, GRAY16_LE, GRAY16_BE, RGB16, BGR16 }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string){ 2D, rectangle, external-oes }</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw(memory:GLMemory, meta:GstVideoOverlayComposition), format=(string){ RGBA, RGB, RGBx, BGR, BGRx, BGRA, xRGB, xBGR, ARGB, ABGR, Y444, I420, YV12, Y42B, Y41B, NV12, NV21, YUY2, UYVY, AYUV, GRAY8, GRAY16_LE, GRAY16_BE, RGB16, BGR16 }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string){ 2D, rectangle, external-oes }</td>
+</tr>
+</tbody>
+</table></div>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>src</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>source</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>video/x-raw(memory:GLMemory), format=(string){ RGBA, RGB, RGBx, BGR, BGRx, BGRA, xRGB, xBGR, ARGB, ABGR, Y444, I420, YV12, Y42B, Y41B, NV12, NV21, YUY2, UYVY, AYUV, GRAY8, GRAY16_LE, GRAY16_BE, RGB16, BGR16 }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string){ 2D, rectangle, external-oes }</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw(memory:GLMemory, meta:GstVideoOverlayComposition), format=(string){ RGBA, RGB, RGBx, BGR, BGRx, BGRA, xRGB, xBGR, ARGB, ABGR, Y444, I420, YV12, Y42B, Y41B, NV12, NV21, YUY2, UYVY, AYUV, GRAY8, GRAY16_LE, GRAY16_BE, RGB16, BGR16 }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string){ 2D, rectangle, external-oes }</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-glcolorconvert.functions_details"></a><h2>Functions</h2>
+<p></p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-glcolorconvert.other_details"></a><h2>Types and Values</h2>
+<div class="refsect2">
+<a name="GstGLColorConvertElement-struct"></a><h3>struct GstGLColorConvertElement</h3>
+<pre class="programlisting">struct GstGLColorConvertElement;</pre>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>Generated by GTK-Doc V1.25</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-glcolorscale.html b/docs/plugins/html/gst-plugins-bad-plugins-glcolorscale.html
new file mode 100644
index 0000000..8de053d
--- /dev/null
+++ b/docs/plugins/html/gst-plugins-bad-plugins-glcolorscale.html
@@ -0,0 +1,204 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>glcolorscale: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
+<link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
+<link rel="up" href="ch01.html" title="gst-plugins-bad Elements">
+<link rel="prev" href="gst-plugins-bad-plugins-glcolorconvert.html" title="glcolorconvert">
+<link rel="next" href="gst-plugins-bad-plugins-gldeinterlace.html" title="gldeinterlace">
+<meta name="generator" content="GTK-Doc V1.25 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
+<td width="100%" align="left" class="shortcuts">
+<a href="#" class="shortcut">Top</a><span id="nav_description"> <span class="dim">|</span>
+ <a href="#gst-plugins-bad-plugins-glcolorscale.description" class="shortcut">Description</a></span><span id="nav_hierarchy"> <span class="dim">|</span>
+ <a href="#gst-plugins-bad-plugins-glcolorscale.object-hierarchy" class="shortcut">Object Hierarchy</a></span>
+</td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
+<td><a accesskey="p" href="gst-plugins-bad-plugins-glcolorconvert.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="gst-plugins-bad-plugins-gldeinterlace.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="gst-plugins-bad-plugins-glcolorscale"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-bad-plugins-glcolorscale.top_of_page"></a>glcolorscale</span></h2>
+<p>glcolorscale</p>
+</td>
+<td class="gallery_image" valign="top" align="right"></td>
+</tr></table></div>
+<a name="GstGLColorscale"></a><div class="refsect1">
+<a name="gst-plugins-bad-plugins-glcolorscale.other"></a><h2>Types and Values</h2>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="name">
+<col class="description">
+</colgroup>
+<tbody><tr>
+<td class="datatype_keyword">struct</td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-plugins-glcolorscale.html#GstGLColorscale-struct" title="struct GstGLColorscale">GstGLColorscale</a></td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-glcolorscale.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="screen"> <a href="/usr/share/gtk-doc/html/gobjectgobject-The-Base-Object-Type.html#GObject-struct">GObject</a>
+ <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gobjectgobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
+ <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstObject.html#GstObject-struct">GstObject</a>
+ <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#GstElement-struct">GstElement</a>
+ <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-libs-1.0GstBaseTransform.html#GstBaseTransform-struct">GstBaseTransform</a>
+ <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gst-plugins-bad-libs-1.0GstGLBaseFilter.html#GstGLBaseFilter-struct">GstGLBaseFilter</a>
+ <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gst-plugins-bad-libs-1.0GstGLFilter.html#GstGLFilter-struct">GstGLFilter</a>
+ <span class="lineart">╰──</span> GstGLColorscale
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-glcolorscale.description"></a><h2>Description</h2>
+<p>video frame scaling and colorspace conversion.</p>
+<div class="refsect2">
+<a name="id-1.2.44.6.3"></a><h3>Scaling and Color space conversion</h3>
+<p>
+Equivalent to glupload ! gldownload.
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="id-1.2.44.6.4"></a><h3>Examples</h3>
+<div class="informalexample">
+ <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
+ <tbody>
+ <tr>
+ <td class="listing_lines" align="right"><pre>1</pre></td>
+ <td class="listing_code"><pre class="programlisting">gst<span class="gtkdoc opt">-</span>launch<span class="gtkdoc opt">-</span><span class="number">1.0</span> <span class="gtkdoc opt">-</span>v videotestsrc <span class="gtkdoc opt">!</span> video<span class="gtkdoc opt">/</span>x<span class="gtkdoc opt">-</span>raw <span class="gtkdoc opt">!</span> glcolorscale <span class="gtkdoc opt">!</span> ximagesink</pre></td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+ A pipeline to test colorspace conversion.
+FBO is required.
+ <div class="informalexample">
+ <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
+ <tbody>
+ <tr>
+ <td class="listing_lines" align="right"><pre>1
+2</pre></td>
+ <td class="listing_code"><pre class="programlisting">gst<span class="gtkdoc opt">-</span>launch<span class="gtkdoc opt">-</span><span class="number">1.0</span> <span class="gtkdoc opt">-</span>v videotestsrc <span class="gtkdoc opt">!</span> video<span class="gtkdoc opt">/</span>x<span class="gtkdoc opt">-</span>raw<span class="gtkdoc opt">,</span> width<span class="gtkdoc opt">=</span><span class="number">640</span><span class="gtkdoc opt">,</span> height<span class="gtkdoc opt">=</span><span class="number">480</span><span class="gtkdoc opt">,</span> format<span class="gtkdoc opt">=</span>AYUV <span class="gtkdoc opt">!</span> glcolorscale <span class="gtkdoc opt">!</span> \
+ video<span class="gtkdoc opt">/</span>x<span class="gtkdoc opt">-</span>raw<span class="gtkdoc opt">,</span> width<span class="gtkdoc opt">=</span><span class="number">320</span><span class="gtkdoc opt">,</span> height<span class="gtkdoc opt">=</span><span class="number">240</span><span class="gtkdoc opt">,</span> format<span class="gtkdoc opt">=</span>YV12 <span class="gtkdoc opt">!</span> videoconvert <span class="gtkdoc opt">!</span> autovideosink</pre></td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+ A pipeline to test hardware scaling and colorspace conversion.
+FBO and GLSL are required.
+</div>
+<div class="refsynopsisdiv">
+<h2>Synopsis</h2>
+<div class="refsect2">
+<a name="id-1.2.44.6.5.1"></a><h3>Element Information</h3>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term">plugin</span></p></td>
+<td>
+ <a class="link" href="gst-plugins-bad-plugins-plugin-opengl.html#plugin-opengl">opengl</a>
+ </td>
+</tr>
+<tr>
+<td><p><span class="term">author</span></p></td>
+<td>Julien Isorce <julien.isorce@gmail.com>
+Matthew Waters <matthew@centricular.com></td>
+</tr>
+<tr>
+<td><p><span class="term">class</span></p></td>
+<td>Filter/Effect/Video</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="id-1.2.44.6.5.2"></a><h3>Element Pads</h3>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>video/x-raw(ANY), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</td>
+</tr>
+</tbody>
+</table></div>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>src</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>source</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw(ANY), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-glcolorscale.functions_details"></a><h2>Functions</h2>
+<p></p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-glcolorscale.other_details"></a><h2>Types and Values</h2>
+<div class="refsect2">
+<a name="GstGLColorscale-struct"></a><h3>struct GstGLColorscale</h3>
+<pre class="programlisting">struct GstGLColorscale;</pre>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>Generated by GTK-Doc V1.25</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-gldeinterlace.html b/docs/plugins/html/gst-plugins-bad-plugins-gldeinterlace.html
new file mode 100644
index 0000000..6ef5cd8
--- /dev/null
+++ b/docs/plugins/html/gst-plugins-bad-plugins-gldeinterlace.html
@@ -0,0 +1,192 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>gldeinterlace: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
+<link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
+<link rel="up" href="ch01.html" title="gst-plugins-bad Elements">
+<link rel="prev" href="gst-plugins-bad-plugins-glcolorscale.html" title="glcolorscale">
+<link rel="next" href="gst-plugins-bad-plugins-gldifferencematte.html" title="gldifferencematte">
+<meta name="generator" content="GTK-Doc V1.25 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
+<td width="100%" align="left" class="shortcuts">
+<a href="#" class="shortcut">Top</a><span id="nav_description"> <span class="dim">|</span>
+ <a href="#gst-plugins-bad-plugins-gldeinterlace.description" class="shortcut">Description</a></span><span id="nav_hierarchy"> <span class="dim">|</span>
+ <a href="#gst-plugins-bad-plugins-gldeinterlace.object-hierarchy" class="shortcut">Object Hierarchy</a></span><span id="nav_properties"> <span class="dim">|</span>
+ <a href="#gst-plugins-bad-plugins-gldeinterlace.properties" class="shortcut">Properties</a></span>
+</td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
+<td><a accesskey="p" href="gst-plugins-bad-plugins-glcolorscale.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="gst-plugins-bad-plugins-gldifferencematte.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="gst-plugins-bad-plugins-gldeinterlace"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-bad-plugins-gldeinterlace.top_of_page"></a>gldeinterlace</span></h2>
+<p>gldeinterlace</p>
+</td>
+<td class="gallery_image" valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-gldeinterlace.properties"></a><h2>Properties</h2>
+<div class="informaltable"><table class="informaltable" border="0">
+<colgroup>
+<col width="150px" class="properties_type">
+<col width="300px" class="properties_name">
+<col width="200px" class="properties_flags">
+</colgroup>
+<tbody><tr>
+<td class="property_type"><span class="type">GstGLDeinterlaceMethod</span></td>
+<td class="property_name"><a class="link" href="gst-plugins-bad-plugins-gldeinterlace.html#GstGLDeinterlace--method" title="The “method” property">method</a></td>
+<td class="property_flags">Read / Write</td>
+</tr></tbody>
+</table></div>
+</div>
+<a name="GstGLDeinterlace"></a><div class="refsect1">
+<a name="gst-plugins-bad-plugins-gldeinterlace.other"></a><h2>Types and Values</h2>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="name">
+<col class="description">
+</colgroup>
+<tbody><tr>
+<td class="datatype_keyword">struct</td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-plugins-gldeinterlace.html#GstGLDeinterlace-struct" title="struct GstGLDeinterlace">GstGLDeinterlace</a></td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-gldeinterlace.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="screen"> <a href="/usr/share/gtk-doc/html/gobjectgobject-The-Base-Object-Type.html#GObject-struct">GObject</a>
+ <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gobjectgobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
+ <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstObject.html#GstObject-struct">GstObject</a>
+ <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#GstElement-struct">GstElement</a>
+ <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-libs-1.0GstBaseTransform.html#GstBaseTransform-struct">GstBaseTransform</a>
+ <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gst-plugins-bad-libs-1.0GstGLBaseFilter.html#GstGLBaseFilter-struct">GstGLBaseFilter</a>
+ <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gst-plugins-bad-libs-1.0GstGLFilter.html#GstGLFilter-struct">GstGLFilter</a>
+ <span class="lineart">╰──</span> GstGLDeinterlace
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-gldeinterlace.description"></a><h2>Description</h2>
+<div class="refsynopsisdiv">
+<h2>Synopsis</h2>
+<div class="refsect2">
+<a name="id-1.2.45.7.2.1"></a><h3>Element Information</h3>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term">plugin</span></p></td>
+<td>
+ <a class="link" href="gst-plugins-bad-plugins-plugin-opengl.html#plugin-opengl">opengl</a>
+ </td>
+</tr>
+<tr>
+<td><p><span class="term">author</span></p></td>
+<td>Julien Isorce <julien.isorce@mail.com></td>
+</tr>
+<tr>
+<td><p><span class="term">class</span></p></td>
+<td>Deinterlace</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="id-1.2.45.7.2.2"></a><h3>Element Pads</h3>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>video/x-raw(ANY), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</td>
+</tr>
+</tbody>
+</table></div>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>src</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>source</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw(ANY), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-gldeinterlace.functions_details"></a><h2>Functions</h2>
+<p></p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-gldeinterlace.other_details"></a><h2>Types and Values</h2>
+<div class="refsect2">
+<a name="GstGLDeinterlace-struct"></a><h3>struct GstGLDeinterlace</h3>
+<pre class="programlisting">struct GstGLDeinterlace;</pre>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-gldeinterlace.property-details"></a><h2>Property Details</h2>
+<div class="refsect2">
+<a name="GstGLDeinterlace--method"></a><h3>The <code class="literal">“method”</code> property</h3>
+<pre class="programlisting"> “method” <span class="type">GstGLDeinterlaceMethod</span></pre>
+<p>Select which deinterlace method apply to GL video texture.</p>
+<p>Flags: Read / Write</p>
+<p>Default value: Blur Vertical</p>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>Generated by GTK-Doc V1.25</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-gldifferencematte.html b/docs/plugins/html/gst-plugins-bad-plugins-gldifferencematte.html
new file mode 100644
index 0000000..b07fa82
--- /dev/null
+++ b/docs/plugins/html/gst-plugins-bad-plugins-gldifferencematte.html
@@ -0,0 +1,193 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>gldifferencematte: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
+<link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
+<link rel="up" href="ch01.html" title="gst-plugins-bad Elements">
+<link rel="prev" href="gst-plugins-bad-plugins-gldeinterlace.html" title="gldeinterlace">
+<link rel="next" href="gst-plugins-bad-plugins-gldownload.html" title="gldownload">
+<meta name="generator" content="GTK-Doc V1.25 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
+<td width="100%" align="left" class="shortcuts">
+<a href="#" class="shortcut">Top</a><span id="nav_description"> <span class="dim">|</span>
+ <a href="#gst-plugins-bad-plugins-gldifferencematte.description" class="shortcut">Description</a></span><span id="nav_hierarchy"> <span class="dim">|</span>
+ <a href="#gst-plugins-bad-plugins-gldifferencematte.object-hierarchy" class="shortcut">Object Hierarchy</a></span><span id="nav_properties"> <span class="dim">|</span>
+ <a href="#gst-plugins-bad-plugins-gldifferencematte.properties" class="shortcut">Properties</a></span>
+</td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
+<td><a accesskey="p" href="gst-plugins-bad-plugins-gldeinterlace.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="gst-plugins-bad-plugins-gldownload.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="gst-plugins-bad-plugins-gldifferencematte"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-bad-plugins-gldifferencematte.top_of_page"></a>gldifferencematte</span></h2>
+<p>gldifferencematte</p>
+</td>
+<td class="gallery_image" valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-gldifferencematte.properties"></a><h2>Properties</h2>
+<div class="informaltable"><table class="informaltable" border="0">
+<colgroup>
+<col width="150px" class="properties_type">
+<col width="300px" class="properties_name">
+<col width="200px" class="properties_flags">
+</colgroup>
+<tbody><tr>
+<td class="property_type">
+<a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</td>
+<td class="property_name"><a class="link" href="gst-plugins-bad-plugins-gldifferencematte.html#GstGLDifferenceMatte--location" title="The “location” property">location</a></td>
+<td class="property_flags">Read / Write</td>
+</tr></tbody>
+</table></div>
+</div>
+<a name="GstGLDifferenceMatte"></a><div class="refsect1">
+<a name="gst-plugins-bad-plugins-gldifferencematte.other"></a><h2>Types and Values</h2>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="name">
+<col class="description">
+</colgroup>
+<tbody><tr>
+<td class="datatype_keyword">struct</td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-plugins-gldifferencematte.html#GstGLDifferenceMatte-struct" title="struct GstGLDifferenceMatte">GstGLDifferenceMatte</a></td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-gldifferencematte.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="screen"> <a href="/usr/share/gtk-doc/html/gobjectgobject-The-Base-Object-Type.html#GObject-struct">GObject</a>
+ <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gobjectgobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
+ <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstObject.html#GstObject-struct">GstObject</a>
+ <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#GstElement-struct">GstElement</a>
+ <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-libs-1.0GstBaseTransform.html#GstBaseTransform-struct">GstBaseTransform</a>
+ <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gst-plugins-bad-libs-1.0GstGLBaseFilter.html#GstGLBaseFilter-struct">GstGLBaseFilter</a>
+ <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gst-plugins-bad-libs-1.0GstGLFilter.html#GstGLFilter-struct">GstGLFilter</a>
+ <span class="lineart">╰──</span> GstGLDifferenceMatte
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-gldifferencematte.description"></a><h2>Description</h2>
+<div class="refsynopsisdiv">
+<h2>Synopsis</h2>
+<div class="refsect2">
+<a name="id-1.2.46.7.2.1"></a><h3>Element Information</h3>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term">plugin</span></p></td>
+<td>
+ <a class="link" href="gst-plugins-bad-plugins-plugin-opengl.html#plugin-opengl">opengl</a>
+ </td>
+</tr>
+<tr>
+<td><p><span class="term">author</span></p></td>
+<td>Filippo Argiolas <filippo.argiolas@gmail.com></td>
+</tr>
+<tr>
+<td><p><span class="term">class</span></p></td>
+<td>Filter/Effect/Video</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="id-1.2.46.7.2.2"></a><h3>Element Pads</h3>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>video/x-raw(ANY), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</td>
+</tr>
+</tbody>
+</table></div>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>src</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>source</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw(ANY), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-gldifferencematte.functions_details"></a><h2>Functions</h2>
+<p></p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-gldifferencematte.other_details"></a><h2>Types and Values</h2>
+<div class="refsect2">
+<a name="GstGLDifferenceMatte-struct"></a><h3>struct GstGLDifferenceMatte</h3>
+<pre class="programlisting">struct GstGLDifferenceMatte;</pre>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-gldifferencematte.property-details"></a><h2>Property Details</h2>
+<div class="refsect2">
+<a name="GstGLDifferenceMatte--location"></a><h3>The <code class="literal">“location”</code> property</h3>
+<pre class="programlisting"> “location” <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</pre>
+<p>Background image location.</p>
+<p>Flags: Read / Write</p>
+<p>Default value: NULL</p>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>Generated by GTK-Doc V1.25</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-gldownload.html b/docs/plugins/html/gst-plugins-bad-plugins-gldownload.html
new file mode 100644
index 0000000..56f2e65
--- /dev/null
+++ b/docs/plugins/html/gst-plugins-bad-plugins-gldownload.html
@@ -0,0 +1,165 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>gldownload: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
+<link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
+<link rel="up" href="ch01.html" title="gst-plugins-bad Elements">
+<link rel="prev" href="gst-plugins-bad-plugins-gldifferencematte.html" title="gldifferencematte">
+<link rel="next" href="gst-plugins-bad-plugins-gleffects-blur.html" title="gleffects_blur">
+<meta name="generator" content="GTK-Doc V1.25 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
+<td width="100%" align="left" class="shortcuts">
+<a href="#" class="shortcut">Top</a><span id="nav_description"> <span class="dim">|</span>
+ <a href="#gst-plugins-bad-plugins-gldownload.description" class="shortcut">Description</a></span><span id="nav_hierarchy"> <span class="dim">|</span>
+ <a href="#gst-plugins-bad-plugins-gldownload.object-hierarchy" class="shortcut">Object Hierarchy</a></span>
+</td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
+<td><a accesskey="p" href="gst-plugins-bad-plugins-gldifferencematte.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="gst-plugins-bad-plugins-gleffects-blur.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="gst-plugins-bad-plugins-gldownload"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-bad-plugins-gldownload.top_of_page"></a>gldownload</span></h2>
+<p>gldownload</p>
+</td>
+<td class="gallery_image" valign="top" align="right"></td>
+</tr></table></div>
+<a name="GstGLDownloadElement"></a><div class="refsect1">
+<a name="gst-plugins-bad-plugins-gldownload.other"></a><h2>Types and Values</h2>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="name">
+<col class="description">
+</colgroup>
+<tbody><tr>
+<td class="datatype_keyword">struct</td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-plugins-gldownload.html#GstGLDownloadElement-struct" title="struct GstGLDownloadElement">GstGLDownloadElement</a></td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-gldownload.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="screen"> <a href="/usr/share/gtk-doc/html/gobjectgobject-The-Base-Object-Type.html#GObject-struct">GObject</a>
+ <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gobjectgobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
+ <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstObject.html#GstObject-struct">GstObject</a>
+ <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#GstElement-struct">GstElement</a>
+ <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-libs-1.0GstBaseTransform.html#GstBaseTransform-struct">GstBaseTransform</a>
+ <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gst-plugins-bad-libs-1.0GstGLBaseFilter.html#GstGLBaseFilter-struct">GstGLBaseFilter</a>
+ <span class="lineart">╰──</span> GstGLDownloadElement
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-gldownload.description"></a><h2>Description</h2>
+<div class="refsynopsisdiv">
+<h2>Synopsis</h2>
+<div class="refsect2">
+<a name="id-1.2.47.6.2.1"></a><h3>Element Information</h3>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term">plugin</span></p></td>
+<td>
+ <a class="link" href="gst-plugins-bad-plugins-plugin-opengl.html#plugin-opengl">opengl</a>
+ </td>
+</tr>
+<tr>
+<td><p><span class="term">author</span></p></td>
+<td>Matthew Waters <matthew@centricular.com></td>
+</tr>
+<tr>
+<td><p><span class="term">class</span></p></td>
+<td>Filter/Video</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="id-1.2.47.6.2.2"></a><h3>Element Pads</h3>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>video/x-raw(memory:GLMemory)</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw</td>
+</tr>
+</tbody>
+</table></div>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>src</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>source</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>video/x-raw</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw(memory:GLMemory)</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-gldownload.functions_details"></a><h2>Functions</h2>
+<p></p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-gldownload.other_details"></a><h2>Types and Values</h2>
+<div class="refsect2">
+<a name="GstGLDownloadElement-struct"></a><h3>struct GstGLDownloadElement</h3>
+<pre class="programlisting">struct GstGLDownloadElement;</pre>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>Generated by GTK-Doc V1.25</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-gleffects-blur.html b/docs/plugins/html/gst-plugins-bad-plugins-gleffects-blur.html
new file mode 100644
index 0000000..0ed343a
--- /dev/null
+++ b/docs/plugins/html/gst-plugins-bad-plugins-gleffects-blur.html
@@ -0,0 +1,136 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>gleffects_blur: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
+<link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
+<link rel="up" href="ch01.html" title="gst-plugins-bad Elements">
+<link rel="prev" href="gst-plugins-bad-plugins-gldownload.html" title="gldownload">
+<link rel="next" href="gst-plugins-bad-plugins-gleffects-bulge.html" title="gleffects_bulge">
+<meta name="generator" content="GTK-Doc V1.25 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
+<td width="100%" align="left" class="shortcuts">
+<a href="#" class="shortcut">Top</a><span id="nav_description"> <span class="dim">|</span>
+ <a href="#gst-plugins-bad-plugins-gleffects-blur.description" class="shortcut">Description</a></span>
+</td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
+<td><a accesskey="p" href="gst-plugins-bad-plugins-gldownload.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="gst-plugins-bad-plugins-gleffects-bulge.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="gst-plugins-bad-plugins-gleffects-blur"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-bad-plugins-gleffects-blur.top_of_page"></a>gleffects_blur</span></h2>
+<p>gleffects_blur</p>
+</td>
+<td class="gallery_image" valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-gleffects-blur.description"></a><h2>Description</h2>
+<div class="refsynopsisdiv">
+<h2>Synopsis</h2>
+<div class="refsect2">
+<a name="id-1.2.48.3.2.1"></a><h3>Element Information</h3>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term">plugin</span></p></td>
+<td>
+ <a class="link" href="gst-plugins-bad-plugins-plugin-opengl.html#plugin-opengl">opengl</a>
+ </td>
+</tr>
+<tr>
+<td><p><span class="term">author</span></p></td>
+<td>Filippo Argiolas <filippo.argiolas@gmail.com></td>
+</tr>
+<tr>
+<td><p><span class="term">class</span></p></td>
+<td>Filter/Effect/Video</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="id-1.2.48.3.2.2"></a><h3>Element Pads</h3>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>video/x-raw(ANY), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</td>
+</tr>
+</tbody>
+</table></div>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>src</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>source</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw(ANY), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-gleffects-blur.functions_details"></a><h2>Functions</h2>
+<p></p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-gleffects-blur.other_details"></a><h2>Types and Values</h2>
+</div>
+</div>
+<div class="footer">
+<hr>Generated by GTK-Doc V1.25</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-gleffects-bulge.html b/docs/plugins/html/gst-plugins-bad-plugins-gleffects-bulge.html
new file mode 100644
index 0000000..4ff2f7a
--- /dev/null
+++ b/docs/plugins/html/gst-plugins-bad-plugins-gleffects-bulge.html
@@ -0,0 +1,136 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>gleffects_bulge: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
+<link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
+<link rel="up" href="ch01.html" title="gst-plugins-bad Elements">
+<link rel="prev" href="gst-plugins-bad-plugins-gleffects-blur.html" title="gleffects_blur">
+<link rel="next" href="gst-plugins-bad-plugins-gleffects-fisheye.html" title="gleffects_fisheye">
+<meta name="generator" content="GTK-Doc V1.25 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
+<td width="100%" align="left" class="shortcuts">
+<a href="#" class="shortcut">Top</a><span id="nav_description"> <span class="dim">|</span>
+ <a href="#gst-plugins-bad-plugins-gleffects-bulge.description" class="shortcut">Description</a></span>
+</td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
+<td><a accesskey="p" href="gst-plugins-bad-plugins-gleffects-blur.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="gst-plugins-bad-plugins-gleffects-fisheye.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="gst-plugins-bad-plugins-gleffects-bulge"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-bad-plugins-gleffects-bulge.top_of_page"></a>gleffects_bulge</span></h2>
+<p>gleffects_bulge</p>
+</td>
+<td class="gallery_image" valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-gleffects-bulge.description"></a><h2>Description</h2>
+<div class="refsynopsisdiv">
+<h2>Synopsis</h2>
+<div class="refsect2">
+<a name="id-1.2.49.3.2.1"></a><h3>Element Information</h3>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term">plugin</span></p></td>
+<td>
+ <a class="link" href="gst-plugins-bad-plugins-plugin-opengl.html#plugin-opengl">opengl</a>
+ </td>
+</tr>
+<tr>
+<td><p><span class="term">author</span></p></td>
+<td>Filippo Argiolas <filippo.argiolas@gmail.com></td>
+</tr>
+<tr>
+<td><p><span class="term">class</span></p></td>
+<td>Filter/Effect/Video</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="id-1.2.49.3.2.2"></a><h3>Element Pads</h3>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>video/x-raw(ANY), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</td>
+</tr>
+</tbody>
+</table></div>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>src</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>source</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw(ANY), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-gleffects-bulge.functions_details"></a><h2>Functions</h2>
+<p></p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-gleffects-bulge.other_details"></a><h2>Types and Values</h2>
+</div>
+</div>
+<div class="footer">
+<hr>Generated by GTK-Doc V1.25</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-gleffects-fisheye.html b/docs/plugins/html/gst-plugins-bad-plugins-gleffects-fisheye.html
new file mode 100644
index 0000000..e586924
--- /dev/null
+++ b/docs/plugins/html/gst-plugins-bad-plugins-gleffects-fisheye.html
@@ -0,0 +1,136 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>gleffects_fisheye: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
+<link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
+<link rel="up" href="ch01.html" title="gst-plugins-bad Elements">
+<link rel="prev" href="gst-plugins-bad-plugins-gleffects-bulge.html" title="gleffects_bulge">
+<link rel="next" href="gst-plugins-bad-plugins-gleffects-glow.html" title="gleffects_glow">
+<meta name="generator" content="GTK-Doc V1.25 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
+<td width="100%" align="left" class="shortcuts">
+<a href="#" class="shortcut">Top</a><span id="nav_description"> <span class="dim">|</span>
+ <a href="#gst-plugins-bad-plugins-gleffects-fisheye.description" class="shortcut">Description</a></span>
+</td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
+<td><a accesskey="p" href="gst-plugins-bad-plugins-gleffects-bulge.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="gst-plugins-bad-plugins-gleffects-glow.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="gst-plugins-bad-plugins-gleffects-fisheye"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-bad-plugins-gleffects-fisheye.top_of_page"></a>gleffects_fisheye</span></h2>
+<p>gleffects_fisheye</p>
+</td>
+<td class="gallery_image" valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-gleffects-fisheye.description"></a><h2>Description</h2>
+<div class="refsynopsisdiv">
+<h2>Synopsis</h2>
+<div class="refsect2">
+<a name="id-1.2.50.3.2.1"></a><h3>Element Information</h3>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term">plugin</span></p></td>
+<td>
+ <a class="link" href="gst-plugins-bad-plugins-plugin-opengl.html#plugin-opengl">opengl</a>
+ </td>
+</tr>
+<tr>
+<td><p><span class="term">author</span></p></td>
+<td>Filippo Argiolas <filippo.argiolas@gmail.com></td>
+</tr>
+<tr>
+<td><p><span class="term">class</span></p></td>
+<td>Filter/Effect/Video</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="id-1.2.50.3.2.2"></a><h3>Element Pads</h3>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>video/x-raw(ANY), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</td>
+</tr>
+</tbody>
+</table></div>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>src</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>source</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw(ANY), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-gleffects-fisheye.functions_details"></a><h2>Functions</h2>
+<p></p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-gleffects-fisheye.other_details"></a><h2>Types and Values</h2>
+</div>
+</div>
+<div class="footer">
+<hr>Generated by GTK-Doc V1.25</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-gleffects-glow.html b/docs/plugins/html/gst-plugins-bad-plugins-gleffects-glow.html
new file mode 100644
index 0000000..1101a65
--- /dev/null
+++ b/docs/plugins/html/gst-plugins-bad-plugins-gleffects-glow.html
@@ -0,0 +1,136 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>gleffects_glow: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
+<link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
+<link rel="up" href="ch01.html" title="gst-plugins-bad Elements">
+<link rel="prev" href="gst-plugins-bad-plugins-gleffects-fisheye.html" title="gleffects_fisheye">
+<link rel="next" href="gst-plugins-bad-plugins-gleffects-heat.html" title="gleffects_heat">
+<meta name="generator" content="GTK-Doc V1.25 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
+<td width="100%" align="left" class="shortcuts">
+<a href="#" class="shortcut">Top</a><span id="nav_description"> <span class="dim">|</span>
+ <a href="#gst-plugins-bad-plugins-gleffects-glow.description" class="shortcut">Description</a></span>
+</td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
+<td><a accesskey="p" href="gst-plugins-bad-plugins-gleffects-fisheye.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="gst-plugins-bad-plugins-gleffects-heat.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="gst-plugins-bad-plugins-gleffects-glow"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-bad-plugins-gleffects-glow.top_of_page"></a>gleffects_glow</span></h2>
+<p>gleffects_glow</p>
+</td>
+<td class="gallery_image" valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-gleffects-glow.description"></a><h2>Description</h2>
+<div class="refsynopsisdiv">
+<h2>Synopsis</h2>
+<div class="refsect2">
+<a name="id-1.2.51.3.2.1"></a><h3>Element Information</h3>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term">plugin</span></p></td>
+<td>
+ <a class="link" href="gst-plugins-bad-plugins-plugin-opengl.html#plugin-opengl">opengl</a>
+ </td>
+</tr>
+<tr>
+<td><p><span class="term">author</span></p></td>
+<td>Filippo Argiolas <filippo.argiolas@gmail.com></td>
+</tr>
+<tr>
+<td><p><span class="term">class</span></p></td>
+<td>Filter/Effect/Video</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="id-1.2.51.3.2.2"></a><h3>Element Pads</h3>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>video/x-raw(ANY), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</td>
+</tr>
+</tbody>
+</table></div>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>src</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>source</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw(ANY), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-gleffects-glow.functions_details"></a><h2>Functions</h2>
+<p></p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-gleffects-glow.other_details"></a><h2>Types and Values</h2>
+</div>
+</div>
+<div class="footer">
+<hr>Generated by GTK-Doc V1.25</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-gleffects-heat.html b/docs/plugins/html/gst-plugins-bad-plugins-gleffects-heat.html
new file mode 100644
index 0000000..9028b1e
--- /dev/null
+++ b/docs/plugins/html/gst-plugins-bad-plugins-gleffects-heat.html
@@ -0,0 +1,136 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>gleffects_heat: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
+<link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
+<link rel="up" href="ch01.html" title="gst-plugins-bad Elements">
+<link rel="prev" href="gst-plugins-bad-plugins-gleffects-glow.html" title="gleffects_glow">
+<link rel="next" href="gst-plugins-bad-plugins-gleffects-identity.html" title="gleffects_identity">
+<meta name="generator" content="GTK-Doc V1.25 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
+<td width="100%" align="left" class="shortcuts">
+<a href="#" class="shortcut">Top</a><span id="nav_description"> <span class="dim">|</span>
+ <a href="#gst-plugins-bad-plugins-gleffects-heat.description" class="shortcut">Description</a></span>
+</td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
+<td><a accesskey="p" href="gst-plugins-bad-plugins-gleffects-glow.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="gst-plugins-bad-plugins-gleffects-identity.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="gst-plugins-bad-plugins-gleffects-heat"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-bad-plugins-gleffects-heat.top_of_page"></a>gleffects_heat</span></h2>
+<p>gleffects_heat</p>
+</td>
+<td class="gallery_image" valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-gleffects-heat.description"></a><h2>Description</h2>
+<div class="refsynopsisdiv">
+<h2>Synopsis</h2>
+<div class="refsect2">
+<a name="id-1.2.52.3.2.1"></a><h3>Element Information</h3>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term">plugin</span></p></td>
+<td>
+ <a class="link" href="gst-plugins-bad-plugins-plugin-opengl.html#plugin-opengl">opengl</a>
+ </td>
+</tr>
+<tr>
+<td><p><span class="term">author</span></p></td>
+<td>Filippo Argiolas <filippo.argiolas@gmail.com></td>
+</tr>
+<tr>
+<td><p><span class="term">class</span></p></td>
+<td>Filter/Effect/Video</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="id-1.2.52.3.2.2"></a><h3>Element Pads</h3>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>video/x-raw(ANY), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</td>
+</tr>
+</tbody>
+</table></div>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>src</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>source</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw(ANY), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-gleffects-heat.functions_details"></a><h2>Functions</h2>
+<p></p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-gleffects-heat.other_details"></a><h2>Types and Values</h2>
+</div>
+</div>
+<div class="footer">
+<hr>Generated by GTK-Doc V1.25</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-gleffects-identity.html b/docs/plugins/html/gst-plugins-bad-plugins-gleffects-identity.html
new file mode 100644
index 0000000..2996e5f
--- /dev/null
+++ b/docs/plugins/html/gst-plugins-bad-plugins-gleffects-identity.html
@@ -0,0 +1,136 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>gleffects_identity: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
+<link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
+<link rel="up" href="ch01.html" title="gst-plugins-bad Elements">
+<link rel="prev" href="gst-plugins-bad-plugins-gleffects-heat.html" title="gleffects_heat">
+<link rel="next" href="gst-plugins-bad-plugins-gleffects-laplacian.html" title="gleffects_laplacian">
+<meta name="generator" content="GTK-Doc V1.25 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
+<td width="100%" align="left" class="shortcuts">
+<a href="#" class="shortcut">Top</a><span id="nav_description"> <span class="dim">|</span>
+ <a href="#gst-plugins-bad-plugins-gleffects-identity.description" class="shortcut">Description</a></span>
+</td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
+<td><a accesskey="p" href="gst-plugins-bad-plugins-gleffects-heat.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="gst-plugins-bad-plugins-gleffects-laplacian.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="gst-plugins-bad-plugins-gleffects-identity"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-bad-plugins-gleffects-identity.top_of_page"></a>gleffects_identity</span></h2>
+<p>gleffects_identity</p>
+</td>
+<td class="gallery_image" valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-gleffects-identity.description"></a><h2>Description</h2>
+<div class="refsynopsisdiv">
+<h2>Synopsis</h2>
+<div class="refsect2">
+<a name="id-1.2.53.3.2.1"></a><h3>Element Information</h3>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term">plugin</span></p></td>
+<td>
+ <a class="link" href="gst-plugins-bad-plugins-plugin-opengl.html#plugin-opengl">opengl</a>
+ </td>
+</tr>
+<tr>
+<td><p><span class="term">author</span></p></td>
+<td>Filippo Argiolas <filippo.argiolas@gmail.com></td>
+</tr>
+<tr>
+<td><p><span class="term">class</span></p></td>
+<td>Filter/Effect/Video</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="id-1.2.53.3.2.2"></a><h3>Element Pads</h3>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>video/x-raw(ANY), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</td>
+</tr>
+</tbody>
+</table></div>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>src</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>source</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw(ANY), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-gleffects-identity.functions_details"></a><h2>Functions</h2>
+<p></p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-gleffects-identity.other_details"></a><h2>Types and Values</h2>
+</div>
+</div>
+<div class="footer">
+<hr>Generated by GTK-Doc V1.25</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-gleffects-laplacian.html b/docs/plugins/html/gst-plugins-bad-plugins-gleffects-laplacian.html
new file mode 100644
index 0000000..27ee98a
--- /dev/null
+++ b/docs/plugins/html/gst-plugins-bad-plugins-gleffects-laplacian.html
@@ -0,0 +1,136 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>gleffects_laplacian: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
+<link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
+<link rel="up" href="ch01.html" title="gst-plugins-bad Elements">
+<link rel="prev" href="gst-plugins-bad-plugins-gleffects-identity.html" title="gleffects_identity">
+<link rel="next" href="gst-plugins-bad-plugins-gleffects-lumaxpro.html" title="gleffects_lumaxpro">
+<meta name="generator" content="GTK-Doc V1.25 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
+<td width="100%" align="left" class="shortcuts">
+<a href="#" class="shortcut">Top</a><span id="nav_description"> <span class="dim">|</span>
+ <a href="#gst-plugins-bad-plugins-gleffects-laplacian.description" class="shortcut">Description</a></span>
+</td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
+<td><a accesskey="p" href="gst-plugins-bad-plugins-gleffects-identity.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="gst-plugins-bad-plugins-gleffects-lumaxpro.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="gst-plugins-bad-plugins-gleffects-laplacian"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-bad-plugins-gleffects-laplacian.top_of_page"></a>gleffects_laplacian</span></h2>
+<p>gleffects_laplacian</p>
+</td>
+<td class="gallery_image" valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-gleffects-laplacian.description"></a><h2>Description</h2>
+<div class="refsynopsisdiv">
+<h2>Synopsis</h2>
+<div class="refsect2">
+<a name="id-1.2.54.3.2.1"></a><h3>Element Information</h3>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term">plugin</span></p></td>
+<td>
+ <a class="link" href="gst-plugins-bad-plugins-plugin-opengl.html#plugin-opengl">opengl</a>
+ </td>
+</tr>
+<tr>
+<td><p><span class="term">author</span></p></td>
+<td>Filippo Argiolas <filippo.argiolas@gmail.com></td>
+</tr>
+<tr>
+<td><p><span class="term">class</span></p></td>
+<td>Filter/Effect/Video</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="id-1.2.54.3.2.2"></a><h3>Element Pads</h3>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>video/x-raw(ANY), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</td>
+</tr>
+</tbody>
+</table></div>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>src</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>source</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw(ANY), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-gleffects-laplacian.functions_details"></a><h2>Functions</h2>
+<p></p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-gleffects-laplacian.other_details"></a><h2>Types and Values</h2>
+</div>
+</div>
+<div class="footer">
+<hr>Generated by GTK-Doc V1.25</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-gleffects-lumaxpro.html b/docs/plugins/html/gst-plugins-bad-plugins-gleffects-lumaxpro.html
new file mode 100644
index 0000000..c9d4d29
--- /dev/null
+++ b/docs/plugins/html/gst-plugins-bad-plugins-gleffects-lumaxpro.html
@@ -0,0 +1,136 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>gleffects_lumaxpro: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
+<link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
+<link rel="up" href="ch01.html" title="gst-plugins-bad Elements">
+<link rel="prev" href="gst-plugins-bad-plugins-gleffects-laplacian.html" title="gleffects_laplacian">
+<link rel="next" href="gst-plugins-bad-plugins-gleffects-mirror.html" title="gleffects_mirror">
+<meta name="generator" content="GTK-Doc V1.25 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
+<td width="100%" align="left" class="shortcuts">
+<a href="#" class="shortcut">Top</a><span id="nav_description"> <span class="dim">|</span>
+ <a href="#gst-plugins-bad-plugins-gleffects-lumaxpro.description" class="shortcut">Description</a></span>
+</td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
+<td><a accesskey="p" href="gst-plugins-bad-plugins-gleffects-laplacian.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="gst-plugins-bad-plugins-gleffects-mirror.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="gst-plugins-bad-plugins-gleffects-lumaxpro"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-bad-plugins-gleffects-lumaxpro.top_of_page"></a>gleffects_lumaxpro</span></h2>
+<p>gleffects_lumaxpro</p>
+</td>
+<td class="gallery_image" valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-gleffects-lumaxpro.description"></a><h2>Description</h2>
+<div class="refsynopsisdiv">
+<h2>Synopsis</h2>
+<div class="refsect2">
+<a name="id-1.2.55.3.2.1"></a><h3>Element Information</h3>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term">plugin</span></p></td>
+<td>
+ <a class="link" href="gst-plugins-bad-plugins-plugin-opengl.html#plugin-opengl">opengl</a>
+ </td>
+</tr>
+<tr>
+<td><p><span class="term">author</span></p></td>
+<td>Filippo Argiolas <filippo.argiolas@gmail.com></td>
+</tr>
+<tr>
+<td><p><span class="term">class</span></p></td>
+<td>Filter/Effect/Video</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="id-1.2.55.3.2.2"></a><h3>Element Pads</h3>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>video/x-raw(ANY), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</td>
+</tr>
+</tbody>
+</table></div>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>src</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>source</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw(ANY), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-gleffects-lumaxpro.functions_details"></a><h2>Functions</h2>
+<p></p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-gleffects-lumaxpro.other_details"></a><h2>Types and Values</h2>
+</div>
+</div>
+<div class="footer">
+<hr>Generated by GTK-Doc V1.25</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-gleffects-mirror.html b/docs/plugins/html/gst-plugins-bad-plugins-gleffects-mirror.html
new file mode 100644
index 0000000..a77116b
--- /dev/null
+++ b/docs/plugins/html/gst-plugins-bad-plugins-gleffects-mirror.html
@@ -0,0 +1,136 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>gleffects_mirror: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
+<link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
+<link rel="up" href="ch01.html" title="gst-plugins-bad Elements">
+<link rel="prev" href="gst-plugins-bad-plugins-gleffects-lumaxpro.html" title="gleffects_lumaxpro">
+<link rel="next" href="gst-plugins-bad-plugins-gleffects-sepia.html" title="gleffects_sepia">
+<meta name="generator" content="GTK-Doc V1.25 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
+<td width="100%" align="left" class="shortcuts">
+<a href="#" class="shortcut">Top</a><span id="nav_description"> <span class="dim">|</span>
+ <a href="#gst-plugins-bad-plugins-gleffects-mirror.description" class="shortcut">Description</a></span>
+</td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
+<td><a accesskey="p" href="gst-plugins-bad-plugins-gleffects-lumaxpro.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="gst-plugins-bad-plugins-gleffects-sepia.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="gst-plugins-bad-plugins-gleffects-mirror"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-bad-plugins-gleffects-mirror.top_of_page"></a>gleffects_mirror</span></h2>
+<p>gleffects_mirror</p>
+</td>
+<td class="gallery_image" valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-gleffects-mirror.description"></a><h2>Description</h2>
+<div class="refsynopsisdiv">
+<h2>Synopsis</h2>
+<div class="refsect2">
+<a name="id-1.2.56.3.2.1"></a><h3>Element Information</h3>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term">plugin</span></p></td>
+<td>
+ <a class="link" href="gst-plugins-bad-plugins-plugin-opengl.html#plugin-opengl">opengl</a>
+ </td>
+</tr>
+<tr>
+<td><p><span class="term">author</span></p></td>
+<td>Filippo Argiolas <filippo.argiolas@gmail.com></td>
+</tr>
+<tr>
+<td><p><span class="term">class</span></p></td>
+<td>Filter/Effect/Video</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="id-1.2.56.3.2.2"></a><h3>Element Pads</h3>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>video/x-raw(ANY), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</td>
+</tr>
+</tbody>
+</table></div>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>src</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>source</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw(ANY), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-gleffects-mirror.functions_details"></a><h2>Functions</h2>
+<p></p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-gleffects-mirror.other_details"></a><h2>Types and Values</h2>
+</div>
+</div>
+<div class="footer">
+<hr>Generated by GTK-Doc V1.25</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-gleffects-sepia.html b/docs/plugins/html/gst-plugins-bad-plugins-gleffects-sepia.html
new file mode 100644
index 0000000..5ada4f9
--- /dev/null
+++ b/docs/plugins/html/gst-plugins-bad-plugins-gleffects-sepia.html
@@ -0,0 +1,136 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>gleffects_sepia: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
+<link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
+<link rel="up" href="ch01.html" title="gst-plugins-bad Elements">
+<link rel="prev" href="gst-plugins-bad-plugins-gleffects-mirror.html" title="gleffects_mirror">
+<link rel="next" href="gst-plugins-bad-plugins-gleffects-sin.html" title="gleffects_sin">
+<meta name="generator" content="GTK-Doc V1.25 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
+<td width="100%" align="left" class="shortcuts">
+<a href="#" class="shortcut">Top</a><span id="nav_description"> <span class="dim">|</span>
+ <a href="#gst-plugins-bad-plugins-gleffects-sepia.description" class="shortcut">Description</a></span>
+</td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
+<td><a accesskey="p" href="gst-plugins-bad-plugins-gleffects-mirror.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="gst-plugins-bad-plugins-gleffects-sin.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="gst-plugins-bad-plugins-gleffects-sepia"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-bad-plugins-gleffects-sepia.top_of_page"></a>gleffects_sepia</span></h2>
+<p>gleffects_sepia</p>
+</td>
+<td class="gallery_image" valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-gleffects-sepia.description"></a><h2>Description</h2>
+<div class="refsynopsisdiv">
+<h2>Synopsis</h2>
+<div class="refsect2">
+<a name="id-1.2.57.3.2.1"></a><h3>Element Information</h3>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term">plugin</span></p></td>
+<td>
+ <a class="link" href="gst-plugins-bad-plugins-plugin-opengl.html#plugin-opengl">opengl</a>
+ </td>
+</tr>
+<tr>
+<td><p><span class="term">author</span></p></td>
+<td>Filippo Argiolas <filippo.argiolas@gmail.com></td>
+</tr>
+<tr>
+<td><p><span class="term">class</span></p></td>
+<td>Filter/Effect/Video</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="id-1.2.57.3.2.2"></a><h3>Element Pads</h3>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>video/x-raw(ANY), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</td>
+</tr>
+</tbody>
+</table></div>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>src</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>source</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw(ANY), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-gleffects-sepia.functions_details"></a><h2>Functions</h2>
+<p></p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-gleffects-sepia.other_details"></a><h2>Types and Values</h2>
+</div>
+</div>
+<div class="footer">
+<hr>Generated by GTK-Doc V1.25</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-gleffects-sin.html b/docs/plugins/html/gst-plugins-bad-plugins-gleffects-sin.html
new file mode 100644
index 0000000..5fd68f9
--- /dev/null
+++ b/docs/plugins/html/gst-plugins-bad-plugins-gleffects-sin.html
@@ -0,0 +1,136 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>gleffects_sin: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
+<link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
+<link rel="up" href="ch01.html" title="gst-plugins-bad Elements">
+<link rel="prev" href="gst-plugins-bad-plugins-gleffects-sepia.html" title="gleffects_sepia">
+<link rel="next" href="gst-plugins-bad-plugins-gleffects-sobel.html" title="gleffects_sobel">
+<meta name="generator" content="GTK-Doc V1.25 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
+<td width="100%" align="left" class="shortcuts">
+<a href="#" class="shortcut">Top</a><span id="nav_description"> <span class="dim">|</span>
+ <a href="#gst-plugins-bad-plugins-gleffects-sin.description" class="shortcut">Description</a></span>
+</td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
+<td><a accesskey="p" href="gst-plugins-bad-plugins-gleffects-sepia.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="gst-plugins-bad-plugins-gleffects-sobel.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="gst-plugins-bad-plugins-gleffects-sin"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-bad-plugins-gleffects-sin.top_of_page"></a>gleffects_sin</span></h2>
+<p>gleffects_sin</p>
+</td>
+<td class="gallery_image" valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-gleffects-sin.description"></a><h2>Description</h2>
+<div class="refsynopsisdiv">
+<h2>Synopsis</h2>
+<div class="refsect2">
+<a name="id-1.2.58.3.2.1"></a><h3>Element Information</h3>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term">plugin</span></p></td>
+<td>
+ <a class="link" href="gst-plugins-bad-plugins-plugin-opengl.html#plugin-opengl">opengl</a>
+ </td>
+</tr>
+<tr>
+<td><p><span class="term">author</span></p></td>
+<td>Filippo Argiolas <filippo.argiolas@gmail.com></td>
+</tr>
+<tr>
+<td><p><span class="term">class</span></p></td>
+<td>Filter/Effect/Video</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="id-1.2.58.3.2.2"></a><h3>Element Pads</h3>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>video/x-raw(ANY), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</td>
+</tr>
+</tbody>
+</table></div>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>src</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>source</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw(ANY), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-gleffects-sin.functions_details"></a><h2>Functions</h2>
+<p></p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-gleffects-sin.other_details"></a><h2>Types and Values</h2>
+</div>
+</div>
+<div class="footer">
+<hr>Generated by GTK-Doc V1.25</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-gleffects-sobel.html b/docs/plugins/html/gst-plugins-bad-plugins-gleffects-sobel.html
new file mode 100644
index 0000000..796814c
--- /dev/null
+++ b/docs/plugins/html/gst-plugins-bad-plugins-gleffects-sobel.html
@@ -0,0 +1,136 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>gleffects_sobel: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
+<link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
+<link rel="up" href="ch01.html" title="gst-plugins-bad Elements">
+<link rel="prev" href="gst-plugins-bad-plugins-gleffects-sin.html" title="gleffects_sin">
+<link rel="next" href="gst-plugins-bad-plugins-gleffects-square.html" title="gleffects_square">
+<meta name="generator" content="GTK-Doc V1.25 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
+<td width="100%" align="left" class="shortcuts">
+<a href="#" class="shortcut">Top</a><span id="nav_description"> <span class="dim">|</span>
+ <a href="#gst-plugins-bad-plugins-gleffects-sobel.description" class="shortcut">Description</a></span>
+</td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
+<td><a accesskey="p" href="gst-plugins-bad-plugins-gleffects-sin.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="gst-plugins-bad-plugins-gleffects-square.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="gst-plugins-bad-plugins-gleffects-sobel"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-bad-plugins-gleffects-sobel.top_of_page"></a>gleffects_sobel</span></h2>
+<p>gleffects_sobel</p>
+</td>
+<td class="gallery_image" valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-gleffects-sobel.description"></a><h2>Description</h2>
+<div class="refsynopsisdiv">
+<h2>Synopsis</h2>
+<div class="refsect2">
+<a name="id-1.2.59.3.2.1"></a><h3>Element Information</h3>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term">plugin</span></p></td>
+<td>
+ <a class="link" href="gst-plugins-bad-plugins-plugin-opengl.html#plugin-opengl">opengl</a>
+ </td>
+</tr>
+<tr>
+<td><p><span class="term">author</span></p></td>
+<td>Filippo Argiolas <filippo.argiolas@gmail.com></td>
+</tr>
+<tr>
+<td><p><span class="term">class</span></p></td>
+<td>Filter/Effect/Video</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="id-1.2.59.3.2.2"></a><h3>Element Pads</h3>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>video/x-raw(ANY), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</td>
+</tr>
+</tbody>
+</table></div>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>src</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>source</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw(ANY), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-gleffects-sobel.functions_details"></a><h2>Functions</h2>
+<p></p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-gleffects-sobel.other_details"></a><h2>Types and Values</h2>
+</div>
+</div>
+<div class="footer">
+<hr>Generated by GTK-Doc V1.25</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-gleffects-square.html b/docs/plugins/html/gst-plugins-bad-plugins-gleffects-square.html
new file mode 100644
index 0000000..e7c9315
--- /dev/null
+++ b/docs/plugins/html/gst-plugins-bad-plugins-gleffects-square.html
@@ -0,0 +1,136 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>gleffects_square: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
+<link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
+<link rel="up" href="ch01.html" title="gst-plugins-bad Elements">
+<link rel="prev" href="gst-plugins-bad-plugins-gleffects-sobel.html" title="gleffects_sobel">
+<link rel="next" href="gst-plugins-bad-plugins-gleffects-squeeze.html" title="gleffects_squeeze">
+<meta name="generator" content="GTK-Doc V1.25 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
+<td width="100%" align="left" class="shortcuts">
+<a href="#" class="shortcut">Top</a><span id="nav_description"> <span class="dim">|</span>
+ <a href="#gst-plugins-bad-plugins-gleffects-square.description" class="shortcut">Description</a></span>
+</td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
+<td><a accesskey="p" href="gst-plugins-bad-plugins-gleffects-sobel.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="gst-plugins-bad-plugins-gleffects-squeeze.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="gst-plugins-bad-plugins-gleffects-square"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-bad-plugins-gleffects-square.top_of_page"></a>gleffects_square</span></h2>
+<p>gleffects_square</p>
+</td>
+<td class="gallery_image" valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-gleffects-square.description"></a><h2>Description</h2>
+<div class="refsynopsisdiv">
+<h2>Synopsis</h2>
+<div class="refsect2">
+<a name="id-1.2.60.3.2.1"></a><h3>Element Information</h3>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term">plugin</span></p></td>
+<td>
+ <a class="link" href="gst-plugins-bad-plugins-plugin-opengl.html#plugin-opengl">opengl</a>
+ </td>
+</tr>
+<tr>
+<td><p><span class="term">author</span></p></td>
+<td>Filippo Argiolas <filippo.argiolas@gmail.com></td>
+</tr>
+<tr>
+<td><p><span class="term">class</span></p></td>
+<td>Filter/Effect/Video</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="id-1.2.60.3.2.2"></a><h3>Element Pads</h3>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>video/x-raw(ANY), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</td>
+</tr>
+</tbody>
+</table></div>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>src</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>source</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw(ANY), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-gleffects-square.functions_details"></a><h2>Functions</h2>
+<p></p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-gleffects-square.other_details"></a><h2>Types and Values</h2>
+</div>
+</div>
+<div class="footer">
+<hr>Generated by GTK-Doc V1.25</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-gleffects-squeeze.html b/docs/plugins/html/gst-plugins-bad-plugins-gleffects-squeeze.html
new file mode 100644
index 0000000..b12ba9d
--- /dev/null
+++ b/docs/plugins/html/gst-plugins-bad-plugins-gleffects-squeeze.html
@@ -0,0 +1,136 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>gleffects_squeeze: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
+<link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
+<link rel="up" href="ch01.html" title="gst-plugins-bad Elements">
+<link rel="prev" href="gst-plugins-bad-plugins-gleffects-square.html" title="gleffects_square">
+<link rel="next" href="gst-plugins-bad-plugins-gleffects-stretch.html" title="gleffects_stretch">
+<meta name="generator" content="GTK-Doc V1.25 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
+<td width="100%" align="left" class="shortcuts">
+<a href="#" class="shortcut">Top</a><span id="nav_description"> <span class="dim">|</span>
+ <a href="#gst-plugins-bad-plugins-gleffects-squeeze.description" class="shortcut">Description</a></span>
+</td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
+<td><a accesskey="p" href="gst-plugins-bad-plugins-gleffects-square.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="gst-plugins-bad-plugins-gleffects-stretch.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="gst-plugins-bad-plugins-gleffects-squeeze"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-bad-plugins-gleffects-squeeze.top_of_page"></a>gleffects_squeeze</span></h2>
+<p>gleffects_squeeze</p>
+</td>
+<td class="gallery_image" valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-gleffects-squeeze.description"></a><h2>Description</h2>
+<div class="refsynopsisdiv">
+<h2>Synopsis</h2>
+<div class="refsect2">
+<a name="id-1.2.61.3.2.1"></a><h3>Element Information</h3>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term">plugin</span></p></td>
+<td>
+ <a class="link" href="gst-plugins-bad-plugins-plugin-opengl.html#plugin-opengl">opengl</a>
+ </td>
+</tr>
+<tr>
+<td><p><span class="term">author</span></p></td>
+<td>Filippo Argiolas <filippo.argiolas@gmail.com></td>
+</tr>
+<tr>
+<td><p><span class="term">class</span></p></td>
+<td>Filter/Effect/Video</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="id-1.2.61.3.2.2"></a><h3>Element Pads</h3>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>video/x-raw(ANY), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</td>
+</tr>
+</tbody>
+</table></div>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>src</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>source</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw(ANY), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-gleffects-squeeze.functions_details"></a><h2>Functions</h2>
+<p></p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-gleffects-squeeze.other_details"></a><h2>Types and Values</h2>
+</div>
+</div>
+<div class="footer">
+<hr>Generated by GTK-Doc V1.25</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-gleffects-stretch.html b/docs/plugins/html/gst-plugins-bad-plugins-gleffects-stretch.html
new file mode 100644
index 0000000..95c6e4f
--- /dev/null
+++ b/docs/plugins/html/gst-plugins-bad-plugins-gleffects-stretch.html
@@ -0,0 +1,136 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>gleffects_stretch: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
+<link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
+<link rel="up" href="ch01.html" title="gst-plugins-bad Elements">
+<link rel="prev" href="gst-plugins-bad-plugins-gleffects-squeeze.html" title="gleffects_squeeze">
+<link rel="next" href="gst-plugins-bad-plugins-gleffects-tunnel.html" title="gleffects_tunnel">
+<meta name="generator" content="GTK-Doc V1.25 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
+<td width="100%" align="left" class="shortcuts">
+<a href="#" class="shortcut">Top</a><span id="nav_description"> <span class="dim">|</span>
+ <a href="#gst-plugins-bad-plugins-gleffects-stretch.description" class="shortcut">Description</a></span>
+</td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
+<td><a accesskey="p" href="gst-plugins-bad-plugins-gleffects-squeeze.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="gst-plugins-bad-plugins-gleffects-tunnel.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="gst-plugins-bad-plugins-gleffects-stretch"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-bad-plugins-gleffects-stretch.top_of_page"></a>gleffects_stretch</span></h2>
+<p>gleffects_stretch</p>
+</td>
+<td class="gallery_image" valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-gleffects-stretch.description"></a><h2>Description</h2>
+<div class="refsynopsisdiv">
+<h2>Synopsis</h2>
+<div class="refsect2">
+<a name="id-1.2.62.3.2.1"></a><h3>Element Information</h3>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term">plugin</span></p></td>
+<td>
+ <a class="link" href="gst-plugins-bad-plugins-plugin-opengl.html#plugin-opengl">opengl</a>
+ </td>
+</tr>
+<tr>
+<td><p><span class="term">author</span></p></td>
+<td>Filippo Argiolas <filippo.argiolas@gmail.com></td>
+</tr>
+<tr>
+<td><p><span class="term">class</span></p></td>
+<td>Filter/Effect/Video</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="id-1.2.62.3.2.2"></a><h3>Element Pads</h3>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>video/x-raw(ANY), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</td>
+</tr>
+</tbody>
+</table></div>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>src</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>source</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw(ANY), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-gleffects-stretch.functions_details"></a><h2>Functions</h2>
+<p></p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-gleffects-stretch.other_details"></a><h2>Types and Values</h2>
+</div>
+</div>
+<div class="footer">
+<hr>Generated by GTK-Doc V1.25</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-gleffects-tunnel.html b/docs/plugins/html/gst-plugins-bad-plugins-gleffects-tunnel.html
new file mode 100644
index 0000000..2141769
--- /dev/null
+++ b/docs/plugins/html/gst-plugins-bad-plugins-gleffects-tunnel.html
@@ -0,0 +1,136 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>gleffects_tunnel: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
+<link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
+<link rel="up" href="ch01.html" title="gst-plugins-bad Elements">
+<link rel="prev" href="gst-plugins-bad-plugins-gleffects-stretch.html" title="gleffects_stretch">
+<link rel="next" href="gst-plugins-bad-plugins-gleffects-twirl.html" title="gleffects_twirl">
+<meta name="generator" content="GTK-Doc V1.25 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
+<td width="100%" align="left" class="shortcuts">
+<a href="#" class="shortcut">Top</a><span id="nav_description"> <span class="dim">|</span>
+ <a href="#gst-plugins-bad-plugins-gleffects-tunnel.description" class="shortcut">Description</a></span>
+</td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
+<td><a accesskey="p" href="gst-plugins-bad-plugins-gleffects-stretch.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="gst-plugins-bad-plugins-gleffects-twirl.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="gst-plugins-bad-plugins-gleffects-tunnel"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-bad-plugins-gleffects-tunnel.top_of_page"></a>gleffects_tunnel</span></h2>
+<p>gleffects_tunnel</p>
+</td>
+<td class="gallery_image" valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-gleffects-tunnel.description"></a><h2>Description</h2>
+<div class="refsynopsisdiv">
+<h2>Synopsis</h2>
+<div class="refsect2">
+<a name="id-1.2.63.3.2.1"></a><h3>Element Information</h3>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term">plugin</span></p></td>
+<td>
+ <a class="link" href="gst-plugins-bad-plugins-plugin-opengl.html#plugin-opengl">opengl</a>
+ </td>
+</tr>
+<tr>
+<td><p><span class="term">author</span></p></td>
+<td>Filippo Argiolas <filippo.argiolas@gmail.com></td>
+</tr>
+<tr>
+<td><p><span class="term">class</span></p></td>
+<td>Filter/Effect/Video</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="id-1.2.63.3.2.2"></a><h3>Element Pads</h3>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>video/x-raw(ANY), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</td>
+</tr>
+</tbody>
+</table></div>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>src</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>source</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw(ANY), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-gleffects-tunnel.functions_details"></a><h2>Functions</h2>
+<p></p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-gleffects-tunnel.other_details"></a><h2>Types and Values</h2>
+</div>
+</div>
+<div class="footer">
+<hr>Generated by GTK-Doc V1.25</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-gleffects-twirl.html b/docs/plugins/html/gst-plugins-bad-plugins-gleffects-twirl.html
new file mode 100644
index 0000000..5750612
--- /dev/null
+++ b/docs/plugins/html/gst-plugins-bad-plugins-gleffects-twirl.html
@@ -0,0 +1,136 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>gleffects_twirl: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
+<link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
+<link rel="up" href="ch01.html" title="gst-plugins-bad Elements">
+<link rel="prev" href="gst-plugins-bad-plugins-gleffects-tunnel.html" title="gleffects_tunnel">
+<link rel="next" href="gst-plugins-bad-plugins-gleffects.html" title="gleffects">
+<meta name="generator" content="GTK-Doc V1.25 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
+<td width="100%" align="left" class="shortcuts">
+<a href="#" class="shortcut">Top</a><span id="nav_description"> <span class="dim">|</span>
+ <a href="#gst-plugins-bad-plugins-gleffects-twirl.description" class="shortcut">Description</a></span>
+</td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
+<td><a accesskey="p" href="gst-plugins-bad-plugins-gleffects-tunnel.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="gst-plugins-bad-plugins-gleffects.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="gst-plugins-bad-plugins-gleffects-twirl"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-bad-plugins-gleffects-twirl.top_of_page"></a>gleffects_twirl</span></h2>
+<p>gleffects_twirl</p>
+</td>
+<td class="gallery_image" valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-gleffects-twirl.description"></a><h2>Description</h2>
+<div class="refsynopsisdiv">
+<h2>Synopsis</h2>
+<div class="refsect2">
+<a name="id-1.2.64.3.2.1"></a><h3>Element Information</h3>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term">plugin</span></p></td>
+<td>
+ <a class="link" href="gst-plugins-bad-plugins-plugin-opengl.html#plugin-opengl">opengl</a>
+ </td>
+</tr>
+<tr>
+<td><p><span class="term">author</span></p></td>
+<td>Filippo Argiolas <filippo.argiolas@gmail.com></td>
+</tr>
+<tr>
+<td><p><span class="term">class</span></p></td>
+<td>Filter/Effect/Video</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="id-1.2.64.3.2.2"></a><h3>Element Pads</h3>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>video/x-raw(ANY), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</td>
+</tr>
+</tbody>
+</table></div>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>src</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>source</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw(ANY), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-gleffects-twirl.functions_details"></a><h2>Functions</h2>
+<p></p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-gleffects-twirl.other_details"></a><h2>Types and Values</h2>
+</div>
+</div>
+<div class="footer">
+<hr>Generated by GTK-Doc V1.25</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-gleffects-xpro.html b/docs/plugins/html/gst-plugins-bad-plugins-gleffects-xpro.html
new file mode 100644
index 0000000..ac5b6ab
--- /dev/null
+++ b/docs/plugins/html/gst-plugins-bad-plugins-gleffects-xpro.html
@@ -0,0 +1,136 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>gleffects_xpro: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
+<link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
+<link rel="up" href="ch01.html" title="gst-plugins-bad Elements">
+<link rel="prev" href="gst-plugins-bad-plugins-gleffects.html" title="gleffects">
+<link rel="next" href="gst-plugins-bad-plugins-gleffects-xray.html" title="gleffects_xray">
+<meta name="generator" content="GTK-Doc V1.25 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
+<td width="100%" align="left" class="shortcuts">
+<a href="#" class="shortcut">Top</a><span id="nav_description"> <span class="dim">|</span>
+ <a href="#gst-plugins-bad-plugins-gleffects-xpro.description" class="shortcut">Description</a></span>
+</td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
+<td><a accesskey="p" href="gst-plugins-bad-plugins-gleffects.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="gst-plugins-bad-plugins-gleffects-xray.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="gst-plugins-bad-plugins-gleffects-xpro"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-bad-plugins-gleffects-xpro.top_of_page"></a>gleffects_xpro</span></h2>
+<p>gleffects_xpro</p>
+</td>
+<td class="gallery_image" valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-gleffects-xpro.description"></a><h2>Description</h2>
+<div class="refsynopsisdiv">
+<h2>Synopsis</h2>
+<div class="refsect2">
+<a name="id-1.2.66.3.2.1"></a><h3>Element Information</h3>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term">plugin</span></p></td>
+<td>
+ <a class="link" href="gst-plugins-bad-plugins-plugin-opengl.html#plugin-opengl">opengl</a>
+ </td>
+</tr>
+<tr>
+<td><p><span class="term">author</span></p></td>
+<td>Filippo Argiolas <filippo.argiolas@gmail.com></td>
+</tr>
+<tr>
+<td><p><span class="term">class</span></p></td>
+<td>Filter/Effect/Video</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="id-1.2.66.3.2.2"></a><h3>Element Pads</h3>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>video/x-raw(ANY), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</td>
+</tr>
+</tbody>
+</table></div>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>src</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>source</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw(ANY), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-gleffects-xpro.functions_details"></a><h2>Functions</h2>
+<p></p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-gleffects-xpro.other_details"></a><h2>Types and Values</h2>
+</div>
+</div>
+<div class="footer">
+<hr>Generated by GTK-Doc V1.25</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-gleffects-xray.html b/docs/plugins/html/gst-plugins-bad-plugins-gleffects-xray.html
new file mode 100644
index 0000000..d5b93fa
--- /dev/null
+++ b/docs/plugins/html/gst-plugins-bad-plugins-gleffects-xray.html
@@ -0,0 +1,136 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>gleffects_xray: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
+<link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
+<link rel="up" href="ch01.html" title="gst-plugins-bad Elements">
+<link rel="prev" href="gst-plugins-bad-plugins-gleffects-xpro.html" title="gleffects_xpro">
+<link rel="next" href="gst-plugins-bad-plugins-glfilterapp.html" title="glfilterapp">
+<meta name="generator" content="GTK-Doc V1.25 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
+<td width="100%" align="left" class="shortcuts">
+<a href="#" class="shortcut">Top</a><span id="nav_description"> <span class="dim">|</span>
+ <a href="#gst-plugins-bad-plugins-gleffects-xray.description" class="shortcut">Description</a></span>
+</td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
+<td><a accesskey="p" href="gst-plugins-bad-plugins-gleffects-xpro.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="gst-plugins-bad-plugins-glfilterapp.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="gst-plugins-bad-plugins-gleffects-xray"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-bad-plugins-gleffects-xray.top_of_page"></a>gleffects_xray</span></h2>
+<p>gleffects_xray</p>
+</td>
+<td class="gallery_image" valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-gleffects-xray.description"></a><h2>Description</h2>
+<div class="refsynopsisdiv">
+<h2>Synopsis</h2>
+<div class="refsect2">
+<a name="id-1.2.67.3.2.1"></a><h3>Element Information</h3>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term">plugin</span></p></td>
+<td>
+ <a class="link" href="gst-plugins-bad-plugins-plugin-opengl.html#plugin-opengl">opengl</a>
+ </td>
+</tr>
+<tr>
+<td><p><span class="term">author</span></p></td>
+<td>Filippo Argiolas <filippo.argiolas@gmail.com></td>
+</tr>
+<tr>
+<td><p><span class="term">class</span></p></td>
+<td>Filter/Effect/Video</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="id-1.2.67.3.2.2"></a><h3>Element Pads</h3>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>video/x-raw(ANY), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</td>
+</tr>
+</tbody>
+</table></div>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>src</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>source</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw(ANY), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-gleffects-xray.functions_details"></a><h2>Functions</h2>
+<p></p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-gleffects-xray.other_details"></a><h2>Types and Values</h2>
+</div>
+</div>
+<div class="footer">
+<hr>Generated by GTK-Doc V1.25</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-gleffects.html b/docs/plugins/html/gst-plugins-bad-plugins-gleffects.html
new file mode 100644
index 0000000..55c21dd
--- /dev/null
+++ b/docs/plugins/html/gst-plugins-bad-plugins-gleffects.html
@@ -0,0 +1,136 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>gleffects: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
+<link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
+<link rel="up" href="ch01.html" title="gst-plugins-bad Elements">
+<link rel="prev" href="gst-plugins-bad-plugins-gleffects-twirl.html" title="gleffects_twirl">
+<link rel="next" href="gst-plugins-bad-plugins-gleffects-xpro.html" title="gleffects_xpro">
+<meta name="generator" content="GTK-Doc V1.25 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
+<td width="100%" align="left" class="shortcuts">
+<a href="#" class="shortcut">Top</a><span id="nav_description"> <span class="dim">|</span>
+ <a href="#gst-plugins-bad-plugins-gleffects.description" class="shortcut">Description</a></span>
+</td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
+<td><a accesskey="p" href="gst-plugins-bad-plugins-gleffects-twirl.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="gst-plugins-bad-plugins-gleffects-xpro.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="gst-plugins-bad-plugins-gleffects"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-bad-plugins-gleffects.top_of_page"></a>gleffects</span></h2>
+<p>gleffects</p>
+</td>
+<td class="gallery_image" valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-gleffects.description"></a><h2>Description</h2>
+<div class="refsynopsisdiv">
+<h2>Synopsis</h2>
+<div class="refsect2">
+<a name="id-1.2.65.3.2.1"></a><h3>Element Information</h3>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term">plugin</span></p></td>
+<td>
+ <a class="link" href="gst-plugins-bad-plugins-plugin-opengl.html#plugin-opengl">opengl</a>
+ </td>
+</tr>
+<tr>
+<td><p><span class="term">author</span></p></td>
+<td>Filippo Argiolas <filippo.argiolas@gmail.com></td>
+</tr>
+<tr>
+<td><p><span class="term">class</span></p></td>
+<td>Filter/Effect/Video</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="id-1.2.65.3.2.2"></a><h3>Element Pads</h3>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>video/x-raw(ANY), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</td>
+</tr>
+</tbody>
+</table></div>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>src</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>source</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw(ANY), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-gleffects.functions_details"></a><h2>Functions</h2>
+<p></p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-gleffects.other_details"></a><h2>Types and Values</h2>
+</div>
+</div>
+<div class="footer">
+<hr>Generated by GTK-Doc V1.25</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-glfilterapp.html b/docs/plugins/html/gst-plugins-bad-plugins-glfilterapp.html
new file mode 100644
index 0000000..ccfd928
--- /dev/null
+++ b/docs/plugins/html/gst-plugins-bad-plugins-glfilterapp.html
@@ -0,0 +1,306 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>glfilterapp: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
+<link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
+<link rel="up" href="ch01.html" title="gst-plugins-bad Elements">
+<link rel="prev" href="gst-plugins-bad-plugins-gleffects-xray.html" title="gleffects_xray">
+<link rel="next" href="gst-plugins-bad-plugins-glfilterbin.html" title="glfilterbin">
+<meta name="generator" content="GTK-Doc V1.25 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
+<td width="100%" align="left" class="shortcuts">
+<a href="#" class="shortcut">Top</a><span id="nav_description"> <span class="dim">|</span>
+ <a href="#gst-plugins-bad-plugins-glfilterapp.description" class="shortcut">Description</a></span><span id="nav_hierarchy"> <span class="dim">|</span>
+ <a href="#gst-plugins-bad-plugins-glfilterapp.object-hierarchy" class="shortcut">Object Hierarchy</a></span><span id="nav_properties"> <span class="dim">|</span>
+ <a href="#gst-plugins-bad-plugins-glfilterapp.properties" class="shortcut">Properties</a></span><span id="nav_signals"> <span class="dim">|</span>
+ <a href="#gst-plugins-bad-plugins-glfilterapp.signals" class="shortcut">Signals</a></span>
+</td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
+<td><a accesskey="p" href="gst-plugins-bad-plugins-gleffects-xray.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="gst-plugins-bad-plugins-glfilterbin.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="gst-plugins-bad-plugins-glfilterapp"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-bad-plugins-glfilterapp.top_of_page"></a>glfilterapp</span></h2>
+<p>glfilterapp</p>
+</td>
+<td class="gallery_image" valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-glfilterapp.properties"></a><h2>Properties</h2>
+<div class="informaltable"><table class="informaltable" border="0">
+<colgroup>
+<col width="150px" class="properties_type">
+<col width="300px" class="properties_name">
+<col width="200px" class="properties_flags">
+</colgroup>
+<tbody>
+<tr>
+<td class="property_type"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a></td>
+<td class="property_name"><a class="link" href="gst-plugins-bad-plugins-glfilterapp.html#GstGLFilterApp--client-data" title="The “client-data” property">client-data</a></td>
+<td class="property_flags">Write</td>
+</tr>
+<tr>
+<td class="property_type"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a></td>
+<td class="property_name"><a class="link" href="gst-plugins-bad-plugins-glfilterapp.html#GstGLFilterApp--client-draw-callback" title="The “client-draw-callback” property">client-draw-callback</a></td>
+<td class="property_flags">Write</td>
+</tr>
+<tr>
+<td class="property_type"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a></td>
+<td class="property_name"><a class="link" href="gst-plugins-bad-plugins-glfilterapp.html#GstGLFilterApp--client-reshape-callback" title="The “client-reshape-callback” property">client-reshape-callback</a></td>
+<td class="property_flags">Write</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-glfilterapp.signals"></a><h2>Signals</h2>
+<div class="informaltable"><table class="informaltable" border="0">
+<colgroup>
+<col width="150px" class="signals_return">
+<col width="300px" class="signals_name">
+<col width="200px" class="signals_flags">
+</colgroup>
+<tbody><tr>
+<td class="signal_type"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a></td>
+<td class="signal_name"><a class="link" href="gst-plugins-bad-plugins-glfilterapp.html#GstGLFilterApp-client-draw" title="The “client-draw” signal">client-draw</a></td>
+<td class="signal_flags"><a href="/usr/share/gtk-doc/html/gobjectgobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></td>
+</tr></tbody>
+</table></div>
+</div>
+<a name="GstGLFilterApp"></a><div class="refsect1">
+<a name="gst-plugins-bad-plugins-glfilterapp.other"></a><h2>Types and Values</h2>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="name">
+<col class="description">
+</colgroup>
+<tbody><tr>
+<td class="datatype_keyword">struct</td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-plugins-glfilterapp.html#GstGLFilterApp-struct" title="struct GstGLFilterApp">GstGLFilterApp</a></td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-glfilterapp.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="screen"> <a href="/usr/share/gtk-doc/html/gobjectgobject-The-Base-Object-Type.html#GObject-struct">GObject</a>
+ <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gobjectgobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
+ <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstObject.html#GstObject-struct">GstObject</a>
+ <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#GstElement-struct">GstElement</a>
+ <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-libs-1.0GstBaseTransform.html#GstBaseTransform-struct">GstBaseTransform</a>
+ <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gst-plugins-bad-libs-1.0GstGLBaseFilter.html#GstGLBaseFilter-struct">GstGLBaseFilter</a>
+ <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gst-plugins-bad-libs-1.0GstGLFilter.html#GstGLFilter-struct">GstGLFilter</a>
+ <span class="lineart">╰──</span> GstGLFilterApp
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-glfilterapp.description"></a><h2>Description</h2>
+<p>The resize and redraw callbacks can be set from a client code.</p>
+<div class="refsect2">
+<a name="id-1.2.68.8.3"></a><h3>CLient callbacks</h3>
+<p>
+The graphic scene can be written from a client code through the
+two glfilterapp properties.
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="id-1.2.68.8.4"></a><h3>Examples</h3>
+see gst-plugins-gl/tests/examples/generic/recordgraphic
+</div>
+<div class="refsynopsisdiv">
+<h2>Synopsis</h2>
+<div class="refsect2">
+<a name="id-1.2.68.8.5.1"></a><h3>Element Information</h3>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term">plugin</span></p></td>
+<td>
+ <a class="link" href="gst-plugins-bad-plugins-plugin-opengl.html#plugin-opengl">opengl</a>
+ </td>
+</tr>
+<tr>
+<td><p><span class="term">author</span></p></td>
+<td>Julien Isorce <julien.isorce@gmail.com></td>
+</tr>
+<tr>
+<td><p><span class="term">class</span></p></td>
+<td>Filter/Effect</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="id-1.2.68.8.5.2"></a><h3>Element Pads</h3>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>video/x-raw(ANY), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</td>
+</tr>
+</tbody>
+</table></div>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>src</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>source</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw(ANY), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-glfilterapp.functions_details"></a><h2>Functions</h2>
+<p></p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-glfilterapp.other_details"></a><h2>Types and Values</h2>
+<div class="refsect2">
+<a name="GstGLFilterApp-struct"></a><h3>struct GstGLFilterApp</h3>
+<pre class="programlisting">struct GstGLFilterApp;</pre>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-glfilterapp.property-details"></a><h2>Property Details</h2>
+<div class="refsect2">
+<a name="GstGLFilterApp--client-data"></a><h3>The <code class="literal">“client-data”</code> property</h3>
+<pre class="programlisting"> “client-data” <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a></pre>
+<p>Pass data to the draw and reshape callbacks.</p>
+<p>Flags: Write</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstGLFilterApp--client-draw-callback"></a><h3>The <code class="literal">“client-draw-callback”</code> property</h3>
+<pre class="programlisting"> “client-draw-callback” <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a></pre>
+<p>Define a custom draw callback in a client code.</p>
+<p>Flags: Write</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstGLFilterApp--client-reshape-callback"></a><h3>The <code class="literal">“client-reshape-callback”</code> property</h3>
+<pre class="programlisting"> “client-reshape-callback” <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a></pre>
+<p>Define a custom reshape callback in a client code.</p>
+<p>Flags: Write</p>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-glfilterapp.signal-details"></a><h2>Signal Details</h2>
+<div class="refsect2">
+<a name="GstGLFilterApp-client-draw"></a><h3>The <code class="literal">“client-draw”</code> signal</h3>
+<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+user_function (<a class="link" href="gst-plugins-bad-plugins-glfilterapp.html#GstGLFilterApp"><span class="type">GstGLFilterApp</span></a> *object,
+ <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="type">guint</span></a> texture,
+ <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="type">guint</span></a> width,
+ <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="type">guint</span></a> height,
+ <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data)</pre>
+<p>Will be emitted before to draw the texture. The client should
+redraw the surface/contents with the <em class="parameter"><code>texture</code></em>
+, <em class="parameter"><code>width</code></em>
+ and <em class="parameter"><code>height</code></em>
+.</p>
+<div class="refsect3">
+<a name="GstGLFilterApp-client-draw.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>object</p></td>
+<td class="parameter_description"><p>the <a class="link" href="gst-plugins-bad-plugins-glimagesinkelement.html#GstGLImageSink"><span class="type">GstGLImageSink</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>texture</p></td>
+<td class="parameter_description"><p>the <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="type">guint</span></a> id of the texture.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>width</p></td>
+<td class="parameter_description"><p>the <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="type">guint</span></a> width of the texture.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>height</p></td>
+<td class="parameter_description"><p>the <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="type">guint</span></a> height of the texture.</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 class="refsect3">
+<a name="GstGLFilterApp-client-draw.returns"></a><h4>Returns</h4>
+<p> whether the texture was redrawn by the signal. If not, a
+default redraw will occur.</p>
+</div>
+<p>Flags: <a href="/usr/share/gtk-doc/html/gobjectgobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></p>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>Generated by GTK-Doc V1.25</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-glfilterbin.html b/docs/plugins/html/gst-plugins-bad-plugins-glfilterbin.html
new file mode 100644
index 0000000..f258653
--- /dev/null
+++ b/docs/plugins/html/gst-plugins-bad-plugins-glfilterbin.html
@@ -0,0 +1,247 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>glfilterbin: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
+<link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
+<link rel="up" href="ch01.html" title="gst-plugins-bad Elements">
+<link rel="prev" href="gst-plugins-bad-plugins-glfilterapp.html" title="glfilterapp">
+<link rel="next" href="gst-plugins-bad-plugins-glfiltercube.html" title="glfiltercube">
+<meta name="generator" content="GTK-Doc V1.25 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
+<td width="100%" align="left" class="shortcuts">
+<a href="#" class="shortcut">Top</a><span id="nav_description"> <span class="dim">|</span>
+ <a href="#gst-plugins-bad-plugins-glfilterbin.description" class="shortcut">Description</a></span><span id="nav_hierarchy"> <span class="dim">|</span>
+ <a href="#gst-plugins-bad-plugins-glfilterbin.object-hierarchy" class="shortcut">Object Hierarchy</a></span><span id="nav_interfaces"> <span class="dim">|</span>
+ <a href="#gst-plugins-bad-plugins-glfilterbin.implemented-interfaces" class="shortcut">Implemented Interfaces</a></span><span id="nav_properties"> <span class="dim">|</span>
+ <a href="#gst-plugins-bad-plugins-glfilterbin.properties" class="shortcut">Properties</a></span><span id="nav_signals"> <span class="dim">|</span>
+ <a href="#gst-plugins-bad-plugins-glfilterbin.signals" class="shortcut">Signals</a></span>
+</td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
+<td><a accesskey="p" href="gst-plugins-bad-plugins-glfilterapp.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="gst-plugins-bad-plugins-glfiltercube.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="gst-plugins-bad-plugins-glfilterbin"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-bad-plugins-glfilterbin.top_of_page"></a>glfilterbin</span></h2>
+<p>glfilterbin</p>
+</td>
+<td class="gallery_image" valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-glfilterbin.properties"></a><h2>Properties</h2>
+<div class="informaltable"><table class="informaltable" border="0">
+<colgroup>
+<col width="150px" class="properties_type">
+<col width="300px" class="properties_name">
+<col width="200px" class="properties_flags">
+</colgroup>
+<tbody><tr>
+<td class="property_type">
+<a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#GstElement-struct"><span class="type">GstElement</span></a> *</td>
+<td class="property_name"><a class="link" href="gst-plugins-bad-plugins-glfilterbin.html#GstGLFilterBin--filter" title="The “filter” property">filter</a></td>
+<td class="property_flags">Read / Write</td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-glfilterbin.signals"></a><h2>Signals</h2>
+<div class="informaltable"><table class="informaltable" border="0">
+<colgroup>
+<col width="150px" class="signals_return">
+<col width="300px" class="signals_name">
+<col width="200px" class="signals_flags">
+</colgroup>
+<tbody><tr>
+<td class="signal_type">
+<a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#GstElement-struct"><span class="returnvalue">GstElement</span></a>*</td>
+<td class="signal_name"><a class="link" href="gst-plugins-bad-plugins-glfilterbin.html#GstGLFilterBin-create-element" title="The “create-element” signal">create-element</a></td>
+<td class="signal_flags"><a href="/usr/share/gtk-doc/html/gobjectgobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></td>
+</tr></tbody>
+</table></div>
+</div>
+<a name="GstGLFilterBin"></a><div class="refsect1">
+<a name="gst-plugins-bad-plugins-glfilterbin.other"></a><h2>Types and Values</h2>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="name">
+<col class="description">
+</colgroup>
+<tbody><tr>
+<td class="datatype_keyword">struct</td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-plugins-glfilterbin.html#GstGLFilterBin-struct" title="struct GstGLFilterBin">GstGLFilterBin</a></td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-glfilterbin.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="screen"> <a href="/usr/share/gtk-doc/html/gobjectgobject-The-Base-Object-Type.html#GObject-struct">GObject</a>
+ <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gobjectgobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
+ <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstObject.html#GstObject-struct">GstObject</a>
+ <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#GstElement-struct">GstElement</a>
+ <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstBin.html#GstBin-struct">GstBin</a>
+ <span class="lineart">╰──</span> GstGLFilterBin
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-glfilterbin.implemented-interfaces"></a><h2>Implemented Interfaces</h2>
+<p>
+GstGLFilterBin implements
+ <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstChildProxy.html#GstChildProxy-struct">GstChildProxy</a>.</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-glfilterbin.description"></a><h2>Description</h2>
+<div class="refsynopsisdiv">
+<h2>Synopsis</h2>
+<div class="refsect2">
+<a name="id-1.2.69.9.2.1"></a><h3>Element Information</h3>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term">plugin</span></p></td>
+<td>
+ <a class="link" href="gst-plugins-bad-plugins-plugin-opengl.html#plugin-opengl">opengl</a>
+ </td>
+</tr>
+<tr>
+<td><p><span class="term">author</span></p></td>
+<td>Matthew Waters <matthew@centricular.com></td>
+</tr>
+<tr>
+<td><p><span class="term">class</span></p></td>
+<td>Filter/Video</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="id-1.2.69.9.2.2"></a><h3>Element Pads</h3>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>video/x-raw(memory:GLMemory, meta:GstVideoOverlayComposition), format=(string){ RGBA, BGRA, RGBx, BGRx, ARGB, ABGR, xRGB, xBGR, RGB, BGR, RGB16, BGR16, AYUV, I420, YV12, NV12, NV21, YUY2, UYVY, Y41B, Y42B, Y444, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw(memory:SystemMemory, meta:GstVideoOverlayComposition), format=(string){ RGBA, BGRA, RGBx, BGRx, ARGB, ABGR, xRGB, xBGR, RGB, BGR, RGB16, BGR16, AYUV, I420, YV12, NV12, NV21, YUY2, UYVY, Y41B, Y42B, Y444, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw(meta:GstVideoGLTextureUploadMeta, meta:GstVideoOverlayComposition), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw(memory:GLMemory), format=(string){ RGBA, BGRA, RGBx, BGRx, ARGB, ABGR, xRGB, xBGR, RGB, BGR, RGB16, BGR16, AYUV, I420, YV12, NV12, NV21, YUY2, UYVY, Y41B, Y42B, Y444, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw, format=(string){ RGBA, BGRA, RGBx, BGRx, ARGB, ABGR, xRGB, xBGR, RGB, BGR, RGB16, BGR16, AYUV, I420, YV12, NV12, NV21, YUY2, UYVY, Y41B, Y42B, Y444, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw(meta:GstVideoGLTextureUploadMeta), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+</tbody>
+</table></div>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>src</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>source</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>video/x-raw(ANY)</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-glfilterbin.functions_details"></a><h2>Functions</h2>
+<p></p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-glfilterbin.other_details"></a><h2>Types and Values</h2>
+<div class="refsect2">
+<a name="GstGLFilterBin-struct"></a><h3>struct GstGLFilterBin</h3>
+<pre class="programlisting">struct GstGLFilterBin;</pre>
+<div class="refsect3">
+<a name="GstGLFilterBin.members"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="300px" class="struct_members_name">
+<col class="struct_members_description">
+<col width="200px" class="struct_members_annotations">
+</colgroup>
+<tbody></tbody>
+</table></div>
+</div>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-glfilterbin.property-details"></a><h2>Property Details</h2>
+<div class="refsect2">
+<a name="GstGLFilterBin--filter"></a><h3>The <code class="literal">“filter”</code> property</h3>
+<pre class="programlisting"> “filter” <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#GstElement-struct"><span class="type">GstElement</span></a> *</pre>
+<p>The GL filter chain to use.</p>
+<p>Flags: Read / Write</p>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-glfilterbin.signal-details"></a><h2>Signal Details</h2>
+<div class="refsect2">
+<a name="GstGLFilterBin-create-element"></a><h3>The <code class="literal">“create-element”</code> signal</h3>
+<pre class="programlisting"><a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#GstElement-struct"><span class="returnvalue">GstElement</span></a>*
+user_function (<a class="link" href="gst-plugins-bad-plugins-glfilterbin.html#GstGLFilterBin"><span class="type">GstGLFilterBin</span></a> *gstglfilterbin,
+ <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data)</pre>
+<p>Flags: <a href="/usr/share/gtk-doc/html/gobjectgobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></p>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>Generated by GTK-Doc V1.25</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-glfiltercube.html b/docs/plugins/html/gst-plugins-bad-plugins-glfiltercube.html
new file mode 100644
index 0000000..e201760
--- /dev/null
+++ b/docs/plugins/html/gst-plugins-bad-plugins-glfiltercube.html
@@ -0,0 +1,319 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>glfiltercube: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
+<link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
+<link rel="up" href="ch01.html" title="gst-plugins-bad Elements">
+<link rel="prev" href="gst-plugins-bad-plugins-glfilterbin.html" title="glfilterbin">
+<link rel="next" href="gst-plugins-bad-plugins-glfilterglass.html" title="glfilterglass">
+<meta name="generator" content="GTK-Doc V1.25 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
+<td width="100%" align="left" class="shortcuts">
+<a href="#" class="shortcut">Top</a><span id="nav_description"> <span class="dim">|</span>
+ <a href="#gst-plugins-bad-plugins-glfiltercube.description" class="shortcut">Description</a></span><span id="nav_hierarchy"> <span class="dim">|</span>
+ <a href="#gst-plugins-bad-plugins-glfiltercube.object-hierarchy" class="shortcut">Object Hierarchy</a></span><span id="nav_properties"> <span class="dim">|</span>
+ <a href="#gst-plugins-bad-plugins-glfiltercube.properties" class="shortcut">Properties</a></span>
+</td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
+<td><a accesskey="p" href="gst-plugins-bad-plugins-glfilterbin.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="gst-plugins-bad-plugins-glfilterglass.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="gst-plugins-bad-plugins-glfiltercube"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-bad-plugins-glfiltercube.top_of_page"></a>glfiltercube</span></h2>
+<p>glfiltercube</p>
+</td>
+<td class="gallery_image" valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-glfiltercube.properties"></a><h2>Properties</h2>
+<div class="informaltable"><table class="informaltable" border="0">
+<colgroup>
+<col width="150px" class="properties_type">
+<col width="300px" class="properties_name">
+<col width="200px" class="properties_flags">
+</colgroup>
+<tbody>
+<tr>
+<td class="property_type"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a></td>
+<td class="property_name"><a class="link" href="gst-plugins-bad-plugins-glfiltercube.html#GstGLFilterCube--aspect" title="The “aspect” property">aspect</a></td>
+<td class="property_flags">Read / Write</td>
+</tr>
+<tr>
+<td class="property_type"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gfloat"><span class="type">gfloat</span></a></td>
+<td class="property_name"><a class="link" href="gst-plugins-bad-plugins-glfiltercube.html#GstGLFilterCube--blue" title="The “blue” property">blue</a></td>
+<td class="property_flags">Read / Write</td>
+</tr>
+<tr>
+<td class="property_type"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a></td>
+<td class="property_name"><a class="link" href="gst-plugins-bad-plugins-glfiltercube.html#GstGLFilterCube--fovy" title="The “fovy” property">fovy</a></td>
+<td class="property_flags">Read / Write</td>
+</tr>
+<tr>
+<td class="property_type"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gfloat"><span class="type">gfloat</span></a></td>
+<td class="property_name"><a class="link" href="gst-plugins-bad-plugins-glfiltercube.html#GstGLFilterCube--green" title="The “green” property">green</a></td>
+<td class="property_flags">Read / Write</td>
+</tr>
+<tr>
+<td class="property_type"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gfloat"><span class="type">gfloat</span></a></td>
+<td class="property_name"><a class="link" href="gst-plugins-bad-plugins-glfiltercube.html#GstGLFilterCube--red" title="The “red” property">red</a></td>
+<td class="property_flags">Read / Write</td>
+</tr>
+<tr>
+<td class="property_type"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a></td>
+<td class="property_name"><a class="link" href="gst-plugins-bad-plugins-glfiltercube.html#GstGLFilterCube--zfar" title="The “zfar” property">zfar</a></td>
+<td class="property_flags">Read / Write</td>
+</tr>
+<tr>
+<td class="property_type"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a></td>
+<td class="property_name"><a class="link" href="gst-plugins-bad-plugins-glfiltercube.html#GstGLFilterCube--znear" title="The “znear” property">znear</a></td>
+<td class="property_flags">Read / Write</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<a name="GstGLFilterCube"></a><div class="refsect1">
+<a name="gst-plugins-bad-plugins-glfiltercube.other"></a><h2>Types and Values</h2>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="name">
+<col class="description">
+</colgroup>
+<tbody><tr>
+<td class="datatype_keyword">struct</td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-plugins-glfiltercube.html#GstGLFilterCube-struct" title="struct GstGLFilterCube">GstGLFilterCube</a></td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-glfiltercube.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="screen"> <a href="/usr/share/gtk-doc/html/gobjectgobject-The-Base-Object-Type.html#GObject-struct">GObject</a>
+ <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gobjectgobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
+ <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstObject.html#GstObject-struct">GstObject</a>
+ <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#GstElement-struct">GstElement</a>
+ <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-libs-1.0GstBaseTransform.html#GstBaseTransform-struct">GstBaseTransform</a>
+ <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gst-plugins-bad-libs-1.0GstGLBaseFilter.html#GstGLBaseFilter-struct">GstGLBaseFilter</a>
+ <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gst-plugins-bad-libs-1.0GstGLFilter.html#GstGLFilter-struct">GstGLFilter</a>
+ <span class="lineart">╰──</span> GstGLFilterCube
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-glfiltercube.description"></a><h2>Description</h2>
+<p>The resize and redraw callbacks can be set from a client code.</p>
+<div class="refsect2">
+<a name="id-1.2.70.7.3"></a><h3>Examples</h3>
+<div class="informalexample">
+ <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
+ <tbody>
+ <tr>
+ <td class="listing_lines" align="right"><pre>1</pre></td>
+ <td class="listing_code"><pre class="programlisting">gst<span class="gtkdoc opt">-</span>launch<span class="gtkdoc opt">-</span><span class="number">1.0</span> <span class="gtkdoc opt">-</span>v videotestsrc <span class="gtkdoc opt">!</span> glfiltercube <span class="gtkdoc opt">!</span> glimagesink</pre></td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+ A pipeline to mpa textures on the 6 cube faces..
+FBO is required.
+<div class="informalexample">
+ <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
+ <tbody>
+ <tr>
+ <td class="listing_lines" align="right"><pre>1</pre></td>
+ <td class="listing_code"><pre class="programlisting">gst<span class="gtkdoc opt">-</span>launch<span class="gtkdoc opt">-</span><span class="number">1.0</span> <span class="gtkdoc opt">-</span>v videotestsrc <span class="gtkdoc opt">!</span> glfiltercube <span class="gtkdoc opt">!</span> video<span class="gtkdoc opt">/</span>x<span class="gtkdoc opt">-</span>raw<span class="gtkdoc opt">,</span> width<span class="gtkdoc opt">=</span><span class="number">640</span><span class="gtkdoc opt">,</span> height<span class="gtkdoc opt">=</span><span class="number">480</span> <span class="gtkdoc opt">!</span> glimagesink</pre></td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+ Resize scene after drawing the cube.
+The scene size is greater than the input video size.
+ <div class="informalexample">
+ <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
+ <tbody>
+ <tr>
+ <td class="listing_lines" align="right"><pre>1</pre></td>
+ <td class="listing_code"><pre class="programlisting">gst<span class="gtkdoc opt">-</span>launch<span class="gtkdoc opt">-</span><span class="number">1.0</span> <span class="gtkdoc opt">-</span>v videotestsrc <span class="gtkdoc opt">!</span> video<span class="gtkdoc opt">/</span>x<span class="gtkdoc opt">-</span>raw<span class="gtkdoc opt">,</span> width<span class="gtkdoc opt">=</span><span class="number">640</span><span class="gtkdoc opt">,</span> height<span class="gtkdoc opt">=</span><span class="number">480</span> <span class="gtkdoc opt">!</span> glfiltercube <span class="gtkdoc opt">!</span> glimagesink</pre></td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+ Resize scene before drawing the cube.
+The scene size is greater than the input video size.
+</div>
+<div class="refsynopsisdiv">
+<h2>Synopsis</h2>
+<div class="refsect2">
+<a name="id-1.2.70.7.4.1"></a><h3>Element Information</h3>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term">plugin</span></p></td>
+<td>
+ <a class="link" href="gst-plugins-bad-plugins-plugin-opengl.html#plugin-opengl">opengl</a>
+ </td>
+</tr>
+<tr>
+<td><p><span class="term">author</span></p></td>
+<td>Julien Isorce <julien.isorce@gmail.com></td>
+</tr>
+<tr>
+<td><p><span class="term">class</span></p></td>
+<td>Filter/Effect/Video</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="id-1.2.70.7.4.2"></a><h3>Element Pads</h3>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>video/x-raw(ANY), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</td>
+</tr>
+</tbody>
+</table></div>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>src</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>source</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw(ANY), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-glfiltercube.functions_details"></a><h2>Functions</h2>
+<p></p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-glfiltercube.other_details"></a><h2>Types and Values</h2>
+<div class="refsect2">
+<a name="GstGLFilterCube-struct"></a><h3>struct GstGLFilterCube</h3>
+<pre class="programlisting">struct GstGLFilterCube;</pre>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-glfiltercube.property-details"></a><h2>Property Details</h2>
+<div class="refsect2">
+<a name="GstGLFilterCube--aspect"></a><h3>The <code class="literal">“aspect”</code> property</h3>
+<pre class="programlisting"> “aspect” <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a></pre>
+<p>Field of view in the x direction.</p>
+<p>Flags: Read / Write</p>
+<p>Allowed values: [0,100]</p>
+<p>Default value: 0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstGLFilterCube--blue"></a><h3>The <code class="literal">“blue”</code> property</h3>
+<pre class="programlisting"> “blue” <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gfloat"><span class="type">gfloat</span></a></pre>
+<p>Background blue color.</p>
+<p>Flags: Read / Write</p>
+<p>Allowed values: [0,1]</p>
+<p>Default value: 0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstGLFilterCube--fovy"></a><h3>The <code class="literal">“fovy”</code> property</h3>
+<pre class="programlisting"> “fovy” <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a></pre>
+<p>Field of view angle in degrees.</p>
+<p>Flags: Read / Write</p>
+<p>Allowed values: [0,180]</p>
+<p>Default value: 45</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstGLFilterCube--green"></a><h3>The <code class="literal">“green”</code> property</h3>
+<pre class="programlisting"> “green” <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gfloat"><span class="type">gfloat</span></a></pre>
+<p>Background green color.</p>
+<p>Flags: Read / Write</p>
+<p>Allowed values: [0,1]</p>
+<p>Default value: 0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstGLFilterCube--red"></a><h3>The <code class="literal">“red”</code> property</h3>
+<pre class="programlisting"> “red” <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gfloat"><span class="type">gfloat</span></a></pre>
+<p>Background red color.</p>
+<p>Flags: Read / Write</p>
+<p>Allowed values: [0,1]</p>
+<p>Default value: 0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstGLFilterCube--zfar"></a><h3>The <code class="literal">“zfar”</code> property</h3>
+<pre class="programlisting"> “zfar” <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a></pre>
+<p>Specifies the distance from the viewer to the far clipping plane.</p>
+<p>Flags: Read / Write</p>
+<p>Allowed values: [0,1000]</p>
+<p>Default value: 100</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstGLFilterCube--znear"></a><h3>The <code class="literal">“znear”</code> property</h3>
+<pre class="programlisting"> “znear” <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a></pre>
+<p>Specifies the distance from the viewer to the near clipping plane.</p>
+<p>Flags: Read / Write</p>
+<p>Allowed values: [0,100]</p>
+<p>Default value: 0.1</p>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>Generated by GTK-Doc V1.25</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-glfilterglass.html b/docs/plugins/html/gst-plugins-bad-plugins-glfilterglass.html
new file mode 100644
index 0000000..5986ead
--- /dev/null
+++ b/docs/plugins/html/gst-plugins-bad-plugins-glfilterglass.html
@@ -0,0 +1,193 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>glfilterglass: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
+<link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
+<link rel="up" href="ch01.html" title="gst-plugins-bad Elements">
+<link rel="prev" href="gst-plugins-bad-plugins-glfiltercube.html" title="glfiltercube">
+<link rel="next" href="gst-plugins-bad-plugins-glimagesinkelement.html" title="glimagesinkelement">
+<meta name="generator" content="GTK-Doc V1.25 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
+<td width="100%" align="left" class="shortcuts">
+<a href="#" class="shortcut">Top</a><span id="nav_description"> <span class="dim">|</span>
+ <a href="#gst-plugins-bad-plugins-glfilterglass.description" class="shortcut">Description</a></span><span id="nav_hierarchy"> <span class="dim">|</span>
+ <a href="#gst-plugins-bad-plugins-glfilterglass.object-hierarchy" class="shortcut">Object Hierarchy</a></span>
+</td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
+<td><a accesskey="p" href="gst-plugins-bad-plugins-glfiltercube.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="gst-plugins-bad-plugins-glimagesinkelement.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="gst-plugins-bad-plugins-glfilterglass"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-bad-plugins-glfilterglass.top_of_page"></a>glfilterglass</span></h2>
+<p>glfilterglass</p>
+</td>
+<td class="gallery_image" valign="top" align="right"></td>
+</tr></table></div>
+<a name="GstGLFilterGlass"></a><div class="refsect1">
+<a name="gst-plugins-bad-plugins-glfilterglass.other"></a><h2>Types and Values</h2>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="name">
+<col class="description">
+</colgroup>
+<tbody><tr>
+<td class="datatype_keyword">struct</td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-plugins-glfilterglass.html#GstGLFilterGlass-struct" title="struct GstGLFilterGlass">GstGLFilterGlass</a></td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-glfilterglass.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="screen"> <a href="/usr/share/gtk-doc/html/gobjectgobject-The-Base-Object-Type.html#GObject-struct">GObject</a>
+ <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gobjectgobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
+ <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstObject.html#GstObject-struct">GstObject</a>
+ <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#GstElement-struct">GstElement</a>
+ <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-libs-1.0GstBaseTransform.html#GstBaseTransform-struct">GstBaseTransform</a>
+ <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gst-plugins-bad-libs-1.0GstGLBaseFilter.html#GstGLBaseFilter-struct">GstGLBaseFilter</a>
+ <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gst-plugins-bad-libs-1.0GstGLFilter.html#GstGLFilter-struct">GstGLFilter</a>
+ <span class="lineart">╰──</span> GstGLFilterGlass
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-glfilterglass.description"></a><h2>Description</h2>
+<p>Map textures on moving glass.</p>
+<div class="refsect2">
+<a name="id-1.2.71.6.3"></a><h3>Examples</h3>
+<div class="informalexample">
+ <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
+ <tbody>
+ <tr>
+ <td class="listing_lines" align="right"><pre>1</pre></td>
+ <td class="listing_code"><pre class="programlisting">gst<span class="gtkdoc opt">-</span>launch<span class="gtkdoc opt">-</span><span class="number">1.0</span> <span class="gtkdoc opt">-</span>v videotestsrc <span class="gtkdoc opt">!</span> glfilterglass <span class="gtkdoc opt">!</span> glimagesink</pre></td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+ A pipeline inspired from http://www.mdk.org.pl/2007/11/17/gl-colorspace-conversions
+FBO is required.
+<div class="informalexample">
+ <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
+ <tbody>
+ <tr>
+ <td class="listing_lines" align="right"><pre>1</pre></td>
+ <td class="listing_code"><pre class="programlisting">gst<span class="gtkdoc opt">-</span>launch<span class="gtkdoc opt">-</span><span class="number">1.0</span> <span class="gtkdoc opt">-</span>v videotestsrc <span class="gtkdoc opt">!</span> glfilterglass <span class="gtkdoc opt">!</span> video<span class="gtkdoc opt">/</span>x<span class="gtkdoc opt">-</span>raw<span class="gtkdoc opt">,</span> width<span class="gtkdoc opt">=</span><span class="number">640</span><span class="gtkdoc opt">,</span> height<span class="gtkdoc opt">=</span><span class="number">480</span> <span class="gtkdoc opt">!</span> glimagesink</pre></td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+ The scene is greater than the input size.
+</div>
+<div class="refsynopsisdiv">
+<h2>Synopsis</h2>
+<div class="refsect2">
+<a name="id-1.2.71.6.4.1"></a><h3>Element Information</h3>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term">plugin</span></p></td>
+<td>
+ <a class="link" href="gst-plugins-bad-plugins-plugin-opengl.html#plugin-opengl">opengl</a>
+ </td>
+</tr>
+<tr>
+<td><p><span class="term">author</span></p></td>
+<td>Julien Isorce <julien.isorce@gmail.com></td>
+</tr>
+<tr>
+<td><p><span class="term">class</span></p></td>
+<td>Filter/Effect/Video</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="id-1.2.71.6.4.2"></a><h3>Element Pads</h3>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>video/x-raw(ANY), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</td>
+</tr>
+</tbody>
+</table></div>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>src</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>source</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw(ANY), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-glfilterglass.functions_details"></a><h2>Functions</h2>
+<p></p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-glfilterglass.other_details"></a><h2>Types and Values</h2>
+<div class="refsect2">
+<a name="GstGLFilterGlass-struct"></a><h3>struct GstGLFilterGlass</h3>
+<pre class="programlisting">struct GstGLFilterGlass;</pre>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>Generated by GTK-Doc V1.25</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-glimagesink.html b/docs/plugins/html/gst-plugins-bad-plugins-glimagesink.html
new file mode 100644
index 0000000..a7398c3
--- /dev/null
+++ b/docs/plugins/html/gst-plugins-bad-plugins-glimagesink.html
@@ -0,0 +1,213 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>glimagesink: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
+<link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
+<link rel="up" href="ch01.html" title="gst-plugins-bad Elements">
+<link rel="prev" href="gst-plugins-bad-plugins-glimagesinkelement.html" title="glimagesinkelement">
+<link rel="next" href="gst-plugins-bad-plugins-glmixerbin.html" title="glmixerbin">
+<meta name="generator" content="GTK-Doc V1.25 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
+<td width="100%" align="left" class="shortcuts">
+<a href="#" class="shortcut">Top</a><span id="nav_description"> <span class="dim">|</span>
+ <a href="#gst-plugins-bad-plugins-glimagesink.description" class="shortcut">Description</a></span>
+</td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
+<td><a accesskey="p" href="gst-plugins-bad-plugins-glimagesinkelement.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="gst-plugins-bad-plugins-glmixerbin.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="gst-plugins-bad-plugins-glimagesink"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-bad-plugins-glimagesink.top_of_page"></a>glimagesink</span></h2>
+<p>glimagesink</p>
+</td>
+<td class="gallery_image" valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-glimagesink.description"></a><h2>Description</h2>
+<p>glimagesink renders video frames to a drawable on a local or remote
+display using OpenGL. This element can receive a Window ID from the
+application through the VideoOverlay interface and will then render video
+frames in this drawable.
+If no Window ID was provided by the application, the element will
+create its own internal window and render into it.</p>
+<p>See the <a href="/usr/share/gtk-doc/html/gst-plugins-bad-libs-1.0GstGLDisplay.html#GstGLDisplay-struct"><span class="type">GstGLDisplay</span></a> documentation for a list of environment variables that
+can override window/platform detection.</p>
+<div class="refsect2">
+<a name="id-1.2.73.3.4"></a><h3>Scaling</h3>
+<p>
+Depends on the driver, OpenGL handles hardware accelerated
+scaling of video frames. This means that the element will just accept
+incoming video frames no matter their geometry and will then put them to the
+drawable scaling them on the fly. Using the <a class="link" href="gst-plugins-bad-plugins-glimagesinkelement.html#GstGLImageSink--force-aspect-ratio" title="The “force-aspect-ratio” property"><span class="type">“force-aspect-ratio”</span></a>
+property it is possible to enforce scaling with a constant aspect ratio,
+which means drawing black borders around the video frame.
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="id-1.2.73.3.5"></a><h3>Events</h3>
+<p>
+Through the gl thread, glimagesink handle some events coming from the drawable
+to manage its appearance even when the data is not flowing (GST_STATE_PAUSED).
+That means that even when the element is paused, it will receive expose events
+from the drawable and draw the latest frame with correct borders/aspect-ratio.
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="id-1.2.73.3.6"></a><h3>Examples</h3>
+<div class="informalexample">
+ <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
+ <tbody>
+ <tr>
+ <td class="listing_lines" align="right"><pre>1</pre></td>
+ <td class="listing_code"><pre class="programlisting">gst<span class="gtkdoc opt">-</span>launch<span class="gtkdoc opt">-</span><span class="number">1.0</span> <span class="gtkdoc opt">-</span>v videotestsrc <span class="gtkdoc opt">!</span> video<span class="gtkdoc opt">/</span>x<span class="gtkdoc opt">-</span>raw <span class="gtkdoc opt">!</span> glimagesink</pre></td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+ A pipeline to test hardware scaling.
+No special opengl extension is used in this pipeline, that's why it should work
+with OpenGL >= 1.1. That's the case if you are using the MESA3D driver v1.3.
+<div class="informalexample">
+ <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
+ <tbody>
+ <tr>
+ <td class="listing_lines" align="right"><pre>1</pre></td>
+ <td class="listing_code"><pre class="programlisting">gst<span class="gtkdoc opt">-</span>launch<span class="gtkdoc opt">-</span><span class="number">1.0</span> <span class="gtkdoc opt">-</span>v videotestsrc <span class="gtkdoc opt">!</span> video<span class="gtkdoc opt">/</span>x<span class="gtkdoc opt">-</span>raw<span class="gtkdoc opt">,</span>format<span class="gtkdoc opt">=</span>I420 <span class="gtkdoc opt">!</span> glimagesink</pre></td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+ A pipeline to test hardware scaling and hardware colorspace conversion.
+When your driver supports GLSL (OpenGL Shading Language needs OpenGL >= 2.1),
+the 4 following format YUY2, UYVY, I420, YV12 and AYUV are converted to RGB32
+through some fragment shaders and using one framebuffer (FBO extension OpenGL >= 1.4).
+If your driver does not support GLSL but supports MESA_YCbCr extension then
+the you can use YUY2 and UYVY. In this case the colorspace conversion is automatically
+made when loading the texture and therefore no framebuffer is used.
+<div class="informalexample">
+ <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
+ <tbody>
+ <tr>
+ <td class="listing_lines" align="right"><pre>1</pre></td>
+ <td class="listing_code"><pre class="programlisting">gst<span class="gtkdoc opt">-</span>launch<span class="gtkdoc opt">-</span><span class="number">1.0</span> <span class="gtkdoc opt">-</span>v gltestsrc <span class="gtkdoc opt">!</span> glimagesink</pre></td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+ A pipeline 100% OpenGL.
+No special opengl extension is used in this pipeline, that's why it should work
+with OpenGL >= 1.1. That's the case if you are using the MESA3D driver v1.3.
+<div class="informalexample">
+ <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
+ <tbody>
+ <tr>
+ <td class="listing_lines" align="right"><pre>1</pre></td>
+ <td class="listing_code"><pre class="programlisting">gst<span class="gtkdoc opt">-</span>plugins<span class="gtkdoc opt">-</span>bas<span class="gtkdoc opt">/</span>tests<span class="gtkdoc opt">/</span>examples<span class="gtkdoc opt">/</span>gl<span class="gtkdoc opt">/</span>generic<span class="gtkdoc opt">/</span>cube</pre></td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+ The graphic FPS scene can be greater than the input video FPS.
+The graphic scene can be written from a client code through the
+two glfilterapp properties.
+</div>
+<div class="refsynopsisdiv">
+<h2>Synopsis</h2>
+<div class="refsect2">
+<a name="id-1.2.73.3.7.1"></a><h3>Element Information</h3>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term">plugin</span></p></td>
+<td>
+ <a class="link" href="gst-plugins-bad-plugins-plugin-opengl.html#plugin-opengl">opengl</a>
+ </td>
+</tr>
+<tr>
+<td><p><span class="term">author</span></p></td>
+<td>Matthew Waters <matthew@centricular.com></td>
+</tr>
+<tr>
+<td><p><span class="term">class</span></p></td>
+<td>Sink/Video</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="id-1.2.73.3.7.2"></a><h3>Element Pads</h3>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>video/x-raw(memory:GLMemory, meta:GstVideoOverlayComposition), format=(string){ RGBA, BGRA, RGBx, BGRx, ARGB, ABGR, xRGB, xBGR, RGB, BGR, RGB16, BGR16, AYUV, I420, YV12, NV12, NV21, YUY2, UYVY, Y41B, Y42B, Y444, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw(memory:SystemMemory, meta:GstVideoOverlayComposition), format=(string){ RGBA, BGRA, RGBx, BGRx, ARGB, ABGR, xRGB, xBGR, RGB, BGR, RGB16, BGR16, AYUV, I420, YV12, NV12, NV21, YUY2, UYVY, Y41B, Y42B, Y444, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw(meta:GstVideoGLTextureUploadMeta, meta:GstVideoOverlayComposition), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw(memory:GLMemory), format=(string){ RGBA, BGRA, RGBx, BGRx, ARGB, ABGR, xRGB, xBGR, RGB, BGR, RGB16, BGR16, AYUV, I420, YV12, NV12, NV21, YUY2, UYVY, Y41B, Y42B, Y444, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw, format=(string){ RGBA, BGRA, RGBx, BGRx, ARGB, ABGR, xRGB, xBGR, RGB, BGR, RGB16, BGR16, AYUV, I420, YV12, NV12, NV21, YUY2, UYVY, Y41B, Y42B, Y444, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw(meta:GstVideoGLTextureUploadMeta), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-glimagesink.functions_details"></a><h2>Functions</h2>
+<p></p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-glimagesink.other_details"></a><h2>Types and Values</h2>
+</div>
+</div>
+<div class="footer">
+<hr>Generated by GTK-Doc V1.25</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-glimagesinkelement.html b/docs/plugins/html/gst-plugins-bad-plugins-glimagesinkelement.html
new file mode 100644
index 0000000..a735f9e
--- /dev/null
+++ b/docs/plugins/html/gst-plugins-bad-plugins-glimagesinkelement.html
@@ -0,0 +1,472 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>glimagesinkelement: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
+<link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
+<link rel="up" href="ch01.html" title="gst-plugins-bad Elements">
+<link rel="prev" href="gst-plugins-bad-plugins-glfilterglass.html" title="glfilterglass">
+<link rel="next" href="gst-plugins-bad-plugins-glimagesink.html" title="glimagesink">
+<meta name="generator" content="GTK-Doc V1.25 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
+<td width="100%" align="left" class="shortcuts">
+<a href="#" class="shortcut">Top</a><span id="nav_description"> <span class="dim">|</span>
+ <a href="#gst-plugins-bad-plugins-glimagesinkelement.description" class="shortcut">Description</a></span><span id="nav_hierarchy"> <span class="dim">|</span>
+ <a href="#gst-plugins-bad-plugins-glimagesinkelement.object-hierarchy" class="shortcut">Object Hierarchy</a></span><span id="nav_interfaces"> <span class="dim">|</span>
+ <a href="#gst-plugins-bad-plugins-glimagesinkelement.implemented-interfaces" class="shortcut">Implemented Interfaces</a></span><span id="nav_properties"> <span class="dim">|</span>
+ <a href="#gst-plugins-bad-plugins-glimagesinkelement.properties" class="shortcut">Properties</a></span><span id="nav_signals"> <span class="dim">|</span>
+ <a href="#gst-plugins-bad-plugins-glimagesinkelement.signals" class="shortcut">Signals</a></span>
+</td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
+<td><a accesskey="p" href="gst-plugins-bad-plugins-glfilterglass.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="gst-plugins-bad-plugins-glimagesink.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="gst-plugins-bad-plugins-glimagesinkelement"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-bad-plugins-glimagesinkelement.top_of_page"></a>glimagesinkelement</span></h2>
+<p>glimagesinkelement</p>
+</td>
+<td class="gallery_image" valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-glimagesinkelement.properties"></a><h2>Properties</h2>
+<div class="informaltable"><table class="informaltable" border="0">
+<colgroup>
+<col width="150px" class="properties_type">
+<col width="300px" class="properties_name">
+<col width="200px" class="properties_flags">
+</colgroup>
+<tbody>
+<tr>
+<td class="property_type">
+<a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</td>
+<td class="property_name"><a class="link" href="gst-plugins-bad-plugins-glimagesinkelement.html#GstGLImageSink--display" title="The “display” property">display</a></td>
+<td class="property_flags">Read / Write</td>
+</tr>
+<tr>
+<td class="property_type"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a></td>
+<td class="property_name"><a class="link" href="gst-plugins-bad-plugins-glimagesinkelement.html#GstGLImageSink--client-data" title="The “client-data” property">client-data</a></td>
+<td class="property_flags">Write</td>
+</tr>
+<tr>
+<td class="property_type"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a></td>
+<td class="property_name"><a class="link" href="gst-plugins-bad-plugins-glimagesinkelement.html#GstGLImageSink--client-draw-callback" title="The “client-draw-callback” property">client-draw-callback</a></td>
+<td class="property_flags">Write</td>
+</tr>
+<tr>
+<td class="property_type"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a></td>
+<td class="property_name"><a class="link" href="gst-plugins-bad-plugins-glimagesinkelement.html#GstGLImageSink--client-reshape-callback" title="The “client-reshape-callback” property">client-reshape-callback</a></td>
+<td class="property_flags">Write</td>
+</tr>
+<tr>
+<td class="property_type"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></td>
+<td class="property_name"><a class="link" href="gst-plugins-bad-plugins-glimagesinkelement.html#GstGLImageSink--force-aspect-ratio" title="The “force-aspect-ratio” property">force-aspect-ratio</a></td>
+<td class="property_flags">Read / Write</td>
+</tr>
+<tr>
+<td class="property_type">
+<a href="/usr/share/gtk-doc/html/gst-plugins-bad-libs-1.0GstGLContext.html#GstGLContext-struct"><span class="type">GstGLContext</span></a> *</td>
+<td class="property_name"><a class="link" href="gst-plugins-bad-plugins-glimagesinkelement.html#GstGLImageSink--other-context" title="The “other-context” property">other-context</a></td>
+<td class="property_flags">Read / Write</td>
+</tr>
+<tr>
+<td class="property_type"><span class="type">GstFraction</span></td>
+<td class="property_name"><a class="link" href="gst-plugins-bad-plugins-glimagesinkelement.html#GstGLImageSink--pixel-aspect-ratio" title="The “pixel-aspect-ratio” property">pixel-aspect-ratio</a></td>
+<td class="property_flags">Read / Write</td>
+</tr>
+<tr>
+<td class="property_type">
+<a href="/usr/share/gtk-doc/html/gst-plugins-bad-libs-1.0GstGLContext.html#GstGLContext-struct"><span class="type">GstGLContext</span></a> *</td>
+<td class="property_name"><a class="link" href="gst-plugins-bad-plugins-glimagesinkelement.html#GstGLImageSink--context" title="The “context” property">context</a></td>
+<td class="property_flags">Read</td>
+</tr>
+<tr>
+<td class="property_type"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></td>
+<td class="property_name"><a class="link" href="gst-plugins-bad-plugins-glimagesinkelement.html#GstGLImageSink--handle-events" title="The “handle-events” property">handle-events</a></td>
+<td class="property_flags">Read / Write</td>
+</tr>
+<tr>
+<td class="property_type"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></td>
+<td class="property_name"><a class="link" href="gst-plugins-bad-plugins-glimagesinkelement.html#GstGLImageSink--ignore-alpha" title="The “ignore-alpha” property">ignore-alpha</a></td>
+<td class="property_flags">Read / Write</td>
+</tr>
+<tr>
+<td class="property_type"><span class="type">GstGLStereoDownmix</span></td>
+<td class="property_name"><a class="link" href="gst-plugins-bad-plugins-glimagesinkelement.html#GstGLImageSink--output-multiview-downmix-mode" title="The “output-multiview-downmix-mode” property">output-multiview-downmix-mode</a></td>
+<td class="property_flags">Read / Write</td>
+</tr>
+<tr>
+<td class="property_type"><a href="/usr/share/gtk-doc/html/gst-plugins-base-libs-1.0gst-plugins-base-libs-gstvideo.html#GstVideoMultiviewFlags"><span class="type">GstVideoMultiviewFlags</span></a></td>
+<td class="property_name"><a class="link" href="gst-plugins-bad-plugins-glimagesinkelement.html#GstGLImageSink--output-multiview-flags" title="The “output-multiview-flags” property">output-multiview-flags</a></td>
+<td class="property_flags">Read / Write</td>
+</tr>
+<tr>
+<td class="property_type"><a href="/usr/share/gtk-doc/html/gst-plugins-base-libs-1.0gst-plugins-base-libs-gstvideo.html#GstVideoMultiviewMode"><span class="type">GstVideoMultiviewMode</span></a></td>
+<td class="property_name"><a class="link" href="gst-plugins-bad-plugins-glimagesinkelement.html#GstGLImageSink--output-multiview-mode" title="The “output-multiview-mode” property">output-multiview-mode</a></td>
+<td class="property_flags">Read / Write</td>
+</tr>
+<tr>
+<td class="property_type"><span class="type">GstGLRotateMethod</span></td>
+<td class="property_name"><a class="link" href="gst-plugins-bad-plugins-glimagesinkelement.html#GstGLImageSink--rotate-method" title="The “rotate-method” property">rotate-method</a></td>
+<td class="property_flags">Read / Write</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-glimagesinkelement.signals"></a><h2>Signals</h2>
+<div class="informaltable"><table class="informaltable" border="0">
+<colgroup>
+<col width="150px" class="signals_return">
+<col width="300px" class="signals_name">
+<col width="200px" class="signals_flags">
+</colgroup>
+<tbody>
+<tr>
+<td class="signal_type"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a></td>
+<td class="signal_name"><a class="link" href="gst-plugins-bad-plugins-glimagesinkelement.html#GstGLImageSink-client-draw" title="The “client-draw” signal">client-draw</a></td>
+<td class="signal_flags"><a href="/usr/share/gtk-doc/html/gobjectgobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></td>
+</tr>
+<tr>
+<td class="signal_type"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a></td>
+<td class="signal_name"><a class="link" href="gst-plugins-bad-plugins-glimagesinkelement.html#GstGLImageSink-client-reshape" title="The “client-reshape” signal">client-reshape</a></td>
+<td class="signal_flags"><a href="/usr/share/gtk-doc/html/gobjectgobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<a name="GstGLImageSink"></a><div class="refsect1">
+<a name="gst-plugins-bad-plugins-glimagesinkelement.other"></a><h2>Types and Values</h2>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="name">
+<col class="description">
+</colgroup>
+<tbody><tr>
+<td class="datatype_keyword">struct</td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-plugins-glimagesinkelement.html#GstGLImageSink-struct" title="struct GstGLImageSink">GstGLImageSink</a></td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-glimagesinkelement.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="screen"> <a href="/usr/share/gtk-doc/html/gobjectgobject-The-Base-Object-Type.html#GObject-struct">GObject</a>
+ <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gobjectgobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
+ <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstObject.html#GstObject-struct">GstObject</a>
+ <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#GstElement-struct">GstElement</a>
+ <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-libs-1.0GstBaseSink.html#GstBaseSink-struct">GstBaseSink</a>
+ <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gst-plugins-base-libs-1.0gst-plugins-base-libs-gstvideosink.html#GstVideoSink-struct">GstVideoSink</a>
+ <span class="lineart">╰──</span> GstGLImageSink
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-glimagesinkelement.implemented-interfaces"></a><h2>Implemented Interfaces</h2>
+<p>
+GstGLImageSink implements
+ <a href="/usr/share/gtk-doc/html/gst-plugins-base-libs-1.0gst-plugins-base-libs-gstvideooverlay.html#GstVideoOverlay-struct">GstVideoOverlay</a> and <a href="/usr/share/gtk-doc/html/gst-plugins-base-libs-1.0gst-plugins-base-libs-gstnavigation.html#GstNavigation-struct">GstNavigation</a>.</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-glimagesinkelement.description"></a><h2>Description</h2>
+<div class="refsynopsisdiv">
+<h2>Synopsis</h2>
+<div class="refsect2">
+<a name="id-1.2.72.9.2.1"></a><h3>Element Information</h3>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term">plugin</span></p></td>
+<td>
+ <a class="link" href="gst-plugins-bad-plugins-plugin-opengl.html#plugin-opengl">opengl</a>
+ </td>
+</tr>
+<tr>
+<td><p><span class="term">author</span></p></td>
+<td>Julien Isorce <julien.isorce@gmail.com></td>
+</tr>
+<tr>
+<td><p><span class="term">class</span></p></td>
+<td>Sink/Video</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="id-1.2.72.9.2.2"></a><h3>Element Pads</h3>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string){ 2D, external-oes }</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw(memory:GLMemory, meta:GstVideoOverlayComposition), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string){ 2D, external-oes }</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-glimagesinkelement.functions_details"></a><h2>Functions</h2>
+<p></p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-glimagesinkelement.other_details"></a><h2>Types and Values</h2>
+<div class="refsect2">
+<a name="GstGLImageSink-struct"></a><h3>struct GstGLImageSink</h3>
+<pre class="programlisting">struct GstGLImageSink;</pre>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-glimagesinkelement.property-details"></a><h2>Property Details</h2>
+<div class="refsect2">
+<a name="GstGLImageSink--display"></a><h3>The <code class="literal">“display”</code> property</h3>
+<pre class="programlisting"> “display” <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</pre>
+<p>Display name.</p>
+<p>Flags: Read / Write</p>
+<p>Default value: NULL</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstGLImageSink--client-data"></a><h3>The <code class="literal">“client-data”</code> property</h3>
+<pre class="programlisting"> “client-data” <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a></pre>
+<p>Pass data to the draw and reshape callbacks.</p>
+<p>Flags: Write</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstGLImageSink--client-draw-callback"></a><h3>The <code class="literal">“client-draw-callback”</code> property</h3>
+<pre class="programlisting"> “client-draw-callback” <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a></pre>
+<p>Define a custom draw callback in a client code.</p>
+<p>Flags: Write</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstGLImageSink--client-reshape-callback"></a><h3>The <code class="literal">“client-reshape-callback”</code> property</h3>
+<pre class="programlisting"> “client-reshape-callback” <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a></pre>
+<p>Define a custom reshape callback in a client code.</p>
+<p>Flags: Write</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstGLImageSink--force-aspect-ratio"></a><h3>The <code class="literal">“force-aspect-ratio”</code> property</h3>
+<pre class="programlisting"> “force-aspect-ratio” <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></pre>
+<p>When enabled, scaling will respect original aspect ratio.</p>
+<p>Flags: Read / Write</p>
+<p>Default value: TRUE</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstGLImageSink--other-context"></a><h3>The <code class="literal">“other-context”</code> property</h3>
+<pre class="programlisting"> “other-context” <a href="/usr/share/gtk-doc/html/gst-plugins-bad-libs-1.0GstGLContext.html#GstGLContext-struct"><span class="type">GstGLContext</span></a> *</pre>
+<p>Give an external OpenGL context with which to share textures.</p>
+<p>Flags: Read / Write</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstGLImageSink--pixel-aspect-ratio"></a><h3>The <code class="literal">“pixel-aspect-ratio”</code> property</h3>
+<pre class="programlisting"> “pixel-aspect-ratio” <span class="type">GstFraction</span></pre>
+<p>The pixel aspect ratio of the device.</p>
+<p>Flags: Read / Write</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstGLImageSink--context"></a><h3>The <code class="literal">“context”</code> property</h3>
+<pre class="programlisting"> “context” <a href="/usr/share/gtk-doc/html/gst-plugins-bad-libs-1.0GstGLContext.html#GstGLContext-struct"><span class="type">GstGLContext</span></a> *</pre>
+<p>Get OpenGL context.</p>
+<p>Flags: Read</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstGLImageSink--handle-events"></a><h3>The <code class="literal">“handle-events”</code> property</h3>
+<pre class="programlisting"> “handle-events” <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></pre>
+<p>When enabled, XEvents will be selected and handled.</p>
+<p>Flags: Read / Write</p>
+<p>Default value: TRUE</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstGLImageSink--ignore-alpha"></a><h3>The <code class="literal">“ignore-alpha”</code> property</h3>
+<pre class="programlisting"> “ignore-alpha” <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></pre>
+<p>When enabled, alpha will be ignored and converted to black.</p>
+<p>Flags: Read / Write</p>
+<p>Default value: TRUE</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstGLImageSink--output-multiview-downmix-mode"></a><h3>The <code class="literal">“output-multiview-downmix-mode”</code> property</h3>
+<pre class="programlisting"> “output-multiview-downmix-mode” <span class="type">GstGLStereoDownmix</span></pre>
+<p>Output anaglyph type to generate when downmixing to mono.</p>
+<p>Flags: Read / Write</p>
+<p>Default value: Dubois optimised Green-Magenta anaglyph</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstGLImageSink--output-multiview-flags"></a><h3>The <code class="literal">“output-multiview-flags”</code> property</h3>
+<pre class="programlisting"> “output-multiview-flags” <a href="/usr/share/gtk-doc/html/gst-plugins-base-libs-1.0gst-plugins-base-libs-gstvideo.html#GstVideoMultiviewFlags"><span class="type">GstVideoMultiviewFlags</span></a></pre>
+<p>Output multiview layout modifier flags.</p>
+<p>Flags: Read / Write</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstGLImageSink--output-multiview-mode"></a><h3>The <code class="literal">“output-multiview-mode”</code> property</h3>
+<pre class="programlisting"> “output-multiview-mode” <a href="/usr/share/gtk-doc/html/gst-plugins-base-libs-1.0gst-plugins-base-libs-gstvideo.html#GstVideoMultiviewMode"><span class="type">GstVideoMultiviewMode</span></a></pre>
+<p>Choose output mode for multiview/3D video.</p>
+<p>Flags: Read / Write</p>
+<p>Default value: GST_VIDEO_MULTIVIEW_MODE_MONO</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstGLImageSink--rotate-method"></a><h3>The <code class="literal">“rotate-method”</code> property</h3>
+<pre class="programlisting"> “rotate-method” <span class="type">GstGLRotateMethod</span></pre>
+<p>rotate method.</p>
+<p>Flags: Read / Write</p>
+<p>Default value: Identity (no rotation)</p>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-glimagesinkelement.signal-details"></a><h2>Signal Details</h2>
+<div class="refsect2">
+<a name="GstGLImageSink-client-draw"></a><h3>The <code class="literal">“client-draw”</code> signal</h3>
+<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+user_function (<a class="link" href="gst-plugins-bad-plugins-glimagesinkelement.html#GstGLImageSink"><span class="type">GstGLImageSink</span></a> *object,
+ <a href="/usr/share/gtk-doc/html/gst-plugins-bad-libs-1.0GstGLContext.html#GstGLContext-struct"><span class="type">GstGLContext</span></a> *texture,
+ <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstSample.html#GstSample-struct"><span class="type">GstSample</span></a> *width,
+ <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data)</pre>
+<p>Will be emitted before actually drawing the texture. The client should
+redraw the surface/contents with the <em class="parameter"><code>texture</code></em>
+, <em class="parameter"><code>width</code></em>
+ and <em class="parameter"><code>height</code></em>
+ and
+and return <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a>.</p>
+<div class="refsect3">
+<a name="GstGLImageSink-client-draw.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>object</p></td>
+<td class="parameter_description"><p>the <a class="link" href="gst-plugins-bad-plugins-glimagesinkelement.html#GstGLImageSink"><span class="type">GstGLImageSink</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>texture</p></td>
+<td class="parameter_description"><p>the <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="type">guint</span></a> id of the texture.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>width</p></td>
+<td class="parameter_description"><p>the <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="type">guint</span></a> width of the texture.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>height</p></td>
+<td class="parameter_description"><p>the <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="type">guint</span></a> height of the texture.</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 class="refsect3">
+<a name="GstGLImageSink-client-draw.returns"></a><h4>Returns</h4>
+<p> whether the texture was redrawn by the signal. If not, a
+default redraw will occur.</p>
+</div>
+<p>Flags: <a href="/usr/share/gtk-doc/html/gobjectgobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstGLImageSink-client-reshape"></a><h3>The <code class="literal">“client-reshape”</code> signal</h3>
+<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+user_function (<a class="link" href="gst-plugins-bad-plugins-glimagesinkelement.html#GstGLImageSink"><span class="type">GstGLImageSink</span></a> *object,
+ <a href="/usr/share/gtk-doc/html/gst-plugins-bad-libs-1.0GstGLContext.html#GstGLContext-struct"><span class="type">GstGLContext</span></a> *width,
+ <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="type">guint</span></a> height,
+ <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="type">guint</span></a> Returns,
+ <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data)</pre>
+<p>The client should resize the surface/window/viewport with the <em class="parameter"><code>width</code></em>
+ and
+<em class="parameter"><code>height</code></em>
+ and return <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a>.</p>
+<div class="refsect3">
+<a name="GstGLImageSink-client-reshape.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>object</p></td>
+<td class="parameter_description"><p>the <a class="link" href="gst-plugins-bad-plugins-glimagesinkelement.html#GstGLImageSink"><span class="type">GstGLImageSink</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>width</p></td>
+<td class="parameter_description"><p>the <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="type">guint</span></a> width of the texture.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>height</p></td>
+<td class="parameter_description"><p>the <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="type">guint</span></a> height of the texture.</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 class="refsect3">
+<a name="GstGLImageSink-client-reshape.returns"></a><h4>Returns</h4>
+<p> whether the content area was resized by the signal. If not, a
+default viewport resize will occur.</p>
+</div>
+<p>Flags: <a href="/usr/share/gtk-doc/html/gobjectgobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></p>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>Generated by GTK-Doc V1.25</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-glmixerbin.html b/docs/plugins/html/gst-plugins-bad-plugins-glmixerbin.html
new file mode 100644
index 0000000..46b821c
--- /dev/null
+++ b/docs/plugins/html/gst-plugins-bad-plugins-glmixerbin.html
@@ -0,0 +1,279 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>glmixerbin: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
+<link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
+<link rel="up" href="ch01.html" title="gst-plugins-bad Elements">
+<link rel="prev" href="gst-plugins-bad-plugins-glimagesink.html" title="glimagesink">
+<link rel="next" href="gst-plugins-bad-plugins-glmosaic.html" title="glmosaic">
+<meta name="generator" content="GTK-Doc V1.25 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
+<td width="100%" align="left" class="shortcuts">
+<a href="#" class="shortcut">Top</a><span id="nav_description"> <span class="dim">|</span>
+ <a href="#gst-plugins-bad-plugins-glmixerbin.description" class="shortcut">Description</a></span><span id="nav_hierarchy"> <span class="dim">|</span>
+ <a href="#gst-plugins-bad-plugins-glmixerbin.object-hierarchy" class="shortcut">Object Hierarchy</a></span><span id="nav_interfaces"> <span class="dim">|</span>
+ <a href="#gst-plugins-bad-plugins-glmixerbin.implemented-interfaces" class="shortcut">Implemented Interfaces</a></span><span id="nav_properties"> <span class="dim">|</span>
+ <a href="#gst-plugins-bad-plugins-glmixerbin.properties" class="shortcut">Properties</a></span><span id="nav_signals"> <span class="dim">|</span>
+ <a href="#gst-plugins-bad-plugins-glmixerbin.signals" class="shortcut">Signals</a></span>
+</td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
+<td><a accesskey="p" href="gst-plugins-bad-plugins-glimagesink.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="gst-plugins-bad-plugins-glmosaic.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="gst-plugins-bad-plugins-glmixerbin"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-bad-plugins-glmixerbin.top_of_page"></a>glmixerbin</span></h2>
+<p>glmixerbin</p>
+</td>
+<td class="gallery_image" valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-glmixerbin.properties"></a><h2>Properties</h2>
+<div class="informaltable"><table class="informaltable" border="0">
+<colgroup>
+<col width="150px" class="properties_type">
+<col width="300px" class="properties_name">
+<col width="200px" class="properties_flags">
+</colgroup>
+<tbody>
+<tr>
+<td class="property_type"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint64"><span class="type">gint64</span></a></td>
+<td class="property_name"><a class="link" href="gst-plugins-bad-plugins-glmixerbin.html#GstGLMixerBin--latency" title="The “latency” property">latency</a></td>
+<td class="property_flags">Read / Write</td>
+</tr>
+<tr>
+<td class="property_type">
+<a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#GstElement-struct"><span class="type">GstElement</span></a> *</td>
+<td class="property_name"><a class="link" href="gst-plugins-bad-plugins-glmixerbin.html#GstGLMixerBin--mixer" title="The “mixer” property">mixer</a></td>
+<td class="property_flags">Read / Write</td>
+</tr>
+<tr>
+<td class="property_type"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint64"><span class="type">guint64</span></a></td>
+<td class="property_name"><a class="link" href="gst-plugins-bad-plugins-glmixerbin.html#GstGLMixerBin--start-time" title="The “start-time” property">start-time</a></td>
+<td class="property_flags">Read / Write</td>
+</tr>
+<tr>
+<td class="property_type"><span class="type">GstGLMixerBinStartTimeSelection</span></td>
+<td class="property_name"><a class="link" href="gst-plugins-bad-plugins-glmixerbin.html#GstGLMixerBin--start-time-selection" title="The “start-time-selection” property">start-time-selection</a></td>
+<td class="property_flags">Read / Write</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-glmixerbin.signals"></a><h2>Signals</h2>
+<div class="informaltable"><table class="informaltable" border="0">
+<colgroup>
+<col width="150px" class="signals_return">
+<col width="300px" class="signals_name">
+<col width="200px" class="signals_flags">
+</colgroup>
+<tbody><tr>
+<td class="signal_type">
+<a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#GstElement-struct"><span class="returnvalue">GstElement</span></a>*</td>
+<td class="signal_name"><a class="link" href="gst-plugins-bad-plugins-glmixerbin.html#GstGLMixerBin-create-element" title="The “create-element” signal">create-element</a></td>
+<td class="signal_flags"><a href="/usr/share/gtk-doc/html/gobjectgobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></td>
+</tr></tbody>
+</table></div>
+</div>
+<a name="GstGLMixerBin"></a><div class="refsect1">
+<a name="gst-plugins-bad-plugins-glmixerbin.other"></a><h2>Types and Values</h2>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="name">
+<col class="description">
+</colgroup>
+<tbody><tr>
+<td class="datatype_keyword">struct</td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-plugins-glmixerbin.html#GstGLMixerBin-struct" title="struct GstGLMixerBin">GstGLMixerBin</a></td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-glmixerbin.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="screen"> <a href="/usr/share/gtk-doc/html/gobjectgobject-The-Base-Object-Type.html#GObject-struct">GObject</a>
+ <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gobjectgobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
+ <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstObject.html#GstObject-struct">GstObject</a>
+ <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#GstElement-struct">GstElement</a>
+ <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstBin.html#GstBin-struct">GstBin</a>
+ <span class="lineart">╰──</span> GstGLMixerBin
+ <span class="lineart">╰──</span> GstGLVideoMixerBin
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-glmixerbin.implemented-interfaces"></a><h2>Implemented Interfaces</h2>
+<p>
+GstGLMixerBin implements
+ <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstChildProxy.html#GstChildProxy-struct">GstChildProxy</a>.</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-glmixerbin.description"></a><h2>Description</h2>
+<div class="refsynopsisdiv">
+<h2>Synopsis</h2>
+<div class="refsect2">
+<a name="id-1.2.74.9.2.1"></a><h3>Element Information</h3>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term">plugin</span></p></td>
+<td>
+ <a class="link" href="gst-plugins-bad-plugins-plugin-opengl.html#plugin-opengl">opengl</a>
+ </td>
+</tr>
+<tr>
+<td><p><span class="term">author</span></p></td>
+<td>Matthew Waters <matthew@centricular.com></td>
+</tr>
+<tr>
+<td><p><span class="term">class</span></p></td>
+<td>Bin/Filter/Effect/Video/Mixer</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="id-1.2.74.9.2.2"></a><h3>Element Pads</h3>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>sink_%u</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>request</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>video/x-raw(memory:GLMemory, meta:GstVideoOverlayComposition), format=(string){ RGBA, BGRA, RGBx, BGRx, ARGB, ABGR, xRGB, xBGR, RGB, BGR, RGB16, BGR16, AYUV, I420, YV12, NV12, NV21, YUY2, UYVY, Y41B, Y42B, Y444, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw(memory:SystemMemory, meta:GstVideoOverlayComposition), format=(string){ RGBA, BGRA, RGBx, BGRx, ARGB, ABGR, xRGB, xBGR, RGB, BGR, RGB16, BGR16, AYUV, I420, YV12, NV12, NV21, YUY2, UYVY, Y41B, Y42B, Y444, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw(meta:GstVideoGLTextureUploadMeta, meta:GstVideoOverlayComposition), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw(memory:GLMemory), format=(string){ RGBA, BGRA, RGBx, BGRx, ARGB, ABGR, xRGB, xBGR, RGB, BGR, RGB16, BGR16, AYUV, I420, YV12, NV12, NV21, YUY2, UYVY, Y41B, Y42B, Y444, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw, format=(string){ RGBA, BGRA, RGBx, BGRx, ARGB, ABGR, xRGB, xBGR, RGB, BGR, RGB16, BGR16, AYUV, I420, YV12, NV12, NV21, YUY2, UYVY, Y41B, Y42B, Y444, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw(meta:GstVideoGLTextureUploadMeta), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+</tbody>
+</table></div>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>src</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>source</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>video/x-raw(ANY)</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-glmixerbin.functions_details"></a><h2>Functions</h2>
+<p></p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-glmixerbin.other_details"></a><h2>Types and Values</h2>
+<div class="refsect2">
+<a name="GstGLMixerBin-struct"></a><h3>struct GstGLMixerBin</h3>
+<pre class="programlisting">struct GstGLMixerBin;</pre>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-glmixerbin.property-details"></a><h2>Property Details</h2>
+<div class="refsect2">
+<a name="GstGLMixerBin--latency"></a><h3>The <code class="literal">“latency”</code> property</h3>
+<pre class="programlisting"> “latency” <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint64"><span class="type">gint64</span></a></pre>
+<p>Additional latency in live mode to allow upstream to take longer to produce buffers for the current position.</p>
+<p>Flags: Read / Write</p>
+<p>Allowed values: >= 0</p>
+<p>Default value: 0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstGLMixerBin--mixer"></a><h3>The <code class="literal">“mixer”</code> property</h3>
+<pre class="programlisting"> “mixer” <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#GstElement-struct"><span class="type">GstElement</span></a> *</pre>
+<p>The GL mixer chain to use.</p>
+<p>Flags: Read / Write</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstGLMixerBin--start-time"></a><h3>The <code class="literal">“start-time”</code> property</h3>
+<pre class="programlisting"> “start-time” <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint64"><span class="type">guint64</span></a></pre>
+<p>Start time to use if start-time-selection=set.</p>
+<p>Flags: Read / Write</p>
+<p>Default value: 18446744073709551615</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstGLMixerBin--start-time-selection"></a><h3>The <code class="literal">“start-time-selection”</code> property</h3>
+<pre class="programlisting"> “start-time-selection” <span class="type">GstGLMixerBinStartTimeSelection</span></pre>
+<p>Decides which start time is output.</p>
+<p>Flags: Read / Write</p>
+<p>Default value: Start at 0 running time (default)</p>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-glmixerbin.signal-details"></a><h2>Signal Details</h2>
+<div class="refsect2">
+<a name="GstGLMixerBin-create-element"></a><h3>The <code class="literal">“create-element”</code> signal</h3>
+<pre class="programlisting"><a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#GstElement-struct"><span class="returnvalue">GstElement</span></a>*
+user_function (<a class="link" href="gst-plugins-bad-plugins-glmixerbin.html#GstGLMixerBin"><span class="type">GstGLMixerBin</span></a> *gstglmixerbin,
+ <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data)</pre>
+<p>Flags: <a href="/usr/share/gtk-doc/html/gobjectgobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></p>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>Generated by GTK-Doc V1.25</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-glmosaic.html b/docs/plugins/html/gst-plugins-bad-plugins-glmosaic.html
new file mode 100644
index 0000000..eb8ec85
--- /dev/null
+++ b/docs/plugins/html/gst-plugins-bad-plugins-glmosaic.html
@@ -0,0 +1,195 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>glmosaic: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
+<link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
+<link rel="up" href="ch01.html" title="gst-plugins-bad Elements">
+<link rel="prev" href="gst-plugins-bad-plugins-glmixerbin.html" title="glmixerbin">
+<link rel="next" href="gst-plugins-bad-plugins-gloverlay.html" title="gloverlay">
+<meta name="generator" content="GTK-Doc V1.25 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
+<td width="100%" align="left" class="shortcuts">
+<a href="#" class="shortcut">Top</a><span id="nav_description"> <span class="dim">|</span>
+ <a href="#gst-plugins-bad-plugins-glmosaic.description" class="shortcut">Description</a></span><span id="nav_hierarchy"> <span class="dim">|</span>
+ <a href="#gst-plugins-bad-plugins-glmosaic.object-hierarchy" class="shortcut">Object Hierarchy</a></span><span id="nav_interfaces"> <span class="dim">|</span>
+ <a href="#gst-plugins-bad-plugins-glmosaic.implemented-interfaces" class="shortcut">Implemented Interfaces</a></span>
+</td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
+<td><a accesskey="p" href="gst-plugins-bad-plugins-glmixerbin.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="gst-plugins-bad-plugins-gloverlay.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="gst-plugins-bad-plugins-glmosaic"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-bad-plugins-glmosaic.top_of_page"></a>glmosaic</span></h2>
+<p>glmosaic</p>
+</td>
+<td class="gallery_image" valign="top" align="right"></td>
+</tr></table></div>
+<a name="GstGLMosaic"></a><div class="refsect1">
+<a name="gst-plugins-bad-plugins-glmosaic.other"></a><h2>Types and Values</h2>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="name">
+<col class="description">
+</colgroup>
+<tbody><tr>
+<td class="datatype_keyword">struct</td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-plugins-glmosaic.html#GstGLMosaic-struct" title="struct GstGLMosaic">GstGLMosaic</a></td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-glmosaic.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="screen"> <a href="/usr/share/gtk-doc/html/gobjectgobject-The-Base-Object-Type.html#GObject-struct">GObject</a>
+ <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gobjectgobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
+ <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstObject.html#GstObject-struct">GstObject</a>
+ <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#GstElement-struct">GstElement</a>
+ <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gst-plugins-bad-libs-1.0gst-plugins-bad-libs-GstAggregator.html#GstAggregator">GstAggregator</a>
+ <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gst-plugins-bad-libs-1.0gst-plugins-bad-libs-GstVideoAggregator.html#GstVideoAggregator">GstVideoAggregator</a>
+ <span class="lineart">╰──</span> GstGLBaseMixer
+ <span class="lineart">╰──</span> GstGLMixer
+ <span class="lineart">╰──</span> GstGLMosaic
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-glmosaic.implemented-interfaces"></a><h2>Implemented Interfaces</h2>
+<p>
+GstGLMosaic implements
+ <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstChildProxy.html#GstChildProxy-struct">GstChildProxy</a>.</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-glmosaic.description"></a><h2>Description</h2>
+<p>glmixer sub element. N gl sink pads to 1 source pad.
+N + 1 OpenGL contexts shared together.
+N <= 6 because the rendering is more a like a cube than a mosaic
+Each opengl input stream is rendered on a cube face</p>
+<div class="refsect2">
+<a name="id-1.2.75.7.3"></a><h3>Examples</h3>
+<div class="informalexample">
+ <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
+ <tbody>
+ <tr>
+ <td class="listing_lines" align="right"><pre>1
+2
+3
+4
+5
+6</pre></td>
+ <td class="listing_code"><pre class="programlisting">gst<span class="gtkdoc opt">-</span>launch<span class="gtkdoc opt">-</span><span class="number">1.0</span> videotestsrc <span class="gtkdoc opt">!</span> video<span class="gtkdoc opt">/</span>x<span class="gtkdoc opt">-</span>raw<span class="gtkdoc opt">,</span> format<span class="gtkdoc opt">=</span>YUY2 <span class="gtkdoc opt">!</span> queue <span class="gtkdoc opt">!</span> glmosaic name<span class="gtkdoc opt">=</span>m <span class="gtkdoc opt">!</span> glimagesink \
+ videotestsrc pattern<span class="gtkdoc opt">=</span><span class="number">12</span> <span class="gtkdoc opt">!</span> video<span class="gtkdoc opt">/</span>x<span class="gtkdoc opt">-</span>raw<span class="gtkdoc opt">,</span> format<span class="gtkdoc opt">=</span>I420<span class="gtkdoc opt">,</span> framerate<span class="gtkdoc opt">=</span><span class="number">5</span><span class="gtkdoc opt">/</span><span class="number">1</span><span class="gtkdoc opt">,</span> width<span class="gtkdoc opt">=</span><span class="number">100</span><span class="gtkdoc opt">,</span> height<span class="gtkdoc opt">=</span><span class="number">200</span> <span class="gtkdoc opt">!</span> queue <span class="gtkdoc opt">!</span> m<span class="gtkdoc opt">.</span> \
+ videotestsrc <span class="gtkdoc opt">!</span> video<span class="gtkdoc opt">/</span>x<span class="gtkdoc opt">-</span>raw<span class="gtkdoc opt">,</span> framerate<span class="gtkdoc opt">=</span><span class="number">15</span><span class="gtkdoc opt">/</span><span class="number">1</span><span class="gtkdoc opt">,</span> width<span class="gtkdoc opt">=</span><span class="number">1500</span><span class="gtkdoc opt">,</span> height<span class="gtkdoc opt">=</span><span class="number">1500</span> <span class="gtkdoc opt">!</span> gleffects effect<span class="gtkdoc opt">=</span><span class="number">3</span> <span class="gtkdoc opt">!</span> queue <span class="gtkdoc opt">!</span> m<span class="gtkdoc opt">.</span> \
+ videotestsrc <span class="gtkdoc opt">!</span> gleffects effect<span class="gtkdoc opt">=</span><span class="number">2</span> <span class="gtkdoc opt">!</span> queue <span class="gtkdoc opt">!</span> m<span class="gtkdoc opt">.</span> \
+ videotestsrc <span class="gtkdoc opt">!</span> glfiltercube <span class="gtkdoc opt">!</span> queue <span class="gtkdoc opt">!</span> m<span class="gtkdoc opt">.</span> \
+ videotestsrc <span class="gtkdoc opt">!</span> gleffects effect<span class="gtkdoc opt">=</span><span class="number">6</span> <span class="gtkdoc opt">!</span> queue <span class="gtkdoc opt">!</span> m<span class="gtkdoc opt">.</span></pre></td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+
+FBO (Frame Buffer Object) is required.
+</div>
+<div class="refsynopsisdiv">
+<h2>Synopsis</h2>
+<div class="refsect2">
+<a name="id-1.2.75.7.4.1"></a><h3>Element Information</h3>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term">plugin</span></p></td>
+<td>
+ <a class="link" href="gst-plugins-bad-plugins-plugin-opengl.html#plugin-opengl">opengl</a>
+ </td>
+</tr>
+<tr>
+<td><p><span class="term">author</span></p></td>
+<td>Julien Isorce <julien.isorce@gmail.com></td>
+</tr>
+<tr>
+<td><p><span class="term">class</span></p></td>
+<td>Filter/Effect/Video</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="id-1.2.75.7.4.2"></a><h3>Element Pads</h3>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>sink_%u</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>request</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+</tbody>
+</table></div>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>src</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>source</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-glmosaic.functions_details"></a><h2>Functions</h2>
+<p></p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-glmosaic.other_details"></a><h2>Types and Values</h2>
+<div class="refsect2">
+<a name="GstGLMosaic-struct"></a><h3>struct GstGLMosaic</h3>
+<pre class="programlisting">struct GstGLMosaic;</pre>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>Generated by GTK-Doc V1.25</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-gloverlay.html b/docs/plugins/html/gst-plugins-bad-plugins-gloverlay.html
new file mode 100644
index 0000000..17c4ce0
--- /dev/null
+++ b/docs/plugins/html/gst-plugins-bad-plugins-gloverlay.html
@@ -0,0 +1,473 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>gloverlay: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
+<link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
+<link rel="up" href="ch01.html" title="gst-plugins-bad Elements">
+<link rel="prev" href="gst-plugins-bad-plugins-glmosaic.html" title="glmosaic">
+<link rel="next" href="gst-plugins-bad-plugins-glshader.html" title="glshader">
+<meta name="generator" content="GTK-Doc V1.25 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
+<td width="100%" align="left" class="shortcuts">
+<a href="#" class="shortcut">Top</a><span id="nav_description"> <span class="dim">|</span>
+ <a href="#gst-plugins-bad-plugins-gloverlay.description" class="shortcut">Description</a></span><span id="nav_hierarchy"> <span class="dim">|</span>
+ <a href="#gst-plugins-bad-plugins-gloverlay.object-hierarchy" class="shortcut">Object Hierarchy</a></span><span id="nav_properties"> <span class="dim">|</span>
+ <a href="#gst-plugins-bad-plugins-gloverlay.properties" class="shortcut">Properties</a></span>
+</td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
+<td><a accesskey="p" href="gst-plugins-bad-plugins-glmosaic.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="gst-plugins-bad-plugins-glshader.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="gst-plugins-bad-plugins-gloverlay"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-bad-plugins-gloverlay.top_of_page"></a>gloverlay</span></h2>
+<p>gloverlay</p>
+</td>
+<td class="gallery_image" valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-gloverlay.properties"></a><h2>Properties</h2>
+<div class="informaltable"><table class="informaltable" border="0">
+<colgroup>
+<col width="150px" class="properties_type">
+<col width="300px" class="properties_name">
+<col width="200px" class="properties_flags">
+</colgroup>
+<tbody>
+<tr>
+<td class="property_type"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint"><span class="type">gint</span></a></td>
+<td class="property_name"><a class="link" href="gst-plugins-bad-plugins-gloverlay.html#GstGLOverlay--angle-png" title="The “angle-png” property">angle-png</a></td>
+<td class="property_flags">Read / Write</td>
+</tr>
+<tr>
+<td class="property_type"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint"><span class="type">gint</span></a></td>
+<td class="property_name"><a class="link" href="gst-plugins-bad-plugins-gloverlay.html#GstGLOverlay--angle-video" title="The “angle-video” property">angle-video</a></td>
+<td class="property_flags">Read / Write</td>
+</tr>
+<tr>
+<td class="property_type">
+<a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</td>
+<td class="property_name"><a class="link" href="gst-plugins-bad-plugins-gloverlay.html#GstGLOverlay--location" title="The “location” property">location</a></td>
+<td class="property_flags">Read / Write</td>
+</tr>
+<tr>
+<td class="property_type"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint"><span class="type">gint</span></a></td>
+<td class="property_name"><a class="link" href="gst-plugins-bad-plugins-gloverlay.html#GstGLOverlay--proportion-png" title="The “proportion-png” property">proportion-png</a></td>
+<td class="property_flags">Read / Write</td>
+</tr>
+<tr>
+<td class="property_type"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint"><span class="type">gint</span></a></td>
+<td class="property_name"><a class="link" href="gst-plugins-bad-plugins-gloverlay.html#GstGLOverlay--proportion-video" title="The “proportion-video” property">proportion-video</a></td>
+<td class="property_flags">Read / Write</td>
+</tr>
+<tr>
+<td class="property_type"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint"><span class="type">gint</span></a></td>
+<td class="property_name"><a class="link" href="gst-plugins-bad-plugins-gloverlay.html#GstGLOverlay--ratio-video" title="The “ratio-video” property">ratio-video</a></td>
+<td class="property_flags">Read / Write</td>
+</tr>
+<tr>
+<td class="property_type"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint"><span class="type">gint</span></a></td>
+<td class="property_name"><a class="link" href="gst-plugins-bad-plugins-gloverlay.html#GstGLOverlay--rotate-png" title="The “rotate-png” property">rotate-png</a></td>
+<td class="property_flags">Read / Write</td>
+</tr>
+<tr>
+<td class="property_type"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint"><span class="type">gint</span></a></td>
+<td class="property_name"><a class="link" href="gst-plugins-bad-plugins-gloverlay.html#GstGLOverlay--rotate-video" title="The “rotate-video” property">rotate-video</a></td>
+<td class="property_flags">Read / Write</td>
+</tr>
+<tr>
+<td class="property_type"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></td>
+<td class="property_name"><a class="link" href="gst-plugins-bad-plugins-gloverlay.html#GstGLOverlay--video-top" title="The “video-top” property">video-top</a></td>
+<td class="property_flags">Read / Write</td>
+</tr>
+<tr>
+<td class="property_type"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint"><span class="type">gint</span></a></td>
+<td class="property_name"><a class="link" href="gst-plugins-bad-plugins-gloverlay.html#GstGLOverlay--xpos-png" title="The “xpos-png” property">xpos-png</a></td>
+<td class="property_flags">Read / Write</td>
+</tr>
+<tr>
+<td class="property_type"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint"><span class="type">gint</span></a></td>
+<td class="property_name"><a class="link" href="gst-plugins-bad-plugins-gloverlay.html#GstGLOverlay--xpos-video" title="The “xpos-video” property">xpos-video</a></td>
+<td class="property_flags">Read / Write</td>
+</tr>
+<tr>
+<td class="property_type"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint"><span class="type">gint</span></a></td>
+<td class="property_name"><a class="link" href="gst-plugins-bad-plugins-gloverlay.html#GstGLOverlay--ypos-png" title="The “ypos-png” property">ypos-png</a></td>
+<td class="property_flags">Read / Write</td>
+</tr>
+<tr>
+<td class="property_type"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint"><span class="type">gint</span></a></td>
+<td class="property_name"><a class="link" href="gst-plugins-bad-plugins-gloverlay.html#GstGLOverlay--ypos-video" title="The “ypos-video” property">ypos-video</a></td>
+<td class="property_flags">Read / Write</td>
+</tr>
+<tr>
+<td class="property_type"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a></td>
+<td class="property_name"><a class="link" href="gst-plugins-bad-plugins-gloverlay.html#GstGLOverlay--alpha" title="The “alpha” property">alpha</a></td>
+<td class="property_flags">Read / Write</td>
+</tr>
+<tr>
+<td class="property_type"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint"><span class="type">gint</span></a></td>
+<td class="property_name"><a class="link" href="gst-plugins-bad-plugins-gloverlay.html#GstGLOverlay--offset-x" title="The “offset-x” property">offset-x</a></td>
+<td class="property_flags">Read / Write</td>
+</tr>
+<tr>
+<td class="property_type"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint"><span class="type">gint</span></a></td>
+<td class="property_name"><a class="link" href="gst-plugins-bad-plugins-gloverlay.html#GstGLOverlay--offset-y" title="The “offset-y” property">offset-y</a></td>
+<td class="property_flags">Read / Write</td>
+</tr>
+<tr>
+<td class="property_type"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint"><span class="type">gint</span></a></td>
+<td class="property_name"><a class="link" href="gst-plugins-bad-plugins-gloverlay.html#GstGLOverlay--overlay-height" title="The “overlay-height” property">overlay-height</a></td>
+<td class="property_flags">Read / Write</td>
+</tr>
+<tr>
+<td class="property_type"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint"><span class="type">gint</span></a></td>
+<td class="property_name"><a class="link" href="gst-plugins-bad-plugins-gloverlay.html#GstGLOverlay--overlay-width" title="The “overlay-width” property">overlay-width</a></td>
+<td class="property_flags">Read / Write</td>
+</tr>
+<tr>
+<td class="property_type"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a></td>
+<td class="property_name"><a class="link" href="gst-plugins-bad-plugins-gloverlay.html#GstGLOverlay--relative-x" title="The “relative-x” property">relative-x</a></td>
+<td class="property_flags">Read / Write</td>
+</tr>
+<tr>
+<td class="property_type"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a></td>
+<td class="property_name"><a class="link" href="gst-plugins-bad-plugins-gloverlay.html#GstGLOverlay--relative-y" title="The “relative-y” property">relative-y</a></td>
+<td class="property_flags">Read / Write</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<a name="GstGLOverlay"></a><div class="refsect1">
+<a name="gst-plugins-bad-plugins-gloverlay.other"></a><h2>Types and Values</h2>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="name">
+<col class="description">
+</colgroup>
+<tbody><tr>
+<td class="datatype_keyword">struct</td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-plugins-gloverlay.html#GstGLOverlay-struct" title="struct GstGLOverlay">GstGLOverlay</a></td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-gloverlay.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="screen"> <a href="/usr/share/gtk-doc/html/gobjectgobject-The-Base-Object-Type.html#GObject-struct">GObject</a>
+ <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gobjectgobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
+ <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstObject.html#GstObject-struct">GstObject</a>
+ <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#GstElement-struct">GstElement</a>
+ <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-libs-1.0GstBaseTransform.html#GstBaseTransform-struct">GstBaseTransform</a>
+ <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gst-plugins-bad-libs-1.0GstGLBaseFilter.html#GstGLBaseFilter-struct">GstGLBaseFilter</a>
+ <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gst-plugins-bad-libs-1.0GstGLFilter.html#GstGLFilter-struct">GstGLFilter</a>
+ <span class="lineart">╰──</span> GstGLOverlay
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-gloverlay.description"></a><h2>Description</h2>
+<p>Overlay GL video texture with a PNG image</p>
+<div class="refsect2">
+<a name="id-1.2.76.7.3"></a><h3>Examples</h3>
+<div class="informalexample">
+ <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
+ <tbody>
+ <tr>
+ <td class="listing_lines" align="right"><pre>1</pre></td>
+ <td class="listing_code"><pre class="programlisting">gst<span class="gtkdoc opt">-</span>launch<span class="gtkdoc opt">-</span><span class="number">1.0</span> videotestsrc <span class="gtkdoc opt">!</span> gloverlay location<span class="gtkdoc opt">=</span>image<span class="gtkdoc opt">.</span>jpg <span class="gtkdoc opt">!</span> glimagesink</pre></td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+
+FBO (Frame Buffer Object) is required.
+</div>
+<div class="refsynopsisdiv">
+<h2>Synopsis</h2>
+<div class="refsect2">
+<a name="id-1.2.76.7.4.1"></a><h3>Element Information</h3>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term">plugin</span></p></td>
+<td>
+ <a class="link" href="gst-plugins-bad-plugins-plugin-opengl.html#plugin-opengl">opengl</a>
+ </td>
+</tr>
+<tr>
+<td><p><span class="term">author</span></p></td>
+<td>Filippo Argiolas <filippo.argiolas@gmail.com>, Matthew Waters <matthew@centricular.com></td>
+</tr>
+<tr>
+<td><p><span class="term">class</span></p></td>
+<td>Filter/Effect/Video</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="id-1.2.76.7.4.2"></a><h3>Element Pads</h3>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>video/x-raw(ANY), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</td>
+</tr>
+</tbody>
+</table></div>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>src</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>source</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw(ANY), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-gloverlay.functions_details"></a><h2>Functions</h2>
+<p></p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-gloverlay.other_details"></a><h2>Types and Values</h2>
+<div class="refsect2">
+<a name="GstGLOverlay-struct"></a><h3>struct GstGLOverlay</h3>
+<pre class="programlisting">struct GstGLOverlay;</pre>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-gloverlay.property-details"></a><h2>Property Details</h2>
+<div class="refsect2">
+<a name="GstGLOverlay--angle-png"></a><h3>The <code class="literal">“angle-png”</code> property</h3>
+<pre class="programlisting"> “angle-png” <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint"><span class="type">gint</span></a></pre>
+<p>choose angle in axis to choosen between -90 and 90.</p>
+<p>Flags: Read / Write</p>
+<p>Allowed values: [-90,90]</p>
+<p>Default value: 0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstGLOverlay--angle-video"></a><h3>The <code class="literal">“angle-video”</code> property</h3>
+<pre class="programlisting"> “angle-video” <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint"><span class="type">gint</span></a></pre>
+<p>choose angle in axis to choosen between -90 and 90.</p>
+<p>Flags: Read / Write</p>
+<p>Allowed values: [-90,90]</p>
+<p>Default value: 0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstGLOverlay--location"></a><h3>The <code class="literal">“location”</code> property</h3>
+<pre class="programlisting"> “location” <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</pre>
+<p>Location of image file to overlay.</p>
+<p>Flags: Read / Write</p>
+<p>Default value: NULL</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstGLOverlay--proportion-png"></a><h3>The <code class="literal">“proportion-png”</code> property</h3>
+<pre class="programlisting"> “proportion-png” <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint"><span class="type">gint</span></a></pre>
+<p>Relative size of iverlay image, in percents.</p>
+<p>Flags: Read / Write</p>
+<p>Allowed values: [0,100]</p>
+<p>Default value: 0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstGLOverlay--proportion-video"></a><h3>The <code class="literal">“proportion-video”</code> property</h3>
+<pre class="programlisting"> “proportion-video” <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint"><span class="type">gint</span></a></pre>
+<p>Relative size of iverlay video, in percents.</p>
+<p>Flags: Read / Write</p>
+<p>Allowed values: [0,100]</p>
+<p>Default value: 0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstGLOverlay--ratio-video"></a><h3>The <code class="literal">“ratio-video”</code> property</h3>
+<pre class="programlisting"> “ratio-video” <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint"><span class="type">gint</span></a></pre>
+<p>Flags: Read / Write</p>
+<p>Allowed values: [0,3]</p>
+<p>Default value: 0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstGLOverlay--rotate-png"></a><h3>The <code class="literal">“rotate-png”</code> property</h3>
+<pre class="programlisting"> “rotate-png” <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint"><span class="type">gint</span></a></pre>
+<p>choose rotation axis for the moment only Y axis is implemented.</p>
+<p>Flags: Read / Write</p>
+<p>Allowed values: [0,3]</p>
+<p>Default value: 0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstGLOverlay--rotate-video"></a><h3>The <code class="literal">“rotate-video”</code> property</h3>
+<pre class="programlisting"> “rotate-video” <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint"><span class="type">gint</span></a></pre>
+<p>choose rotation axis for the moment only Y axis is implemented.</p>
+<p>Flags: Read / Write</p>
+<p>Allowed values: [0,3]</p>
+<p>Default value: 0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstGLOverlay--video-top"></a><h3>The <code class="literal">“video-top”</code> property</h3>
+<pre class="programlisting"> “video-top” <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></pre>
+<p>Video is over png image.</p>
+<p>Flags: Read / Write</p>
+<p>Default value: FALSE</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstGLOverlay--xpos-png"></a><h3>The <code class="literal">“xpos-png”</code> property</h3>
+<pre class="programlisting"> “xpos-png” <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint"><span class="type">gint</span></a></pre>
+<p>X position of overlay image in percents.</p>
+<p>Flags: Read / Write</p>
+<p>Allowed values: [0,100]</p>
+<p>Default value: 0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstGLOverlay--xpos-video"></a><h3>The <code class="literal">“xpos-video”</code> property</h3>
+<pre class="programlisting"> “xpos-video” <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint"><span class="type">gint</span></a></pre>
+<p>X position of overlay video in percents.</p>
+<p>Flags: Read / Write</p>
+<p>Allowed values: [0,100]</p>
+<p>Default value: 0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstGLOverlay--ypos-png"></a><h3>The <code class="literal">“ypos-png”</code> property</h3>
+<pre class="programlisting"> “ypos-png” <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint"><span class="type">gint</span></a></pre>
+<p>Y position of overlay image in percents.</p>
+<p>Flags: Read / Write</p>
+<p>Allowed values: [0,100]</p>
+<p>Default value: 0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstGLOverlay--ypos-video"></a><h3>The <code class="literal">“ypos-video”</code> property</h3>
+<pre class="programlisting"> “ypos-video” <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint"><span class="type">gint</span></a></pre>
+<p>Y position of overlay video in percents.</p>
+<p>Flags: Read / Write</p>
+<p>Allowed values: [0,100]</p>
+<p>Default value: 0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstGLOverlay--alpha"></a><h3>The <code class="literal">“alpha”</code> property</h3>
+<pre class="programlisting"> “alpha” <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a></pre>
+<p>Global alpha of overlay image.</p>
+<p>Flags: Read / Write</p>
+<p>Allowed values: [0,1]</p>
+<p>Default value: 1</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstGLOverlay--offset-x"></a><h3>The <code class="literal">“offset-x”</code> property</h3>
+<pre class="programlisting"> “offset-x” <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint"><span class="type">gint</span></a></pre>
+<p>For positive value, horizontal offset of overlay image in pixels from left of video image. For negative value, horizontal offset of overlay image in pixels from right of video image.</p>
+<p>Flags: Read / Write</p>
+<p>Default value: 0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstGLOverlay--offset-y"></a><h3>The <code class="literal">“offset-y”</code> property</h3>
+<pre class="programlisting"> “offset-y” <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint"><span class="type">gint</span></a></pre>
+<p>For positive value, vertical offset of overlay image in pixels from top of video image. For negative value, vertical offset of overlay image in pixels from bottom of video image.</p>
+<p>Flags: Read / Write</p>
+<p>Default value: 0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstGLOverlay--overlay-height"></a><h3>The <code class="literal">“overlay-height”</code> property</h3>
+<pre class="programlisting"> “overlay-height” <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint"><span class="type">gint</span></a></pre>
+<p>Height of overlay image in pixels (0 = same as overlay image).</p>
+<p>Flags: Read / Write</p>
+<p>Allowed values: >= 0</p>
+<p>Default value: 0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstGLOverlay--overlay-width"></a><h3>The <code class="literal">“overlay-width”</code> property</h3>
+<pre class="programlisting"> “overlay-width” <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint"><span class="type">gint</span></a></pre>
+<p>Width of overlay image in pixels (0 = same as overlay image).</p>
+<p>Flags: Read / Write</p>
+<p>Allowed values: >= 0</p>
+<p>Default value: 0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstGLOverlay--relative-x"></a><h3>The <code class="literal">“relative-x”</code> property</h3>
+<pre class="programlisting"> “relative-x” <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a></pre>
+<p>Horizontal offset of overlay image in fractions of video image width, from top-left corner of video image.</p>
+<p>Flags: Read / Write</p>
+<p>Allowed values: [0,1]</p>
+<p>Default value: 0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstGLOverlay--relative-y"></a><h3>The <code class="literal">“relative-y”</code> property</h3>
+<pre class="programlisting"> “relative-y” <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a></pre>
+<p>Vertical offset of overlay image in fractions of video image height, from top-left corner of video image.</p>
+<p>Flags: Read / Write</p>
+<p>Allowed values: [0,1]</p>
+<p>Default value: 0</p>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>Generated by GTK-Doc V1.25</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-glshader.html b/docs/plugins/html/gst-plugins-bad-plugins-glshader.html
new file mode 100644
index 0000000..e448081
--- /dev/null
+++ b/docs/plugins/html/gst-plugins-bad-plugins-glshader.html
@@ -0,0 +1,333 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>glshader: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
+<link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
+<link rel="up" href="ch01.html" title="gst-plugins-bad Elements">
+<link rel="prev" href="gst-plugins-bad-plugins-gloverlay.html" title="gloverlay">
+<link rel="next" href="gst-plugins-bad-plugins-glsinkbin.html" title="glsinkbin">
+<meta name="generator" content="GTK-Doc V1.25 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
+<td width="100%" align="left" class="shortcuts">
+<a href="#" class="shortcut">Top</a><span id="nav_description"> <span class="dim">|</span>
+ <a href="#gst-plugins-bad-plugins-glshader.description" class="shortcut">Description</a></span><span id="nav_hierarchy"> <span class="dim">|</span>
+ <a href="#gst-plugins-bad-plugins-glshader.object-hierarchy" class="shortcut">Object Hierarchy</a></span><span id="nav_properties"> <span class="dim">|</span>
+ <a href="#gst-plugins-bad-plugins-glshader.properties" class="shortcut">Properties</a></span><span id="nav_signals"> <span class="dim">|</span>
+ <a href="#gst-plugins-bad-plugins-glshader.signals" class="shortcut">Signals</a></span>
+</td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
+<td><a accesskey="p" href="gst-plugins-bad-plugins-gloverlay.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="gst-plugins-bad-plugins-glsinkbin.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="gst-plugins-bad-plugins-glshader"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-bad-plugins-glshader.top_of_page"></a>glshader</span></h2>
+<p>glshader</p>
+</td>
+<td class="gallery_image" valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-glshader.properties"></a><h2>Properties</h2>
+<div class="informaltable"><table class="informaltable" border="0">
+<colgroup>
+<col width="150px" class="properties_type">
+<col width="300px" class="properties_name">
+<col width="200px" class="properties_flags">
+</colgroup>
+<tbody>
+<tr>
+<td class="property_type">
+<a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</td>
+<td class="property_name"><a class="link" href="gst-plugins-bad-plugins-glshader.html#GstGLFilterShader--location" title="The “location” property">location</a></td>
+<td class="property_flags">Read / Write</td>
+</tr>
+<tr>
+<td class="property_type">
+<a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</td>
+<td class="property_name"><a class="link" href="gst-plugins-bad-plugins-glshader.html#GstGLFilterShader--preset" title="The “preset” property">preset</a></td>
+<td class="property_flags">Read / Write</td>
+</tr>
+<tr>
+<td class="property_type">
+<a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</td>
+<td class="property_name"><a class="link" href="gst-plugins-bad-plugins-glshader.html#GstGLFilterShader--vars" title="The “vars” property">vars</a></td>
+<td class="property_flags">Write</td>
+</tr>
+<tr>
+<td class="property_type">
+<a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</td>
+<td class="property_name"><a class="link" href="gst-plugins-bad-plugins-glshader.html#GstGLFilterShader--fragment" title="The “fragment” property">fragment</a></td>
+<td class="property_flags">Read / Write</td>
+</tr>
+<tr>
+<td class="property_type">
+<a href="/usr/share/gtk-doc/html/gst-plugins-bad-libs-1.0GstGLShader.html#GstGLShader-struct"><span class="type">GstGLShader</span></a> *</td>
+<td class="property_name"><a class="link" href="gst-plugins-bad-plugins-glshader.html#GstGLFilterShader--shader" title="The “shader” property">shader</a></td>
+<td class="property_flags">Read / Write</td>
+</tr>
+<tr>
+<td class="property_type">
+<a href="/usr/share/gtk-doc/html/gstreamer-1.0GstStructure.html#GstStructure-struct"><span class="type">GstStructure</span></a> *</td>
+<td class="property_name"><a class="link" href="gst-plugins-bad-plugins-glshader.html#GstGLFilterShader--uniforms" title="The “uniforms” property">uniforms</a></td>
+<td class="property_flags">Read / Write</td>
+</tr>
+<tr>
+<td class="property_type"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></td>
+<td class="property_name"><a class="link" href="gst-plugins-bad-plugins-glshader.html#GstGLFilterShader--update-shader" title="The “update-shader” property">update-shader</a></td>
+<td class="property_flags">Write</td>
+</tr>
+<tr>
+<td class="property_type">
+<a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</td>
+<td class="property_name"><a class="link" href="gst-plugins-bad-plugins-glshader.html#GstGLFilterShader--vertex" title="The “vertex” property">vertex</a></td>
+<td class="property_flags">Read / Write</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-glshader.signals"></a><h2>Signals</h2>
+<div class="informaltable"><table class="informaltable" border="0">
+<colgroup>
+<col width="150px" class="signals_return">
+<col width="300px" class="signals_name">
+<col width="200px" class="signals_flags">
+</colgroup>
+<tbody><tr>
+<td class="signal_type">
+<a href="/usr/share/gtk-doc/html/gst-plugins-bad-libs-1.0GstGLShader.html#GstGLShader-struct"><span class="returnvalue">GstGLShader</span></a>*</td>
+<td class="signal_name"><a class="link" href="gst-plugins-bad-plugins-glshader.html#GstGLFilterShader-create-shader" title="The “create-shader” signal">create-shader</a></td>
+<td class="signal_flags"><a href="/usr/share/gtk-doc/html/gobjectgobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></td>
+</tr></tbody>
+</table></div>
+</div>
+<a name="GstGLFilterShader"></a><div class="refsect1">
+<a name="gst-plugins-bad-plugins-glshader.other"></a><h2>Types and Values</h2>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="name">
+<col class="description">
+</colgroup>
+<tbody><tr>
+<td class="datatype_keyword">struct</td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-plugins-glshader.html#GstGLFilterShader-struct" title="struct GstGLFilterShader">GstGLFilterShader</a></td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-glshader.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="screen"> <a href="/usr/share/gtk-doc/html/gobjectgobject-The-Base-Object-Type.html#GObject-struct">GObject</a>
+ <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gobjectgobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
+ <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstObject.html#GstObject-struct">GstObject</a>
+ <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#GstElement-struct">GstElement</a>
+ <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-libs-1.0GstBaseTransform.html#GstBaseTransform-struct">GstBaseTransform</a>
+ <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gst-plugins-bad-libs-1.0GstGLBaseFilter.html#GstGLBaseFilter-struct">GstGLBaseFilter</a>
+ <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gst-plugins-bad-libs-1.0GstGLFilter.html#GstGLFilter-struct">GstGLFilter</a>
+ <span class="lineart">╰──</span> GstGLFilterShader
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-glshader.description"></a><h2>Description</h2>
+<p>OpenGL fragment shader filter</p>
+<div class="refsect2">
+<a name="id-1.2.77.8.3"></a><h3>Examples</h3>
+<div class="informalexample">
+ <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
+ <tbody>
+ <tr>
+ <td class="listing_lines" align="right"><pre>1</pre></td>
+ <td class="listing_code"><pre class="programlisting">gst<span class="gtkdoc opt">-</span>launch<span class="gtkdoc opt">-</span><span class="number">1.0</span> videotestsrc <span class="gtkdoc opt">!</span> glupload <span class="gtkdoc opt">!</span> glshader fragment<span class="gtkdoc opt">=</span><span class="string">"</span><span class="gtkdoc esc">\"</span><span class="string">`cat myshader.frag`</span><span class="gtkdoc esc">\"</span><span class="string">"</span> <span class="gtkdoc opt">!</span> glimagesink</pre></td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+
+FBO (Frame Buffer Object) and GLSL (OpenGL Shading Language) are required. A <span class="type">version</span> header is required
+</div>
+<div class="refsynopsisdiv">
+<h2>Synopsis</h2>
+<div class="refsect2">
+<a name="id-1.2.77.8.4.1"></a><h3>Element Information</h3>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term">plugin</span></p></td>
+<td>
+ <a class="link" href="gst-plugins-bad-plugins-plugin-opengl.html#plugin-opengl">opengl</a>
+ </td>
+</tr>
+<tr>
+<td><p><span class="term">author</span></p></td>
+<td><matthew@centricular.com></td>
+</tr>
+<tr>
+<td><p><span class="term">class</span></p></td>
+<td>Filter/Effect</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="id-1.2.77.8.4.2"></a><h3>Element Pads</h3>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>video/x-raw(ANY), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</td>
+</tr>
+</tbody>
+</table></div>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>src</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>source</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw(ANY), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-glshader.functions_details"></a><h2>Functions</h2>
+<p></p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-glshader.other_details"></a><h2>Types and Values</h2>
+<div class="refsect2">
+<a name="GstGLFilterShader-struct"></a><h3>struct GstGLFilterShader</h3>
+<pre class="programlisting">struct GstGLFilterShader;</pre>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-glshader.property-details"></a><h2>Property Details</h2>
+<div class="refsect2">
+<a name="GstGLFilterShader--location"></a><h3>The <code class="literal">“location”</code> property</h3>
+<pre class="programlisting"> “location” <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</pre>
+<p>Location of the GLSL file to load.</p>
+<p>Flags: Read / Write</p>
+<p>Default value: NULL</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstGLFilterShader--preset"></a><h3>The <code class="literal">“preset”</code> property</h3>
+<pre class="programlisting"> “preset” <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</pre>
+<p>Location of the shader uniform variables preset file.</p>
+<p>Flags: Read / Write</p>
+<p>Default value: NULL</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstGLFilterShader--vars"></a><h3>The <code class="literal">“vars”</code> property</h3>
+<pre class="programlisting"> “vars” <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</pre>
+<p>Set the shader uniform variables.</p>
+<p>Flags: Write</p>
+<p>Default value: NULL</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstGLFilterShader--fragment"></a><h3>The <code class="literal">“fragment”</code> property</h3>
+<pre class="programlisting"> “fragment” <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</pre>
+<p>GLSL fragment source.</p>
+<p>Flags: Read / Write</p>
+<p>Default value: NULL</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstGLFilterShader--shader"></a><h3>The <code class="literal">“shader”</code> property</h3>
+<pre class="programlisting"> “shader” <a href="/usr/share/gtk-doc/html/gst-plugins-bad-libs-1.0GstGLShader.html#GstGLShader-struct"><span class="type">GstGLShader</span></a> *</pre>
+<p>GstGLShader to use.</p>
+<p>Flags: Read / Write</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstGLFilterShader--uniforms"></a><h3>The <code class="literal">“uniforms”</code> property</h3>
+<pre class="programlisting"> “uniforms” <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstStructure.html#GstStructure-struct"><span class="type">GstStructure</span></a> *</pre>
+<p>GLSL Uniforms.</p>
+<p>Flags: Read / Write</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstGLFilterShader--update-shader"></a><h3>The <code class="literal">“update-shader”</code> property</h3>
+<pre class="programlisting"> “update-shader” <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></pre>
+<p>Emit the 'create-shader' signal for the next frame.</p>
+<p>Flags: Write</p>
+<p>Default value: FALSE</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstGLFilterShader--vertex"></a><h3>The <code class="literal">“vertex”</code> property</h3>
+<pre class="programlisting"> “vertex” <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</pre>
+<p>GLSL vertex source.</p>
+<p>Flags: Read / Write</p>
+<p>Default value: NULL</p>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-glshader.signal-details"></a><h2>Signal Details</h2>
+<div class="refsect2">
+<a name="GstGLFilterShader-create-shader"></a><h3>The <code class="literal">“create-shader”</code> signal</h3>
+<pre class="programlisting"><a href="/usr/share/gtk-doc/html/gst-plugins-bad-libs-1.0GstGLShader.html#GstGLShader-struct"><span class="returnvalue">GstGLShader</span></a>*
+user_function (<a class="link" href="gst-plugins-bad-plugins-glshader.html#GstGLFilterShader"><span class="type">GstGLFilterShader</span></a> *gstglfiltershader,
+ <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data)</pre>
+<p>Flags: <a href="/usr/share/gtk-doc/html/gobjectgobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></p>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>Generated by GTK-Doc V1.25</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-glsinkbin.html b/docs/plugins/html/gst-plugins-bad-plugins-glsinkbin.html
new file mode 100644
index 0000000..bca73ca
--- /dev/null
+++ b/docs/plugins/html/gst-plugins-bad-plugins-glsinkbin.html
@@ -0,0 +1,455 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>glsinkbin: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
+<link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
+<link rel="up" href="ch01.html" title="gst-plugins-bad Elements">
+<link rel="prev" href="gst-plugins-bad-plugins-glshader.html" title="glshader">
+<link rel="next" href="gst-plugins-bad-plugins-glsrcbin.html" title="glsrcbin">
+<meta name="generator" content="GTK-Doc V1.25 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
+<td width="100%" align="left" class="shortcuts">
+<a href="#" class="shortcut">Top</a><span id="nav_description"> <span class="dim">|</span>
+ <a href="#gst-plugins-bad-plugins-glsinkbin.description" class="shortcut">Description</a></span><span id="nav_hierarchy"> <span class="dim">|</span>
+ <a href="#gst-plugins-bad-plugins-glsinkbin.object-hierarchy" class="shortcut">Object Hierarchy</a></span><span id="nav_interfaces"> <span class="dim">|</span>
+ <a href="#gst-plugins-bad-plugins-glsinkbin.implemented-interfaces" class="shortcut">Implemented Interfaces</a></span><span id="nav_properties"> <span class="dim">|</span>
+ <a href="#gst-plugins-bad-plugins-glsinkbin.properties" class="shortcut">Properties</a></span><span id="nav_signals"> <span class="dim">|</span>
+ <a href="#gst-plugins-bad-plugins-glsinkbin.signals" class="shortcut">Signals</a></span>
+</td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
+<td><a accesskey="p" href="gst-plugins-bad-plugins-glshader.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="gst-plugins-bad-plugins-glsrcbin.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="gst-plugins-bad-plugins-glsinkbin"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-bad-plugins-glsinkbin.top_of_page"></a>glsinkbin</span></h2>
+<p>glsinkbin</p>
+</td>
+<td class="gallery_image" valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-glsinkbin.properties"></a><h2>Properties</h2>
+<div class="informaltable"><table class="informaltable" border="0">
+<colgroup>
+<col width="150px" class="properties_type">
+<col width="300px" class="properties_name">
+<col width="200px" class="properties_flags">
+</colgroup>
+<tbody>
+<tr>
+<td class="property_type"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></td>
+<td class="property_name"><a class="link" href="gst-plugins-bad-plugins-glsinkbin.html#GstGLSinkBin--force-aspect-ratio" title="The “force-aspect-ratio” property">force-aspect-ratio</a></td>
+<td class="property_flags">Read / Write</td>
+</tr>
+<tr>
+<td class="property_type">
+<a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#GstElement-struct"><span class="type">GstElement</span></a> *</td>
+<td class="property_name"><a class="link" href="gst-plugins-bad-plugins-glsinkbin.html#GstGLSinkBin--sink" title="The “sink” property">sink</a></td>
+<td class="property_flags">Read / Write</td>
+</tr>
+<tr>
+<td class="property_type"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></td>
+<td class="property_name"><a class="link" href="gst-plugins-bad-plugins-glsinkbin.html#GstGLSinkBin--async" title="The “async” property">async</a></td>
+<td class="property_flags">Read / Write</td>
+</tr>
+<tr>
+<td class="property_type"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="type">guint</span></a></td>
+<td class="property_name"><a class="link" href="gst-plugins-bad-plugins-glsinkbin.html#GstGLSinkBin--blocksize" title="The “blocksize” property">blocksize</a></td>
+<td class="property_flags">Read / Write</td>
+</tr>
+<tr>
+<td class="property_type"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></td>
+<td class="property_name"><a class="link" href="gst-plugins-bad-plugins-glsinkbin.html#GstGLSinkBin--enable-last-sample" title="The “enable-last-sample” property">enable-last-sample</a></td>
+<td class="property_flags">Read / Write</td>
+</tr>
+<tr>
+<td class="property_type">
+<a href="/usr/share/gtk-doc/html/gstreamer-1.0GstSample.html#GstSample-struct"><span class="type">GstSample</span></a> *</td>
+<td class="property_name"><a class="link" href="gst-plugins-bad-plugins-glsinkbin.html#GstGLSinkBin--last-sample" title="The “last-sample” property">last-sample</a></td>
+<td class="property_flags">Read</td>
+</tr>
+<tr>
+<td class="property_type"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint64"><span class="type">guint64</span></a></td>
+<td class="property_name"><a class="link" href="gst-plugins-bad-plugins-glsinkbin.html#GstGLSinkBin--max-bitrate" title="The “max-bitrate” property">max-bitrate</a></td>
+<td class="property_flags">Read / Write</td>
+</tr>
+<tr>
+<td class="property_type"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint64"><span class="type">gint64</span></a></td>
+<td class="property_name"><a class="link" href="gst-plugins-bad-plugins-glsinkbin.html#GstGLSinkBin--max-lateness" title="The “max-lateness” property">max-lateness</a></td>
+<td class="property_flags">Read / Write</td>
+</tr>
+<tr>
+<td class="property_type"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></td>
+<td class="property_name"><a class="link" href="gst-plugins-bad-plugins-glsinkbin.html#GstGLSinkBin--qos" title="The “qos” property">qos</a></td>
+<td class="property_flags">Read / Write</td>
+</tr>
+<tr>
+<td class="property_type"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint64"><span class="type">guint64</span></a></td>
+<td class="property_name"><a class="link" href="gst-plugins-bad-plugins-glsinkbin.html#GstGLSinkBin--render-delay" title="The “render-delay” property">render-delay</a></td>
+<td class="property_flags">Read / Write</td>
+</tr>
+<tr>
+<td class="property_type"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></td>
+<td class="property_name"><a class="link" href="gst-plugins-bad-plugins-glsinkbin.html#GstGLSinkBin--sync" title="The “sync” property">sync</a></td>
+<td class="property_flags">Read / Write</td>
+</tr>
+<tr>
+<td class="property_type"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint64"><span class="type">guint64</span></a></td>
+<td class="property_name"><a class="link" href="gst-plugins-bad-plugins-glsinkbin.html#GstGLSinkBin--throttle-time" title="The “throttle-time” property">throttle-time</a></td>
+<td class="property_flags">Read / Write</td>
+</tr>
+<tr>
+<td class="property_type"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint64"><span class="type">gint64</span></a></td>
+<td class="property_name"><a class="link" href="gst-plugins-bad-plugins-glsinkbin.html#GstGLSinkBin--ts-offset" title="The “ts-offset” property">ts-offset</a></td>
+<td class="property_flags">Read / Write</td>
+</tr>
+<tr>
+<td class="property_type"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a></td>
+<td class="property_name"><a class="link" href="gst-plugins-bad-plugins-glsinkbin.html#GstGLSinkBin--brightness" title="The “brightness” property">brightness</a></td>
+<td class="property_flags">Read / Write</td>
+</tr>
+<tr>
+<td class="property_type"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a></td>
+<td class="property_name"><a class="link" href="gst-plugins-bad-plugins-glsinkbin.html#GstGLSinkBin--contrast" title="The “contrast” property">contrast</a></td>
+<td class="property_flags">Read / Write</td>
+</tr>
+<tr>
+<td class="property_type"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a></td>
+<td class="property_name"><a class="link" href="gst-plugins-bad-plugins-glsinkbin.html#GstGLSinkBin--hue" title="The “hue” property">hue</a></td>
+<td class="property_flags">Read / Write</td>
+</tr>
+<tr>
+<td class="property_type"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a></td>
+<td class="property_name"><a class="link" href="gst-plugins-bad-plugins-glsinkbin.html#GstGLSinkBin--saturation" title="The “saturation” property">saturation</a></td>
+<td class="property_flags">Read / Write</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-glsinkbin.signals"></a><h2>Signals</h2>
+<div class="informaltable"><table class="informaltable" border="0">
+<colgroup>
+<col width="150px" class="signals_return">
+<col width="300px" class="signals_name">
+<col width="200px" class="signals_flags">
+</colgroup>
+<tbody><tr>
+<td class="signal_type">
+<a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#GstElement-struct"><span class="returnvalue">GstElement</span></a>*</td>
+<td class="signal_name"><a class="link" href="gst-plugins-bad-plugins-glsinkbin.html#GstGLSinkBin-create-element" title="The “create-element” signal">create-element</a></td>
+<td class="signal_flags"><a href="/usr/share/gtk-doc/html/gobjectgobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></td>
+</tr></tbody>
+</table></div>
+</div>
+<a name="GstGLSinkBin"></a><div class="refsect1">
+<a name="gst-plugins-bad-plugins-glsinkbin.other"></a><h2>Types and Values</h2>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="name">
+<col class="description">
+</colgroup>
+<tbody><tr>
+<td class="datatype_keyword">struct</td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-plugins-glsinkbin.html#GstGLSinkBin-struct" title="struct GstGLSinkBin">GstGLSinkBin</a></td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-glsinkbin.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="screen"> <a href="/usr/share/gtk-doc/html/gobjectgobject-The-Base-Object-Type.html#GObject-struct">GObject</a>
+ <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gobjectgobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
+ <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstObject.html#GstObject-struct">GstObject</a>
+ <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#GstElement-struct">GstElement</a>
+ <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstBin.html#GstBin-struct">GstBin</a>
+ <span class="lineart">╰──</span> GstGLSinkBin
+ <span class="lineart">╰──</span> GstGLImageSinkBin
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-glsinkbin.implemented-interfaces"></a><h2>Implemented Interfaces</h2>
+<p>
+GstGLSinkBin implements
+ <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstChildProxy.html#GstChildProxy-struct">GstChildProxy</a>, <a href="/usr/share/gtk-doc/html/gst-plugins-base-libs-1.0gst-plugins-base-libs-gstvideooverlay.html#GstVideoOverlay-struct">GstVideoOverlay</a>, <a href="/usr/share/gtk-doc/html/gst-plugins-base-libs-1.0gst-plugins-base-libs-gstnavigation.html#GstNavigation-struct">GstNavigation</a> and <a href="/usr/share/gtk-doc/html/gst-plugins-base-libs-1.0gst-plugins-base-libs-gstcolorbalance.html#GstColorBalance-struct">GstColorBalance</a>.</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-glsinkbin.description"></a><h2>Description</h2>
+<div class="refsynopsisdiv">
+<h2>Synopsis</h2>
+<div class="refsect2">
+<a name="id-1.2.78.9.2.1"></a><h3>Element Information</h3>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term">plugin</span></p></td>
+<td>
+ <a class="link" href="gst-plugins-bad-plugins-plugin-opengl.html#plugin-opengl">opengl</a>
+ </td>
+</tr>
+<tr>
+<td><p><span class="term">author</span></p></td>
+<td>Matthew Waters <matthew@centricular.com></td>
+</tr>
+<tr>
+<td><p><span class="term">class</span></p></td>
+<td>Sink/Video</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="id-1.2.78.9.2.2"></a><h3>Element Pads</h3>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>video/x-raw(memory:GLMemory, meta:GstVideoOverlayComposition), format=(string){ RGBA, BGRA, RGBx, BGRx, ARGB, ABGR, xRGB, xBGR, RGB, BGR, RGB16, BGR16, AYUV, I420, YV12, NV12, NV21, YUY2, UYVY, Y41B, Y42B, Y444, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw(memory:SystemMemory, meta:GstVideoOverlayComposition), format=(string){ RGBA, BGRA, RGBx, BGRx, ARGB, ABGR, xRGB, xBGR, RGB, BGR, RGB16, BGR16, AYUV, I420, YV12, NV12, NV21, YUY2, UYVY, Y41B, Y42B, Y444, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw(meta:GstVideoGLTextureUploadMeta, meta:GstVideoOverlayComposition), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw(memory:GLMemory), format=(string){ RGBA, BGRA, RGBx, BGRx, ARGB, ABGR, xRGB, xBGR, RGB, BGR, RGB16, BGR16, AYUV, I420, YV12, NV12, NV21, YUY2, UYVY, Y41B, Y42B, Y444, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw, format=(string){ RGBA, BGRA, RGBx, BGRx, ARGB, ABGR, xRGB, xBGR, RGB, BGR, RGB16, BGR16, AYUV, I420, YV12, NV12, NV21, YUY2, UYVY, Y41B, Y42B, Y444, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw(meta:GstVideoGLTextureUploadMeta), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-glsinkbin.functions_details"></a><h2>Functions</h2>
+<p></p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-glsinkbin.other_details"></a><h2>Types and Values</h2>
+<div class="refsect2">
+<a name="GstGLSinkBin-struct"></a><h3>struct GstGLSinkBin</h3>
+<pre class="programlisting">struct GstGLSinkBin;</pre>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-glsinkbin.property-details"></a><h2>Property Details</h2>
+<div class="refsect2">
+<a name="GstGLSinkBin--force-aspect-ratio"></a><h3>The <code class="literal">“force-aspect-ratio”</code> property</h3>
+<pre class="programlisting"> “force-aspect-ratio” <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></pre>
+<p>When enabled, scaling will respect original aspect ratio.</p>
+<p>Flags: Read / Write</p>
+<p>Default value: TRUE</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstGLSinkBin--sink"></a><h3>The <code class="literal">“sink”</code> property</h3>
+<pre class="programlisting"> “sink” <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#GstElement-struct"><span class="type">GstElement</span></a> *</pre>
+<p>The GL sink chain to use.</p>
+<p>Flags: Read / Write</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstGLSinkBin--async"></a><h3>The <code class="literal">“async”</code> property</h3>
+<pre class="programlisting"> “async” <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></pre>
+<p>Go asynchronously to PAUSED.</p>
+<p>Flags: Read / Write</p>
+<p>Default value: TRUE</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstGLSinkBin--blocksize"></a><h3>The <code class="literal">“blocksize”</code> property</h3>
+<pre class="programlisting"> “blocksize” <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="type">guint</span></a></pre>
+<p>Size in bytes to pull per buffer (0 = default).</p>
+<p>Flags: Read / Write</p>
+<p>Default value: 4096</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstGLSinkBin--enable-last-sample"></a><h3>The <code class="literal">“enable-last-sample”</code> property</h3>
+<pre class="programlisting"> “enable-last-sample” <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></pre>
+<p>Enable the last-sample property.</p>
+<p>Flags: Read / Write</p>
+<p>Default value: TRUE</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstGLSinkBin--last-sample"></a><h3>The <code class="literal">“last-sample”</code> property</h3>
+<pre class="programlisting"> “last-sample” <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstSample.html#GstSample-struct"><span class="type">GstSample</span></a> *</pre>
+<p>The last sample received in the sink.</p>
+<p>Flags: Read</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstGLSinkBin--max-bitrate"></a><h3>The <code class="literal">“max-bitrate”</code> property</h3>
+<pre class="programlisting"> “max-bitrate” <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint64"><span class="type">guint64</span></a></pre>
+<p>The maximum bits per second to render (0 = disabled).</p>
+<p>Flags: Read / Write</p>
+<p>Default value: 0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstGLSinkBin--max-lateness"></a><h3>The <code class="literal">“max-lateness”</code> property</h3>
+<pre class="programlisting"> “max-lateness” <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint64"><span class="type">gint64</span></a></pre>
+<p>Maximum number of nanoseconds that a buffer can be late before it is dropped (-1 unlimited).</p>
+<p>Flags: Read / Write</p>
+<p>Allowed values: >= G_MAXULONG</p>
+<p>Default value: -1</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstGLSinkBin--qos"></a><h3>The <code class="literal">“qos”</code> property</h3>
+<pre class="programlisting"> “qos” <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></pre>
+<p>Generate Quality-of-Service events upstream.</p>
+<p>Flags: Read / Write</p>
+<p>Default value: FALSE</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstGLSinkBin--render-delay"></a><h3>The <code class="literal">“render-delay”</code> property</h3>
+<pre class="programlisting"> “render-delay” <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint64"><span class="type">guint64</span></a></pre>
+<p>Additional render delay of the sink in nanoseconds.</p>
+<p>Flags: Read / Write</p>
+<p>Default value: 0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstGLSinkBin--sync"></a><h3>The <code class="literal">“sync”</code> property</h3>
+<pre class="programlisting"> “sync” <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></pre>
+<p>Sync on the clock.</p>
+<p>Flags: Read / Write</p>
+<p>Default value: TRUE</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstGLSinkBin--throttle-time"></a><h3>The <code class="literal">“throttle-time”</code> property</h3>
+<pre class="programlisting"> “throttle-time” <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint64"><span class="type">guint64</span></a></pre>
+<p>The time to keep between rendered buffers (0 = disabled).</p>
+<p>Flags: Read / Write</p>
+<p>Default value: 0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstGLSinkBin--ts-offset"></a><h3>The <code class="literal">“ts-offset”</code> property</h3>
+<pre class="programlisting"> “ts-offset” <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint64"><span class="type">gint64</span></a></pre>
+<p>Timestamp offset in nanoseconds.</p>
+<p>Flags: Read / Write</p>
+<p>Default value: 0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstGLSinkBin--brightness"></a><h3>The <code class="literal">“brightness”</code> property</h3>
+<pre class="programlisting"> “brightness” <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a></pre>
+<p>brightness.</p>
+<p>Flags: Read / Write</p>
+<p>Allowed values: [-1,1]</p>
+<p>Default value: 0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstGLSinkBin--contrast"></a><h3>The <code class="literal">“contrast”</code> property</h3>
+<pre class="programlisting"> “contrast” <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a></pre>
+<p>contrast.</p>
+<p>Flags: Read / Write</p>
+<p>Allowed values: [0,2]</p>
+<p>Default value: 1</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstGLSinkBin--hue"></a><h3>The <code class="literal">“hue”</code> property</h3>
+<pre class="programlisting"> “hue” <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a></pre>
+<p>hue.</p>
+<p>Flags: Read / Write</p>
+<p>Allowed values: [-1,1]</p>
+<p>Default value: 0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstGLSinkBin--saturation"></a><h3>The <code class="literal">“saturation”</code> property</h3>
+<pre class="programlisting"> “saturation” <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a></pre>
+<p>saturation.</p>
+<p>Flags: Read / Write</p>
+<p>Allowed values: [0,2]</p>
+<p>Default value: 1</p>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-glsinkbin.signal-details"></a><h2>Signal Details</h2>
+<div class="refsect2">
+<a name="GstGLSinkBin-create-element"></a><h3>The <code class="literal">“create-element”</code> signal</h3>
+<pre class="programlisting"><a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#GstElement-struct"><span class="returnvalue">GstElement</span></a>*
+user_function (<a class="link" href="gst-plugins-bad-plugins-glsinkbin.html#GstGLSinkBin"><span class="type">GstGLSinkBin</span></a> *object,
+ <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data)</pre>
+<p>Will be emitted when we need the processing element/s that this bin will use</p>
+<div class="refsect3">
+<a name="GstGLSinkBin-create-element.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>object</p></td>
+<td class="parameter_description"><p>the <a class="link" href="gst-plugins-bad-plugins-glsinkbin.html#GstGLSinkBin"><span class="type">GstGLSinkBin</span></a></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 class="refsect3">
+<a name="GstGLSinkBin-create-element.returns"></a><h4>Returns</h4>
+<p> a new <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#GstElement-struct"><span class="type">GstElement</span></a></p>
+</div>
+<p>Flags: <a href="/usr/share/gtk-doc/html/gobjectgobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></p>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>Generated by GTK-Doc V1.25</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-glsrcbin.html b/docs/plugins/html/gst-plugins-bad-plugins-glsrcbin.html
new file mode 100644
index 0000000..195818d
--- /dev/null
+++ b/docs/plugins/html/gst-plugins-bad-plugins-glsrcbin.html
@@ -0,0 +1,219 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>glsrcbin: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
+<link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
+<link rel="up" href="ch01.html" title="gst-plugins-bad Elements">
+<link rel="prev" href="gst-plugins-bad-plugins-glsinkbin.html" title="glsinkbin">
+<link rel="next" href="gst-plugins-bad-plugins-glstereomix.html" title="glstereomix">
+<meta name="generator" content="GTK-Doc V1.25 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
+<td width="100%" align="left" class="shortcuts">
+<a href="#" class="shortcut">Top</a><span id="nav_description"> <span class="dim">|</span>
+ <a href="#gst-plugins-bad-plugins-glsrcbin.description" class="shortcut">Description</a></span><span id="nav_hierarchy"> <span class="dim">|</span>
+ <a href="#gst-plugins-bad-plugins-glsrcbin.object-hierarchy" class="shortcut">Object Hierarchy</a></span><span id="nav_interfaces"> <span class="dim">|</span>
+ <a href="#gst-plugins-bad-plugins-glsrcbin.implemented-interfaces" class="shortcut">Implemented Interfaces</a></span><span id="nav_properties"> <span class="dim">|</span>
+ <a href="#gst-plugins-bad-plugins-glsrcbin.properties" class="shortcut">Properties</a></span><span id="nav_signals"> <span class="dim">|</span>
+ <a href="#gst-plugins-bad-plugins-glsrcbin.signals" class="shortcut">Signals</a></span>
+</td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
+<td><a accesskey="p" href="gst-plugins-bad-plugins-glsinkbin.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="gst-plugins-bad-plugins-glstereomix.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="gst-plugins-bad-plugins-glsrcbin"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-bad-plugins-glsrcbin.top_of_page"></a>glsrcbin</span></h2>
+<p>glsrcbin</p>
+</td>
+<td class="gallery_image" valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-glsrcbin.properties"></a><h2>Properties</h2>
+<div class="informaltable"><table class="informaltable" border="0">
+<colgroup>
+<col width="150px" class="properties_type">
+<col width="300px" class="properties_name">
+<col width="200px" class="properties_flags">
+</colgroup>
+<tbody><tr>
+<td class="property_type">
+<a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#GstElement-struct"><span class="type">GstElement</span></a> *</td>
+<td class="property_name"><a class="link" href="gst-plugins-bad-plugins-glsrcbin.html#GstGLSrcBin--src" title="The “src” property">src</a></td>
+<td class="property_flags">Read / Write</td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-glsrcbin.signals"></a><h2>Signals</h2>
+<div class="informaltable"><table class="informaltable" border="0">
+<colgroup>
+<col width="150px" class="signals_return">
+<col width="300px" class="signals_name">
+<col width="200px" class="signals_flags">
+</colgroup>
+<tbody><tr>
+<td class="signal_type">
+<a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#GstElement-struct"><span class="returnvalue">GstElement</span></a>*</td>
+<td class="signal_name"><a class="link" href="gst-plugins-bad-plugins-glsrcbin.html#GstGLSrcBin-create-element" title="The “create-element” signal">create-element</a></td>
+<td class="signal_flags"><a href="/usr/share/gtk-doc/html/gobjectgobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></td>
+</tr></tbody>
+</table></div>
+</div>
+<a name="GstGLSrcBin"></a><div class="refsect1">
+<a name="gst-plugins-bad-plugins-glsrcbin.other"></a><h2>Types and Values</h2>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="name">
+<col class="description">
+</colgroup>
+<tbody><tr>
+<td class="datatype_keyword">struct</td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-plugins-glsrcbin.html#GstGLSrcBin-struct" title="struct GstGLSrcBin">GstGLSrcBin</a></td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-glsrcbin.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="screen"> <a href="/usr/share/gtk-doc/html/gobjectgobject-The-Base-Object-Type.html#GObject-struct">GObject</a>
+ <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gobjectgobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
+ <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstObject.html#GstObject-struct">GstObject</a>
+ <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#GstElement-struct">GstElement</a>
+ <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstBin.html#GstBin-struct">GstBin</a>
+ <span class="lineart">╰──</span> GstGLSrcBin
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-glsrcbin.implemented-interfaces"></a><h2>Implemented Interfaces</h2>
+<p>
+GstGLSrcBin implements
+ <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstChildProxy.html#GstChildProxy-struct">GstChildProxy</a>.</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-glsrcbin.description"></a><h2>Description</h2>
+<div class="refsynopsisdiv">
+<h2>Synopsis</h2>
+<div class="refsect2">
+<a name="id-1.2.79.9.2.1"></a><h3>Element Information</h3>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term">plugin</span></p></td>
+<td>
+ <a class="link" href="gst-plugins-bad-plugins-plugin-opengl.html#plugin-opengl">opengl</a>
+ </td>
+</tr>
+<tr>
+<td><p><span class="term">author</span></p></td>
+<td>Matthew Waters <matthew@centricular.com></td>
+</tr>
+<tr>
+<td><p><span class="term">class</span></p></td>
+<td>Src/Video</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="id-1.2.79.9.2.2"></a><h3>Element Pads</h3>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>src</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>source</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>video/x-raw(ANY)</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-glsrcbin.functions_details"></a><h2>Functions</h2>
+<p></p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-glsrcbin.other_details"></a><h2>Types and Values</h2>
+<div class="refsect2">
+<a name="GstGLSrcBin-struct"></a><h3>struct GstGLSrcBin</h3>
+<pre class="programlisting">struct GstGLSrcBin;</pre>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-glsrcbin.property-details"></a><h2>Property Details</h2>
+<div class="refsect2">
+<a name="GstGLSrcBin--src"></a><h3>The <code class="literal">“src”</code> property</h3>
+<pre class="programlisting"> “src” <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#GstElement-struct"><span class="type">GstElement</span></a> *</pre>
+<p>The GL src chain to use.</p>
+<p>Flags: Read / Write</p>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-glsrcbin.signal-details"></a><h2>Signal Details</h2>
+<div class="refsect2">
+<a name="GstGLSrcBin-create-element"></a><h3>The <code class="literal">“create-element”</code> signal</h3>
+<pre class="programlisting"><a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#GstElement-struct"><span class="returnvalue">GstElement</span></a>*
+user_function (<a class="link" href="gst-plugins-bad-plugins-glsrcbin.html#GstGLSrcBin"><span class="type">GstGLSrcBin</span></a> *object,
+ <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data)</pre>
+<p>Will be emitted when we need the processing element/s that this bin will use</p>
+<div class="refsect3">
+<a name="GstGLSrcBin-create-element.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" 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>object</p></td>
+<td class="parameter_description"><p>the <a class="link" href="gst-plugins-bad-plugins-glsrcbin.html#GstGLSrcBin"><span class="type">GstGLSrcBin</span></a></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 class="refsect3">
+<a name="GstGLSrcBin-create-element.returns"></a><h4>Returns</h4>
+<p> a new <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#GstElement-struct"><span class="type">GstElement</span></a></p>
+</div>
+<p>Flags: <a href="/usr/share/gtk-doc/html/gobjectgobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></p>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>Generated by GTK-Doc V1.25</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-glstereomix.html b/docs/plugins/html/gst-plugins-bad-plugins-glstereomix.html
new file mode 100644
index 0000000..f6e4334
--- /dev/null
+++ b/docs/plugins/html/gst-plugins-bad-plugins-glstereomix.html
@@ -0,0 +1,265 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>glstereomix: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
+<link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
+<link rel="up" href="ch01.html" title="gst-plugins-bad Elements">
+<link rel="prev" href="gst-plugins-bad-plugins-glsrcbin.html" title="glsrcbin">
+<link rel="next" href="gst-plugins-bad-plugins-glstereosplit.html" title="glstereosplit">
+<meta name="generator" content="GTK-Doc V1.25 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
+<td width="100%" align="left" class="shortcuts">
+<a href="#" class="shortcut">Top</a><span id="nav_description"> <span class="dim">|</span>
+ <a href="#gst-plugins-bad-plugins-glstereomix.description" class="shortcut">Description</a></span><span id="nav_hierarchy"> <span class="dim">|</span>
+ <a href="#gst-plugins-bad-plugins-glstereomix.object-hierarchy" class="shortcut">Object Hierarchy</a></span><span id="nav_interfaces"> <span class="dim">|</span>
+ <a href="#gst-plugins-bad-plugins-glstereomix.implemented-interfaces" class="shortcut">Implemented Interfaces</a></span><span id="nav_properties"> <span class="dim">|</span>
+ <a href="#gst-plugins-bad-plugins-glstereomix.properties" class="shortcut">Properties</a></span>
+</td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
+<td><a accesskey="p" href="gst-plugins-bad-plugins-glsrcbin.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="gst-plugins-bad-plugins-glstereosplit.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="gst-plugins-bad-plugins-glstereomix"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-bad-plugins-glstereomix.top_of_page"></a>glstereomix</span></h2>
+<p>glstereomix</p>
+</td>
+<td class="gallery_image" valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-glstereomix.properties"></a><h2>Properties</h2>
+<div class="informaltable"><table class="informaltable" border="0">
+<colgroup>
+<col width="150px" class="properties_type">
+<col width="300px" class="properties_name">
+<col width="200px" class="properties_flags">
+</colgroup>
+<tbody><tr>
+<td class="property_type"><span class="type">GstGLStereoDownmix</span></td>
+<td class="property_name"><a class="link" href="gst-plugins-bad-plugins-glstereomix.html#GstGLStereoMix--downmix-mode" title="The “downmix-mode” property">downmix-mode</a></td>
+<td class="property_flags">Read / Write</td>
+</tr></tbody>
+</table></div>
+</div>
+<a name="GstGLStereoMix"></a><div class="refsect1">
+<a name="gst-plugins-bad-plugins-glstereomix.other"></a><h2>Types and Values</h2>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="name">
+<col class="description">
+</colgroup>
+<tbody><tr>
+<td class="datatype_keyword">struct</td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-plugins-glstereomix.html#GstGLStereoMix-struct" title="struct GstGLStereoMix">GstGLStereoMix</a></td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-glstereomix.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="screen"> <a href="/usr/share/gtk-doc/html/gobjectgobject-The-Base-Object-Type.html#GObject-struct">GObject</a>
+ <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gobjectgobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
+ <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstObject.html#GstObject-struct">GstObject</a>
+ <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#GstElement-struct">GstElement</a>
+ <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gst-plugins-bad-libs-1.0gst-plugins-bad-libs-GstAggregator.html#GstAggregator">GstAggregator</a>
+ <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gst-plugins-bad-libs-1.0gst-plugins-bad-libs-GstVideoAggregator.html#GstVideoAggregator">GstVideoAggregator</a>
+ <span class="lineart">╰──</span> GstGLBaseMixer
+ <span class="lineart">╰──</span> GstGLMixer
+ <span class="lineart">╰──</span> GstGLStereoMix
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-glstereomix.implemented-interfaces"></a><h2>Implemented Interfaces</h2>
+<p>
+GstGLStereoMix implements
+ <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstChildProxy.html#GstChildProxy-struct">GstChildProxy</a>.</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-glstereomix.description"></a><h2>Description</h2>
+<p>Combine 2 input streams to produce a stereoscopic output
+stream. Input views are taken from the left pad and right pad
+respectively, and mixed according to their timelines.</p>
+<p>If either input stream is stereoscopic, the approproriate view
+(left or right) is taken from each stream and placed into the output.</p>
+<p>The multiview representation on the output is chosen according to
+the downstream caps.</p>
+<div class="refsect2">
+<a name="id-1.2.80.8.5"></a><h3>Examples</h3>
+<div class="informalexample">
+ <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
+ <tbody>
+ <tr>
+ <td class="listing_lines" align="right"><pre>1
+2
+3
+4
+5
+6</pre></td>
+ <td class="listing_code"><pre class="programlisting">gst<span class="gtkdoc opt">-</span>launch<span class="gtkdoc opt">-</span><span class="number">1.0</span> <span class="gtkdoc opt">-</span>v videotestsrc pattern<span class="gtkdoc opt">=</span>ball name<span class="gtkdoc opt">=</span>left \
+ videotestsrc name<span class="gtkdoc opt">=</span>right glstereomix name<span class="gtkdoc opt">=</span>mix \
+ left<span class="gtkdoc opt">. !</span> vid<span class="gtkdoc opt">/</span>x<span class="gtkdoc opt">-</span>raw<span class="gtkdoc opt">,</span>width<span class="gtkdoc opt">=</span><span class="number">640</span><span class="gtkdoc opt">,</span>height<span class="gtkdoc opt">=</span><span class="number">480</span><span class="gtkdoc opt">!</span> glupload <span class="gtkdoc opt">!</span> mix<span class="gtkdoc opt">.</span> \
+ right<span class="gtkdoc opt">. !</span> video<span class="gtkdoc opt">/</span>x<span class="gtkdoc opt">-</span>raw<span class="gtkdoc opt">,</span>width<span class="gtkdoc opt">=</span><span class="number">640</span><span class="gtkdoc opt">,</span>height<span class="gtkdoc opt">=</span><span class="number">480</span><span class="gtkdoc opt">!</span> glupload <span class="gtkdoc opt">!</span> mix<span class="gtkdoc opt">.</span> \
+ mix<span class="gtkdoc opt">. !</span> video<span class="gtkdoc opt">/</span>x<span class="gtkdoc opt">-</span>raw<span class="string">'(memory:GLMemory)'</span><span class="gtkdoc opt">,</span>multiview<span class="gtkdoc opt">-</span>mode<span class="gtkdoc opt">=</span>side<span class="gtkdoc opt">-</span>by<span class="gtkdoc opt">-</span>side <span class="gtkdoc opt">!</span> \
+ queue <span class="gtkdoc opt">!</span> glimagesink output<span class="gtkdoc opt">-</span>multiview<span class="gtkdoc opt">-</span>mode<span class="gtkdoc opt">=</span>side<span class="gtkdoc opt">-</span>by<span class="gtkdoc opt">-</span>side</pre></td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+ Mix 2 different videotestsrc patterns into a side-by-side stereo image and display it.
+<div class="informalexample">
+ <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
+ <tbody>
+ <tr>
+ <td class="listing_lines" align="right"><pre>1
+2
+3
+4
+5
+6
+7
+8</pre></td>
+ <td class="listing_code"><pre class="programlisting">gst<span class="gtkdoc opt">-</span>launch<span class="gtkdoc opt">-</span><span class="number">1.0</span> <span class="gtkdoc opt">-</span>ev v4l2src name<span class="gtkdoc opt">=</span>left \
+ videotestsrc name<span class="gtkdoc opt">=</span>right \
+ glstereomix name<span class="gtkdoc opt">=</span>mix \
+ left<span class="gtkdoc opt">. !</span> video<span class="gtkdoc opt">/</span>x<span class="gtkdoc opt">-</span>raw<span class="gtkdoc opt">,</span>width<span class="gtkdoc opt">=</span><span class="number">640</span><span class="gtkdoc opt">,</span>height<span class="gtkdoc opt">=</span><span class="number">480</span> <span class="gtkdoc opt">!</span> glupload <span class="gtkdoc opt">!</span> glcolorconvert <span class="gtkdoc opt">!</span> mix<span class="gtkdoc opt">.</span> \
+ right<span class="gtkdoc opt">. !</span> video<span class="gtkdoc opt">/</span>x<span class="gtkdoc opt">-</span>raw<span class="gtkdoc opt">,</span>width<span class="gtkdoc opt">=</span><span class="number">640</span><span class="gtkdoc opt">,</span>height<span class="gtkdoc opt">=</span><span class="number">480</span> <span class="gtkdoc opt">!</span> glupload <span class="gtkdoc opt">!</span> mix<span class="gtkdoc opt">.</span> \
+ mix<span class="gtkdoc opt">. !</span> video<span class="gtkdoc opt">/</span>x<span class="gtkdoc opt">-</span>raw<span class="string">'(memory:GLMemory)'</span><span class="gtkdoc opt">,</span>multiview<span class="gtkdoc opt">-</span>mode<span class="gtkdoc opt">=</span>top<span class="gtkdoc opt">-</span>bottom <span class="gtkdoc opt">!</span> \
+ glcolorconvert <span class="gtkdoc opt">!</span> gldownload <span class="gtkdoc opt">!</span> queue <span class="gtkdoc opt">!</span> x264enc <span class="gtkdoc opt">!</span> h264parse <span class="gtkdoc opt">!</span> \
+ mp4mux <span class="gtkdoc opt">!</span> progressreport <span class="gtkdoc opt">!</span> filesink location<span class="gtkdoc opt">=</span>output<span class="gtkdoc opt">.</span>mp4</pre></td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+ Mix the input from a camera to the left view, and videotestsrc to the right view,
+ and encode as a top-bottom frame packed H.264 video.
+</div>
+<div class="refsynopsisdiv">
+<h2>Synopsis</h2>
+<div class="refsect2">
+<a name="id-1.2.80.8.6.1"></a><h3>Element Information</h3>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term">plugin</span></p></td>
+<td>
+ <a class="link" href="gst-plugins-bad-plugins-plugin-opengl.html#plugin-opengl">opengl</a>
+ </td>
+</tr>
+<tr>
+<td><p><span class="term">author</span></p></td>
+<td>Jan Schmidt <jan@centricular.com></td>
+</tr>
+<tr>
+<td><p><span class="term">class</span></p></td>
+<td>Filter/Effect/Video</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="id-1.2.80.8.6.2"></a><h3>Element Pads</h3>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>sink_%u</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>request</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw(meta:GstVideoGLTextureUploadMeta), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw, format=(string){ RGBA, RGB, RGBx, BGR, BGRx, BGRA, xRGB, xBGR, ARGB, ABGR, Y444, I420, YV12, Y42B, Y41B, NV12, NV21, YUY2, UYVY, AYUV, GRAY8, GRAY16_LE, GRAY16_BE, RGB16, BGR16 }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+</tbody>
+</table></div>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>src</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>source</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw(meta:GstVideoGLTextureUploadMeta), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw, format=(string){ RGBA, RGB, RGBx, BGR, BGRx, BGRA, xRGB, xBGR, ARGB, ABGR, Y444, I420, YV12, Y42B, Y41B, NV12, NV21, YUY2, UYVY, AYUV, GRAY8, GRAY16_LE, GRAY16_BE, RGB16, BGR16 }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-glstereomix.functions_details"></a><h2>Functions</h2>
+<p></p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-glstereomix.other_details"></a><h2>Types and Values</h2>
+<div class="refsect2">
+<a name="GstGLStereoMix-struct"></a><h3>struct GstGLStereoMix</h3>
+<pre class="programlisting">struct GstGLStereoMix;</pre>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-glstereomix.property-details"></a><h2>Property Details</h2>
+<div class="refsect2">
+<a name="GstGLStereoMix--downmix-mode"></a><h3>The <code class="literal">“downmix-mode”</code> property</h3>
+<pre class="programlisting"> “downmix-mode” <span class="type">GstGLStereoDownmix</span></pre>
+<p>Output anaglyph type to generate when downmixing to mono.</p>
+<p>Flags: Read / Write</p>
+<p>Default value: Dubois optimised Green-Magenta anaglyph</p>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>Generated by GTK-Doc V1.25</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-glstereosplit.html b/docs/plugins/html/gst-plugins-bad-plugins-glstereosplit.html
new file mode 100644
index 0000000..d1df6b9
--- /dev/null
+++ b/docs/plugins/html/gst-plugins-bad-plugins-glstereosplit.html
@@ -0,0 +1,196 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>glstereosplit: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
+<link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
+<link rel="up" href="ch01.html" title="gst-plugins-bad Elements">
+<link rel="prev" href="gst-plugins-bad-plugins-glstereomix.html" title="glstereomix">
+<link rel="next" href="gst-plugins-bad-plugins-gltestsrc.html" title="gltestsrc">
+<meta name="generator" content="GTK-Doc V1.25 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
+<td width="100%" align="left" class="shortcuts">
+<a href="#" class="shortcut">Top</a><span id="nav_description"> <span class="dim">|</span>
+ <a href="#gst-plugins-bad-plugins-glstereosplit.description" class="shortcut">Description</a></span><span id="nav_hierarchy"> <span class="dim">|</span>
+ <a href="#gst-plugins-bad-plugins-glstereosplit.object-hierarchy" class="shortcut">Object Hierarchy</a></span>
+</td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
+<td><a accesskey="p" href="gst-plugins-bad-plugins-glstereomix.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="gst-plugins-bad-plugins-gltestsrc.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="gst-plugins-bad-plugins-glstereosplit"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-bad-plugins-glstereosplit.top_of_page"></a>glstereosplit</span></h2>
+<p>glstereosplit</p>
+</td>
+<td class="gallery_image" valign="top" align="right"></td>
+</tr></table></div>
+<a name="GstGLStereoSplit"></a><div class="refsect1">
+<a name="gst-plugins-bad-plugins-glstereosplit.other"></a><h2>Types and Values</h2>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="name">
+<col class="description">
+</colgroup>
+<tbody><tr>
+<td class="datatype_keyword">struct</td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-plugins-glstereosplit.html#GstGLStereoSplit-struct" title="struct GstGLStereoSplit">GstGLStereoSplit</a></td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-glstereosplit.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="screen"> <a href="/usr/share/gtk-doc/html/gobjectgobject-The-Base-Object-Type.html#GObject-struct">GObject</a>
+ <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gobjectgobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
+ <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstObject.html#GstObject-struct">GstObject</a>
+ <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#GstElement-struct">GstElement</a>
+ <span class="lineart">╰──</span> GstGLStereoSplit
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-glstereosplit.description"></a><h2>Description</h2>
+<p>Receive a stereoscopic video stream and split into left/right</p>
+<div class="refsect2">
+<a name="id-1.2.81.6.3"></a><h3>Examples</h3>
+<div class="informalexample">
+ <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
+ <tbody>
+ <tr>
+ <td class="listing_lines" align="right"><pre>1</pre></td>
+ <td class="listing_code"><pre class="programlisting">gst<span class="gtkdoc opt">-</span>launch<span class="gtkdoc opt">-</span><span class="number">1.0</span> videotestsrc <span class="gtkdoc opt">!</span> glstereosplit name<span class="gtkdoc opt">=</span>s <span class="gtkdoc opt">!</span> queue <span class="gtkdoc opt">!</span> glimagesink s<span class="gtkdoc opt">. !</span> queue <span class="gtkdoc opt">!</span> glimagesink</pre></td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+
+FBO (Frame Buffer Object) and GLSL (OpenGL Shading Language) are required.
+</div>
+<div class="refsynopsisdiv">
+<h2>Synopsis</h2>
+<div class="refsect2">
+<a name="id-1.2.81.6.4.1"></a><h3>Element Information</h3>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term">plugin</span></p></td>
+<td>
+ <a class="link" href="gst-plugins-bad-plugins-plugin-opengl.html#plugin-opengl">opengl</a>
+ </td>
+</tr>
+<tr>
+<td><p><span class="term">author</span></p></td>
+<td>Jan Schmidt <jan@centricular.com>
+Matthew Waters <matthew@centricular.com></td>
+</tr>
+<tr>
+<td><p><span class="term">class</span></p></td>
+<td>Codec/Converter</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="id-1.2.81.6.4.2"></a><h3>Element Pads</h3>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+</tbody>
+</table></div>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>left</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>source</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+</tbody>
+</table></div>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>right</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>source</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-glstereosplit.functions_details"></a><h2>Functions</h2>
+<p></p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-glstereosplit.other_details"></a><h2>Types and Values</h2>
+<div class="refsect2">
+<a name="GstGLStereoSplit-struct"></a><h3>struct GstGLStereoSplit</h3>
+<pre class="programlisting">struct GstGLStereoSplit;</pre>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>Generated by GTK-Doc V1.25</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-gltestsrc.html b/docs/plugins/html/gst-plugins-bad-plugins-gltestsrc.html
new file mode 100644
index 0000000..06f747e
--- /dev/null
+++ b/docs/plugins/html/gst-plugins-bad-plugins-gltestsrc.html
@@ -0,0 +1,323 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>gltestsrc: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
+<link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
+<link rel="up" href="ch01.html" title="gst-plugins-bad Elements">
+<link rel="prev" href="gst-plugins-bad-plugins-glstereosplit.html" title="glstereosplit">
+<link rel="next" href="gst-plugins-bad-plugins-gltransformation.html" title="gltransformation">
+<meta name="generator" content="GTK-Doc V1.25 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
+<td width="100%" align="left" class="shortcuts">
+<a href="#" class="shortcut">Top</a><span id="nav_description"> <span class="dim">|</span>
+ <a href="#gst-plugins-bad-plugins-gltestsrc.description" class="shortcut">Description</a></span><span id="nav_hierarchy"> <span class="dim">|</span>
+ <a href="#gst-plugins-bad-plugins-gltestsrc.object-hierarchy" class="shortcut">Object Hierarchy</a></span><span id="nav_properties"> <span class="dim">|</span>
+ <a href="#gst-plugins-bad-plugins-gltestsrc.properties" class="shortcut">Properties</a></span>
+</td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
+<td><a accesskey="p" href="gst-plugins-bad-plugins-glstereosplit.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="gst-plugins-bad-plugins-gltransformation.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="gst-plugins-bad-plugins-gltestsrc"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-bad-plugins-gltestsrc.top_of_page"></a>gltestsrc</span></h2>
+<p>gltestsrc</p>
+</td>
+<td class="gallery_image" valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-gltestsrc.properties"></a><h2>Properties</h2>
+<div class="informaltable"><table class="informaltable" border="0">
+<colgroup>
+<col width="150px" class="properties_type">
+<col width="300px" class="properties_name">
+<col width="200px" class="properties_flags">
+</colgroup>
+<tbody>
+<tr>
+<td class="property_type"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></td>
+<td class="property_name"><a class="link" href="gst-plugins-bad-plugins-gltestsrc.html#GstGLTestSrc--is-live" title="The “is-live” property">is-live</a></td>
+<td class="property_flags">Read / Write</td>
+</tr>
+<tr>
+<td class="property_type"><a class="link" href="gst-plugins-bad-plugins-gltestsrc.html#GstGLTestSrcPattern" title="enum GstGLTestSrcPattern"><span class="type">GstGLTestSrcPattern</span></a></td>
+<td class="property_name"><a class="link" href="gst-plugins-bad-plugins-gltestsrc.html#GstGLTestSrc--pattern" title="The “pattern” property">pattern</a></td>
+<td class="property_flags">Read / Write</td>
+</tr>
+<tr>
+<td class="property_type"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint64"><span class="type">gint64</span></a></td>
+<td class="property_name"><a class="link" href="gst-plugins-bad-plugins-gltestsrc.html#GstGLTestSrc--timestamp-offset" title="The “timestamp-offset” property">timestamp-offset</a></td>
+<td class="property_flags">Read / Write</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<a name="GstGLTestSrc"></a><div class="refsect1">
+<a name="gst-plugins-bad-plugins-gltestsrc.other"></a><h2>Types and Values</h2>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="name">
+<col class="description">
+</colgroup>
+<tbody>
+<tr>
+<td class="datatype_keyword"> </td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-plugins-gltestsrc.html#GstGLTestSrc-struct" title="GstGLTestSrc">GstGLTestSrc</a></td>
+</tr>
+<tr>
+<td class="datatype_keyword">enum</td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-plugins-gltestsrc.html#GstGLTestSrcPattern" title="enum GstGLTestSrcPattern">GstGLTestSrcPattern</a></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-gltestsrc.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="screen"> <a href="/usr/share/gtk-doc/html/gobjectgobject-The-Base-Object-Type.html#GObject-struct">GObject</a>
+ <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gobjectgobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
+ <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstObject.html#GstObject-struct">GstObject</a>
+ <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#GstElement-struct">GstElement</a>
+ <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-libs-1.0GstBaseSrc.html#GstBaseSrc-struct">GstBaseSrc</a>
+ <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-libs-1.0GstPushSrc.html#GstPushSrc-struct">GstPushSrc</a>
+ <span class="lineart">╰──</span> GstGLTestSrc
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-gltestsrc.description"></a><h2>Description</h2>
+<div class="refsect2">
+<a name="id-1.2.82.7.2"></a><h3>Example launch line</h3>
+<p>
+The gltestsrc element is used to produce test video texture.
+The video test produced can be controlled with the "pattern"
+property.
+</p>
+<p>
+</p>
+<pre class="programlisting">
+gst-launch-1.0 -v gltestsrc pattern=smpte ! glimagesink
+</pre>
+<p>
+Shows original SMPTE color bars in a window.
+</p>
+</div>
+<div class="refsynopsisdiv">
+<h2>Synopsis</h2>
+<div class="refsect2">
+<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">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term">plugin</span></p></td>
+<td>
+ <a class="link" href="gst-plugins-bad-plugins-plugin-opengl.html#plugin-opengl">opengl</a>
+ </td>
+</tr>
+<tr>
+<td><p><span class="term">author</span></p></td>
+<td>David A. Schleef <ds@schleef.org></td>
+</tr>
+<tr>
+<td><p><span class="term">class</span></p></td>
+<td>Source/Video</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<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">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>src</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>source</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-gltestsrc.functions_details"></a><h2>Functions</h2>
+<p></p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-gltestsrc.other_details"></a><h2>Types and Values</h2>
+<div class="refsect2">
+<a name="GstGLTestSrc-struct"></a><h3>GstGLTestSrc</h3>
+<pre class="programlisting">typedef struct _GstGLTestSrc GstGLTestSrc;</pre>
+<p>Opaque data structure.</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstGLTestSrcPattern"></a><h3>enum GstGLTestSrcPattern</h3>
+<p>The test pattern to produce.</p>
+<div class="refsect3">
+<a name="GstGLTestSrcPattern.members"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="300px" class="enum_members_name">
+<col class="enum_members_description">
+<col width="200px" class="enum_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="enum_member_name"><p><a name="GST-GL-TEST-SRC-SMPTE:CAPS"></a>GST_GL_TEST_SRC_SMPTE</p></td>
+<td class="enum_member_description">
+<p>A standard SMPTE test pattern</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-GL-TEST-SRC-SNOW:CAPS"></a>GST_GL_TEST_SRC_SNOW</p></td>
+<td class="enum_member_description">
+<p>Random noise</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-GL-TEST-SRC-BLACK:CAPS"></a>GST_GL_TEST_SRC_BLACK</p></td>
+<td class="enum_member_description">
+<p>A black image</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-GL-TEST-SRC-WHITE:CAPS"></a>GST_GL_TEST_SRC_WHITE</p></td>
+<td class="enum_member_description">
+<p>A white image</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-GL-TEST-SRC-RED:CAPS"></a>GST_GL_TEST_SRC_RED</p></td>
+<td class="enum_member_description">
+<p>A red image</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-GL-TEST-SRC-GREEN:CAPS"></a>GST_GL_TEST_SRC_GREEN</p></td>
+<td class="enum_member_description">
+<p>A green image</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-GL-TEST-SRC-BLUE:CAPS"></a>GST_GL_TEST_SRC_BLUE</p></td>
+<td class="enum_member_description">
+<p>A blue image</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-GL-TEST-SRC-CHECKERS1:CAPS"></a>GST_GL_TEST_SRC_CHECKERS1</p></td>
+<td class="enum_member_description">
+<p>Checkers pattern (1px)</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-GL-TEST-SRC-CHECKERS2:CAPS"></a>GST_GL_TEST_SRC_CHECKERS2</p></td>
+<td class="enum_member_description">
+<p>Checkers pattern (2px)</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-GL-TEST-SRC-CHECKERS4:CAPS"></a>GST_GL_TEST_SRC_CHECKERS4</p></td>
+<td class="enum_member_description">
+<p>Checkers pattern (4px)</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-GL-TEST-SRC-CHECKERS8:CAPS"></a>GST_GL_TEST_SRC_CHECKERS8</p></td>
+<td class="enum_member_description">
+<p>Checkers pattern (8px)</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-GL-TEST-SRC-CIRCULAR:CAPS"></a>GST_GL_TEST_SRC_CIRCULAR</p></td>
+<td class="enum_member_description">
+<p>Circular pattern</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-GL-TEST-SRC-BLINK:CAPS"></a>GST_GL_TEST_SRC_BLINK</p></td>
+<td class="enum_member_description">
+<p>Alternate between black and white</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-GL-TEST-SRC-MANDELBROT:CAPS"></a>GST_GL_TEST_SRC_MANDELBROT</p></td>
+<td> </td>
+<td> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-gltestsrc.property-details"></a><h2>Property Details</h2>
+<div class="refsect2">
+<a name="GstGLTestSrc--is-live"></a><h3>The <code class="literal">“is-live”</code> property</h3>
+<pre class="programlisting"> “is-live” <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></pre>
+<p>Whether to act as a live source.</p>
+<p>Flags: Read / Write</p>
+<p>Default value: FALSE</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstGLTestSrc--pattern"></a><h3>The <code class="literal">“pattern”</code> property</h3>
+<pre class="programlisting"> “pattern” <a class="link" href="gst-plugins-bad-plugins-gltestsrc.html#GstGLTestSrcPattern" title="enum GstGLTestSrcPattern"><span class="type">GstGLTestSrcPattern</span></a></pre>
+<p>Type of test pattern to generate.</p>
+<p>Flags: Read / Write</p>
+<p>Default value: SMPTE 100% color bars</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstGLTestSrc--timestamp-offset"></a><h3>The <code class="literal">“timestamp-offset”</code> property</h3>
+<pre class="programlisting"> “timestamp-offset” <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint64"><span class="type">gint64</span></a></pre>
+<p>An offset added to timestamps set on buffers (in ns).</p>
+<p>Flags: Read / Write</p>
+<p>Default value: 0</p>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>Generated by GTK-Doc V1.25</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-gltransformation.html b/docs/plugins/html/gst-plugins-bad-plugins-gltransformation.html
new file mode 100644
index 0000000..b8147cf
--- /dev/null
+++ b/docs/plugins/html/gst-plugins-bad-plugins-gltransformation.html
@@ -0,0 +1,161 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>gltransformation: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
+<link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
+<link rel="up" href="ch01.html" title="gst-plugins-bad Elements">
+<link rel="prev" href="gst-plugins-bad-plugins-gltestsrc.html" title="gltestsrc">
+<link rel="next" href="gst-plugins-bad-plugins-glupload.html" title="glupload">
+<meta name="generator" content="GTK-Doc V1.25 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
+<td width="100%" align="left" class="shortcuts">
+<a href="#" class="shortcut">Top</a><span id="nav_description"> <span class="dim">|</span>
+ <a href="#gst-plugins-bad-plugins-gltransformation.description" class="shortcut">Description</a></span>
+</td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
+<td><a accesskey="p" href="gst-plugins-bad-plugins-gltestsrc.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="gst-plugins-bad-plugins-glupload.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="gst-plugins-bad-plugins-gltransformation"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-bad-plugins-gltransformation.top_of_page"></a>gltransformation</span></h2>
+<p>gltransformation</p>
+</td>
+<td class="gallery_image" valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-gltransformation.other"></a><h2>Types and Values</h2>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="name">
+<col class="description">
+</colgroup>
+<tbody><tr>
+<td class="datatype_keyword">struct</td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-plugins-gltransformation.html#GstGLTransformation" title="struct GstGLTransformation">GstGLTransformation</a></td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-gltransformation.description"></a><h2>Description</h2>
+<p>Transforms video on the GPU.</p>
+<div class="refsect2">
+<a name="id-1.2.83.4.3"></a><h3>Examples</h3>
+<div class="informalexample">
+ <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
+ <tbody>
+ <tr>
+ <td class="listing_lines" align="right"><pre>1</pre></td>
+ <td class="listing_code"><pre class="programlisting">gst<span class="gtkdoc opt">-</span>launch<span class="gtkdoc opt">-</span><span class="number">1.0</span> gltestsrc <span class="gtkdoc opt">!</span> gltransformation rotation<span class="gtkdoc opt">-</span>z<span class="gtkdoc opt">=</span><span class="number">45</span> <span class="gtkdoc opt">!</span> glimagesink</pre></td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+ A pipeline to rotate by 45 degrees
+<div class="informalexample">
+ <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
+ <tbody>
+ <tr>
+ <td class="listing_lines" align="right"><pre>1</pre></td>
+ <td class="listing_code"><pre class="programlisting">gst<span class="gtkdoc opt">-</span>launch<span class="gtkdoc opt">-</span><span class="number">1.0</span> gltestsrc <span class="gtkdoc opt">!</span> gltransformation translation<span class="gtkdoc opt">-</span>x<span class="gtkdoc opt">=</span><span class="number">0.5</span> <span class="gtkdoc opt">!</span> glimagesink</pre></td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+ Translate the video by 0.5
+<div class="informalexample">
+ <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
+ <tbody>
+ <tr>
+ <td class="listing_lines" align="right"><pre>1</pre></td>
+ <td class="listing_code"><pre class="programlisting">gst<span class="gtkdoc opt">-</span>launch<span class="gtkdoc opt">-</span><span class="number">1.0</span> gltestsrc <span class="gtkdoc opt">!</span> gltransformation scale<span class="gtkdoc opt">-</span>y<span class="gtkdoc opt">=</span><span class="number">0.5</span> scale<span class="gtkdoc opt">-</span>x<span class="gtkdoc opt">=</span><span class="number">0.5</span> <span class="gtkdoc opt">!</span> glimagesink</pre></td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+ Resize the video by 0.5
+<div class="informalexample">
+ <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
+ <tbody>
+ <tr>
+ <td class="listing_lines" align="right"><pre>1</pre></td>
+ <td class="listing_code"><pre class="programlisting">gst<span class="gtkdoc opt">-</span>launch<span class="gtkdoc opt">-</span><span class="number">1.0</span> gltestsrc <span class="gtkdoc opt">!</span> gltransformation rotation<span class="gtkdoc opt">-</span>x<span class="gtkdoc opt">=-</span><span class="number">45</span> ortho<span class="gtkdoc opt">=</span>True <span class="gtkdoc opt">!</span> glimagesink</pre></td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+ Rotate the video around the X-Axis by -45° with an orthographic projection
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-gltransformation.functions_details"></a><h2>Functions</h2>
+<p></p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-gltransformation.other_details"></a><h2>Types and Values</h2>
+<div class="refsect2">
+<a name="GstGLTransformation"></a><h3>struct GstGLTransformation</h3>
+<pre class="programlisting">struct GstGLTransformation {
+ GstGLFilter filter;
+
+ GstGLShader *shader;
+ GLuint vao;
+ GLuint vbo_indices;
+ GLuint vertex_buffer;
+ GLint attr_position;
+ GLint attr_texture;
+
+ GstGLMemory *in_tex;
+ GstGLMemory *out_tex;
+
+ gfloat xrotation;
+ gfloat yrotation;
+ gfloat zrotation;
+
+ gfloat xscale;
+ gfloat yscale;
+
+ gfloat xtranslation;
+ gfloat ytranslation;
+ gfloat ztranslation;
+
+ gfloat xpivot;
+ gfloat ypivot;
+ gfloat zpivot;
+
+ /* perspective */
+ gfloat fov;
+ gfloat aspect;
+ gfloat znear;
+ gfloat zfar;
+ gboolean ortho;
+
+ graphene_matrix_t model_matrix;
+ graphene_matrix_t view_matrix;
+ graphene_matrix_t projection_matrix;
+ graphene_matrix_t inv_model_matrix;
+ graphene_matrix_t inv_view_matrix;
+ graphene_matrix_t inv_projection_matrix;
+ graphene_matrix_t mvp_matrix;
+
+ graphene_vec3_t camera_position;
+
+ gboolean downstream_supports_affine_meta;
+ gboolean caps_change;
+};
+</pre>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>Generated by GTK-Doc V1.25</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-glupload.html b/docs/plugins/html/gst-plugins-bad-plugins-glupload.html
new file mode 100644
index 0000000..757e026
--- /dev/null
+++ b/docs/plugins/html/gst-plugins-bad-plugins-glupload.html
@@ -0,0 +1,178 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>glupload: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
+<link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
+<link rel="up" href="ch01.html" title="gst-plugins-bad Elements">
+<link rel="prev" href="gst-plugins-bad-plugins-gltransformation.html" title="gltransformation">
+<link rel="next" href="gst-plugins-bad-plugins-glvideomixerelement.html" title="glvideomixerelement">
+<meta name="generator" content="GTK-Doc V1.25 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
+<td width="100%" align="left" class="shortcuts">
+<a href="#" class="shortcut">Top</a><span id="nav_description"> <span class="dim">|</span>
+ <a href="#gst-plugins-bad-plugins-glupload.description" class="shortcut">Description</a></span><span id="nav_hierarchy"> <span class="dim">|</span>
+ <a href="#gst-plugins-bad-plugins-glupload.object-hierarchy" class="shortcut">Object Hierarchy</a></span>
+</td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
+<td><a accesskey="p" href="gst-plugins-bad-plugins-gltransformation.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="gst-plugins-bad-plugins-glvideomixerelement.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="gst-plugins-bad-plugins-glupload"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-bad-plugins-glupload.top_of_page"></a>glupload</span></h2>
+<p>glupload</p>
+</td>
+<td class="gallery_image" valign="top" align="right"></td>
+</tr></table></div>
+<a name="GstGLUploadElement"></a><div class="refsect1">
+<a name="gst-plugins-bad-plugins-glupload.other"></a><h2>Types and Values</h2>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="name">
+<col class="description">
+</colgroup>
+<tbody><tr>
+<td class="datatype_keyword">struct</td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-plugins-glupload.html#GstGLUploadElement-struct" title="struct GstGLUploadElement">GstGLUploadElement</a></td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-glupload.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="screen"> <a href="/usr/share/gtk-doc/html/gobjectgobject-The-Base-Object-Type.html#GObject-struct">GObject</a>
+ <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gobjectgobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
+ <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstObject.html#GstObject-struct">GstObject</a>
+ <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#GstElement-struct">GstElement</a>
+ <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-libs-1.0GstBaseTransform.html#GstBaseTransform-struct">GstBaseTransform</a>
+ <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gst-plugins-bad-libs-1.0GstGLBaseFilter.html#GstGLBaseFilter-struct">GstGLBaseFilter</a>
+ <span class="lineart">╰──</span> GstGLUploadElement
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-glupload.description"></a><h2>Description</h2>
+<div class="refsynopsisdiv">
+<h2>Synopsis</h2>
+<div class="refsect2">
+<a name="id-1.2.84.6.2.1"></a><h3>Element Information</h3>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term">plugin</span></p></td>
+<td>
+ <a class="link" href="gst-plugins-bad-plugins-plugin-opengl.html#plugin-opengl">opengl</a>
+ </td>
+</tr>
+<tr>
+<td><p><span class="term">author</span></p></td>
+<td>Matthew Waters <matthew@centricular.com></td>
+</tr>
+<tr>
+<td><p><span class="term">class</span></p></td>
+<td>Filter/Video</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="id-1.2.84.6.2.2"></a><h3>Element Pads</h3>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>video/x-raw(memory:GLMemory, meta:GstVideoOverlayComposition), format=(string){ RGBA, BGRA, RGBx, BGRx, ARGB, ABGR, xRGB, xBGR, RGB, BGR, RGB16, BGR16, AYUV, I420, YV12, NV12, NV21, YUY2, UYVY, Y41B, Y42B, Y444, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw(memory:SystemMemory, meta:GstVideoOverlayComposition), format=(string){ RGBA, BGRA, RGBx, BGRx, ARGB, ABGR, xRGB, xBGR, RGB, BGR, RGB16, BGR16, AYUV, I420, YV12, NV12, NV21, YUY2, UYVY, Y41B, Y42B, Y444, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw(meta:GstVideoGLTextureUploadMeta, meta:GstVideoOverlayComposition), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw(memory:GLMemory), format=(string){ RGBA, BGRA, RGBx, BGRx, ARGB, ABGR, xRGB, xBGR, RGB, BGR, RGB16, BGR16, AYUV, I420, YV12, NV12, NV21, YUY2, UYVY, Y41B, Y42B, Y444, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw, format=(string){ RGBA, BGRA, RGBx, BGRx, ARGB, ABGR, xRGB, xBGR, RGB, BGR, RGB16, BGR16, AYUV, I420, YV12, NV12, NV21, YUY2, UYVY, Y41B, Y42B, Y444, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw(meta:GstVideoGLTextureUploadMeta), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+</tbody>
+</table></div>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>src</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>source</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>video/x-raw(ANY)</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-glupload.functions_details"></a><h2>Functions</h2>
+<p></p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-glupload.other_details"></a><h2>Types and Values</h2>
+<div class="refsect2">
+<a name="GstGLUploadElement-struct"></a><h3>struct GstGLUploadElement</h3>
+<pre class="programlisting">struct GstGLUploadElement;</pre>
+<p>Opaque <a class="link" href="gst-plugins-bad-plugins-glupload.html#GstGLUploadElement"><span class="type">GstGLUploadElement</span></a> object</p>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>Generated by GTK-Doc V1.25</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-glvideomixer.html b/docs/plugins/html/gst-plugins-bad-plugins-glvideomixer.html
new file mode 100644
index 0000000..f40b62b
--- /dev/null
+++ b/docs/plugins/html/gst-plugins-bad-plugins-glvideomixer.html
@@ -0,0 +1,177 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>glvideomixer: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
+<link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
+<link rel="up" href="ch01.html" title="gst-plugins-bad Elements">
+<link rel="prev" href="gst-plugins-bad-plugins-glvideomixerelement.html" title="glvideomixerelement">
+<link rel="next" href="gst-plugins-bad-plugins-glviewconvert.html" title="glviewconvert">
+<meta name="generator" content="GTK-Doc V1.25 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
+<td width="100%" align="left" class="shortcuts">
+<a href="#" class="shortcut">Top</a><span id="nav_description"> <span class="dim">|</span>
+ <a href="#gst-plugins-bad-plugins-glvideomixer.description" class="shortcut">Description</a></span>
+</td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
+<td><a accesskey="p" href="gst-plugins-bad-plugins-glvideomixerelement.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="gst-plugins-bad-plugins-glviewconvert.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="gst-plugins-bad-plugins-glvideomixer"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-bad-plugins-glvideomixer.top_of_page"></a>glvideomixer</span></h2>
+<p>glvideomixer</p>
+</td>
+<td class="gallery_image" valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-glvideomixer.description"></a><h2>Description</h2>
+<p>Composites a number of streams into a single output scene using OpenGL in
+a similar fashion to compositor and videomixer. See the compositor plugin
+for documentation about the <span class="type">GstGLVideoMixerPad</span> properties.</p>
+<div class="refsect2">
+<a name="id-1.2.86.3.3"></a><h3>Examples</h3>
+<div class="informalexample">
+ <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
+ <tbody>
+ <tr>
+ <td class="listing_lines" align="right"><pre>1
+2
+3
+4
+5
+6
+7</pre></td>
+ <td class="listing_code"><pre class="programlisting">gst<span class="gtkdoc opt">-</span>launch<span class="gtkdoc opt">-</span><span class="number">1.0</span> glvideomixer name<span class="gtkdoc opt">=</span>m <span class="gtkdoc opt">!</span> glimagesink \
+ videotestsrc <span class="gtkdoc opt">!</span> video<span class="gtkdoc opt">/</span>x<span class="gtkdoc opt">-</span>raw<span class="gtkdoc opt">,</span> format<span class="gtkdoc opt">=</span>YUY2 <span class="gtkdoc opt">!</span> glupload <span class="gtkdoc opt">!</span> glcolorconvert <span class="gtkdoc opt">!</span> m<span class="gtkdoc opt">.</span> \
+ videotestsrc pattern<span class="gtkdoc opt">=</span><span class="number">12</span> <span class="gtkdoc opt">!</span> video<span class="gtkdoc opt">/</span>x<span class="gtkdoc opt">-</span>raw<span class="gtkdoc opt">,</span> format<span class="gtkdoc opt">=</span>I420<span class="gtkdoc opt">,</span> framerate<span class="gtkdoc opt">=</span><span class="number">5</span><span class="gtkdoc opt">/</span><span class="number">1</span><span class="gtkdoc opt">,</span> width<span class="gtkdoc opt">=</span><span class="number">100</span><span class="gtkdoc opt">,</span> height<span class="gtkdoc opt">=</span><span class="number">200</span> <span class="gtkdoc opt">!</span> queue <span class="gtkdoc opt">!</span> \
+ glupload <span class="gtkdoc opt">!</span> glcolorconvert <span class="gtkdoc opt">!</span> m<span class="gtkdoc opt">.</span> \
+ videotestsrc <span class="gtkdoc opt">!</span> glupload <span class="gtkdoc opt">!</span> gleffects effect<span class="gtkdoc opt">=</span><span class="number">2</span> <span class="gtkdoc opt">!</span> queue <span class="gtkdoc opt">!</span> m<span class="gtkdoc opt">.</span> \
+ videotestsrc <span class="gtkdoc opt">!</span> glupload <span class="gtkdoc opt">!</span> glfiltercube <span class="gtkdoc opt">!</span> queue <span class="gtkdoc opt">!</span> m<span class="gtkdoc opt">.</span> \
+ videotestsrc <span class="gtkdoc opt">!</span> glupload <span class="gtkdoc opt">!</span> gleffects effect<span class="gtkdoc opt">=</span><span class="number">6</span> <span class="gtkdoc opt">!</span> queue <span class="gtkdoc opt">!</span> m<span class="gtkdoc opt">.</span>gst<span class="gtkdoc opt">-</span>launch<span class="gtkdoc opt">-</span><span class="number">1.0</span> glvideomixer name<span class="gtkdoc opt">=</span>m <span class="gtkdoc opt">!</span> glimagesink \</pre></td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+
+</div>
+<div class="refsynopsisdiv">
+<h2>Synopsis</h2>
+<div class="refsect2">
+<a name="id-1.2.86.3.4.1"></a><h3>Element Information</h3>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term">plugin</span></p></td>
+<td>
+ <a class="link" href="gst-plugins-bad-plugins-plugin-opengl.html#plugin-opengl">opengl</a>
+ </td>
+</tr>
+<tr>
+<td><p><span class="term">author</span></p></td>
+<td>Matthew Waters <matthew@centricular.com></td>
+</tr>
+<tr>
+<td><p><span class="term">class</span></p></td>
+<td>Bin/Filter/Effect/Video/Compositor</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="id-1.2.86.3.4.2"></a><h3>Element Pads</h3>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>sink_%u</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>request</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>video/x-raw(memory:GLMemory, meta:GstVideoOverlayComposition), format=(string){ RGBA, BGRA, RGBx, BGRx, ARGB, ABGR, xRGB, xBGR, RGB, BGR, RGB16, BGR16, AYUV, I420, YV12, NV12, NV21, YUY2, UYVY, Y41B, Y42B, Y444, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw(memory:SystemMemory, meta:GstVideoOverlayComposition), format=(string){ RGBA, BGRA, RGBx, BGRx, ARGB, ABGR, xRGB, xBGR, RGB, BGR, RGB16, BGR16, AYUV, I420, YV12, NV12, NV21, YUY2, UYVY, Y41B, Y42B, Y444, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw(meta:GstVideoGLTextureUploadMeta, meta:GstVideoOverlayComposition), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw(memory:GLMemory), format=(string){ RGBA, BGRA, RGBx, BGRx, ARGB, ABGR, xRGB, xBGR, RGB, BGR, RGB16, BGR16, AYUV, I420, YV12, NV12, NV21, YUY2, UYVY, Y41B, Y42B, Y444, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw, format=(string){ RGBA, BGRA, RGBx, BGRx, ARGB, ABGR, xRGB, xBGR, RGB, BGR, RGB16, BGR16, AYUV, I420, YV12, NV12, NV21, YUY2, UYVY, Y41B, Y42B, Y444, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw(meta:GstVideoGLTextureUploadMeta), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+</tbody>
+</table></div>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>src</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>source</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>video/x-raw(ANY)</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-glvideomixer.functions_details"></a><h2>Functions</h2>
+<p></p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-glvideomixer.other_details"></a><h2>Types and Values</h2>
+</div>
+</div>
+<div class="footer">
+<hr>Generated by GTK-Doc V1.25</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-glvideomixerelement.html b/docs/plugins/html/gst-plugins-bad-plugins-glvideomixerelement.html
new file mode 100644
index 0000000..eb8f613
--- /dev/null
+++ b/docs/plugins/html/gst-plugins-bad-plugins-glvideomixerelement.html
@@ -0,0 +1,243 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>glvideomixerelement: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
+<link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
+<link rel="up" href="ch01.html" title="gst-plugins-bad Elements">
+<link rel="prev" href="gst-plugins-bad-plugins-glupload.html" title="glupload">
+<link rel="next" href="gst-plugins-bad-plugins-glvideomixer.html" title="glvideomixer">
+<meta name="generator" content="GTK-Doc V1.25 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
+<td width="100%" align="left" class="shortcuts">
+<a href="#" class="shortcut">Top</a><span id="nav_description"> <span class="dim">|</span>
+ <a href="#gst-plugins-bad-plugins-glvideomixerelement.description" class="shortcut">Description</a></span><span id="nav_hierarchy"> <span class="dim">|</span>
+ <a href="#gst-plugins-bad-plugins-glvideomixerelement.object-hierarchy" class="shortcut">Object Hierarchy</a></span><span id="nav_interfaces"> <span class="dim">|</span>
+ <a href="#gst-plugins-bad-plugins-glvideomixerelement.implemented-interfaces" class="shortcut">Implemented Interfaces</a></span><span id="nav_properties"> <span class="dim">|</span>
+ <a href="#gst-plugins-bad-plugins-glvideomixerelement.properties" class="shortcut">Properties</a></span>
+</td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
+<td><a accesskey="p" href="gst-plugins-bad-plugins-glupload.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="gst-plugins-bad-plugins-glvideomixer.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="gst-plugins-bad-plugins-glvideomixerelement"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-bad-plugins-glvideomixerelement.top_of_page"></a>glvideomixerelement</span></h2>
+<p>glvideomixerelement</p>
+</td>
+<td class="gallery_image" valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-glvideomixerelement.properties"></a><h2>Properties</h2>
+<div class="informaltable"><table class="informaltable" border="0">
+<colgroup>
+<col width="150px" class="properties_type">
+<col width="300px" class="properties_name">
+<col width="200px" class="properties_flags">
+</colgroup>
+<tbody><tr>
+<td class="property_type"><a class="link" href="gst-plugins-bad-plugins-glvideomixerelement.html#GstGLVideoMixerBackground" title="enum GstGLVideoMixerBackground"><span class="type">GstGLVideoMixerBackground</span></a></td>
+<td class="property_name"><a class="link" href="gst-plugins-bad-plugins-glvideomixerelement.html#GstGLVideoMixer--background" title="The “background” property">background</a></td>
+<td class="property_flags">Read / Write</td>
+</tr></tbody>
+</table></div>
+</div>
+<a name="GstGLVideoMixer"></a><div class="refsect1">
+<a name="gst-plugins-bad-plugins-glvideomixerelement.other"></a><h2>Types and Values</h2>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="name">
+<col class="description">
+</colgroup>
+<tbody>
+<tr>
+<td class="datatype_keyword">struct</td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-plugins-glvideomixerelement.html#GstGLVideoMixer-struct" title="struct GstGLVideoMixer">GstGLVideoMixer</a></td>
+</tr>
+<tr>
+<td class="datatype_keyword">enum</td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-plugins-glvideomixerelement.html#GstGLVideoMixerBackground" title="enum GstGLVideoMixerBackground">GstGLVideoMixerBackground</a></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-glvideomixerelement.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="screen"> <a href="/usr/share/gtk-doc/html/gobjectgobject-The-Base-Object-Type.html#GObject-struct">GObject</a>
+ <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gobjectgobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
+ <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstObject.html#GstObject-struct">GstObject</a>
+ <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#GstElement-struct">GstElement</a>
+ <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gst-plugins-bad-libs-1.0gst-plugins-bad-libs-GstAggregator.html#GstAggregator">GstAggregator</a>
+ <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gst-plugins-bad-libs-1.0gst-plugins-bad-libs-GstVideoAggregator.html#GstVideoAggregator">GstVideoAggregator</a>
+ <span class="lineart">╰──</span> GstGLBaseMixer
+ <span class="lineart">╰──</span> GstGLMixer
+ <span class="lineart">╰──</span> GstGLVideoMixer
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-glvideomixerelement.implemented-interfaces"></a><h2>Implemented Interfaces</h2>
+<p>
+GstGLVideoMixer implements
+ <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstChildProxy.html#GstChildProxy-struct">GstChildProxy</a>.</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-glvideomixerelement.description"></a><h2>Description</h2>
+<div class="refsynopsisdiv">
+<h2>Synopsis</h2>
+<div class="refsect2">
+<a name="id-1.2.85.8.2.1"></a><h3>Element Information</h3>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term">plugin</span></p></td>
+<td>
+ <a class="link" href="gst-plugins-bad-plugins-plugin-opengl.html#plugin-opengl">opengl</a>
+ </td>
+</tr>
+<tr>
+<td><p><span class="term">author</span></p></td>
+<td>Matthew Waters <matthew@centricular.com></td>
+</tr>
+<tr>
+<td><p><span class="term">class</span></p></td>
+<td>Filter/Effect/Video/Compositor</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="id-1.2.85.8.2.2"></a><h3>Element Pads</h3>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>sink_%u</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>request</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+</tbody>
+</table></div>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>src</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>source</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-glvideomixerelement.functions_details"></a><h2>Functions</h2>
+<p></p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-glvideomixerelement.other_details"></a><h2>Types and Values</h2>
+<div class="refsect2">
+<a name="GstGLVideoMixer-struct"></a><h3>struct GstGLVideoMixer</h3>
+<pre class="programlisting">struct GstGLVideoMixer;</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstGLVideoMixerBackground"></a><h3>enum GstGLVideoMixerBackground</h3>
+<p>The different backgrounds compositor can blend over.</p>
+<div class="refsect3">
+<a name="GstGLVideoMixerBackground.members"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="300px" class="enum_members_name">
+<col class="enum_members_description">
+<col width="200px" class="enum_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="enum_member_name"><p><a name="GST-GL-VIDEO-MIXER-BACKGROUND-CHECKER:CAPS"></a>GST_GL_VIDEO_MIXER_BACKGROUND_CHECKER</p></td>
+<td class="enum_member_description">
+<p>checker pattern background</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-GL-VIDEO-MIXER-BACKGROUND-BLACK:CAPS"></a>GST_GL_VIDEO_MIXER_BACKGROUND_BLACK</p></td>
+<td class="enum_member_description">
+<p>solid color black background</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-GL-VIDEO-MIXER-BACKGROUND-WHITE:CAPS"></a>GST_GL_VIDEO_MIXER_BACKGROUND_WHITE</p></td>
+<td class="enum_member_description">
+<p>solid color white background</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-GL-VIDEO-MIXER-BACKGROUND-TRANSPARENT:CAPS"></a>GST_GL_VIDEO_MIXER_BACKGROUND_TRANSPARENT</p></td>
+<td class="enum_member_description">
+<p>background is left transparent and layers are composited using "A OVER B" composition rules. This is only applicable to AYUV and ARGB (and variants) as it preserves the alpha channel and allows for further mixing.</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-glvideomixerelement.property-details"></a><h2>Property Details</h2>
+<div class="refsect2">
+<a name="GstGLVideoMixer--background"></a><h3>The <code class="literal">“background”</code> property</h3>
+<pre class="programlisting"> “background” <a class="link" href="gst-plugins-bad-plugins-glvideomixerelement.html#GstGLVideoMixerBackground" title="enum GstGLVideoMixerBackground"><span class="type">GstGLVideoMixerBackground</span></a></pre>
+<p>Background type.</p>
+<p>Flags: Read / Write</p>
+<p>Default value: Checker pattern</p>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>Generated by GTK-Doc V1.25</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-glviewconvert.html b/docs/plugins/html/gst-plugins-bad-plugins-glviewconvert.html
new file mode 100644
index 0000000..abb8b4a
--- /dev/null
+++ b/docs/plugins/html/gst-plugins-bad-plugins-glviewconvert.html
@@ -0,0 +1,277 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>glviewconvert: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
+<link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
+<link rel="up" href="ch01.html" title="gst-plugins-bad Elements">
+<link rel="prev" href="gst-plugins-bad-plugins-glvideomixer.html" title="glvideomixer">
+<link rel="next" href="gst-plugins-bad-plugins-jpegparse.html" title="jpegparse">
+<meta name="generator" content="GTK-Doc V1.25 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
+<td width="100%" align="left" class="shortcuts">
+<a href="#" class="shortcut">Top</a><span id="nav_description"> <span class="dim">|</span>
+ <a href="#gst-plugins-bad-plugins-glviewconvert.description" class="shortcut">Description</a></span><span id="nav_hierarchy"> <span class="dim">|</span>
+ <a href="#gst-plugins-bad-plugins-glviewconvert.object-hierarchy" class="shortcut">Object Hierarchy</a></span><span id="nav_properties"> <span class="dim">|</span>
+ <a href="#gst-plugins-bad-plugins-glviewconvert.properties" class="shortcut">Properties</a></span>
+</td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
+<td><a accesskey="p" href="gst-plugins-bad-plugins-glvideomixer.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="gst-plugins-bad-plugins-jpegparse.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="gst-plugins-bad-plugins-glviewconvert"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-bad-plugins-glviewconvert.top_of_page"></a>glviewconvert</span></h2>
+<p>glviewconvert</p>
+</td>
+<td class="gallery_image" valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-glviewconvert.properties"></a><h2>Properties</h2>
+<div class="informaltable"><table class="informaltable" border="0">
+<colgroup>
+<col width="150px" class="properties_type">
+<col width="300px" class="properties_name">
+<col width="200px" class="properties_flags">
+</colgroup>
+<tbody>
+<tr>
+<td class="property_type"><span class="type">GstGLStereoDownmix</span></td>
+<td class="property_name"><a class="link" href="gst-plugins-bad-plugins-glviewconvert.html#GstGLViewConvertElement--downmix-mode" title="The “downmix-mode” property">downmix-mode</a></td>
+<td class="property_flags">Read / Write</td>
+</tr>
+<tr>
+<td class="property_type"><a href="/usr/share/gtk-doc/html/gst-plugins-base-libs-1.0gst-plugins-base-libs-gstvideo.html#GstVideoMultiviewFlags"><span class="type">GstVideoMultiviewFlags</span></a></td>
+<td class="property_name"><a class="link" href="gst-plugins-bad-plugins-glviewconvert.html#GstGLViewConvertElement--input-flags-override" title="The “input-flags-override” property">input-flags-override</a></td>
+<td class="property_flags">Read / Write</td>
+</tr>
+<tr>
+<td class="property_type"><a href="/usr/share/gtk-doc/html/gst-plugins-base-libs-1.0gst-plugins-base-libs-gstvideo.html#GstVideoMultiviewFramePacking"><span class="type">GstVideoMultiviewFramePacking</span></a></td>
+<td class="property_name"><a class="link" href="gst-plugins-bad-plugins-glviewconvert.html#GstGLViewConvertElement--input-mode-override" title="The “input-mode-override” property">input-mode-override</a></td>
+<td class="property_flags">Read / Write</td>
+</tr>
+<tr>
+<td class="property_type"><a href="/usr/share/gtk-doc/html/gst-plugins-base-libs-1.0gst-plugins-base-libs-gstvideo.html#GstVideoMultiviewFlags"><span class="type">GstVideoMultiviewFlags</span></a></td>
+<td class="property_name"><a class="link" href="gst-plugins-bad-plugins-glviewconvert.html#GstGLViewConvertElement--output-flags-override" title="The “output-flags-override” property">output-flags-override</a></td>
+<td class="property_flags">Read / Write</td>
+</tr>
+<tr>
+<td class="property_type"><a href="/usr/share/gtk-doc/html/gst-plugins-base-libs-1.0gst-plugins-base-libs-gstvideo.html#GstVideoMultiviewMode"><span class="type">GstVideoMultiviewMode</span></a></td>
+<td class="property_name"><a class="link" href="gst-plugins-bad-plugins-glviewconvert.html#GstGLViewConvertElement--output-mode-override" title="The “output-mode-override” property">output-mode-override</a></td>
+<td class="property_flags">Read / Write</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<a name="GstGLViewConvertElement"></a><div class="refsect1">
+<a name="gst-plugins-bad-plugins-glviewconvert.other"></a><h2>Types and Values</h2>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="name">
+<col class="description">
+</colgroup>
+<tbody><tr>
+<td class="datatype_keyword">struct</td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-plugins-glviewconvert.html#GstGLViewConvertElement-struct" title="struct GstGLViewConvertElement">GstGLViewConvertElement</a></td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-glviewconvert.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="screen"> <a href="/usr/share/gtk-doc/html/gobjectgobject-The-Base-Object-Type.html#GObject-struct">GObject</a>
+ <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gobjectgobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
+ <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstObject.html#GstObject-struct">GstObject</a>
+ <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#GstElement-struct">GstElement</a>
+ <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-libs-1.0GstBaseTransform.html#GstBaseTransform-struct">GstBaseTransform</a>
+ <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gst-plugins-bad-libs-1.0GstGLBaseFilter.html#GstGLBaseFilter-struct">GstGLBaseFilter</a>
+ <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gst-plugins-bad-libs-1.0GstGLFilter.html#GstGLFilter-struct">GstGLFilter</a>
+ <span class="lineart">╰──</span> GstGLViewConvertElement
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-glviewconvert.description"></a><h2>Description</h2>
+<p>Convert stereoscopic video between different representations using fragment shaders.</p>
+<p>The element can use either property settings or caps negotiation to choose the
+input and output formats to process.</p>
+<div class="refsect2">
+<a name="id-1.2.87.7.4"></a><h3>Examples</h3>
+<div class="informalexample">
+ <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
+ <tbody>
+ <tr>
+ <td class="listing_lines" align="right"><pre>1</pre></td>
+ <td class="listing_code"><pre class="programlisting">gst<span class="gtkdoc opt">-</span>launch<span class="gtkdoc opt">-</span><span class="number">1.0</span> videotestsrc <span class="gtkdoc opt">!</span> glupload <span class="gtkdoc opt">!</span> glviewconvert <span class="gtkdoc opt">!</span> glimagesink</pre></td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+ Simple placebo example demonstrating identity passthrough of mono video
+<div class="informalexample">
+ <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
+ <tbody>
+ <tr>
+ <td class="listing_lines" align="right"><pre>1
+2</pre></td>
+ <td class="listing_code"><pre class="programlisting">gst<span class="gtkdoc opt">-</span>launch<span class="gtkdoc opt">-</span><span class="number">1.0</span> videotestsrc pattern<span class="gtkdoc opt">=</span>checkers<span class="gtkdoc opt">-</span><span class="number">1</span> <span class="gtkdoc opt">!</span> glupload <span class="gtkdoc opt">!</span> \
+ glviewconvert input<span class="gtkdoc opt">-</span>mode<span class="gtkdoc opt">-</span>override<span class="gtkdoc opt">=</span>side<span class="gtkdoc opt">-</span>by<span class="gtkdoc opt">-</span>side <span class="gtkdoc opt">!</span> glimagesink <span class="gtkdoc opt">-</span>v</pre></td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+ Force re-interpretation of the input checkers pattern as a side-by-side stereoscopic
+ image and display in glimagesink.
+FBO (Frame Buffer Object) and GLSL (OpenGL Shading Language) are required.
+</div>
+<div class="refsynopsisdiv">
+<h2>Synopsis</h2>
+<div class="refsect2">
+<a name="id-1.2.87.7.5.1"></a><h3>Element Information</h3>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term">plugin</span></p></td>
+<td>
+ <a class="link" href="gst-plugins-bad-plugins-plugin-opengl.html#plugin-opengl">opengl</a>
+ </td>
+</tr>
+<tr>
+<td><p><span class="term">author</span></p></td>
+<td>Jan Schmidt <jan@centricular.com>
+Matthew Waters <matthew@centricular.com></td>
+</tr>
+<tr>
+<td><p><span class="term">class</span></p></td>
+<td>Filter</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="id-1.2.87.7.5.2"></a><h3>Element Pads</h3>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>video/x-raw(ANY), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</td>
+</tr>
+</tbody>
+</table></div>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>src</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>source</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw(ANY), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-glviewconvert.functions_details"></a><h2>Functions</h2>
+<p></p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-glviewconvert.other_details"></a><h2>Types and Values</h2>
+<div class="refsect2">
+<a name="GstGLViewConvertElement-struct"></a><h3>struct GstGLViewConvertElement</h3>
+<pre class="programlisting">struct GstGLViewConvertElement;</pre>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-glviewconvert.property-details"></a><h2>Property Details</h2>
+<div class="refsect2">
+<a name="GstGLViewConvertElement--downmix-mode"></a><h3>The <code class="literal">“downmix-mode”</code> property</h3>
+<pre class="programlisting"> “downmix-mode” <span class="type">GstGLStereoDownmix</span></pre>
+<p>Output anaglyph type to generate when downmixing to mono.</p>
+<p>Flags: Read / Write</p>
+<p>Default value: Dubois optimised Green-Magenta anaglyph</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstGLViewConvertElement--input-flags-override"></a><h3>The <code class="literal">“input-flags-override”</code> property</h3>
+<pre class="programlisting"> “input-flags-override” <a href="/usr/share/gtk-doc/html/gst-plugins-base-libs-1.0gst-plugins-base-libs-gstvideo.html#GstVideoMultiviewFlags"><span class="type">GstVideoMultiviewFlags</span></a></pre>
+<p>Override any input information about multiview layout flags.</p>
+<p>Flags: Read / Write</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstGLViewConvertElement--input-mode-override"></a><h3>The <code class="literal">“input-mode-override”</code> property</h3>
+<pre class="programlisting"> “input-mode-override” <a href="/usr/share/gtk-doc/html/gst-plugins-base-libs-1.0gst-plugins-base-libs-gstvideo.html#GstVideoMultiviewFramePacking"><span class="type">GstVideoMultiviewFramePacking</span></a></pre>
+<p>Override any input information about multiview layout.</p>
+<p>Flags: Read / Write</p>
+<p>Default value: GST_VIDEO_MULTIVIEW_FRAME_PACKING_NONE</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstGLViewConvertElement--output-flags-override"></a><h3>The <code class="literal">“output-flags-override”</code> property</h3>
+<pre class="programlisting"> “output-flags-override” <a href="/usr/share/gtk-doc/html/gst-plugins-base-libs-1.0gst-plugins-base-libs-gstvideo.html#GstVideoMultiviewFlags"><span class="type">GstVideoMultiviewFlags</span></a></pre>
+<p>Override automatic negotiation for output multiview layout flags.</p>
+<p>Flags: Read / Write</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstGLViewConvertElement--output-mode-override"></a><h3>The <code class="literal">“output-mode-override”</code> property</h3>
+<pre class="programlisting"> “output-mode-override” <a href="/usr/share/gtk-doc/html/gst-plugins-base-libs-1.0gst-plugins-base-libs-gstvideo.html#GstVideoMultiviewMode"><span class="type">GstVideoMultiviewMode</span></a></pre>
+<p>Override automatic output mode selection for multiview layout.</p>
+<p>Flags: Read / Write</p>
+<p>Default value: GST_VIDEO_MULTIVIEW_MODE_NONE</p>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>Generated by GTK-Doc V1.25</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-jpegparse.html b/docs/plugins/html/gst-plugins-bad-plugins-jpegparse.html
index 1c93d97..784175a 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-jpegparse.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-jpegparse.html
@@ -6,7 +6,7 @@
<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
<link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
<link rel="up" href="ch01.html" title="gst-plugins-bad Elements">
-<link rel="prev" href="gst-plugins-bad-plugins-gaussianblur.html" title="gaussianblur">
+<link rel="prev" href="gst-plugins-bad-plugins-glviewconvert.html" title="glviewconvert">
<link rel="next" href="gst-plugins-bad-plugins-kaleidoscope.html" title="kaleidoscope">
<meta name="generator" content="GTK-Doc V1.25 (XML mode)">
<link rel="stylesheet" href="style.css" type="text/css">
@@ -20,7 +20,7 @@
</td>
<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
<td><a accesskey="u" href="ch01.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
-<td><a accesskey="p" href="gst-plugins-bad-plugins-gaussianblur.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="p" href="gst-plugins-bad-plugins-glviewconvert.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
<td><a accesskey="n" href="gst-plugins-bad-plugins-kaleidoscope.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
</tr></table>
<div class="refentry">
@@ -62,7 +62,7 @@
image header searching for image properties such as width and height
among others. Jpegparse can also extract metadata (e.g. xmp).</p>
<div class="refsect2">
-<a name="id-1.2.41.6.3"></a><h3>Example launch line</h3>
+<a name="id-1.2.88.6.3"></a><h3>Example launch line</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -80,7 +80,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="id-1.2.41.6.4.1"></a><h3>Element Information</h3>
+<a name="id-1.2.88.6.4.1"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
@@ -106,7 +106,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="id-1.2.41.6.4.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.88.6.4.2"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-kaleidoscope.html b/docs/plugins/html/gst-plugins-bad-plugins-kaleidoscope.html
index d8ed12f..ad87e02 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-kaleidoscope.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-kaleidoscope.html
@@ -91,7 +91,7 @@
<p>The kaleidscope element applies 'kaleidoscope' geometric transform to the
image.</p>
<div class="refsect2">
-<a name="id-1.2.42.7.3"></a><h3>Example launch line</h3>
+<a name="id-1.2.89.7.3"></a><h3>Example launch line</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -107,7 +107,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="id-1.2.42.7.4.1"></a><h3>Element Information</h3>
+<a name="id-1.2.89.7.4.1"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
@@ -133,7 +133,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="id-1.2.42.7.4.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.89.7.4.2"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-liveadder.html b/docs/plugins/html/gst-plugins-bad-plugins-liveadder.html
index af6748e..a0b78dc 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-liveadder.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-liveadder.html
@@ -36,7 +36,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="id-1.2.43.3.2.1"></a><h3>Element Information</h3>
+<a name="id-1.2.90.3.2.1"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
@@ -62,7 +62,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="id-1.2.43.3.2.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.90.3.2.2"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-marble.html b/docs/plugins/html/gst-plugins-bad-plugins-marble.html
index 2200032..f3882af 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-marble.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-marble.html
@@ -95,7 +95,7 @@
<p>Marble is a geometric image transform element. It applies a marbling effect
to the image.</p>
<div class="refsect2">
-<a name="id-1.2.44.7.3"></a><h3>Example launch line</h3>
+<a name="id-1.2.91.7.3"></a><h3>Example launch line</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -111,7 +111,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="id-1.2.44.7.4.1"></a><h3>Element Information</h3>
+<a name="id-1.2.91.7.4.1"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
@@ -137,7 +137,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="id-1.2.44.7.4.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.91.7.4.2"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-mimdec.html b/docs/plugins/html/gst-plugins-bad-plugins-mimdec.html
index 120e472..1ef1b35 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-mimdec.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-mimdec.html
@@ -62,7 +62,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="id-1.2.46.6.4.1"></a><h3>Element Information</h3>
+<a name="id-1.2.93.6.4.1"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
@@ -88,7 +88,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="id-1.2.46.6.4.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.93.6.4.2"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-mimenc.html b/docs/plugins/html/gst-plugins-bad-plugins-mimenc.html
index cd037c5..c277718 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-mimenc.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-mimenc.html
@@ -84,7 +84,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="id-1.2.45.7.5.1"></a><h3>Element Information</h3>
+<a name="id-1.2.92.7.5.1"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
@@ -110,7 +110,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="id-1.2.45.7.5.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.92.7.5.2"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-mirror.html b/docs/plugins/html/gst-plugins-bad-plugins-mirror.html
index cb7a150..e5d5bf2 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-mirror.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-mirror.html
@@ -84,7 +84,7 @@
<p>Mirror is a geometric transform element. It splits the image into two halves
and reflects one over each other.</p>
<div class="refsect2">
-<a name="id-1.2.47.7.3"></a><h3>Example launch line</h3>
+<a name="id-1.2.94.7.3"></a><h3>Example launch line</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -100,7 +100,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="id-1.2.47.7.4.1"></a><h3>Element Information</h3>
+<a name="id-1.2.94.7.4.1"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
@@ -126,7 +126,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="id-1.2.47.7.4.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.94.7.4.2"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-modplug.html b/docs/plugins/html/gst-plugins-bad-plugins-modplug.html
index b203366..5fdd666 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-modplug.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-modplug.html
@@ -133,7 +133,7 @@
<p>Modplug uses the <a class="ulink" href="http://modplug-xmms.sourceforge.net/" target="_top">modplug</a>
library to decode tracked music in the MOD/S3M/XM/IT and related formats.</p>
<div class="refsect2">
-<a name="id-1.2.48.7.3"></a><h3>Example pipeline</h3>
+<a name="id-1.2.95.7.3"></a><h3>Example pipeline</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -149,7 +149,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="id-1.2.48.7.4.1"></a><h3>Element Information</h3>
+<a name="id-1.2.95.7.4.1"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
@@ -175,7 +175,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="id-1.2.48.7.4.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.95.7.4.2"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-mpeg2enc.html b/docs/plugins/html/gst-plugins-bad-plugins-mpeg2enc.html
index d1801d4..5751283 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-mpeg2enc.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-mpeg2enc.html
@@ -252,7 +252,7 @@
<a class="ulink" href="https://sourceforge.net/docman/display_doc.php?docid=3456&group_id=5776" target="_top">MJPEG Howto</a><p>and on the various available parameters in the documentation
of the mpeg2enc tool in particular, which shares options with this element.</p>
<div class="refsect2">
-<a name="id-1.2.49.8.7"></a><h3>Example pipeline</h3>
+<a name="id-1.2.96.8.7"></a><h3>Example pipeline</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -290,7 +290,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="id-1.2.49.8.8.1"></a><h3>Element Information</h3>
+<a name="id-1.2.96.8.8.1"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
@@ -317,7 +317,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="id-1.2.49.8.8.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.96.8.8.2"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-mpegpsmux.html b/docs/plugins/html/gst-plugins-bad-plugins-mpegpsmux.html
index c59aae2..b3045b1 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-mpegpsmux.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-mpegpsmux.html
@@ -36,7 +36,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="id-1.2.50.3.2.1"></a><h3>Element Information</h3>
+<a name="id-1.2.97.3.2.1"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
@@ -62,7 +62,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="id-1.2.50.3.2.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.97.3.2.2"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-mpegtsmux.html b/docs/plugins/html/gst-plugins-bad-plugins-mpegtsmux.html
index f953f29..c06b0c0 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-mpegtsmux.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-mpegtsmux.html
@@ -36,7 +36,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="id-1.2.51.3.2.1"></a><h3>Element Information</h3>
+<a name="id-1.2.98.3.2.1"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
@@ -62,7 +62,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="id-1.2.51.3.2.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.98.3.2.2"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-mplex.html b/docs/plugins/html/gst-plugins-bad-plugins-mplex.html
index 99bd156..3a9967c 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-mplex.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-mplex.html
@@ -111,7 +111,7 @@
<a class="ulink" href="https://sourceforge.net/docman/display_doc.php?docid=3456&group_id=5776" target="_top">MJPEG Howto</a><p>and the man-page of the mplex tool documents the properties of this element,
which are shared with the mplex tool.</p>
<div class="refsect2">
-<a name="id-1.2.52.7.5"></a><h3>Example pipeline</h3>
+<a name="id-1.2.99.7.5"></a><h3>Example pipeline</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -134,7 +134,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="id-1.2.52.7.6.1"></a><h3>Element Information</h3>
+<a name="id-1.2.99.7.6.1"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
@@ -162,7 +162,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="id-1.2.52.7.6.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.99.7.6.2"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-neonhttpsrc.html b/docs/plugins/html/gst-plugins-bad-plugins-neonhttpsrc.html
index 5e62e66..3dc3a75 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-neonhttpsrc.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-neonhttpsrc.html
@@ -145,7 +145,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="id-1.2.53.6.2.1"></a><h3>Element Information</h3>
+<a name="id-1.2.100.6.2.1"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
@@ -171,7 +171,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="id-1.2.53.6.2.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.100.6.2.2"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-ofa.html b/docs/plugins/html/gst-plugins-bad-plugins-ofa.html
index 7b8e945..7b80764 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-ofa.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-ofa.html
@@ -78,7 +78,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="id-1.2.54.7.2.1"></a><h3>Element Information</h3>
+<a name="id-1.2.101.7.2.1"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
@@ -104,7 +104,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="id-1.2.54.7.2.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.101.7.2.2"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-openalsink.html b/docs/plugins/html/gst-plugins-bad-plugins-openalsink.html
index ebd948c..0842d94 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-openalsink.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-openalsink.html
@@ -117,7 +117,7 @@
<p>This element plays raw audio samples through OpenAL.</p>
<p>Unfortunately the capture API doesn't have a format enumeration/check. all you can do is try opening it and see if it works.</p>
<div class="refsect2">
-<a name="id-1.2.56.7.4"></a><h3>Example pipelines</h3>
+<a name="id-1.2.103.7.4"></a><h3>Example pipelines</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -155,7 +155,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="id-1.2.56.7.5.1"></a><h3>Element Information</h3>
+<a name="id-1.2.103.7.5.1"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
@@ -181,7 +181,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="id-1.2.56.7.5.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.103.7.5.2"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-openalsrc.html b/docs/plugins/html/gst-plugins-bad-plugins-openalsrc.html
index c7305f9..e44e55c 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-openalsrc.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-openalsrc.html
@@ -87,7 +87,7 @@
<a name="gst-plugins-bad-plugins-openalsrc.description"></a><h2>Description</h2>
<p>This element captures raw audio samples through OpenAL.</p>
<div class="refsect2">
-<a name="id-1.2.55.7.3"></a><h3>Example pipelines</h3>
+<a name="id-1.2.102.7.3"></a><h3>Example pipelines</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -114,7 +114,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="id-1.2.55.7.4.1"></a><h3>Element Information</h3>
+<a name="id-1.2.102.7.4.1"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
@@ -140,7 +140,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="id-1.2.55.7.4.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.102.7.4.2"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-opencvtextoverlay.html b/docs/plugins/html/gst-plugins-bad-plugins-opencvtextoverlay.html
index 2d226c3..37ab32d 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-opencvtextoverlay.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-opencvtextoverlay.html
@@ -120,7 +120,7 @@
<a name="gst-plugins-bad-plugins-opencvtextoverlay.description"></a><h2>Description</h2>
<p>opencvtextoverlay renders the text on top of the video frames</p>
<div class="refsect2">
-<a name="id-1.2.74.7.3"></a><h3>Example launch line</h3>
+<a name="id-1.2.123.7.3"></a><h3>Example launch line</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -136,7 +136,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="id-1.2.74.7.4.1"></a><h3>Element Information</h3>
+<a name="id-1.2.123.7.4.1"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
@@ -162,7 +162,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="id-1.2.74.7.4.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.123.7.4.2"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-pcapparse.html b/docs/plugins/html/gst-plugins-bad-plugins-pcapparse.html
index fd4a848..1f3aed0 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-pcapparse.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-pcapparse.html
@@ -107,7 +107,7 @@
<a class="link" href="gst-plugins-bad-plugins-pcapparse.html#GstPcapParse--src-port" title="The “src-port” property"><span class="type">“src-port”</span></a> and <a class="link" href="gst-plugins-bad-plugins-pcapparse.html#GstPcapParse--dst-port" title="The “dst-port” property"><span class="type">“dst-port”</span></a> to restrict which packets
should be included.</p>
<div class="refsect2">
-<a name="id-1.2.57.7.3"></a><h3>Example pipelines</h3>
+<a name="id-1.2.104.7.3"></a><h3>Example pipelines</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -126,7 +126,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="id-1.2.57.7.4.1"></a><h3>Element Information</h3>
+<a name="id-1.2.104.7.4.1"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
@@ -152,7 +152,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="id-1.2.57.7.4.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.104.7.4.2"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-pinch.html b/docs/plugins/html/gst-plugins-bad-plugins-pinch.html
index c37a2e3..65925b2 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-pinch.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-pinch.html
@@ -7,7 +7,7 @@
<link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
<link rel="up" href="ch01.html" title="gst-plugins-bad Elements">
<link rel="prev" href="gst-plugins-bad-plugins-pcapparse.html" title="pcapparse">
-<link rel="next" href="gst-plugins-bad-plugins-rfbsrc.html" title="rfbsrc">
+<link rel="next" href="gst-plugins-bad-plugins-rawaudioparse.html" title="rawaudioparse">
<meta name="generator" content="GTK-Doc V1.25 (XML mode)">
<link rel="stylesheet" href="style.css" type="text/css">
</head>
@@ -22,7 +22,7 @@
<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
<td><a accesskey="u" href="ch01.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
<td><a accesskey="p" href="gst-plugins-bad-plugins-pcapparse.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="gst-plugins-bad-plugins-rfbsrc.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+<td><a accesskey="n" href="gst-plugins-bad-plugins-rawaudioparse.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
</tr></table>
<div class="refentry">
<a name="gst-plugins-bad-plugins-pinch"></a><div class="titlepage"></div>
@@ -78,7 +78,7 @@
<a name="gst-plugins-bad-plugins-pinch.description"></a><h2>Description</h2>
<p>Pinch applies a 'pinch' geometric transform to the image.</p>
<div class="refsect2">
-<a name="id-1.2.58.7.3"></a><h3>Example launch line</h3>
+<a name="id-1.2.105.7.3"></a><h3>Example launch line</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -94,7 +94,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="id-1.2.58.7.4.1"></a><h3>Element Information</h3>
+<a name="id-1.2.105.7.4.1"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
@@ -120,7 +120,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="id-1.2.58.7.4.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.105.7.4.2"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-aiff.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-aiff.html
index b6987fd..8893f5b 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-aiff.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-aiff.html
@@ -42,7 +42,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-assrender.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-assrender.html
index 1e8a132..99fd1a1 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-assrender.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-assrender.html
@@ -42,7 +42,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-audiomixer.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-audiomixer.html
index a5d2bf5..d63bbba 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-audiomixer.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-audiomixer.html
@@ -42,7 +42,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-audiovisualizers.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-audiovisualizers.html
index 68929b1..65b97e9 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-audiovisualizers.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-audiovisualizers.html
@@ -42,7 +42,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-autoconvert.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-autoconvert.html
index ed6da25..cfa180e 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-autoconvert.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-autoconvert.html
@@ -42,7 +42,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-bayer.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-bayer.html
index 4b1a389..dcb85f9 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-bayer.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-bayer.html
@@ -42,7 +42,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-bs2b.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-bs2b.html
index 2b517a1..7d3957f 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-bs2b.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-bs2b.html
@@ -42,7 +42,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-bz2.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-bz2.html
index a9d4884..21cbe3a 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-bz2.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-bz2.html
@@ -42,7 +42,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-camerabin.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-camerabin.html
index 6319a4e..a0e6c92 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-camerabin.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-camerabin.html
@@ -42,7 +42,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-coloreffects.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-coloreffects.html
index 79456c3..ac4a4c0 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-coloreffects.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-coloreffects.html
@@ -42,7 +42,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-curl.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-curl.html
index 08766ec..0eb023f 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-curl.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-curl.html
@@ -42,7 +42,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-dataurisrc.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-dataurisrc.html
index 7b26e80..717e69c 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-dataurisrc.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-dataurisrc.html
@@ -42,7 +42,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-debugutilsbad.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-debugutilsbad.html
index d6e71e3..42769a1 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-debugutilsbad.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-debugutilsbad.html
@@ -42,7 +42,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-dtsdec.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-dtsdec.html
index 3471f7c..e45e23b 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-dtsdec.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-dtsdec.html
@@ -42,7 +42,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-dvb.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-dvb.html
index e363b00..37d31fc 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-dvb.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-dvb.html
@@ -42,7 +42,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-dvdspu.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-dvdspu.html
index 75e0e8c..1e73f92 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-dvdspu.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-dvdspu.html
@@ -42,7 +42,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-faac.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-faac.html
index 7e276ea..8ca768e 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-faac.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-faac.html
@@ -42,7 +42,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-faad.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-faad.html
index 13364ee..7bc4c6b 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-faad.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-faad.html
@@ -42,7 +42,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-festival.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-festival.html
index 37c5c56..7524b8e 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-festival.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-festival.html
@@ -42,7 +42,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-gaudieffects.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-gaudieffects.html
index ef80792..7e78ca4 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-gaudieffects.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-gaudieffects.html
@@ -42,7 +42,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-geometrictransform.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-geometrictransform.html
index 6beadc7..fbcf1d7 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-geometrictransform.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-geometrictransform.html
@@ -42,7 +42,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-gsm.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-gsm.html
index a669ed8..e7a7587 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-gsm.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-gsm.html
@@ -42,7 +42,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-jpegformat.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-jpegformat.html
index 2d964df..2b1b553 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-jpegformat.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-jpegformat.html
@@ -42,7 +42,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-mimic.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-mimic.html
index 3c17ef0..aaeddcc 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-mimic.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-mimic.html
@@ -42,7 +42,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-mms.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-mms.html
index bae0b74..aa8fc81 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-mms.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-mms.html
@@ -42,7 +42,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-modplug.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-modplug.html
index d7b50d9..4cafbf3 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-modplug.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-modplug.html
@@ -42,7 +42,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-mpeg2enc.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-mpeg2enc.html
index d481f32..43b5c29 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-mpeg2enc.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-mpeg2enc.html
@@ -42,7 +42,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-mpegpsmux.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-mpegpsmux.html
index 529f46b..bc34fec 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-mpegpsmux.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-mpegpsmux.html
@@ -42,7 +42,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-mpegtsmux.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-mpegtsmux.html
index da41389..b640a63 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-mpegtsmux.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-mpegtsmux.html
@@ -42,7 +42,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-mplex.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-mplex.html
index 9db99e8..80666fc 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-mplex.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-mplex.html
@@ -42,7 +42,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-ofa.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-ofa.html
index 1b3b1ba..b269010 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-ofa.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-ofa.html
@@ -42,7 +42,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-openal.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-openal.html
index a0f187b..b3a1280 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-openal.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-openal.html
@@ -7,7 +7,7 @@
<link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
<link rel="up" href="ch02.html" title="gst-plugins-bad Plugins">
<link rel="prev" href="gst-plugins-bad-plugins-plugin-ofa.html" title="ofa">
-<link rel="next" href="gst-plugins-bad-plugins-plugin-opencv.html" title="opencv">
+<link rel="next" href="gst-plugins-bad-plugins-plugin-opengl.html" title="opengl">
<meta name="generator" content="GTK-Doc V1.25 (XML mode)">
<link rel="stylesheet" href="style.css" type="text/css">
</head>
@@ -17,7 +17,7 @@
<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
<td><a accesskey="u" href="ch02.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
<td><a accesskey="p" href="gst-plugins-bad-plugins-plugin-ofa.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="gst-plugins-bad-plugins-plugin-opencv.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+<td><a accesskey="n" href="gst-plugins-bad-plugins-plugin-opengl.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
</tr></table>
<div class="refentry">
<a name="gst-plugins-bad-plugins-plugin-openal"></a><div class="titlepage"></div>
@@ -42,7 +42,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-opencv.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-opencv.html
index b78a76d..2e01dca 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-opencv.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-opencv.html
@@ -6,7 +6,7 @@
<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
<link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
<link rel="up" href="ch02.html" title="gst-plugins-bad Plugins">
-<link rel="prev" href="gst-plugins-bad-plugins-plugin-openal.html" title="openal">
+<link rel="prev" href="gst-plugins-bad-plugins-plugin-opengl.html" title="opengl">
<link rel="next" href="gst-plugins-bad-plugins-plugin-pcapparse.html" title="pcapparse">
<meta name="generator" content="GTK-Doc V1.25 (XML mode)">
<link rel="stylesheet" href="style.css" type="text/css">
@@ -16,7 +16,7 @@
<td width="100%" align="left" class="shortcuts"></td>
<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
<td><a accesskey="u" href="ch02.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
-<td><a accesskey="p" href="gst-plugins-bad-plugins-plugin-openal.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="p" href="gst-plugins-bad-plugins-plugin-opengl.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
<td><a accesskey="n" href="gst-plugins-bad-plugins-plugin-pcapparse.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
</tr></table>
<div class="refentry">
@@ -29,7 +29,7 @@
<td class="gallery_image" valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="id-1.3.35.3"></a><h2>Plugin Information</h2>
+<a name="id-1.3.36.3"></a><h2>Plugin Information</h2>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
@@ -42,7 +42,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
@@ -60,7 +60,7 @@
</table></div>
</div>
<div class="refsect1">
-<a name="id-1.3.35.4"></a><h2>Elements</h2>
+<a name="id-1.3.36.4"></a><h2>Elements</h2>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-opengl.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-opengl.html
new file mode 100644
index 0000000..a62b994
--- /dev/null
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-opengl.html
@@ -0,0 +1,257 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>opengl: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
+<link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
+<link rel="up" href="ch02.html" title="gst-plugins-bad Plugins">
+<link rel="prev" href="gst-plugins-bad-plugins-plugin-openal.html" title="openal">
+<link rel="next" href="gst-plugins-bad-plugins-plugin-opencv.html" title="opencv">
+<meta name="generator" content="GTK-Doc V1.25 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
+<td width="100%" align="left" class="shortcuts"></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
+<td><a accesskey="u" href="ch02.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
+<td><a accesskey="p" href="gst-plugins-bad-plugins-plugin-openal.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="gst-plugins-bad-plugins-plugin-opencv.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="gst-plugins-bad-plugins-plugin-opengl"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle">opengl</span></h2>
+<p>opengl — <a name="plugin-opengl"></a>OpenGL plugin</p>
+</td>
+<td class="gallery_image" valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="id-1.3.35.3"></a><h2>Plugin Information</h2>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term">filename</span></p></td>
+<td>libgstopengl.so</td>
+</tr>
+<tr>
+<td><p><span class="term">version</span></p></td>
+<td>1.9.2</td>
+</tr>
+<tr>
+<td><p><span class="term">run-time license</span></p></td>
+<td>LGPL</td>
+</tr>
+<tr>
+<td><p><span class="term">package</span></p></td>
+<td>GStreamer Bad Plug-ins source release</td>
+</tr>
+<tr>
+<td><p><span class="term">origin</span></p></td>
+<td>Unknown package origin</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="id-1.3.35.4"></a><h2>Elements</h2>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><a class="link" href="gst-plugins-bad-plugins-glcolorbalance.html" title="glcolorbalance">glcolorbalance</a></span></p></td>
+<td>Adjusts brightness, contrast, hue, saturation on a video stream</td>
+</tr>
+<tr>
+<td><p><span class="term"><a class="link" href="gst-plugins-bad-plugins-glcolorconvert.html" title="glcolorconvert">glcolorconvert</a></span></p></td>
+<td>Converts between color spaces using OpenGL shaders</td>
+</tr>
+<tr>
+<td><p><span class="term"><a class="link" href="gst-plugins-bad-plugins-glcolorscale.html" title="glcolorscale">glcolorscale</a></span></p></td>
+<td>Colorspace converter and video scaler</td>
+</tr>
+<tr>
+<td><p><span class="term"><a class="link" href="gst-plugins-bad-plugins-gldeinterlace.html" title="gldeinterlace">gldeinterlace</a></span></p></td>
+<td>Deinterlacing based on fragment shaders</td>
+</tr>
+<tr>
+<td><p><span class="term"><a class="link" href="gst-plugins-bad-plugins-gldifferencematte.html" title="gldifferencematte">gldifferencematte</a></span></p></td>
+<td>Saves a background frame and replace it with a pixbuf</td>
+</tr>
+<tr>
+<td><p><span class="term"><a class="link" href="gst-plugins-bad-plugins-gldownload.html" title="gldownload">gldownload</a></span></p></td>
+<td>Downloads data from OpenGL</td>
+</tr>
+<tr>
+<td><p><span class="term"><a class="link" href="gst-plugins-bad-plugins-gleffects.html" title="gleffects">gleffects</a></span></p></td>
+<td>GL Shading Language effects</td>
+</tr>
+<tr>
+<td><p><span class="term">gleffects_blur</span></p></td>
+<td>GL Shading Language effects - Blur with 9x9 separable convolution Effect</td>
+</tr>
+<tr>
+<td><p><span class="term">gleffects_bulge</span></p></td>
+<td>GL Shading Language effects - Bulge Effect</td>
+</tr>
+<tr>
+<td><p><span class="term">gleffects_fisheye</span></p></td>
+<td>GL Shading Language effects - FishEye Effect</td>
+</tr>
+<tr>
+<td><p><span class="term">gleffects_glow</span></p></td>
+<td>GL Shading Language effects - Glow Lighting Effect</td>
+</tr>
+<tr>
+<td><p><span class="term">gleffects_heat</span></p></td>
+<td>GL Shading Language effects - Heat Signature Effect</td>
+</tr>
+<tr>
+<td><p><span class="term">gleffects_identity</span></p></td>
+<td>GL Shading Language effects - Do nothing Effect</td>
+</tr>
+<tr>
+<td><p><span class="term">gleffects_laplacian</span></p></td>
+<td>GL Shading Language effects - Laplacian Convolution Demo Effect</td>
+</tr>
+<tr>
+<td><p><span class="term">gleffects_lumaxpro</span></p></td>
+<td>GL Shading Language effects - Luma Cross Processing Effect</td>
+</tr>
+<tr>
+<td><p><span class="term">gleffects_mirror</span></p></td>
+<td>GL Shading Language effects - Mirror Effect</td>
+</tr>
+<tr>
+<td><p><span class="term">gleffects_sepia</span></p></td>
+<td>GL Shading Language effects - Sepia Toning Effect</td>
+</tr>
+<tr>
+<td><p><span class="term">gleffects_sin</span></p></td>
+<td>GL Shading Language effects - All Grey but Red Effect</td>
+</tr>
+<tr>
+<td><p><span class="term">gleffects_sobel</span></p></td>
+<td>GL Shading Language effects - Sobel edge detection Effect</td>
+</tr>
+<tr>
+<td><p><span class="term">gleffects_square</span></p></td>
+<td>GL Shading Language effects - Square Effect</td>
+</tr>
+<tr>
+<td><p><span class="term">gleffects_squeeze</span></p></td>
+<td>GL Shading Language effects - Squeeze Effect</td>
+</tr>
+<tr>
+<td><p><span class="term">gleffects_stretch</span></p></td>
+<td>GL Shading Language effects - Stretch Effect</td>
+</tr>
+<tr>
+<td><p><span class="term">gleffects_tunnel</span></p></td>
+<td>GL Shading Language effects - Light Tunnel Effect</td>
+</tr>
+<tr>
+<td><p><span class="term">gleffects_twirl</span></p></td>
+<td>GL Shading Language effects - Twirl Effect</td>
+</tr>
+<tr>
+<td><p><span class="term">gleffects_xpro</span></p></td>
+<td>GL Shading Language effects - Cross Processing Effect</td>
+</tr>
+<tr>
+<td><p><span class="term">gleffects_xray</span></p></td>
+<td>GL Shading Language effects - Glowing negative effect</td>
+</tr>
+<tr>
+<td><p><span class="term"><a class="link" href="gst-plugins-bad-plugins-glfilterapp.html" title="glfilterapp">glfilterapp</a></span></p></td>
+<td>Use client callbacks to define the scene</td>
+</tr>
+<tr>
+<td><p><span class="term"><a class="link" href="gst-plugins-bad-plugins-glfilterbin.html" title="glfilterbin">glfilterbin</a></span></p></td>
+<td>Infrastructure to process GL textures</td>
+</tr>
+<tr>
+<td><p><span class="term"><a class="link" href="gst-plugins-bad-plugins-glfiltercube.html" title="glfiltercube">glfiltercube</a></span></p></td>
+<td>Map input texture on the 6 cube faces</td>
+</tr>
+<tr>
+<td><p><span class="term"><a class="link" href="gst-plugins-bad-plugins-glfilterglass.html" title="glfilterglass">glfilterglass</a></span></p></td>
+<td>Glass Filter</td>
+</tr>
+<tr>
+<td><p><span class="term"><a class="link" href="gst-plugins-bad-plugins-glimagesink.html" title="glimagesink">glimagesink</a></span></p></td>
+<td>Infrastructure to process GL textures</td>
+</tr>
+<tr>
+<td><p><span class="term"><a class="link" href="gst-plugins-bad-plugins-glimagesinkelement.html" title="glimagesinkelement">glimagesinkelement</a></span></p></td>
+<td>A videosink based on OpenGL</td>
+</tr>
+<tr>
+<td><p><span class="term"><a class="link" href="gst-plugins-bad-plugins-glmixerbin.html" title="glmixerbin">glmixerbin</a></span></p></td>
+<td>OpenGL video_mixer empty bin</td>
+</tr>
+<tr>
+<td><p><span class="term"><a class="link" href="gst-plugins-bad-plugins-glmosaic.html" title="glmosaic">glmosaic</a></span></p></td>
+<td>OpenGL mosaic</td>
+</tr>
+<tr>
+<td><p><span class="term"><a class="link" href="gst-plugins-bad-plugins-gloverlay.html" title="gloverlay">gloverlay</a></span></p></td>
+<td>Overlay GL video texture with a JPEG/PNG image</td>
+</tr>
+<tr>
+<td><p><span class="term"><a class="link" href="gst-plugins-bad-plugins-glshader.html" title="glshader">glshader</a></span></p></td>
+<td>Perform operations with a GLSL shader</td>
+</tr>
+<tr>
+<td><p><span class="term"><a class="link" href="gst-plugins-bad-plugins-glsinkbin.html" title="glsinkbin">glsinkbin</a></span></p></td>
+<td>Infrastructure to process GL textures</td>
+</tr>
+<tr>
+<td><p><span class="term"><a class="link" href="gst-plugins-bad-plugins-glsrcbin.html" title="glsrcbin">glsrcbin</a></span></p></td>
+<td>Infrastructure to process GL textures</td>
+</tr>
+<tr>
+<td><p><span class="term"><a class="link" href="gst-plugins-bad-plugins-glstereomix.html" title="glstereomix">glstereomix</a></span></p></td>
+<td>OpenGL stereo video combiner</td>
+</tr>
+<tr>
+<td><p><span class="term"><a class="link" href="gst-plugins-bad-plugins-glstereosplit.html" title="glstereosplit">glstereosplit</a></span></p></td>
+<td>Splits a stereoscopic stream into separate left/right streams</td>
+</tr>
+<tr>
+<td><p><span class="term"><a class="link" href="gst-plugins-bad-plugins-gltestsrc.html" title="gltestsrc">gltestsrc</a></span></p></td>
+<td>Creates a test video stream</td>
+</tr>
+<tr>
+<td><p><span class="term"><a class="link" href="gst-plugins-bad-plugins-glupload.html" title="glupload">glupload</a></span></p></td>
+<td>Uploads data into OpenGL</td>
+</tr>
+<tr>
+<td><p><span class="term"><a class="link" href="gst-plugins-bad-plugins-glvideomixer.html" title="glvideomixer">glvideomixer</a></span></p></td>
+<td>OpenGL video_mixer bin</td>
+</tr>
+<tr>
+<td><p><span class="term"><a class="link" href="gst-plugins-bad-plugins-glvideomixerelement.html" title="glvideomixerelement">glvideomixerelement</a></span></p></td>
+<td>OpenGL video_mixer</td>
+</tr>
+<tr>
+<td><p><span class="term"><a class="link" href="gst-plugins-bad-plugins-glviewconvert.html" title="glviewconvert">glviewconvert</a></span></p></td>
+<td>Convert stereoscopic/multiview video formats</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<div class="footer">
+<hr>Generated by GTK-Doc V1.25</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-pcapparse.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-pcapparse.html
index 7763f8b..44cab25 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-pcapparse.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-pcapparse.html
@@ -29,7 +29,7 @@
<td class="gallery_image" valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="id-1.3.36.3"></a><h2>Plugin Information</h2>
+<a name="id-1.3.37.3"></a><h2>Plugin Information</h2>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
@@ -42,7 +42,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
@@ -60,7 +60,7 @@
</table></div>
</div>
<div class="refsect1">
-<a name="id-1.3.36.4"></a><h2>Elements</h2>
+<a name="id-1.3.37.4"></a><h2>Elements</h2>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-rawparse.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-rawparse.html
index fb60a89..e2d5331 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-rawparse.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-rawparse.html
@@ -29,7 +29,7 @@
<td class="gallery_image" valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="id-1.3.37.3"></a><h2>Plugin Information</h2>
+<a name="id-1.3.38.3"></a><h2>Plugin Information</h2>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
@@ -42,7 +42,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
@@ -60,7 +60,7 @@
</table></div>
</div>
<div class="refsect1">
-<a name="id-1.3.37.4"></a><h2>Elements</h2>
+<a name="id-1.3.38.4"></a><h2>Elements</h2>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
@@ -68,16 +68,28 @@
</colgroup>
<tbody>
<tr>
-<td><p><span class="term">audioparse</span></p></td>
-<td>Converts stream into audio frames</td>
+<td><p><span class="term"><a class="link" href="gst-plugins-bad-plugins-audioparse.html" title="audioparse">audioparse</a></span></p></td>
+<td>Converts stream into audio frames (deprecated: use rawaudioparse instead)</td>
</tr>
<tr>
-<td><p><span class="term">unalignedaudioparse</span></p></td>
+<td><p><span class="term"><a class="link" href="gst-plugins-bad-plugins-rawaudioparse.html" title="rawaudioparse">rawaudioparse</a></span></p></td>
+<td>Converts unformatted data streams into timestamped raw audio frames</td>
+</tr>
+<tr>
+<td><p><span class="term"><a class="link" href="gst-plugins-bad-plugins-rawvideoparse.html" title="rawvideoparse">rawvideoparse</a></span></p></td>
+<td>Converts unformatted data streams into timestamped raw video frames</td>
+</tr>
+<tr>
+<td><p><span class="term"><a class="link" href="gst-plugins-bad-plugins-unalignedaudioparse.html" title="unalignedaudioparse">unalignedaudioparse</a></span></p></td>
<td>Parse unaligned raw audio data</td>
</tr>
<tr>
+<td><p><span class="term"><a class="link" href="gst-plugins-bad-plugins-unalignedvideoparse.html" title="unalignedvideoparse">unalignedvideoparse</a></span></p></td>
+<td>Parse unaligned raw video data</td>
+</tr>
+<tr>
<td><p><span class="term"><a class="link" href="gst-plugins-bad-plugins-videoparse.html" title="videoparse">videoparse</a></span></p></td>
-<td>Converts stream into video frames</td>
+<td>Converts stream into video frames (deprecated: use rawvideoparse instead)</td>
</tr>
</tbody>
</table></div>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-rfbsrc.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-rfbsrc.html
index 27ae49c..b57ed28 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-rfbsrc.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-rfbsrc.html
@@ -29,7 +29,7 @@
<td class="gallery_image" valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="id-1.3.38.3"></a><h2>Plugin Information</h2>
+<a name="id-1.3.39.3"></a><h2>Plugin Information</h2>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
@@ -42,7 +42,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
@@ -60,7 +60,7 @@
</table></div>
</div>
<div class="refsect1">
-<a name="id-1.3.38.4"></a><h2>Elements</h2>
+<a name="id-1.3.39.4"></a><h2>Elements</h2>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-rtmp.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-rtmp.html
index 12ec18a..3423ad4 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-rtmp.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-rtmp.html
@@ -29,7 +29,7 @@
<td class="gallery_image" valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="id-1.3.39.3"></a><h2>Plugin Information</h2>
+<a name="id-1.3.40.3"></a><h2>Plugin Information</h2>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
@@ -42,7 +42,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
@@ -60,7 +60,7 @@
</table></div>
</div>
<div class="refsect1">
-<a name="id-1.3.39.4"></a><h2>Elements</h2>
+<a name="id-1.3.40.4"></a><h2>Elements</h2>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-sdp.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-sdp.html
index 1a31961..50b15e5 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-sdp.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-sdp.html
@@ -29,7 +29,7 @@
<td class="gallery_image" valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="id-1.3.40.3"></a><h2>Plugin Information</h2>
+<a name="id-1.3.41.3"></a><h2>Plugin Information</h2>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
@@ -42,7 +42,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
@@ -60,7 +60,7 @@
</table></div>
</div>
<div class="refsect1">
-<a name="id-1.3.40.4"></a><h2>Elements</h2>
+<a name="id-1.3.41.4"></a><h2>Elements</h2>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-shm.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-shm.html
index dcff68b..bfac86d 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-shm.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-shm.html
@@ -29,7 +29,7 @@
<td class="gallery_image" valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="id-1.3.41.3"></a><h2>Plugin Information</h2>
+<a name="id-1.3.42.3"></a><h2>Plugin Information</h2>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
@@ -42,7 +42,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
@@ -60,7 +60,7 @@
</table></div>
</div>
<div class="refsect1">
-<a name="id-1.3.41.4"></a><h2>Elements</h2>
+<a name="id-1.3.42.4"></a><h2>Elements</h2>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-soundtouch.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-soundtouch.html
index 4da2c41..ceb7cc4 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-soundtouch.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-soundtouch.html
@@ -29,7 +29,7 @@
<td class="gallery_image" valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="id-1.3.42.3"></a><h2>Plugin Information</h2>
+<a name="id-1.3.43.3"></a><h2>Plugin Information</h2>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
@@ -42,7 +42,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
@@ -60,7 +60,7 @@
</table></div>
</div>
<div class="refsect1">
-<a name="id-1.3.42.4"></a><h2>Elements</h2>
+<a name="id-1.3.43.4"></a><h2>Elements</h2>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-speed.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-speed.html
index dcc66da..74111a8 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-speed.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-speed.html
@@ -29,7 +29,7 @@
<td class="gallery_image" valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="id-1.3.43.3"></a><h2>Plugin Information</h2>
+<a name="id-1.3.44.3"></a><h2>Plugin Information</h2>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
@@ -42,7 +42,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
@@ -60,7 +60,7 @@
</table></div>
</div>
<div class="refsect1">
-<a name="id-1.3.43.4"></a><h2>Elements</h2>
+<a name="id-1.3.44.4"></a><h2>Elements</h2>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-voaacenc.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-voaacenc.html
index a441485..4a6c124 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-voaacenc.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-voaacenc.html
@@ -29,7 +29,7 @@
<td class="gallery_image" valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="id-1.3.44.3"></a><h2>Plugin Information</h2>
+<a name="id-1.3.45.3"></a><h2>Plugin Information</h2>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
@@ -42,7 +42,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
@@ -60,7 +60,7 @@
</table></div>
</div>
<div class="refsect1">
-<a name="id-1.3.44.4"></a><h2>Elements</h2>
+<a name="id-1.3.45.4"></a><h2>Elements</h2>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-voamrwbenc.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-voamrwbenc.html
index a544592..fc5f1d2 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-voamrwbenc.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-voamrwbenc.html
@@ -29,7 +29,7 @@
<td class="gallery_image" valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="id-1.3.45.3"></a><h2>Plugin Information</h2>
+<a name="id-1.3.46.3"></a><h2>Plugin Information</h2>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
@@ -42,7 +42,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
@@ -60,7 +60,7 @@
</table></div>
</div>
<div class="refsect1">
-<a name="id-1.3.45.4"></a><h2>Elements</h2>
+<a name="id-1.3.46.4"></a><h2>Elements</h2>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-webrtcdsp.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-webrtcdsp.html
index 6cc06fd..0b51ad0 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-webrtcdsp.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-webrtcdsp.html
@@ -29,7 +29,7 @@
<td class="gallery_image" valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="id-1.3.46.3"></a><h2>Plugin Information</h2>
+<a name="id-1.3.47.3"></a><h2>Plugin Information</h2>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
@@ -42,7 +42,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.9.0.1</td>
+<td>1.9.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
@@ -60,7 +60,7 @@
</table></div>
</div>
<div class="refsect1">
-<a name="id-1.3.46.4"></a><h2>Elements</h2>
+<a name="id-1.3.47.4"></a><h2>Elements</h2>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-zbar.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-zbar.html
index b0621c0..6995b7c 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-zbar.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-zbar.html
@@ -28,7 +28,7 @@
<td class="gallery_image" valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="id-1.3.47.3"></a><h2>Plugin Information</h2>
+<a name="id-1.3.48.3"></a><h2>Plugin Information</h2>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
@@ -41,7 +41,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
@@ -59,7 +59,7 @@
</table></div>
</div>
<div class="refsect1">
-<a name="id-1.3.47.4"></a><h2>Elements</h2>
+<a name="id-1.3.48.4"></a><h2>Elements</h2>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-rawaudioparse.html b/docs/plugins/html/gst-plugins-bad-plugins-rawaudioparse.html
new file mode 100644
index 0000000..9aea9a4
--- /dev/null
+++ b/docs/plugins/html/gst-plugins-bad-plugins-rawaudioparse.html
@@ -0,0 +1,335 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>rawaudioparse: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
+<link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
+<link rel="up" href="ch01.html" title="gst-plugins-bad Elements">
+<link rel="prev" href="gst-plugins-bad-plugins-pinch.html" title="pinch">
+<link rel="next" href="gst-plugins-bad-plugins-rawvideoparse.html" title="rawvideoparse">
+<meta name="generator" content="GTK-Doc V1.25 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
+<td width="100%" align="left" class="shortcuts">
+<a href="#" class="shortcut">Top</a><span id="nav_description"> <span class="dim">|</span>
+ <a href="#gst-plugins-bad-plugins-rawaudioparse.description" class="shortcut">Description</a></span><span id="nav_hierarchy"> <span class="dim">|</span>
+ <a href="#gst-plugins-bad-plugins-rawaudioparse.object-hierarchy" class="shortcut">Object Hierarchy</a></span><span id="nav_properties"> <span class="dim">|</span>
+ <a href="#gst-plugins-bad-plugins-rawaudioparse.properties" class="shortcut">Properties</a></span>
+</td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
+<td><a accesskey="p" href="gst-plugins-bad-plugins-pinch.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="gst-plugins-bad-plugins-rawvideoparse.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="gst-plugins-bad-plugins-rawaudioparse"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-bad-plugins-rawaudioparse.top_of_page"></a>rawaudioparse</span></h2>
+<p>rawaudioparse</p>
+</td>
+<td class="gallery_image" valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-rawaudioparse.properties"></a><h2>Properties</h2>
+<div class="informaltable"><table class="informaltable" border="0">
+<colgroup>
+<col width="150px" class="properties_type">
+<col width="300px" class="properties_name">
+<col width="200px" class="properties_flags">
+</colgroup>
+<tbody>
+<tr>
+<td class="property_type">
+<a href="/usr/share/gtk-doc/html/gobjectgobject-Value-arrays.html#GValueArray"><span class="type">GValueArray</span></a> *</td>
+<td class="property_name"><a class="link" href="gst-plugins-bad-plugins-rawaudioparse.html#GstRawAudioParse--channel-positions" title="The “channel-positions” property">channel-positions</a></td>
+<td class="property_flags">Read / Write</td>
+</tr>
+<tr>
+<td class="property_type"><span class="type">GstRawAudioParseFormat</span></td>
+<td class="property_name"><a class="link" href="gst-plugins-bad-plugins-rawaudioparse.html#GstRawAudioParse--format" title="The “format” property">format</a></td>
+<td class="property_flags">Read / Write</td>
+</tr>
+<tr>
+<td class="property_type"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></td>
+<td class="property_name"><a class="link" href="gst-plugins-bad-plugins-rawaudioparse.html#GstRawAudioParse--interleaved" title="The “interleaved” property">interleaved</a></td>
+<td class="property_flags">Read / Write</td>
+</tr>
+<tr>
+<td class="property_type"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint"><span class="type">gint</span></a></td>
+<td class="property_name"><a class="link" href="gst-plugins-bad-plugins-rawaudioparse.html#GstRawAudioParse--num-channels" title="The “num-channels” property">num-channels</a></td>
+<td class="property_flags">Read / Write</td>
+</tr>
+<tr>
+<td class="property_type"><a href="/usr/share/gtk-doc/html/gst-plugins-base-libs-1.0gst-plugins-base-libs-gstaudio.html#GstAudioFormat"><span class="type">GstAudioFormat</span></a></td>
+<td class="property_name"><a class="link" href="gst-plugins-bad-plugins-rawaudioparse.html#GstRawAudioParse--pcm-format" title="The “pcm-format” property">pcm-format</a></td>
+<td class="property_flags">Read / Write</td>
+</tr>
+<tr>
+<td class="property_type"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint"><span class="type">gint</span></a></td>
+<td class="property_name"><a class="link" href="gst-plugins-bad-plugins-rawaudioparse.html#GstRawAudioParse--sample-rate" title="The “sample-rate” property">sample-rate</a></td>
+<td class="property_flags">Read / Write</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<a name="GstRawAudioParse"></a><div class="refsect1">
+<a name="gst-plugins-bad-plugins-rawaudioparse.other"></a><h2>Types and Values</h2>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="name">
+<col class="description">
+</colgroup>
+<tbody><tr>
+<td class="datatype_keyword">struct</td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-plugins-rawaudioparse.html#GstRawAudioParse-struct" title="struct GstRawAudioParse">GstRawAudioParse</a></td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-rawaudioparse.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="screen"> <a href="/usr/share/gtk-doc/html/gobjectgobject-The-Base-Object-Type.html#GObject-struct">GObject</a>
+ <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gobjectgobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
+ <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstObject.html#GstObject-struct">GstObject</a>
+ <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#GstElement-struct">GstElement</a>
+ <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-libs-1.0GstBaseParse.html#GstBaseParse-struct">GstBaseParse</a>
+ <span class="lineart">╰──</span> GstRawBaseParse
+ <span class="lineart">╰──</span> GstRawAudioParse
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-rawaudioparse.description"></a><h2>Description</h2>
+<p>This element parses incoming data as raw audio samples and timestamps it.
+It also handles seek queries in said raw audio data, and ensures that output
+buffers contain an integer number of samples, even if the input buffers don't.
+For example, with sample format S16LE and 2 channels, an input buffer of 411
+bytes contains 102.75 samples. rawaudioparse will then output 102 samples
+(= 408 bytes) and keep the remaining 3 bytes. These will then be prepended to
+the next input data.</p>
+<p>The element implements the properties and sink caps configuration as specified
+in the <span class="type">GstRawBaseParse</span> documentation. The properties configuration can be
+modified by using the sample-rate, num-channels, channel-positions, format,
+and pcm-format properties.</p>
+<p>Currently, this parser supports raw data in a-law, mu-law, or linear PCM format.</p>
+<p>To facilitate operation with the unalignedaudioparse element, rawaudioparse
+supports the "audio/x-unaligned-raw" media type. This is treated identically to
+"audio/x-raw", except that it is used by source elements which do not guarantee
+that the buffers they push out are timestamped and contain an integer amount of
+samples (see the 411 bytes example above). By using a different media type, it
+is guaranteed that unalignedaudioparse is autoplugged, making sure that the
+autoplugged chain does not push unparsed content downstream. The source caps'
+media type with linear PCM data is always "audio/x-raw", even if the sink caps
+use "audio/x-unaligned-raw".</p>
+<p>The channel-positions property can be used to set explicit position information
+for each channel. If the array that is passed to this property does not match
+the number of channels indicated by num-channels, then said number of channels
+is updated to the array length. If channel-positions is NULL, then the default
+GStreamer positioning is used. This property is also useful for swapping left
+and right in a stereo signal for example.</p>
+<div class="refsect2">
+<a name="id-1.2.106.7.7"></a><h3>Example pipelines</h3>
+<div class="informalexample">
+ <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
+ <tbody>
+ <tr>
+ <td class="listing_lines" align="right"><pre>1
+2</pre></td>
+ <td class="listing_code"><pre class="programlisting">gst<span class="gtkdoc opt">-</span>launch<span class="gtkdoc opt">-</span><span class="number">1.0</span> souphttpsrc http<span class="gtkdoc opt">:</span><span class="gtkdoc slc">//my-dlna-server/track.l16 \</span>
+ rawaudioparse <span class="gtkdoc opt">!</span> audioconvert <span class="gtkdoc opt">!</span> audioresample <span class="gtkdoc opt">!</span> autoaudiosink</pre></td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+ Receive L16 data from a DLNA server, parse and timestamp it with
+rawaudioparse, and play it. use-sink-caps is set to true since souphttpsrc
+will set its source pad's caps to audio/x-unaligned-raw for the L16 stream.
+<div class="informalexample">
+ <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
+ <tbody>
+ <tr>
+ <td class="listing_lines" align="right"><pre>1
+2
+3</pre></td>
+ <td class="listing_code"><pre class="programlisting">gst<span class="gtkdoc opt">-</span>launch<span class="gtkdoc opt">-</span><span class="number">1.0</span> filesrc location<span class="gtkdoc opt">=</span>audio<span class="gtkdoc opt">.</span>raw <span class="gtkdoc opt">!</span> rawaudioparse use<span class="gtkdoc opt">-</span>sink<span class="gtkdoc opt">-</span>caps<span class="gtkdoc opt">=</span><span class="keyword">false</span> \
+ format<span class="gtkdoc opt">=</span>pcm pcm<span class="gtkdoc opt">-</span>format<span class="gtkdoc opt">=</span>s16le sample<span class="gtkdoc opt">-</span>rate<span class="gtkdoc opt">=</span><span class="number">48000</span> num<span class="gtkdoc opt">-</span>channels<span class="gtkdoc opt">=</span><span class="number">2</span> \
+ audioconvert <span class="gtkdoc opt">!</span> audioresample <span class="gtkdoc opt">!</span> autoaudiosink</pre></td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+ Read raw data from a local file and parse it as PCM data with 48000 Hz sample
+rate, signed 16 bit integer samples, and 2 channels. use-sink-caps is set to
+false to ensure the property information is used and the parser does not expect
+audio/x-raw or audio/x-unaligned-raw caps.
+</div>
+<div class="refsynopsisdiv">
+<h2>Synopsis</h2>
+<div class="refsect2">
+<a name="id-1.2.106.7.8.1"></a><h3>Element Information</h3>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term">plugin</span></p></td>
+<td>
+ <a class="link" href="gst-plugins-bad-plugins-plugin-rawparse.html#plugin-rawparse">rawparse</a>
+ </td>
+</tr>
+<tr>
+<td><p><span class="term">author</span></p></td>
+<td>Carlos Rafael Giani <dv@pseudoterminal.org></td>
+</tr>
+<tr>
+<td><p><span class="term">class</span></p></td>
+<td>Codec/Parser/Audio</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="id-1.2.106.7.8.2"></a><h3>Element Pads</h3>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>audio/x-unaligned-raw, format=(string){ S8, U8, S16LE, S16BE, U16LE, U16BE, S24_32LE, S24_32BE, U24_32LE, U24_32BE, S32LE, S32BE, U32LE, U32BE, S24LE, S24BE, U24LE, U24BE, S20LE, S20BE, U20LE, U20BE, S18LE, S18BE, U18LE, U18BE, F32LE, F32BE, F64LE, F64BE }, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ], layout=(string){ interleaved, non-interleaved }</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> audio/x-raw, format=(string){ S8, U8, S16LE, S16BE, U16LE, U16BE, S24_32LE, S24_32BE, U24_32LE, U24_32BE, S32LE, S32BE, U32LE, U32BE, S24LE, S24BE, U24LE, U24BE, S20LE, S20BE, U20LE, U20BE, S18LE, S18BE, U18LE, U18BE, F32LE, F32BE, F64LE, F64BE }, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ], layout=(string){ interleaved, non-interleaved }</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> audio/x-alaw, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> audio/x-mulaw, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ]</td>
+</tr>
+</tbody>
+</table></div>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>src</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>source</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>audio/x-raw, format=(string){ S8, U8, S16LE, S16BE, U16LE, U16BE, S24_32LE, S24_32BE, U24_32LE, U24_32BE, S32LE, S32BE, U32LE, U32BE, S24LE, S24BE, U24LE, U24BE, S20LE, S20BE, U20LE, U20BE, S18LE, S18BE, U18LE, U18BE, F32LE, F32BE, F64LE, F64BE }, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ], layout=(string){ interleaved, non-interleaved }</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> audio/x-alaw, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> audio/x-mulaw, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ]</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-rawaudioparse.functions_details"></a><h2>Functions</h2>
+<p></p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-rawaudioparse.other_details"></a><h2>Types and Values</h2>
+<div class="refsect2">
+<a name="GstRawAudioParse-struct"></a><h3>struct GstRawAudioParse</h3>
+<pre class="programlisting">struct GstRawAudioParse;</pre>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-rawaudioparse.property-details"></a><h2>Property Details</h2>
+<div class="refsect2">
+<a name="GstRawAudioParse--channel-positions"></a><h3>The <code class="literal">“channel-positions”</code> property</h3>
+<pre class="programlisting"> “channel-positions” <a href="/usr/share/gtk-doc/html/gobjectgobject-Value-arrays.html#GValueArray"><span class="type">GValueArray</span></a> *</pre>
+<p>Channel positions used on the output.</p>
+<p>Flags: Read / Write</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstRawAudioParse--format"></a><h3>The <code class="literal">“format”</code> property</h3>
+<pre class="programlisting"> “format” <span class="type">GstRawAudioParseFormat</span></pre>
+<p>Format of the raw audio stream.</p>
+<p>Flags: Read / Write</p>
+<p>Default value: PCM</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstRawAudioParse--interleaved"></a><h3>The <code class="literal">“interleaved”</code> property</h3>
+<pre class="programlisting"> “interleaved” <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></pre>
+<p>True if audio has interleaved layout.</p>
+<p>Flags: Read / Write</p>
+<p>Default value: TRUE</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstRawAudioParse--num-channels"></a><h3>The <code class="literal">“num-channels”</code> property</h3>
+<pre class="programlisting"> “num-channels” <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint"><span class="type">gint</span></a></pre>
+<p>Number of channels in raw stream.</p>
+<p>Flags: Read / Write</p>
+<p>Allowed values: >= 1</p>
+<p>Default value: 2</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstRawAudioParse--pcm-format"></a><h3>The <code class="literal">“pcm-format”</code> property</h3>
+<pre class="programlisting"> “pcm-format” <a href="/usr/share/gtk-doc/html/gst-plugins-base-libs-1.0gst-plugins-base-libs-gstaudio.html#GstAudioFormat"><span class="type">GstAudioFormat</span></a></pre>
+<p>Format of audio samples in PCM stream (ignored if format property is not set to pcm).</p>
+<p>Flags: Read / Write</p>
+<p>Default value: GST_AUDIO_FORMAT_UNKNOWN</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstRawAudioParse--sample-rate"></a><h3>The <code class="literal">“sample-rate”</code> property</h3>
+<pre class="programlisting"> “sample-rate” <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint"><span class="type">gint</span></a></pre>
+<p>Rate of audio samples in raw stream.</p>
+<p>Flags: Read / Write</p>
+<p>Allowed values: >= 1</p>
+<p>Default value: 44100</p>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>Generated by GTK-Doc V1.25</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-rawvideoparse.html b/docs/plugins/html/gst-plugins-bad-plugins-rawvideoparse.html
new file mode 100644
index 0000000..2778cd1
--- /dev/null
+++ b/docs/plugins/html/gst-plugins-bad-plugins-rawvideoparse.html
@@ -0,0 +1,372 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>rawvideoparse: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
+<link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
+<link rel="up" href="ch01.html" title="gst-plugins-bad Elements">
+<link rel="prev" href="gst-plugins-bad-plugins-rawaudioparse.html" title="rawaudioparse">
+<link rel="next" href="gst-plugins-bad-plugins-rfbsrc.html" title="rfbsrc">
+<meta name="generator" content="GTK-Doc V1.25 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
+<td width="100%" align="left" class="shortcuts">
+<a href="#" class="shortcut">Top</a><span id="nav_description"> <span class="dim">|</span>
+ <a href="#gst-plugins-bad-plugins-rawvideoparse.description" class="shortcut">Description</a></span><span id="nav_hierarchy"> <span class="dim">|</span>
+ <a href="#gst-plugins-bad-plugins-rawvideoparse.object-hierarchy" class="shortcut">Object Hierarchy</a></span><span id="nav_properties"> <span class="dim">|</span>
+ <a href="#gst-plugins-bad-plugins-rawvideoparse.properties" class="shortcut">Properties</a></span>
+</td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
+<td><a accesskey="p" href="gst-plugins-bad-plugins-rawaudioparse.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="gst-plugins-bad-plugins-rfbsrc.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="gst-plugins-bad-plugins-rawvideoparse"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-bad-plugins-rawvideoparse.top_of_page"></a>rawvideoparse</span></h2>
+<p>rawvideoparse</p>
+</td>
+<td class="gallery_image" valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-rawvideoparse.properties"></a><h2>Properties</h2>
+<div class="informaltable"><table class="informaltable" border="0">
+<colgroup>
+<col width="150px" class="properties_type">
+<col width="300px" class="properties_name">
+<col width="200px" class="properties_flags">
+</colgroup>
+<tbody>
+<tr>
+<td class="property_type"><a href="/usr/share/gtk-doc/html/gst-plugins-base-libs-1.0gst-plugins-base-libs-gstvideo.html#GstVideoFormat"><span class="type">GstVideoFormat</span></a></td>
+<td class="property_name"><a class="link" href="gst-plugins-bad-plugins-rawvideoparse.html#GstRawVideoParse--format" title="The “format” property">format</a></td>
+<td class="property_flags">Read / Write</td>
+</tr>
+<tr>
+<td class="property_type"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="type">guint</span></a></td>
+<td class="property_name"><a class="link" href="gst-plugins-bad-plugins-rawvideoparse.html#GstRawVideoParse--frame-stride" title="The “frame-stride” property">frame-stride</a></td>
+<td class="property_flags">Read / Write</td>
+</tr>
+<tr>
+<td class="property_type"><span class="type">GstFraction</span></td>
+<td class="property_name"><a class="link" href="gst-plugins-bad-plugins-rawvideoparse.html#GstRawVideoParse--framerate" title="The “framerate” property">framerate</a></td>
+<td class="property_flags">Read / Write</td>
+</tr>
+<tr>
+<td class="property_type"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint"><span class="type">gint</span></a></td>
+<td class="property_name"><a class="link" href="gst-plugins-bad-plugins-rawvideoparse.html#GstRawVideoParse--height" title="The “height” property">height</a></td>
+<td class="property_flags">Read / Write</td>
+</tr>
+<tr>
+<td class="property_type"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></td>
+<td class="property_name"><a class="link" href="gst-plugins-bad-plugins-rawvideoparse.html#GstRawVideoParse--interlaced" title="The “interlaced” property">interlaced</a></td>
+<td class="property_flags">Read / Write</td>
+</tr>
+<tr>
+<td class="property_type"><span class="type">GstFraction</span></td>
+<td class="property_name"><a class="link" href="gst-plugins-bad-plugins-rawvideoparse.html#GstRawVideoParse--pixel-aspect-ratio" title="The “pixel-aspect-ratio” property">pixel-aspect-ratio</a></td>
+<td class="property_flags">Read / Write</td>
+</tr>
+<tr>
+<td class="property_type">
+<a href="/usr/share/gtk-doc/html/gobjectgobject-Value-arrays.html#GValueArray"><span class="type">GValueArray</span></a> *</td>
+<td class="property_name"><a class="link" href="gst-plugins-bad-plugins-rawvideoparse.html#GstRawVideoParse--plane-offsets" title="The “plane-offsets” property">plane-offsets</a></td>
+<td class="property_flags">Read / Write</td>
+</tr>
+<tr>
+<td class="property_type">
+<a href="/usr/share/gtk-doc/html/gobjectgobject-Value-arrays.html#GValueArray"><span class="type">GValueArray</span></a> *</td>
+<td class="property_name"><a class="link" href="gst-plugins-bad-plugins-rawvideoparse.html#GstRawVideoParse--plane-strides" title="The “plane-strides” property">plane-strides</a></td>
+<td class="property_flags">Read / Write</td>
+</tr>
+<tr>
+<td class="property_type"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></td>
+<td class="property_name"><a class="link" href="gst-plugins-bad-plugins-rawvideoparse.html#GstRawVideoParse--top-field-first" title="The “top-field-first” property">top-field-first</a></td>
+<td class="property_flags">Read / Write</td>
+</tr>
+<tr>
+<td class="property_type"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint"><span class="type">gint</span></a></td>
+<td class="property_name"><a class="link" href="gst-plugins-bad-plugins-rawvideoparse.html#GstRawVideoParse--width" title="The “width” property">width</a></td>
+<td class="property_flags">Read / Write</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<a name="GstRawVideoParse"></a><div class="refsect1">
+<a name="gst-plugins-bad-plugins-rawvideoparse.other"></a><h2>Types and Values</h2>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="name">
+<col class="description">
+</colgroup>
+<tbody><tr>
+<td class="datatype_keyword">struct</td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-plugins-rawvideoparse.html#GstRawVideoParse-struct" title="struct GstRawVideoParse">GstRawVideoParse</a></td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-rawvideoparse.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="screen"> <a href="/usr/share/gtk-doc/html/gobjectgobject-The-Base-Object-Type.html#GObject-struct">GObject</a>
+ <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gobjectgobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
+ <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstObject.html#GstObject-struct">GstObject</a>
+ <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#GstElement-struct">GstElement</a>
+ <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-libs-1.0GstBaseParse.html#GstBaseParse-struct">GstBaseParse</a>
+ <span class="lineart">╰──</span> GstRawBaseParse
+ <span class="lineart">╰──</span> GstRawVideoParse
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-rawvideoparse.description"></a><h2>Description</h2>
+<p>This element parses incoming data as raw video frames and timestamps these.
+It also handles seek queries in said raw video data, and ensures that output
+buffers contain exactly one frame, even if the input buffers contain only
+partial frames or multiple frames. In the former case, it will continue to
+receive buffers until there is enough input data to output one frame. In the
+latter case, it will extract the first frame in the buffer and output it, then
+the second one etc. until the remaining unparsed bytes aren't enough to form
+a complete frame, and it will then continue as described in the earlier case.</p>
+<p>The element implements the properties and sink caps configuration as specified
+in the <span class="type">GstRawBaseParse</span> documentation. The properties configuration can be
+modified by using the width, height, pixel-aspect-ratio, framerate, interlaced,
+top-field-first, plane-strides, plane-offsets, and frame-stride properties.</p>
+<p>If the properties configuration is used, plane strides and offsets will be
+computed by using <a href="/usr/share/gtk-doc/html/gst-plugins-base-libs-1.0gst-plugins-base-libs-gstvideo.html#gst-video-info-set-format"><code class="function">gst_video_info_set_format()</code></a>. This can be overridden by passing
+GValueArrays to the plane-offsets and plane-strides properties. When this is
+done, these custom offsets and strides are used later even if new width,
+height, format etc. property values might be set. To switch back to computed
+plane strides & offsets, pass NULL to one or both of the plane-offset and
+plane-array properties.</p>
+<p>The frame stride property is useful in cases where there is extra data between
+the frames (for example, trailing metadata, or headers). The parser calculates
+the actual frame size out of the other properties and compares it with this
+frame-stride value. If the frame stride is larger than the calculated size,
+then the extra bytes after the end of the frame are skipped. For example, with
+8-bit grayscale frames and a frame size of 100x10 pixels and a frame stride of
+1500 bytes, there are 500 excess bytes at the end of the actual frame which
+are then skipped. It is safe to set the frame stride to a value that is smaller
+than the actual frame size (in fact, its default value is 0); if it is smaller,
+then no trailing data will be skipped.</p>
+<p>If a framerate of 0 Hz is set (for example, 0/1), then output buffers will have
+no duration set. The first output buffer will have a PTS 0, all subsequent ones
+an unset PTS.</p>
+<div class="refsect2">
+<a name="id-1.2.107.7.7"></a><h3>Example pipelines</h3>
+<div class="informalexample">
+ <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
+ <tbody>
+ <tr>
+ <td class="listing_lines" align="right"><pre>1
+2</pre></td>
+ <td class="listing_code"><pre class="programlisting">gst<span class="gtkdoc opt">-</span>launch<span class="gtkdoc opt">-</span><span class="number">1.0</span> filesrc location<span class="gtkdoc opt">=</span>video<span class="gtkdoc opt">.</span>raw <span class="gtkdoc opt">!</span> rawvideoparse use<span class="gtkdoc opt">-</span>sink<span class="gtkdoc opt">-</span>caps<span class="gtkdoc opt">=</span><span class="keyword">false</span> \
+ width<span class="gtkdoc opt">=</span><span class="number">500</span> height<span class="gtkdoc opt">=</span><span class="number">400</span> format<span class="gtkdoc opt">=</span>y444 <span class="gtkdoc opt">!</span> autovideosink</pre></td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+ Read raw data from a local file and parse it as video data with 500x400 pixels
+and Y444 video format.
+<div class="informalexample">
+ <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
+ <tbody>
+ <tr>
+ <td class="listing_lines" align="right"><pre>1
+2
+3</pre></td>
+ <td class="listing_code"><pre class="programlisting">gst<span class="gtkdoc opt">-</span>launch<span class="gtkdoc opt">-</span><span class="number">1.0</span> filesrc location<span class="gtkdoc opt">=</span>video<span class="gtkdoc opt">.</span>raw <span class="gtkdoc opt">!</span> queue <span class="gtkdoc opt">!</span> <span class="string">"video/x-raw, width=320, \</span>
+<span class="string"> height=240, format=I420, framerate=1/1"</span> <span class="gtkdoc opt">!</span> rawvideoparse \
+ use<span class="gtkdoc opt">-</span>sink<span class="gtkdoc opt">-</span>caps<span class="gtkdoc opt">=</span><span class="keyword">true</span> <span class="gtkdoc opt">!</span> autovideosink</pre></td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+ Read raw data from a local file and parse it as video data with 320x240 pixels
+and I420 video format. The queue element here is to force push based scheduling.
+See the documentation in <span class="type">GstRawBaseParse</span> for the reason why.
+</div>
+<div class="refsynopsisdiv">
+<h2>Synopsis</h2>
+<div class="refsect2">
+<a name="id-1.2.107.7.8.1"></a><h3>Element Information</h3>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term">plugin</span></p></td>
+<td>
+ <a class="link" href="gst-plugins-bad-plugins-plugin-rawparse.html#plugin-rawparse">rawparse</a>
+ </td>
+</tr>
+<tr>
+<td><p><span class="term">author</span></p></td>
+<td>Carlos Rafael Giani <dv@pseudoterminal.org></td>
+</tr>
+<tr>
+<td><p><span class="term">class</span></p></td>
+<td>Codec/Parser/Video</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="id-1.2.107.7.8.2"></a><h3>Element Pads</h3>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>video/x-unaligned-raw, format=(string){ I420, YV12, YUY2, UYVY, AYUV, RGBx, BGRx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, Y41B, Y42B, YVYU, Y444, v210, v216, NV12, NV21, NV16, NV61, NV24, GRAY8, GRAY16_BE, GRAY16_LE, v308, IYU2, RGB16, BGR16, RGB15, BGR15, UYVP, A420, RGB8P, YUV9, YVU9, IYU1, ARGB64, AYUV64, r210, I420_10LE, I420_10BE, I422_10LE, I422_10BE, Y444_10LE, Y444_10BE, GBR, GBR_10LE, GBR_10BE, NV12_64Z32, A420_10LE, A420_10BE, A422_10LE, A422_10BE, A444_10LE, A444_10BE, P010_10LE, P010_10BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw, format=(string){ I420, YV12, YUY2, UYVY, AYUV, RGBx, BGRx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, Y41B, Y42B, YVYU, Y444, v210, v216, NV12, NV21, NV16, NV61, NV24, GRAY8, GRAY16_BE, GRAY16_LE, v308, IYU2, RGB16, BGR16, RGB15, BGR15, UYVP, A420, RGB8P, YUV9, YVU9, IYU1, ARGB64, AYUV64, r210, I420_10LE, I420_10BE, I422_10LE, I422_10BE, Y444_10LE, Y444_10BE, GBR, GBR_10LE, GBR_10BE, NV12_64Z32, A420_10LE, A420_10BE, A422_10LE, A422_10BE, A444_10LE, A444_10BE, P010_10LE, P010_10BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+</tbody>
+</table></div>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>src</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>source</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>video/x-raw, format=(string){ I420, YV12, YUY2, UYVY, AYUV, RGBx, BGRx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, Y41B, Y42B, YVYU, Y444, v210, v216, NV12, NV21, NV16, NV61, NV24, GRAY8, GRAY16_BE, GRAY16_LE, v308, IYU2, RGB16, BGR16, RGB15, BGR15, UYVP, A420, RGB8P, YUV9, YVU9, IYU1, ARGB64, AYUV64, r210, I420_10LE, I420_10BE, I422_10LE, I422_10BE, Y444_10LE, Y444_10BE, GBR, GBR_10LE, GBR_10BE, NV12_64Z32, A420_10LE, A420_10BE, A422_10LE, A422_10BE, A444_10LE, A444_10BE, P010_10LE, P010_10BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-rawvideoparse.functions_details"></a><h2>Functions</h2>
+<p></p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-rawvideoparse.other_details"></a><h2>Types and Values</h2>
+<div class="refsect2">
+<a name="GstRawVideoParse-struct"></a><h3>struct GstRawVideoParse</h3>
+<pre class="programlisting">struct GstRawVideoParse;</pre>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-rawvideoparse.property-details"></a><h2>Property Details</h2>
+<div class="refsect2">
+<a name="GstRawVideoParse--format"></a><h3>The <code class="literal">“format”</code> property</h3>
+<pre class="programlisting"> “format” <a href="/usr/share/gtk-doc/html/gst-plugins-base-libs-1.0gst-plugins-base-libs-gstvideo.html#GstVideoFormat"><span class="type">GstVideoFormat</span></a></pre>
+<p>Format of frames in raw stream.</p>
+<p>Flags: Read / Write</p>
+<p>Default value: GST_VIDEO_FORMAT_I420</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstRawVideoParse--frame-stride"></a><h3>The <code class="literal">“frame-stride”</code> property</h3>
+<pre class="programlisting"> “frame-stride” <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="type">guint</span></a></pre>
+<p>Stride between whole frames (0 = frames are tightly packed together).</p>
+<p>Flags: Read / Write</p>
+<p>Default value: 0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstRawVideoParse--framerate"></a><h3>The <code class="literal">“framerate”</code> property</h3>
+<pre class="programlisting"> “framerate” <span class="type">GstFraction</span></pre>
+<p>Rate of frames in raw stream.</p>
+<p>Flags: Read / Write</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstRawVideoParse--height"></a><h3>The <code class="literal">“height”</code> property</h3>
+<pre class="programlisting"> “height” <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint"><span class="type">gint</span></a></pre>
+<p>Height of frames in raw stream.</p>
+<p>Flags: Read / Write</p>
+<p>Allowed values: >= 0</p>
+<p>Default value: 240</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstRawVideoParse--interlaced"></a><h3>The <code class="literal">“interlaced”</code> property</h3>
+<pre class="programlisting"> “interlaced” <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></pre>
+<p>True if frames in raw stream are interlaced.</p>
+<p>Flags: Read / Write</p>
+<p>Default value: FALSE</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstRawVideoParse--pixel-aspect-ratio"></a><h3>The <code class="literal">“pixel-aspect-ratio”</code> property</h3>
+<pre class="programlisting"> “pixel-aspect-ratio” <span class="type">GstFraction</span></pre>
+<p>Pixel aspect ratio of frames in raw stream.</p>
+<p>Flags: Read / Write</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstRawVideoParse--plane-offsets"></a><h3>The <code class="literal">“plane-offsets”</code> property</h3>
+<pre class="programlisting"> “plane-offsets” <a href="/usr/share/gtk-doc/html/gobjectgobject-Value-arrays.html#GValueArray"><span class="type">GValueArray</span></a> *</pre>
+<p>Offsets of the planets in bytes.</p>
+<p>Flags: Read / Write</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstRawVideoParse--plane-strides"></a><h3>The <code class="literal">“plane-strides”</code> property</h3>
+<pre class="programlisting"> “plane-strides” <a href="/usr/share/gtk-doc/html/gobjectgobject-Value-arrays.html#GValueArray"><span class="type">GValueArray</span></a> *</pre>
+<p>Strides of the planets in bytes.</p>
+<p>Flags: Read / Write</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstRawVideoParse--top-field-first"></a><h3>The <code class="literal">“top-field-first”</code> property</h3>
+<pre class="programlisting"> “top-field-first” <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></pre>
+<p>True if top field in frames in raw stream come first (not used if frames aren't interlaced).</p>
+<p>Flags: Read / Write</p>
+<p>Default value: FALSE</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstRawVideoParse--width"></a><h3>The <code class="literal">“width”</code> property</h3>
+<pre class="programlisting"> “width” <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint"><span class="type">gint</span></a></pre>
+<p>Width of frames in raw stream.</p>
+<p>Flags: Read / Write</p>
+<p>Allowed values: >= 0</p>
+<p>Default value: 320</p>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>Generated by GTK-Doc V1.25</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-rfbsrc.html b/docs/plugins/html/gst-plugins-bad-plugins-rfbsrc.html
index a1d31f2..eb5f0cb 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-rfbsrc.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-rfbsrc.html
@@ -6,7 +6,7 @@
<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
<link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
<link rel="up" href="ch01.html" title="gst-plugins-bad Elements">
-<link rel="prev" href="gst-plugins-bad-plugins-pinch.html" title="pinch">
+<link rel="prev" href="gst-plugins-bad-plugins-rawvideoparse.html" title="rawvideoparse">
<link rel="next" href="gst-plugins-bad-plugins-rtmpsink.html" title="rtmpsink">
<meta name="generator" content="GTK-Doc V1.25 (XML mode)">
<link rel="stylesheet" href="style.css" type="text/css">
@@ -21,7 +21,7 @@
</td>
<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
<td><a accesskey="u" href="ch01.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
-<td><a accesskey="p" href="gst-plugins-bad-plugins-pinch.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="p" href="gst-plugins-bad-plugins-rawvideoparse.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
<td><a accesskey="n" href="gst-plugins-bad-plugins-rtmpsink.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
</tr></table>
<div class="refentry">
@@ -137,7 +137,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="id-1.2.59.7.2.1"></a><h3>Element Information</h3>
+<a name="id-1.2.108.7.2.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.59.7.2.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.108.7.2.2"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-rtmpsink.html b/docs/plugins/html/gst-plugins-bad-plugins-rtmpsink.html
index 653803c..72e8b15 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-rtmpsink.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-rtmpsink.html
@@ -87,7 +87,7 @@
for librtmp, such as 'flashver=version'. See the librtmp documentation
for more detail</p>
<div class="refsect2">
-<a name="id-1.2.60.8.3"></a><h3>Example launch line</h3>
+<a name="id-1.2.109.8.3"></a><h3>Example launch line</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -103,7 +103,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="id-1.2.60.8.4.1"></a><h3>Element Information</h3>
+<a name="id-1.2.109.8.4.1"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
@@ -129,7 +129,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="id-1.2.60.8.4.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.109.8.4.2"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-rtmpsrc.html b/docs/plugins/html/gst-plugins-bad-plugins-rtmpsrc.html
index 93c49d3..d43e9da 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-rtmpsrc.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-rtmpsrc.html
@@ -93,7 +93,7 @@
by an URI. This location can be specified using any protocol supported by
the RTMP library, i.e. rtmp, rtmpt, rtmps, rtmpe, rtmfp, rtmpte and rtmpts.</p>
<div class="refsect2">
-<a name="id-1.2.61.8.3"></a><h3>Example launch lines</h3>
+<a name="id-1.2.110.8.3"></a><h3>Example launch lines</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -109,7 +109,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="id-1.2.61.8.4.1"></a><h3>Element Information</h3>
+<a name="id-1.2.110.8.4.1"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
@@ -135,7 +135,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="id-1.2.61.8.4.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.110.8.4.2"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-sdpdemux.html b/docs/plugins/html/gst-plugins-bad-plugins-sdpdemux.html
index 88aac0c..349fe2d 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-sdpdemux.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-sdpdemux.html
@@ -108,7 +108,7 @@
<p>sdpdemux acts like a live element and will therefore only generate data in the
PLAYING state.</p>
<div class="refsect2">
-<a name="id-1.2.64.8.5"></a><h3>Example launch line</h3>
+<a name="id-1.2.113.8.5"></a><h3>Example launch line</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -125,7 +125,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="id-1.2.64.8.6.1"></a><h3>Element Information</h3>
+<a name="id-1.2.113.8.6.1"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
@@ -151,7 +151,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="id-1.2.64.8.6.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.113.8.6.2"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-shmsink.html b/docs/plugins/html/gst-plugins-bad-plugins-shmsink.html
index 3021921..6731357 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-shmsink.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-shmsink.html
@@ -121,7 +121,7 @@
<a name="gst-plugins-bad-plugins-shmsink.description"></a><h2>Description</h2>
<p>Send data over shared memory to the matching source.</p>
<div class="refsect2">
-<a name="id-1.2.62.8.3"></a><h3>Example launch lines</h3>
+<a name="id-1.2.111.8.3"></a><h3>Example launch lines</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -137,7 +137,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="id-1.2.62.8.4.1"></a><h3>Element Information</h3>
+<a name="id-1.2.111.8.4.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.62.8.4.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.111.8.4.2"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-shmsrc.html b/docs/plugins/html/gst-plugins-bad-plugins-shmsrc.html
index 3779d7d..51a963d 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-shmsrc.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-shmsrc.html
@@ -90,7 +90,7 @@
<a name="gst-plugins-bad-plugins-shmsrc.description"></a><h2>Description</h2>
<p>Receive data from the shared memory sink.</p>
<div class="refsect2">
-<a name="id-1.2.63.7.3"></a><h3>Example launch lines</h3>
+<a name="id-1.2.112.7.3"></a><h3>Example launch lines</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -110,7 +110,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="id-1.2.63.7.4.1"></a><h3>Element Information</h3>
+<a name="id-1.2.112.7.4.1"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
@@ -136,7 +136,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="id-1.2.63.7.4.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.112.7.4.2"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-solarize.html b/docs/plugins/html/gst-plugins-bad-plugins-solarize.html
index 68e1283..4921938 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-solarize.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-solarize.html
@@ -93,7 +93,7 @@
<a name="gst-plugins-bad-plugins-solarize.description"></a><h2>Description</h2>
<p>Solarize does a smart inverse in a video stream in realtime.</p>
<div class="refsect2">
-<a name="id-1.2.65.7.3"></a><h3>Example launch line</h3>
+<a name="id-1.2.114.7.3"></a><h3>Example launch line</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -109,7 +109,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="id-1.2.65.7.4.1"></a><h3>Element Information</h3>
+<a name="id-1.2.114.7.4.1"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
@@ -135,7 +135,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="id-1.2.65.7.4.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.114.7.4.2"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-spacescope.html b/docs/plugins/html/gst-plugins-bad-plugins-spacescope.html
index a6f590f..324dfc3 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-spacescope.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-spacescope.html
@@ -76,7 +76,7 @@
<p>Spacescope is a simple audio visualisation element. It maps the left and
right channel to x and y coordinates.</p>
<div class="refsect2">
-<a name="id-1.2.66.7.3"></a><h3>Example launch line</h3>
+<a name="id-1.2.115.7.3"></a><h3>Example launch line</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -92,7 +92,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="id-1.2.66.7.4.1"></a><h3>Element Information</h3>
+<a name="id-1.2.115.7.4.1"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
@@ -118,7 +118,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="id-1.2.66.7.4.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.115.7.4.2"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-spectrascope.html b/docs/plugins/html/gst-plugins-bad-plugins-spectrascope.html
index a8f954d..9e61ec3 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-spectrascope.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-spectrascope.html
@@ -60,7 +60,7 @@
<p>Spectrascope is a simple spectrum visualisation element. It renders the
frequency spectrum as a series of bars.</p>
<div class="refsect2">
-<a name="id-1.2.67.6.3"></a><h3>Example launch line</h3>
+<a name="id-1.2.116.6.3"></a><h3>Example launch line</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -76,7 +76,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="id-1.2.67.6.4.1"></a><h3>Element Information</h3>
+<a name="id-1.2.116.6.4.1"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
@@ -102,7 +102,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="id-1.2.67.6.4.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.116.6.4.2"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-speed.html b/docs/plugins/html/gst-plugins-bad-plugins-speed.html
index e99cf76..d702c0c 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-speed.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-speed.html
@@ -78,7 +78,7 @@
element (but relies on the decoder/demuxer to handle this correctly, also
requires a fairly up-to-date gst-plugins-base, as of February 2007).</p>
<div class="refsect2">
-<a name="id-1.2.69.7.4"></a><h3>Example launch line</h3>
+<a name="id-1.2.118.7.4"></a><h3>Example launch line</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -94,7 +94,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="id-1.2.69.7.5.1"></a><h3>Element Information</h3>
+<a name="id-1.2.118.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 @@
</div>
<hr>
<div class="refsect2">
-<a name="id-1.2.69.7.5.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.118.7.5.2"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-sphere.html b/docs/plugins/html/gst-plugins-bad-plugins-sphere.html
index 870d652..7286e3b 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-sphere.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-sphere.html
@@ -78,7 +78,7 @@
<a name="gst-plugins-bad-plugins-sphere.description"></a><h2>Description</h2>
<p>The sphere element applies a 'sphere' geometric transform to the image.</p>
<div class="refsect2">
-<a name="id-1.2.70.7.3"></a><h3>Example launch line</h3>
+<a name="id-1.2.119.7.3"></a><h3>Example launch line</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -94,7 +94,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="id-1.2.70.7.4.1"></a><h3>Element Information</h3>
+<a name="id-1.2.119.7.4.1"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
@@ -120,7 +120,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="id-1.2.70.7.4.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.119.7.4.2"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-square.html b/docs/plugins/html/gst-plugins-bad-plugins-square.html
index 96e6026..e499746 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-square.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-square.html
@@ -89,7 +89,7 @@
<a name="gst-plugins-bad-plugins-square.description"></a><h2>Description</h2>
<p>The square element distorts the center part of the image into a square.</p>
<div class="refsect2">
-<a name="id-1.2.71.7.3"></a><h3>Example launch line</h3>
+<a name="id-1.2.120.7.3"></a><h3>Example launch line</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -105,7 +105,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="id-1.2.71.7.4.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">
@@ -131,7 +131,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="id-1.2.71.7.4.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">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-stretch.html b/docs/plugins/html/gst-plugins-bad-plugins-stretch.html
index 72faba4..e81cd5f 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-stretch.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-stretch.html
@@ -78,7 +78,7 @@
<a name="gst-plugins-bad-plugins-stretch.description"></a><h2>Description</h2>
<p>The stretch element stretches the image in a circle around the center point.</p>
<div class="refsect2">
-<a name="id-1.2.72.7.3"></a><h3>Example launch line</h3>
+<a name="id-1.2.121.7.3"></a><h3>Example launch line</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -94,7 +94,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="id-1.2.72.7.4.1"></a><h3>Element Information</h3>
+<a name="id-1.2.121.7.4.1"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
@@ -120,7 +120,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="id-1.2.72.7.4.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.121.7.4.2"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-synaescope.html b/docs/plugins/html/gst-plugins-bad-plugins-synaescope.html
index f5dbbc6..c937736 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-synaescope.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-synaescope.html
@@ -60,7 +60,7 @@
<p>Synaescope is an audio visualisation element. It analyzes frequencies and
out-of phase properties of audio and draws this as clouds of stars.</p>
<div class="refsect2">
-<a name="id-1.2.68.6.3"></a><h3>Example launch line</h3>
+<a name="id-1.2.117.6.3"></a><h3>Example launch line</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -76,7 +76,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="id-1.2.68.6.4.1"></a><h3>Element Information</h3>
+<a name="id-1.2.117.6.4.1"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
@@ -102,7 +102,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="id-1.2.68.6.4.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.117.6.4.2"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-templatematch.html b/docs/plugins/html/gst-plugins-bad-plugins-templatematch.html
index 64c6956..f6644dc 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-templatematch.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-templatematch.html
@@ -90,7 +90,7 @@
<a name="gst-plugins-bad-plugins-templatematch.description"></a><h2>Description</h2>
<p>Performs template matching on videos and images, providing detected positions via bus messages.</p>
<div class="refsect2">
-<a name="id-1.2.73.7.3"></a><h3>Example launch line</h3>
+<a name="id-1.2.122.7.3"></a><h3>Example launch line</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -106,7 +106,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="id-1.2.73.7.4.1"></a><h3>Element Information</h3>
+<a name="id-1.2.122.7.4.1"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
@@ -132,7 +132,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="id-1.2.73.7.4.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.122.7.4.2"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-tunnel.html b/docs/plugins/html/gst-plugins-bad-plugins-tunnel.html
index 53a75bf..f8d39b6 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-tunnel.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-tunnel.html
@@ -63,7 +63,7 @@
<p>Tunnel is a geometric image transform element. It applies a light tunnel
effect.</p>
<div class="refsect2">
-<a name="id-1.2.75.6.3"></a><h3>Example launch line</h3>
+<a name="id-1.2.124.6.3"></a><h3>Example launch line</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -79,7 +79,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="id-1.2.75.6.4.1"></a><h3>Element Information</h3>
+<a name="id-1.2.124.6.4.1"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
@@ -105,7 +105,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="id-1.2.75.6.4.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.124.6.4.2"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-twirl.html b/docs/plugins/html/gst-plugins-bad-plugins-twirl.html
index 6eb025a..375cb1d 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-twirl.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-twirl.html
@@ -7,7 +7,7 @@
<link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
<link rel="up" href="ch01.html" title="gst-plugins-bad Elements">
<link rel="prev" href="gst-plugins-bad-plugins-tunnel.html" title="tunnel">
-<link rel="next" href="gst-plugins-bad-plugins-videoparse.html" title="videoparse">
+<link rel="next" href="gst-plugins-bad-plugins-unalignedaudioparse.html" title="unalignedaudioparse">
<meta name="generator" content="GTK-Doc V1.25 (XML mode)">
<link rel="stylesheet" href="style.css" type="text/css">
</head>
@@ -22,7 +22,7 @@
<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
<td><a accesskey="u" href="ch01.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
<td><a accesskey="p" href="gst-plugins-bad-plugins-tunnel.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="gst-plugins-bad-plugins-videoparse.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+<td><a accesskey="n" href="gst-plugins-bad-plugins-unalignedaudioparse.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
</tr></table>
<div class="refentry">
<a name="gst-plugins-bad-plugins-twirl"></a><div class="titlepage"></div>
@@ -78,7 +78,7 @@
<a name="gst-plugins-bad-plugins-twirl.description"></a><h2>Description</h2>
<p>The twirl element twists the image from the center out.</p>
<div class="refsect2">
-<a name="id-1.2.76.7.3"></a><h3>Example launch line</h3>
+<a name="id-1.2.125.7.3"></a><h3>Example launch line</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -94,7 +94,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="id-1.2.76.7.4.1"></a><h3>Element Information</h3>
+<a name="id-1.2.125.7.4.1"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
@@ -120,7 +120,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="id-1.2.76.7.4.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.125.7.4.2"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-unalignedaudioparse.html b/docs/plugins/html/gst-plugins-bad-plugins-unalignedaudioparse.html
new file mode 100644
index 0000000..5cd72e3
--- /dev/null
+++ b/docs/plugins/html/gst-plugins-bad-plugins-unalignedaudioparse.html
@@ -0,0 +1,163 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>unalignedaudioparse: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
+<link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
+<link rel="up" href="ch01.html" title="gst-plugins-bad Elements">
+<link rel="prev" href="gst-plugins-bad-plugins-twirl.html" title="twirl">
+<link rel="next" href="gst-plugins-bad-plugins-unalignedvideoparse.html" title="unalignedvideoparse">
+<meta name="generator" content="GTK-Doc V1.25 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
+<td width="100%" align="left" class="shortcuts">
+<a href="#" class="shortcut">Top</a><span id="nav_description"> <span class="dim">|</span>
+ <a href="#gst-plugins-bad-plugins-unalignedaudioparse.description" class="shortcut">Description</a></span><span id="nav_hierarchy"> <span class="dim">|</span>
+ <a href="#gst-plugins-bad-plugins-unalignedaudioparse.object-hierarchy" class="shortcut">Object Hierarchy</a></span><span id="nav_interfaces"> <span class="dim">|</span>
+ <a href="#gst-plugins-bad-plugins-unalignedaudioparse.implemented-interfaces" class="shortcut">Implemented Interfaces</a></span>
+</td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
+<td><a accesskey="p" href="gst-plugins-bad-plugins-twirl.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="gst-plugins-bad-plugins-unalignedvideoparse.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="gst-plugins-bad-plugins-unalignedaudioparse"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-bad-plugins-unalignedaudioparse.top_of_page"></a>unalignedaudioparse</span></h2>
+<p>unalignedaudioparse</p>
+</td>
+<td class="gallery_image" valign="top" align="right"></td>
+</tr></table></div>
+<a name="GstUnalignedAudioParse"></a><div class="refsect1">
+<a name="gst-plugins-bad-plugins-unalignedaudioparse.other"></a><h2>Types and Values</h2>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="name">
+<col class="description">
+</colgroup>
+<tbody><tr>
+<td class="datatype_keyword"> </td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-plugins-unalignedaudioparse.html#GstUnalignedAudioParse-struct" title="GstUnalignedAudioParse">GstUnalignedAudioParse</a></td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-unalignedaudioparse.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="screen"> <a href="/usr/share/gtk-doc/html/gobjectgobject-The-Base-Object-Type.html#GObject-struct">GObject</a>
+ <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gobjectgobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
+ <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstObject.html#GstObject-struct">GstObject</a>
+ <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#GstElement-struct">GstElement</a>
+ <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstBin.html#GstBin-struct">GstBin</a>
+ <span class="lineart">╰──</span> GstUnalignedAudioParse
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-unalignedaudioparse.implemented-interfaces"></a><h2>Implemented Interfaces</h2>
+<p>
+GstUnalignedAudioParse implements
+ <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstChildProxy.html#GstChildProxy-struct">GstChildProxy</a>.</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-unalignedaudioparse.description"></a><h2>Description</h2>
+<div class="refsynopsisdiv">
+<h2>Synopsis</h2>
+<div class="refsect2">
+<a name="id-1.2.126.7.2.1"></a><h3>Element Information</h3>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term">plugin</span></p></td>
+<td>
+ <a class="link" href="gst-plugins-bad-plugins-plugin-rawparse.html#plugin-rawparse">rawparse</a>
+ </td>
+</tr>
+<tr>
+<td><p><span class="term">author</span></p></td>
+<td>Carlos Rafael Giani <dv@pseudoterminal.org></td>
+</tr>
+<tr>
+<td><p><span class="term">class</span></p></td>
+<td>Codec/Parser/Bin/Audio</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="id-1.2.126.7.2.2"></a><h3>Element Pads</h3>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>audio/x-unaligned-raw, format=(string){ S8, U8, S16LE, S16BE, U16LE, U16BE, S24_32LE, S24_32BE, U24_32LE, U24_32BE, S32LE, S32BE, U32LE, U32BE, S24LE, S24BE, U24LE, U24BE, S20LE, S20BE, U20LE, U20BE, S18LE, S18BE, U18LE, U18BE, F32LE, F32BE, F64LE, F64BE }, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ], layout=(string){ interleaved, non-interleaved }</td>
+</tr>
+</tbody>
+</table></div>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>src</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>source</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>audio/x-raw, format=(string){ S8, U8, S16LE, S16BE, U16LE, U16BE, S24_32LE, S24_32BE, U24_32LE, U24_32BE, S32LE, S32BE, U32LE, U32BE, S24LE, S24BE, U24LE, U24BE, S20LE, S20BE, U20LE, U20BE, S18LE, S18BE, U18LE, U18BE, F32LE, F32BE, F64LE, F64BE }, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ], layout=(string){ interleaved, non-interleaved }</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-unalignedaudioparse.functions_details"></a><h2>Functions</h2>
+<p></p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-unalignedaudioparse.other_details"></a><h2>Types and Values</h2>
+<div class="refsect2">
+<a name="GstUnalignedAudioParse-struct"></a><h3>GstUnalignedAudioParse</h3>
+<pre class="programlisting">typedef struct _GstUnalignedAudioParse GstUnalignedAudioParse;</pre>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>Generated by GTK-Doc V1.25</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-unalignedvideoparse.html b/docs/plugins/html/gst-plugins-bad-plugins-unalignedvideoparse.html
new file mode 100644
index 0000000..11f0152
--- /dev/null
+++ b/docs/plugins/html/gst-plugins-bad-plugins-unalignedvideoparse.html
@@ -0,0 +1,163 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>unalignedvideoparse: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
+<link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
+<link rel="up" href="ch01.html" title="gst-plugins-bad Elements">
+<link rel="prev" href="gst-plugins-bad-plugins-unalignedaudioparse.html" title="unalignedaudioparse">
+<link rel="next" href="gst-plugins-bad-plugins-videoparse.html" title="videoparse">
+<meta name="generator" content="GTK-Doc V1.25 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
+<td width="100%" align="left" class="shortcuts">
+<a href="#" class="shortcut">Top</a><span id="nav_description"> <span class="dim">|</span>
+ <a href="#gst-plugins-bad-plugins-unalignedvideoparse.description" class="shortcut">Description</a></span><span id="nav_hierarchy"> <span class="dim">|</span>
+ <a href="#gst-plugins-bad-plugins-unalignedvideoparse.object-hierarchy" class="shortcut">Object Hierarchy</a></span><span id="nav_interfaces"> <span class="dim">|</span>
+ <a href="#gst-plugins-bad-plugins-unalignedvideoparse.implemented-interfaces" class="shortcut">Implemented Interfaces</a></span>
+</td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
+<td><a accesskey="p" href="gst-plugins-bad-plugins-unalignedaudioparse.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="gst-plugins-bad-plugins-videoparse.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="gst-plugins-bad-plugins-unalignedvideoparse"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-bad-plugins-unalignedvideoparse.top_of_page"></a>unalignedvideoparse</span></h2>
+<p>unalignedvideoparse</p>
+</td>
+<td class="gallery_image" valign="top" align="right"></td>
+</tr></table></div>
+<a name="GstUnalignedVideoParse"></a><div class="refsect1">
+<a name="gst-plugins-bad-plugins-unalignedvideoparse.other"></a><h2>Types and Values</h2>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="name">
+<col class="description">
+</colgroup>
+<tbody><tr>
+<td class="datatype_keyword"> </td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-plugins-unalignedvideoparse.html#GstUnalignedVideoParse-struct" title="GstUnalignedVideoParse">GstUnalignedVideoParse</a></td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-unalignedvideoparse.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="screen"> <a href="/usr/share/gtk-doc/html/gobjectgobject-The-Base-Object-Type.html#GObject-struct">GObject</a>
+ <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gobjectgobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
+ <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstObject.html#GstObject-struct">GstObject</a>
+ <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#GstElement-struct">GstElement</a>
+ <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstBin.html#GstBin-struct">GstBin</a>
+ <span class="lineart">╰──</span> GstUnalignedVideoParse
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-unalignedvideoparse.implemented-interfaces"></a><h2>Implemented Interfaces</h2>
+<p>
+GstUnalignedVideoParse implements
+ <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstChildProxy.html#GstChildProxy-struct">GstChildProxy</a>.</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-unalignedvideoparse.description"></a><h2>Description</h2>
+<div class="refsynopsisdiv">
+<h2>Synopsis</h2>
+<div class="refsect2">
+<a name="id-1.2.127.7.2.1"></a><h3>Element Information</h3>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term">plugin</span></p></td>
+<td>
+ <a class="link" href="gst-plugins-bad-plugins-plugin-rawparse.html#plugin-rawparse">rawparse</a>
+ </td>
+</tr>
+<tr>
+<td><p><span class="term">author</span></p></td>
+<td>Carlos Rafael Giani <dv@pseudoterminal.org></td>
+</tr>
+<tr>
+<td><p><span class="term">class</span></p></td>
+<td>Codec/Parser/Bin/Video</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="id-1.2.127.7.2.2"></a><h3>Element Pads</h3>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>video/x-unaligned-raw, format=(string){ I420, YV12, YUY2, UYVY, AYUV, RGBx, BGRx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, Y41B, Y42B, YVYU, Y444, v210, v216, NV12, NV21, NV16, NV61, NV24, GRAY8, GRAY16_BE, GRAY16_LE, v308, IYU2, RGB16, BGR16, RGB15, BGR15, UYVP, A420, RGB8P, YUV9, YVU9, IYU1, ARGB64, AYUV64, r210, I420_10LE, I420_10BE, I422_10LE, I422_10BE, Y444_10LE, Y444_10BE, GBR, GBR_10LE, GBR_10BE, NV12_64Z32, A420_10LE, A420_10BE, A422_10LE, A422_10BE, A444_10LE, A444_10BE, P010_10LE, P010_10BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+</tbody>
+</table></div>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>src</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>source</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>video/x-raw, format=(string){ I420, YV12, YUY2, UYVY, AYUV, RGBx, BGRx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, Y41B, Y42B, YVYU, Y444, v210, v216, NV12, NV21, NV16, NV61, NV24, GRAY8, GRAY16_BE, GRAY16_LE, v308, IYU2, RGB16, BGR16, RGB15, BGR15, UYVP, A420, RGB8P, YUV9, YVU9, IYU1, ARGB64, AYUV64, r210, I420_10LE, I420_10BE, I422_10LE, I422_10BE, Y444_10LE, Y444_10BE, GBR, GBR_10LE, GBR_10BE, NV12_64Z32, A420_10LE, A420_10BE, A422_10LE, A422_10BE, A444_10LE, A444_10BE, P010_10LE, P010_10BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-unalignedvideoparse.functions_details"></a><h2>Functions</h2>
+<p></p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-unalignedvideoparse.other_details"></a><h2>Types and Values</h2>
+<div class="refsect2">
+<a name="GstUnalignedVideoParse-struct"></a><h3>GstUnalignedVideoParse</h3>
+<pre class="programlisting">typedef struct _GstUnalignedVideoParse GstUnalignedVideoParse;</pre>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>Generated by GTK-Doc V1.25</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-videoparse.html b/docs/plugins/html/gst-plugins-bad-plugins-videoparse.html
index c7114ff..8538b5f 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-videoparse.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-videoparse.html
@@ -6,7 +6,7 @@
<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
<link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
<link rel="up" href="ch01.html" title="gst-plugins-bad Elements">
-<link rel="prev" href="gst-plugins-bad-plugins-twirl.html" title="twirl">
+<link rel="prev" href="gst-plugins-bad-plugins-unalignedvideoparse.html" title="unalignedvideoparse">
<link rel="next" href="gst-plugins-bad-plugins-waterripple.html" title="waterripple">
<meta name="generator" content="GTK-Doc V1.25 (XML mode)">
<link rel="stylesheet" href="style.css" type="text/css">
@@ -16,12 +16,13 @@
<td width="100%" align="left" class="shortcuts">
<a href="#" class="shortcut">Top</a><span id="nav_description"> <span class="dim">|</span>
<a href="#gst-plugins-bad-plugins-videoparse.description" class="shortcut">Description</a></span><span id="nav_hierarchy"> <span class="dim">|</span>
- <a href="#gst-plugins-bad-plugins-videoparse.object-hierarchy" class="shortcut">Object Hierarchy</a></span><span id="nav_properties"> <span class="dim">|</span>
+ <a href="#gst-plugins-bad-plugins-videoparse.object-hierarchy" class="shortcut">Object Hierarchy</a></span><span id="nav_interfaces"> <span class="dim">|</span>
+ <a href="#gst-plugins-bad-plugins-videoparse.implemented-interfaces" class="shortcut">Implemented Interfaces</a></span><span id="nav_properties"> <span class="dim">|</span>
<a href="#gst-plugins-bad-plugins-videoparse.properties" class="shortcut">Properties</a></span>
</td>
<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
<td><a accesskey="u" href="ch01.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
-<td><a accesskey="p" href="gst-plugins-bad-plugins-twirl.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="p" href="gst-plugins-bad-plugins-unalignedvideoparse.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
<td><a accesskey="n" href="gst-plugins-bad-plugins-waterripple.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
</tr></table>
<div class="refentry">
@@ -151,17 +152,24 @@
<span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gobjectgobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
<span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstObject.html#GstObject-struct">GstObject</a>
<span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#GstElement-struct">GstElement</a>
- <span class="lineart">╰──</span> GstRawParse
+ <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstBin.html#GstBin-struct">GstBin</a>
<span class="lineart">╰──</span> GstVideoParse
</pre>
</div>
<div class="refsect1">
+<a name="gst-plugins-bad-plugins-videoparse.implemented-interfaces"></a><h2>Implemented Interfaces</h2>
+<p>
+GstVideoParse implements
+ <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstChildProxy.html#GstChildProxy-struct">GstChildProxy</a>.</p>
+</div>
+<div class="refsect1">
<a name="gst-plugins-bad-plugins-videoparse.description"></a><h2>Description</h2>
<p>Converts a byte stream into video frames.</p>
+<div class="note">This element is deprecated. Use <a class="link" href="gst-plugins-bad-plugins-rawvideoparse.html#GstRawVideoParse"><span class="type">GstRawVideoParse</span></a> instead.</div>
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="id-1.2.77.7.3.1"></a><h3>Element Information</h3>
+<a name="id-1.2.128.8.4.1"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
@@ -187,7 +195,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="id-1.2.77.7.3.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.128.8.4.2"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
@@ -234,10 +242,6 @@
<td><p><span class="term">details</span></p></td>
<td>video/x-raw</td>
</tr>
-<tr>
-<td><p><span class="term"></span></p></td>
-<td> video/x-bayer</td>
-</tr>
</tbody>
</table></div>
</div>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-voaacenc.html b/docs/plugins/html/gst-plugins-bad-plugins-voaacenc.html
index 81a9dcb..76f2201 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-voaacenc.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-voaacenc.html
@@ -83,7 +83,7 @@
<p>AAC audio encoder based on vo-aacenc library </p>
<a class="ulink" href="http://sourceforge.net/projects/opencore-amr/files/vo-aacenc/" target="_top">vo-aacenc library source file</a>.
<div class="refsect2">
-<a name="id-1.2.80.8.4"></a><h3>Example launch line</h3>
+<a name="id-1.2.131.8.4"></a><h3>Example launch line</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -99,7 +99,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="id-1.2.80.8.5.1"></a><h3>Element Information</h3>
+<a name="id-1.2.131.8.5.1"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
@@ -125,7 +125,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="id-1.2.80.8.5.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.131.8.5.2"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-voamrwbenc.html b/docs/plugins/html/gst-plugins-bad-plugins-voamrwbenc.html
index ea54875..0a8e5a6 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-voamrwbenc.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-voamrwbenc.html
@@ -83,7 +83,7 @@
<p>AMR wideband encoder based on the </p>
<a class="ulink" href="http://www.penguin.cz/~utx/amr" target="_top">reference codec implementation</a>.
<div class="refsect2">
-<a name="id-1.2.81.8.4"></a><h3>Example launch line</h3>
+<a name="id-1.2.132.8.4"></a><h3>Example launch line</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -101,7 +101,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="id-1.2.81.8.5.1"></a><h3>Element Information</h3>
+<a name="id-1.2.132.8.5.1"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
@@ -127,7 +127,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="id-1.2.81.8.5.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.132.8.5.2"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-waterripple.html b/docs/plugins/html/gst-plugins-bad-plugins-waterripple.html
index 1f52f73..4cabdf0 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-waterripple.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-waterripple.html
@@ -90,7 +90,7 @@
<a name="gst-plugins-bad-plugins-waterripple.description"></a><h2>Description</h2>
<p>The waterripple element creates a water ripple effect on the image.</p>
<div class="refsect2">
-<a name="id-1.2.78.7.3"></a><h3>Example launch line</h3>
+<a name="id-1.2.129.7.3"></a><h3>Example launch line</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -106,7 +106,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="id-1.2.78.7.4.1"></a><h3>Element Information</h3>
+<a name="id-1.2.129.7.4.1"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
@@ -132,7 +132,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="id-1.2.78.7.4.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.129.7.4.2"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-wavescope.html b/docs/plugins/html/gst-plugins-bad-plugins-wavescope.html
index fcbded3..2ab700d 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-wavescope.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-wavescope.html
@@ -76,7 +76,7 @@
<p>Wavescope is a simple audio visualisation element. It renders the waveforms
like on an oscilloscope.</p>
<div class="refsect2">
-<a name="id-1.2.82.7.3"></a><h3>Example launch line</h3>
+<a name="id-1.2.133.7.3"></a><h3>Example launch line</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -92,7 +92,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="id-1.2.82.7.4.1"></a><h3>Element Information</h3>
+<a name="id-1.2.133.7.4.1"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
@@ -118,7 +118,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="id-1.2.82.7.4.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.133.7.4.2"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-webrtcdsp.html b/docs/plugins/html/gst-plugins-bad-plugins-webrtcdsp.html
index 3640c08..96ddfc0 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-webrtcdsp.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-webrtcdsp.html
@@ -15,7 +15,8 @@
<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
<td width="100%" align="left" class="shortcuts">
<a href="#" class="shortcut">Top</a><span id="nav_description"> <span class="dim">|</span>
- <a href="#gst-plugins-bad-plugins-webrtcdsp.description" class="shortcut">Description</a></span><span id="nav_properties"> <span class="dim">|</span>
+ <a href="#gst-plugins-bad-plugins-webrtcdsp.description" class="shortcut">Description</a></span><span id="nav_hierarchy"> <span class="dim">|</span>
+ <a href="#gst-plugins-bad-plugins-webrtcdsp.object-hierarchy" class="shortcut">Object Hierarchy</a></span><span id="nav_properties"> <span class="dim">|</span>
<a href="#gst-plugins-bad-plugins-webrtcdsp.properties" class="shortcut">Properties</a></span>
</td>
<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
@@ -87,10 +88,15 @@
<td class="property_name"><a class="link" href="gst-plugins-bad-plugins-webrtcdsp.html#GstWebrtcDsp--noise-suppression-level" title="The “noise-suppression-level” property">noise-suppression-level</a></td>
<td class="property_flags">Read / Write / Construct</td>
</tr>
+<tr>
+<td class="property_type"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></td>
+<td class="property_name"><a class="link" href="gst-plugins-bad-plugins-webrtcdsp.html#GstWebrtcDsp--delay-agnostic" title="The “delay-agnostic” property">delay-agnostic</a></td>
+<td class="property_flags">Read / Write / Construct</td>
+</tr>
</tbody>
</table></div>
</div>
-<div class="refsect1">
+<a name="GstWebrtcDsp"></a><div class="refsect1">
<a name="gst-plugins-bad-plugins-webrtcdsp.other"></a><h2>Types and Values</h2>
<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
@@ -99,11 +105,22 @@
</colgroup>
<tbody><tr>
<td class="datatype_keyword"> </td>
-<td class="function_name"><a class="link" href="gst-plugins-bad-plugins-webrtcdsp.html#GstWebrtcDsp" title="GstWebrtcDsp">GstWebrtcDsp</a></td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-plugins-webrtcdsp.html#GstWebrtcDsp-struct" title="GstWebrtcDsp">GstWebrtcDsp</a></td>
</tr></tbody>
</table></div>
</div>
<div class="refsect1">
+<a name="gst-plugins-bad-plugins-webrtcdsp.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="screen"> <a href="/usr/share/gtk-doc/html/gobjectgobject-The-Base-Object-Type.html#GObject-struct">GObject</a>
+ <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gobjectgobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
+ <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstObject.html#GstObject-struct">GstObject</a>
+ <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#GstElement-struct">GstElement</a>
+ <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-libs-1.0GstBaseTransform.html#GstBaseTransform-struct">GstBaseTransform</a>
+ <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gst-plugins-base-libs-1.0gst-plugins-base-libs-gstaudiofilter.html#GstAudioFilter-struct">GstAudioFilter</a>
+ <span class="lineart">╰──</span> GstWebrtcDsp
+</pre>
+</div>
+<div class="refsect1">
<a name="gst-plugins-bad-plugins-webrtcdsp.description"></a><h2>Description</h2>
<p>A voice enhancement filter based on WebRTC Audio Processing library. This
library provides a whide variety of enhancement algorithms. This element
@@ -123,7 +140,7 @@
before the DSP sink pad is activated. It does not need to be in any
particular state and does not even need to be added to the pipeline yet.</p>
<div class="refsect2">
-<a name="id-1.2.83.5.5"></a><h3>Example launch line</h3>
+<a name="id-1.2.134.7.5"></a><h3>Example launch line</h3>
<p>As a conveniance, the echo canceller can be tested using an echo loop. In
this configuration, one would expect a single echo to be heard.</p>
<div class="informalexample">
@@ -160,7 +177,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="id-1.2.83.5.6.1"></a><h3>Element Information</h3>
+<a name="id-1.2.134.7.6.1"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
@@ -186,7 +203,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="id-1.2.83.5.6.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.134.7.6.2"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
@@ -245,7 +262,7 @@
<div class="refsect1">
<a name="gst-plugins-bad-plugins-webrtcdsp.other_details"></a><h2>Types and Values</h2>
<div class="refsect2">
-<a name="GstWebrtcDsp"></a><h3>GstWebrtcDsp</h3>
+<a name="GstWebrtcDsp-struct"></a><h3>GstWebrtcDsp</h3>
<pre class="programlisting">typedef struct _GstWebrtcDsp GstWebrtcDsp;</pre>
</div>
</div>
@@ -322,6 +339,14 @@
<p>Flags: Read / Write / Construct</p>
<p>Default value: Moderate Suppression</p>
</div>
+<hr>
+<div class="refsect2">
+<a name="GstWebrtcDsp--delay-agnostic"></a><h3>The <code class="literal">“delay-agnostic”</code> property</h3>
+<pre class="programlisting"> “delay-agnostic” <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></pre>
+<p>Enable or disable the delay agnostic mode.</p>
+<p>Flags: Read / Write / Construct</p>
+<p>Default value: FALSE</p>
+</div>
</div>
</div>
<div class="footer">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-webrtcechoprobe.html b/docs/plugins/html/gst-plugins-bad-plugins-webrtcechoprobe.html
index 2b8d2f3..e1041d5 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-webrtcechoprobe.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-webrtcechoprobe.html
@@ -15,7 +15,8 @@
<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
<td width="100%" align="left" class="shortcuts">
<a href="#" class="shortcut">Top</a><span id="nav_description"> <span class="dim">|</span>
- <a href="#gst-plugins-bad-plugins-webrtcechoprobe.description" class="shortcut">Description</a></span>
+ <a href="#gst-plugins-bad-plugins-webrtcechoprobe.description" class="shortcut">Description</a></span><span id="nav_hierarchy"> <span class="dim">|</span>
+ <a href="#gst-plugins-bad-plugins-webrtcechoprobe.object-hierarchy" class="shortcut">Object Hierarchy</a></span>
</td>
<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
<td><a accesskey="u" href="ch01.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
@@ -31,7 +32,7 @@
</td>
<td class="gallery_image" valign="top" align="right"></td>
</tr></table></div>
-<div class="refsect1">
+<a name="GstWebrtcEchoProbe"></a><div class="refsect1">
<a name="gst-plugins-bad-plugins-webrtcechoprobe.other"></a><h2>Types and Values</h2>
<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
@@ -40,18 +41,29 @@
</colgroup>
<tbody><tr>
<td class="datatype_keyword">struct</td>
-<td class="function_name"><a class="link" href="gst-plugins-bad-plugins-webrtcechoprobe.html#GstWebrtcEchoProbe" title="struct GstWebrtcEchoProbe">GstWebrtcEchoProbe</a></td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-plugins-webrtcechoprobe.html#GstWebrtcEchoProbe-struct" title="struct GstWebrtcEchoProbe">GstWebrtcEchoProbe</a></td>
</tr></tbody>
</table></div>
</div>
<div class="refsect1">
+<a name="gst-plugins-bad-plugins-webrtcechoprobe.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="screen"> <a href="/usr/share/gtk-doc/html/gobjectgobject-The-Base-Object-Type.html#GObject-struct">GObject</a>
+ <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gobjectgobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
+ <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstObject.html#GstObject-struct">GstObject</a>
+ <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#GstElement-struct">GstElement</a>
+ <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-libs-1.0GstBaseTransform.html#GstBaseTransform-struct">GstBaseTransform</a>
+ <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gst-plugins-base-libs-1.0gst-plugins-base-libs-gstaudiofilter.html#GstAudioFilter-struct">GstAudioFilter</a>
+ <span class="lineart">╰──</span> GstWebrtcEchoProbe
+</pre>
+</div>
+<div class="refsect1">
<a name="gst-plugins-bad-plugins-webrtcechoprobe.description"></a><h2>Description</h2>
<p>This echo probe is to be used with the webrtcdsp element. See <a class="link" href="gst-plugins-bad-plugins-webrtcdsp.html" title="webrtcdsp"><span class="type">gst-plugins-bad-plugins-webrtcdsp</span></a>
documentation for more details.</p>
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="id-1.2.84.4.3.1"></a><h3>Element Information</h3>
+<a name="id-1.2.135.6.3.1"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
@@ -77,7 +89,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="id-1.2.84.4.3.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.135.6.3.2"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
@@ -136,30 +148,8 @@
<div class="refsect1">
<a name="gst-plugins-bad-plugins-webrtcechoprobe.other_details"></a><h2>Types and Values</h2>
<div class="refsect2">
-<a name="GstWebrtcEchoProbe"></a><h3>struct GstWebrtcEchoProbe</h3>
-<pre class="programlisting">struct GstWebrtcEchoProbe {
- GstAudioFilter parent;
-
- /* This lock is required as the DSP may need to lock itself using it's
- * object lock and also lock the probe. The natural order for the DSP is
- * to lock the DSP and then the echo probe. If we where using the probe
- * object lock, we'd be racing with GstBin which will lock sink to src,
- * and may accidently reverse the order. */
- GMutex lock;
-
- /* Protected by the lock */
- GstAudioInfo info;
- guint period_size;
- GstClockTime latency;
- gint delay;
-
- GstSegment segment;
- GstAdapter *adapter;
-
- /* Private */
- gboolean acquired;
-};
-</pre>
+<a name="GstWebrtcEchoProbe-struct"></a><h3>struct GstWebrtcEchoProbe</h3>
+<pre class="programlisting">struct GstWebrtcEchoProbe;</pre>
<p>The adder object structure.</p>
</div>
</div>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-zbar.html b/docs/plugins/html/gst-plugins-bad-plugins-zbar.html
index b9b70e8..134c3a1 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-zbar.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-zbar.html
@@ -123,7 +123,7 @@
</p></li>
</ul></div>
<div class="refsect2">
-<a name="id-1.2.79.7.7"></a><h3>Example launch lines</h3>
+<a name="id-1.2.130.7.7"></a><h3>Example launch lines</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -150,7 +150,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="id-1.2.79.7.8.1"></a><h3>Element Information</h3>
+<a name="id-1.2.130.7.8.1"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
@@ -176,7 +176,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="id-1.2.79.7.8.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.130.7.8.2"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
diff --git a/docs/plugins/html/home.png b/docs/plugins/html/home.png
index 9346b33..4bf6d92 100644
--- a/docs/plugins/html/home.png
+++ b/docs/plugins/html/home.png
Binary files differ
diff --git a/docs/plugins/html/index.html b/docs/plugins/html/index.html
index 5e5d60a..73d5145 100644
--- a/docs/plugins/html/index.html
+++ b/docs/plugins/html/index.html
@@ -15,7 +15,7 @@
<div>
<div><table class="navigation" id="top" width="100%" cellpadding="2" cellspacing="0"><tr><th valign="middle"><p class="title">GStreamer Bad Plugins 1.0 Plugins Reference Manual</p></th></tr></table></div>
<div><p class="releaseinfo">
- for GStreamer Bad Plugins 1.0 (1.9.1)
+ for GStreamer Bad Plugins 1.0 (1.9.2)
The latest version of this documentation can be found on-line at
<a class="ulink" href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-bad/html/" target="_top">http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-bad/html/</a>.
</p></div>
@@ -44,6 +44,9 @@
<span class="refentrytitle"><a href="gst-plugins-bad-plugins-audiomixer.html">audiomixer</a></span><span class="refpurpose"></span>
</dt>
<dt>
+<span class="refentrytitle"><a href="gst-plugins-bad-plugins-audioparse.html">audioparse</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
<span class="refentrytitle"><a href="gst-plugins-bad-plugins-autoconvert.html">autoconvert</a></span><span class="refpurpose"></span>
</dt>
<dt>
@@ -143,6 +146,144 @@
<span class="refentrytitle"><a href="gst-plugins-bad-plugins-gaussianblur.html">gaussianblur</a></span><span class="refpurpose"></span>
</dt>
<dt>
+<span class="refentrytitle"><a href="gst-plugins-bad-plugins-glcolorbalance.html">glcolorbalance</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-bad-plugins-glcolorconvert.html">glcolorconvert</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-bad-plugins-glcolorscale.html">glcolorscale</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-bad-plugins-gldeinterlace.html">gldeinterlace</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-bad-plugins-gldifferencematte.html">gldifferencematte</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-bad-plugins-gldownload.html">gldownload</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-bad-plugins-gleffects-blur.html">gleffects_blur</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-bad-plugins-gleffects-bulge.html">gleffects_bulge</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-bad-plugins-gleffects-fisheye.html">gleffects_fisheye</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-bad-plugins-gleffects-glow.html">gleffects_glow</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-bad-plugins-gleffects-heat.html">gleffects_heat</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-bad-plugins-gleffects-identity.html">gleffects_identity</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-bad-plugins-gleffects-laplacian.html">gleffects_laplacian</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-bad-plugins-gleffects-lumaxpro.html">gleffects_lumaxpro</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-bad-plugins-gleffects-mirror.html">gleffects_mirror</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-bad-plugins-gleffects-sepia.html">gleffects_sepia</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-bad-plugins-gleffects-sin.html">gleffects_sin</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-bad-plugins-gleffects-sobel.html">gleffects_sobel</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-bad-plugins-gleffects-square.html">gleffects_square</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-bad-plugins-gleffects-squeeze.html">gleffects_squeeze</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-bad-plugins-gleffects-stretch.html">gleffects_stretch</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-bad-plugins-gleffects-tunnel.html">gleffects_tunnel</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-bad-plugins-gleffects-twirl.html">gleffects_twirl</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-bad-plugins-gleffects.html">gleffects</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-bad-plugins-gleffects-xpro.html">gleffects_xpro</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-bad-plugins-gleffects-xray.html">gleffects_xray</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-bad-plugins-glfilterapp.html">glfilterapp</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-bad-plugins-glfilterbin.html">glfilterbin</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-bad-plugins-glfiltercube.html">glfiltercube</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-bad-plugins-glfilterglass.html">glfilterglass</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-bad-plugins-glimagesinkelement.html">glimagesinkelement</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-bad-plugins-glimagesink.html">glimagesink</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-bad-plugins-glmixerbin.html">glmixerbin</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-bad-plugins-glmosaic.html">glmosaic</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-bad-plugins-gloverlay.html">gloverlay</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-bad-plugins-glshader.html">glshader</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-bad-plugins-glsinkbin.html">glsinkbin</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-bad-plugins-glsrcbin.html">glsrcbin</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-bad-plugins-glstereomix.html">glstereomix</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-bad-plugins-glstereosplit.html">glstereosplit</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-bad-plugins-gltestsrc.html">gltestsrc</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-bad-plugins-gltransformation.html">gltransformation</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-bad-plugins-glupload.html">glupload</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-bad-plugins-glvideomixerelement.html">glvideomixerelement</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-bad-plugins-glvideomixer.html">glvideomixer</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-bad-plugins-glviewconvert.html">glviewconvert</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
<span class="refentrytitle"><a href="gst-plugins-bad-plugins-jpegparse.html">jpegparse</a></span><span class="refpurpose"> — JPEG parser</span>
</dt>
<dt>
@@ -197,6 +338,12 @@
<span class="refentrytitle"><a href="gst-plugins-bad-plugins-pinch.html">pinch</a></span><span class="refpurpose"></span>
</dt>
<dt>
+<span class="refentrytitle"><a href="gst-plugins-bad-plugins-rawaudioparse.html">rawaudioparse</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-bad-plugins-rawvideoparse.html">rawvideoparse</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
<span class="refentrytitle"><a href="gst-plugins-bad-plugins-rfbsrc.html">rfbsrc</a></span><span class="refpurpose"></span>
</dt>
<dt>
@@ -251,6 +398,12 @@
<span class="refentrytitle"><a href="gst-plugins-bad-plugins-twirl.html">twirl</a></span><span class="refpurpose"></span>
</dt>
<dt>
+<span class="refentrytitle"><a href="gst-plugins-bad-plugins-unalignedaudioparse.html">unalignedaudioparse</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-bad-plugins-unalignedvideoparse.html">unalignedvideoparse</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
<span class="refentrytitle"><a href="gst-plugins-bad-plugins-videoparse.html">videoparse</a></span><span class="refpurpose"></span>
</dt>
<dt>
@@ -377,6 +530,9 @@
<span class="refentrytitle"><a href="gst-plugins-bad-plugins-plugin-openal.html">openal</a></span><span class="refpurpose"> — OpenAL plugin library</span>
</dt>
<dt>
+<span class="refentrytitle"><a href="gst-plugins-bad-plugins-plugin-opengl.html">opengl</a></span><span class="refpurpose"> — OpenGL plugin</span>
+</dt>
+<dt>
<span class="refentrytitle"><a href="gst-plugins-bad-plugins-plugin-opencv.html">opencv</a></span><span class="refpurpose"> — GStreamer OpenCV Plugins</span>
</dt>
<dt>
diff --git a/docs/plugins/html/left-insensitive.png b/docs/plugins/html/left-insensitive.png
index 3269393..82cba0a 100644
--- a/docs/plugins/html/left-insensitive.png
+++ b/docs/plugins/html/left-insensitive.png
Binary files differ
diff --git a/docs/plugins/html/left.png b/docs/plugins/html/left.png
index 2abde03..8444ec0 100644
--- a/docs/plugins/html/left.png
+++ b/docs/plugins/html/left.png
Binary files differ
diff --git a/docs/plugins/html/right-insensitive.png b/docs/plugins/html/right-insensitive.png
index 4c95785..7a90b99 100644
--- a/docs/plugins/html/right-insensitive.png
+++ b/docs/plugins/html/right-insensitive.png
Binary files differ
diff --git a/docs/plugins/html/right.png b/docs/plugins/html/right.png
index 76260ec..55f3359 100644
--- a/docs/plugins/html/right.png
+++ b/docs/plugins/html/right.png
Binary files differ
diff --git a/docs/plugins/html/up-insensitive.png b/docs/plugins/html/up-insensitive.png
index f404986..fdb8cc7 100644
--- a/docs/plugins/html/up-insensitive.png
+++ b/docs/plugins/html/up-insensitive.png
Binary files differ
diff --git a/docs/plugins/html/up.png b/docs/plugins/html/up.png
index 80b4b37..c1aad52 100644
--- a/docs/plugins/html/up.png
+++ b/docs/plugins/html/up.png
Binary files differ
diff --git a/docs/plugins/inspect/plugin-accurip.xml b/docs/plugins/inspect/plugin-accurip.xml
index 56f50b1..7ddb8f7 100644
--- a/docs/plugins/inspect/plugin-accurip.xml
+++ b/docs/plugins/inspect/plugin-accurip.xml
@@ -3,7 +3,7 @@
<description>Computes an AccurateRip CRC</description>
<filename>../../gst/accurip/.libs/libgstaccurip.so</filename>
<basename>libgstaccurip.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-adpcmdec.xml b/docs/plugins/inspect/plugin-adpcmdec.xml
index 4ceacf3..5b90808 100644
--- a/docs/plugins/inspect/plugin-adpcmdec.xml
+++ b/docs/plugins/inspect/plugin-adpcmdec.xml
@@ -3,7 +3,7 @@
<description>ADPCM decoder</description>
<filename>../../gst/adpcmdec/.libs/libgstadpcmdec.so</filename>
<basename>libgstadpcmdec.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-adpcmenc.xml b/docs/plugins/inspect/plugin-adpcmenc.xml
index ded555d..f4cb654 100644
--- a/docs/plugins/inspect/plugin-adpcmenc.xml
+++ b/docs/plugins/inspect/plugin-adpcmenc.xml
@@ -3,7 +3,7 @@
<description>ADPCM encoder</description>
<filename>../../gst/adpcmenc/.libs/libgstadpcmenc.so</filename>
<basename>libgstadpcmenc.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-aiff.xml b/docs/plugins/inspect/plugin-aiff.xml
index 7e23d08..c48b3cc 100644
--- a/docs/plugins/inspect/plugin-aiff.xml
+++ b/docs/plugins/inspect/plugin-aiff.xml
@@ -3,7 +3,7 @@
<description>Create and parse Audio Interchange File Format (AIFF) files</description>
<filename>../../gst/aiff/.libs/libgstaiff.so</filename>
<basename>libgstaiff.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-asfmux.xml b/docs/plugins/inspect/plugin-asfmux.xml
index 5a4225e..e827d14 100644
--- a/docs/plugins/inspect/plugin-asfmux.xml
+++ b/docs/plugins/inspect/plugin-asfmux.xml
@@ -3,7 +3,7 @@
<description>ASF Muxer Plugin</description>
<filename>../../gst/asfmux/.libs/libgstasfmux.so</filename>
<basename>libgstasfmux.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-assrender.xml b/docs/plugins/inspect/plugin-assrender.xml
index a5bac02..a8528b8 100644
--- a/docs/plugins/inspect/plugin-assrender.xml
+++ b/docs/plugins/inspect/plugin-assrender.xml
@@ -3,7 +3,7 @@
<description>ASS/SSA subtitle renderer</description>
<filename>../../ext/assrender/.libs/libgstassrender.so</filename>
<basename>libgstassrender.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-audiofxbad.xml b/docs/plugins/inspect/plugin-audiofxbad.xml
index 1752981..341befe 100644
--- a/docs/plugins/inspect/plugin-audiofxbad.xml
+++ b/docs/plugins/inspect/plugin-audiofxbad.xml
@@ -3,7 +3,7 @@
<description>Audio filters from gst-plugins-bad</description>
<filename>../../gst/audiofxbad/.libs/libgstaudiofxbad.so</filename>
<basename>libgstaudiofxbad.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins</package>
diff --git a/docs/plugins/inspect/plugin-audiomixer.xml b/docs/plugins/inspect/plugin-audiomixer.xml
index 1c6bdf8..397e8c5 100644
--- a/docs/plugins/inspect/plugin-audiomixer.xml
+++ b/docs/plugins/inspect/plugin-audiomixer.xml
@@ -3,7 +3,7 @@
<description>Mixes multiple audio streams</description>
<filename>../../gst/audiomixer/.libs/libgstaudiomixer.so</filename>
<basename>libgstaudiomixer.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-audiovisualizers.xml b/docs/plugins/inspect/plugin-audiovisualizers.xml
index 16915a4..e03e133 100644
--- a/docs/plugins/inspect/plugin-audiovisualizers.xml
+++ b/docs/plugins/inspect/plugin-audiovisualizers.xml
@@ -3,7 +3,7 @@
<description>Creates video visualizations of audio input</description>
<filename>../../gst/audiovisualizers/.libs/libgstaudiovisualizers.so</filename>
<basename>libgstaudiovisualizers.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-autoconvert.xml b/docs/plugins/inspect/plugin-autoconvert.xml
index 0ee28c9..655521b 100644
--- a/docs/plugins/inspect/plugin-autoconvert.xml
+++ b/docs/plugins/inspect/plugin-autoconvert.xml
@@ -3,7 +3,7 @@
<description>Selects convertor element based on caps</description>
<filename>../../gst/autoconvert/.libs/libgstautoconvert.so</filename>
<basename>libgstautoconvert.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-bayer.xml b/docs/plugins/inspect/plugin-bayer.xml
index 10b40fb..106ace6 100644
--- a/docs/plugins/inspect/plugin-bayer.xml
+++ b/docs/plugins/inspect/plugin-bayer.xml
@@ -3,7 +3,7 @@
<description>Elements to convert Bayer images</description>
<filename>../../gst/bayer/.libs/libgstbayer.so</filename>
<basename>libgstbayer.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-bluez.xml b/docs/plugins/inspect/plugin-bluez.xml
index b469113..c58cfc7 100644
--- a/docs/plugins/inspect/plugin-bluez.xml
+++ b/docs/plugins/inspect/plugin-bluez.xml
@@ -3,7 +3,7 @@
<description>Bluez-based bluetooth support</description>
<filename>../../sys/bluez/.libs/libgstbluez.so</filename>
<basename>libgstbluez.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-bs2b.xml b/docs/plugins/inspect/plugin-bs2b.xml
index 79783b2..9dc835e 100644
--- a/docs/plugins/inspect/plugin-bs2b.xml
+++ b/docs/plugins/inspect/plugin-bs2b.xml
@@ -3,7 +3,7 @@
<description>Improve headphone listening of stereo audio recordsusing the bs2b library.</description>
<filename>../../ext/bs2b/.libs/libgstbs2b.so</filename>
<basename>libgstbs2b.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-bz2.xml b/docs/plugins/inspect/plugin-bz2.xml
index 5c74efe..243905a 100644
--- a/docs/plugins/inspect/plugin-bz2.xml
+++ b/docs/plugins/inspect/plugin-bz2.xml
@@ -3,7 +3,7 @@
<description>Compress or decompress streams</description>
<filename>../../ext/bz2/.libs/libgstbz2.so</filename>
<basename>libgstbz2.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-camerabin.xml b/docs/plugins/inspect/plugin-camerabin.xml
index 69afef5..a8c43e4 100644
--- a/docs/plugins/inspect/plugin-camerabin.xml
+++ b/docs/plugins/inspect/plugin-camerabin.xml
@@ -3,7 +3,7 @@
<description>Take image snapshots and record movies from camera</description>
<filename>../../gst/camerabin2/.libs/libgstcamerabin2.so</filename>
<basename>libgstcamerabin2.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-chromaprint.xml b/docs/plugins/inspect/plugin-chromaprint.xml
index 7c0e151..29323fe 100644
--- a/docs/plugins/inspect/plugin-chromaprint.xml
+++ b/docs/plugins/inspect/plugin-chromaprint.xml
@@ -3,7 +3,7 @@
<description>Calculate Chromaprint fingerprint from audio files</description>
<filename>../../ext/chromaprint/.libs/libgstchromaprint.so</filename>
<basename>libgstchromaprint.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-coloreffects.xml b/docs/plugins/inspect/plugin-coloreffects.xml
index ea66574..1cdf82b 100644
--- a/docs/plugins/inspect/plugin-coloreffects.xml
+++ b/docs/plugins/inspect/plugin-coloreffects.xml
@@ -3,7 +3,7 @@
<description>Color Look-up Table filters</description>
<filename>../../gst/coloreffects/.libs/libgstcoloreffects.so</filename>
<basename>libgstcoloreffects.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-compositor.xml b/docs/plugins/inspect/plugin-compositor.xml
index cc022ad..d887684 100644
--- a/docs/plugins/inspect/plugin-compositor.xml
+++ b/docs/plugins/inspect/plugin-compositor.xml
@@ -3,7 +3,7 @@
<description>Compositor</description>
<filename>../../gst/compositor/.libs/libgstcompositor.so</filename>
<basename>libgstcompositor.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-curl.xml b/docs/plugins/inspect/plugin-curl.xml
index 2c0156f..e51fc42 100644
--- a/docs/plugins/inspect/plugin-curl.xml
+++ b/docs/plugins/inspect/plugin-curl.xml
@@ -3,7 +3,7 @@
<description>libcurl-based elements</description>
<filename>../../ext/curl/.libs/libgstcurl.so</filename>
<basename>libgstcurl.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-dashdemux.xml b/docs/plugins/inspect/plugin-dashdemux.xml
index 7ef13c1..a5e1a28 100644
--- a/docs/plugins/inspect/plugin-dashdemux.xml
+++ b/docs/plugins/inspect/plugin-dashdemux.xml
@@ -3,7 +3,7 @@
<description>DASH demuxer plugin</description>
<filename>../../ext/dash/.libs/libgstdashdemux.so</filename>
<basename>libgstdashdemux.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins</package>
diff --git a/docs/plugins/inspect/plugin-dataurisrc.xml b/docs/plugins/inspect/plugin-dataurisrc.xml
index 6de40ea..6af3682 100644
--- a/docs/plugins/inspect/plugin-dataurisrc.xml
+++ b/docs/plugins/inspect/plugin-dataurisrc.xml
@@ -3,7 +3,7 @@
<description>data: URI source</description>
<filename>../../gst/dataurisrc/.libs/libgstdataurisrc.so</filename>
<basename>libgstdataurisrc.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-dc1394.xml b/docs/plugins/inspect/plugin-dc1394.xml
index 32e586b..42b8f0e 100644
--- a/docs/plugins/inspect/plugin-dc1394.xml
+++ b/docs/plugins/inspect/plugin-dc1394.xml
@@ -3,7 +3,7 @@
<description>1394 IIDC video source</description>
<filename>../../ext/dc1394/.libs/libgstdc1394.so</filename>
<basename>libgstdc1394.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-debugutilsbad.xml b/docs/plugins/inspect/plugin-debugutilsbad.xml
index f34e4d2..491f729 100644
--- a/docs/plugins/inspect/plugin-debugutilsbad.xml
+++ b/docs/plugins/inspect/plugin-debugutilsbad.xml
@@ -3,7 +3,7 @@
<description>Collection of elements that may or may not be useful for debugging</description>
<filename>../../gst/debugutils/.libs/libgstdebugutilsbad.so</filename>
<basename>libgstdebugutilsbad.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-decklink.xml b/docs/plugins/inspect/plugin-decklink.xml
index 142bfab..db3a890 100644
--- a/docs/plugins/inspect/plugin-decklink.xml
+++ b/docs/plugins/inspect/plugin-decklink.xml
@@ -3,7 +3,7 @@
<description>Blackmagic Decklink plugin</description>
<filename>../../sys/decklink/.libs/libgstdecklink.so</filename>
<basename>libgstdecklink.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins</package>
@@ -20,7 +20,7 @@
<name>sink</name>
<direction>sink</direction>
<presence>always</presence>
- <details>audio/x-raw, format=(string){ S16LE, S32LE }, channels=(int)2, rate=(int)48000, layout=(string)interleaved</details>
+ <details>audio/x-raw, format=(string){ S16LE, S32LE }, channels=(int){ 2, 8, 16 }, rate=(int)48000, layout=(string)interleaved</details>
</caps>
</pads>
</element>
diff --git a/docs/plugins/inspect/plugin-dfbvideosink.xml b/docs/plugins/inspect/plugin-dfbvideosink.xml
index cc5f7bd..6afaee5 100644
--- a/docs/plugins/inspect/plugin-dfbvideosink.xml
+++ b/docs/plugins/inspect/plugin-dfbvideosink.xml
@@ -3,7 +3,7 @@
<description>DirectFB video output plugin</description>
<filename>../../ext/directfb/.libs/libgstdfbvideosink.so</filename>
<basename>libgstdfbvideosink.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-dtls.xml b/docs/plugins/inspect/plugin-dtls.xml
index f5842d9..98e2ce3 100644
--- a/docs/plugins/inspect/plugin-dtls.xml
+++ b/docs/plugins/inspect/plugin-dtls.xml
@@ -3,7 +3,7 @@
<description>DTLS decoder and encoder plugins</description>
<filename>../../ext/dtls/.libs/libgstdtls.so</filename>
<basename>libgstdtls.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>BSD</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-dtsdec.xml b/docs/plugins/inspect/plugin-dtsdec.xml
index b39558a..de9c4b3 100644
--- a/docs/plugins/inspect/plugin-dtsdec.xml
+++ b/docs/plugins/inspect/plugin-dtsdec.xml
@@ -3,7 +3,7 @@
<description>Decodes DTS audio streams</description>
<filename>../../ext/dts/.libs/libgstdtsdec.so</filename>
<basename>libgstdtsdec.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>GPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-dvb.xml b/docs/plugins/inspect/plugin-dvb.xml
index 3a6781f..9661f22 100644
--- a/docs/plugins/inspect/plugin-dvb.xml
+++ b/docs/plugins/inspect/plugin-dvb.xml
@@ -3,7 +3,7 @@
<description>DVB elements</description>
<filename>../../sys/dvb/.libs/libgstdvb.so</filename>
<basename>libgstdvb.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-dvbsuboverlay.xml b/docs/plugins/inspect/plugin-dvbsuboverlay.xml
index 95e88f8..53229eb 100644
--- a/docs/plugins/inspect/plugin-dvbsuboverlay.xml
+++ b/docs/plugins/inspect/plugin-dvbsuboverlay.xml
@@ -3,7 +3,7 @@
<description>DVB subtitle renderer</description>
<filename>../../gst/dvbsuboverlay/.libs/libgstdvbsuboverlay.so</filename>
<basename>libgstdvbsuboverlay.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-dvdspu.xml b/docs/plugins/inspect/plugin-dvdspu.xml
index b283882..ef71302 100644
--- a/docs/plugins/inspect/plugin-dvdspu.xml
+++ b/docs/plugins/inspect/plugin-dvdspu.xml
@@ -3,7 +3,7 @@
<description>DVD Sub-picture Overlay element</description>
<filename>../../gst/dvdspu/.libs/libgstdvdspu.so</filename>
<basename>libgstdvdspu.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-faac.xml b/docs/plugins/inspect/plugin-faac.xml
index 0ab3a8f..5fe33e3 100644
--- a/docs/plugins/inspect/plugin-faac.xml
+++ b/docs/plugins/inspect/plugin-faac.xml
@@ -3,7 +3,7 @@
<description>Free AAC Encoder (FAAC)</description>
<filename>../../ext/faac/.libs/libgstfaac.so</filename>
<basename>libgstfaac.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-faad.xml b/docs/plugins/inspect/plugin-faad.xml
index c0d8e7f..f7c5718 100644
--- a/docs/plugins/inspect/plugin-faad.xml
+++ b/docs/plugins/inspect/plugin-faad.xml
@@ -3,7 +3,7 @@
<description>Free AAC Decoder (FAAD)</description>
<filename>../../ext/faad/.libs/libgstfaad.so</filename>
<basename>libgstfaad.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>GPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-fbdevsink.xml b/docs/plugins/inspect/plugin-fbdevsink.xml
index f72f555..ffb16d8 100644
--- a/docs/plugins/inspect/plugin-fbdevsink.xml
+++ b/docs/plugins/inspect/plugin-fbdevsink.xml
@@ -3,7 +3,7 @@
<description>Linux framebuffer video sink</description>
<filename>../../sys/fbdev/.libs/libgstfbdevsink.so</filename>
<basename>libgstfbdevsink.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-fdkaac.xml b/docs/plugins/inspect/plugin-fdkaac.xml
new file mode 100644
index 0000000..6756a71
--- /dev/null
+++ b/docs/plugins/inspect/plugin-fdkaac.xml
@@ -0,0 +1,55 @@
+<plugin>
+ <name>fdkaac</name>
+ <description>Fraunhofer FDK AAC Codec plugin</description>
+ <filename>../../ext/fdkaac/.libs/libgstfdkaac.so</filename>
+ <basename>libgstfdkaac.so</basename>
+ <version>1.9.2</version>
+ <license>LGPL</license>
+ <source>gst-plugins-bad</source>
+ <package>GStreamer Bad Plug-ins source release</package>
+ <origin>Unknown package origin</origin>
+ <elements>
+ <element>
+ <name>fdkaacdec</name>
+ <longname>FDK AAC audio decoder</longname>
+ <class>Codec/Decoder/Audio</class>
+ <description>FDK AAC audio decoder</description>
+ <author>Sebastian Dröge <sebastian@centricular.com></author>
+ <pads>
+ <caps>
+ <name>sink</name>
+ <direction>sink</direction>
+ <presence>always</presence>
+ <details>audio/mpeg, mpegversion=(int)4, stream-format=(string){ adts, adif, raw }</details>
+ </caps>
+ <caps>
+ <name>src</name>
+ <direction>source</direction>
+ <presence>always</presence>
+ <details>audio/x-raw, format=(string)S16LE, layout=(string)interleaved, rate=(int)[ 8000, 96000 ], channels=(int)[ 1, 8 ]</details>
+ </caps>
+ </pads>
+ </element>
+ <element>
+ <name>fdkaacenc</name>
+ <longname>FDK AAC audio encoder</longname>
+ <class>Codec/Encoder/Audio</class>
+ <description>FDK AAC audio encoder</description>
+ <author>Sebastian Dröge <sebastian@centricular.com></author>
+ <pads>
+ <caps>
+ <name>sink</name>
+ <direction>sink</direction>
+ <presence>always</presence>
+ <details>audio/x-raw, format=(string)S16LE, layout=(string)interleaved, rate=(int){ 8000, 11025, 12000, 16000, 22050, 24000, 32000, 44100, 48000, 64000, 88200, 96000 }, channels=(int){ 1, 2, 3, 4, 5, 6, 8 }</details>
+ </caps>
+ <caps>
+ <name>src</name>
+ <direction>source</direction>
+ <presence>always</presence>
+ <details>audio/mpeg, mpegversion=(int){ 2, 4 }, rate=(int){ 8000, 11025, 12000, 16000, 22050, 24000, 32000, 44100, 48000, 64000, 88200, 96000 }, channels=(int){ 1, 2, 3, 4, 5, 6, 8 }, stream-format=(string){ adts, adif, raw }, base-profile=(string)lc</details>
+ </caps>
+ </pads>
+ </element>
+ </elements>
+</plugin>
\ No newline at end of file
diff --git a/docs/plugins/inspect/plugin-festival.xml b/docs/plugins/inspect/plugin-festival.xml
index bdeb837..d7cf81a 100644
--- a/docs/plugins/inspect/plugin-festival.xml
+++ b/docs/plugins/inspect/plugin-festival.xml
@@ -3,7 +3,7 @@
<description>Synthesizes plain text into audio</description>
<filename>../../gst/festival/.libs/libgstfestival.so</filename>
<basename>libgstfestival.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-fieldanalysis.xml b/docs/plugins/inspect/plugin-fieldanalysis.xml
index 188a6c7..08090f2 100644
--- a/docs/plugins/inspect/plugin-fieldanalysis.xml
+++ b/docs/plugins/inspect/plugin-fieldanalysis.xml
@@ -3,7 +3,7 @@
<description>Video field analysis</description>
<filename>../../gst/fieldanalysis/.libs/libgstfieldanalysis.so</filename>
<basename>libgstfieldanalysis.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer</package>
diff --git a/docs/plugins/inspect/plugin-flite.xml b/docs/plugins/inspect/plugin-flite.xml
index 9a70857..9cdf30f 100644
--- a/docs/plugins/inspect/plugin-flite.xml
+++ b/docs/plugins/inspect/plugin-flite.xml
@@ -3,7 +3,7 @@
<description>Flite speech synthesizer plugin</description>
<filename>../../ext/flite/.libs/libgstflite.so</filename>
<basename>libgstflite.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-fluidsynthmidi.xml b/docs/plugins/inspect/plugin-fluidsynthmidi.xml
index d4e84ab..737985c 100644
--- a/docs/plugins/inspect/plugin-fluidsynthmidi.xml
+++ b/docs/plugins/inspect/plugin-fluidsynthmidi.xml
@@ -3,7 +3,7 @@
<description>Fluidsynth MIDI Plugin</description>
<filename>../../ext/fluidsynth/.libs/libgstfluidsynthmidi.so</filename>
<basename>libgstfluidsynthmidi.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-freeverb.xml b/docs/plugins/inspect/plugin-freeverb.xml
index 27409e7..9551905 100644
--- a/docs/plugins/inspect/plugin-freeverb.xml
+++ b/docs/plugins/inspect/plugin-freeverb.xml
@@ -3,7 +3,7 @@
<description>Reverberation/room effect</description>
<filename>../../gst/freeverb/.libs/libgstfreeverb.so</filename>
<basename>libgstfreeverb.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-frei0r.xml b/docs/plugins/inspect/plugin-frei0r.xml
index 13235da..93f9868 100644
--- a/docs/plugins/inspect/plugin-frei0r.xml
+++ b/docs/plugins/inspect/plugin-frei0r.xml
@@ -3,7 +3,7 @@
<description>frei0r plugin library</description>
<filename>../../gst/frei0r/.libs/libgstfrei0r.so</filename>
<basename>libgstfrei0r.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-gaudieffects.xml b/docs/plugins/inspect/plugin-gaudieffects.xml
index af26824..358f3c8 100644
--- a/docs/plugins/inspect/plugin-gaudieffects.xml
+++ b/docs/plugins/inspect/plugin-gaudieffects.xml
@@ -3,7 +3,7 @@
<description>Gaudi video effects.</description>
<filename>../../gst/gaudieffects/.libs/libgstgaudieffects.so</filename>
<basename>libgstgaudieffects.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer</package>
diff --git a/docs/plugins/inspect/plugin-gdp.xml b/docs/plugins/inspect/plugin-gdp.xml
index 98886f9..32f7040 100644
--- a/docs/plugins/inspect/plugin-gdp.xml
+++ b/docs/plugins/inspect/plugin-gdp.xml
@@ -3,7 +3,7 @@
<description>Payload/depayload GDP packets</description>
<filename>../../gst/gdp/.libs/libgstgdp.so</filename>
<basename>libgstgdp.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-geometrictransform.xml b/docs/plugins/inspect/plugin-geometrictransform.xml
index 147ffd9..dd26ca6 100644
--- a/docs/plugins/inspect/plugin-geometrictransform.xml
+++ b/docs/plugins/inspect/plugin-geometrictransform.xml
@@ -3,7 +3,7 @@
<description>Various geometric image transform elements</description>
<filename>../../gst/geometrictransform/.libs/libgstgeometrictransform.so</filename>
<basename>libgstgeometrictransform.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-gmedec.xml b/docs/plugins/inspect/plugin-gmedec.xml
index 87dd5b7..35fd42a 100644
--- a/docs/plugins/inspect/plugin-gmedec.xml
+++ b/docs/plugins/inspect/plugin-gmedec.xml
@@ -3,7 +3,7 @@
<description>GME Audio Decoder</description>
<filename>../../ext/gme/.libs/libgstgme.so</filename>
<basename>libgstgme.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-gsm.xml b/docs/plugins/inspect/plugin-gsm.xml
index 683facf..1f6c396 100644
--- a/docs/plugins/inspect/plugin-gsm.xml
+++ b/docs/plugins/inspect/plugin-gsm.xml
@@ -3,7 +3,7 @@
<description>GSM encoder/decoder</description>
<filename>../../ext/gsm/.libs/libgstgsm.so</filename>
<basename>libgstgsm.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-gstgtk.xml b/docs/plugins/inspect/plugin-gstgtk.xml
index 350f850..2769058 100644
--- a/docs/plugins/inspect/plugin-gstgtk.xml
+++ b/docs/plugins/inspect/plugin-gstgtk.xml
@@ -3,7 +3,7 @@
<description>Gtk+ sink</description>
<filename>../../ext/gtk/.libs/libgstgtksink.so</filename>
<basename>libgstgtksink.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-gstsiren.xml b/docs/plugins/inspect/plugin-gstsiren.xml
index 5aed1dc..19ed718 100644
--- a/docs/plugins/inspect/plugin-gstsiren.xml
+++ b/docs/plugins/inspect/plugin-gstsiren.xml
@@ -3,7 +3,7 @@
<description>Siren encoder/decoder/payloader/depayloader plugins</description>
<filename>../../gst/siren/.libs/libgstsiren.so</filename>
<basename>libgstsiren.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-hls.xml b/docs/plugins/inspect/plugin-hls.xml
index 2329e56..90ef02d 100644
--- a/docs/plugins/inspect/plugin-hls.xml
+++ b/docs/plugins/inspect/plugin-hls.xml
@@ -3,7 +3,7 @@
<description>HTTP Live Streaming (HLS)</description>
<filename>../../ext/hls/.libs/libgsthls.so</filename>
<basename>libgsthls.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins</package>
diff --git a/docs/plugins/inspect/plugin-id3tag.xml b/docs/plugins/inspect/plugin-id3tag.xml
index 6ab761e..ed24360 100644
--- a/docs/plugins/inspect/plugin-id3tag.xml
+++ b/docs/plugins/inspect/plugin-id3tag.xml
@@ -3,7 +3,7 @@
<description>ID3 v1 and v2 muxing plugin</description>
<filename>../../gst/id3tag/.libs/libgstid3tag.so</filename>
<basename>libgstid3tag.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-inter.xml b/docs/plugins/inspect/plugin-inter.xml
index dc5266e..32228e0 100644
--- a/docs/plugins/inspect/plugin-inter.xml
+++ b/docs/plugins/inspect/plugin-inter.xml
@@ -3,7 +3,7 @@
<description>plugin for inter-pipeline communication</description>
<filename>../../gst/inter/.libs/libgstinter.so</filename>
<basename>libgstinter.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins</package>
diff --git a/docs/plugins/inspect/plugin-interlace.xml b/docs/plugins/inspect/plugin-interlace.xml
index e2f2010..c7991e7 100644
--- a/docs/plugins/inspect/plugin-interlace.xml
+++ b/docs/plugins/inspect/plugin-interlace.xml
@@ -3,7 +3,7 @@
<description>Create an interlaced video stream</description>
<filename>../../gst/interlace/.libs/libgstinterlace.so</filename>
<basename>libgstinterlace.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-ivfparse.xml b/docs/plugins/inspect/plugin-ivfparse.xml
index 628a0b6..c6d17da 100644
--- a/docs/plugins/inspect/plugin-ivfparse.xml
+++ b/docs/plugins/inspect/plugin-ivfparse.xml
@@ -3,7 +3,7 @@
<description>IVF parser</description>
<filename>../../gst/ivfparse/.libs/libgstivfparse.so</filename>
<basename>libgstivfparse.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-ivtc.xml b/docs/plugins/inspect/plugin-ivtc.xml
index bfe8950..0f9e367 100644
--- a/docs/plugins/inspect/plugin-ivtc.xml
+++ b/docs/plugins/inspect/plugin-ivtc.xml
@@ -3,7 +3,7 @@
<description>Inverse Telecine</description>
<filename>../../gst/ivtc/.libs/libgstivtc.so</filename>
<basename>libgstivtc.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins</package>
diff --git a/docs/plugins/inspect/plugin-jp2kdecimator.xml b/docs/plugins/inspect/plugin-jp2kdecimator.xml
index 2c019bf..cf0b267 100644
--- a/docs/plugins/inspect/plugin-jp2kdecimator.xml
+++ b/docs/plugins/inspect/plugin-jp2kdecimator.xml
@@ -3,7 +3,7 @@
<description>JPEG2000 decimator</description>
<filename>../../gst/jp2kdecimator/.libs/libgstjp2kdecimator.so</filename>
<basename>libgstjp2kdecimator.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-jpegformat.xml b/docs/plugins/inspect/plugin-jpegformat.xml
index 0f772e3..784cdd6 100644
--- a/docs/plugins/inspect/plugin-jpegformat.xml
+++ b/docs/plugins/inspect/plugin-jpegformat.xml
@@ -3,7 +3,7 @@
<description>JPEG interchange format plugin</description>
<filename>../../gst/jpegformat/.libs/libgstjpegformat.so</filename>
<basename>libgstjpegformat.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-kate.xml b/docs/plugins/inspect/plugin-kate.xml
index 6f6f693..d2606b3 100644
--- a/docs/plugins/inspect/plugin-kate.xml
+++ b/docs/plugins/inspect/plugin-kate.xml
@@ -3,7 +3,7 @@
<description>Kate plugin</description>
<filename>../../ext/kate/.libs/libgstkate.so</filename>
<basename>libgstkate.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-ladspa.xml b/docs/plugins/inspect/plugin-ladspa.xml
index 8bd5c50..012e0b9 100644
--- a/docs/plugins/inspect/plugin-ladspa.xml
+++ b/docs/plugins/inspect/plugin-ladspa.xml
@@ -3,7 +3,7 @@
<description>LADSPA plugin</description>
<filename>../../ext/ladspa/.libs/libgstladspa.so</filename>
<basename>libgstladspa.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-libde265.xml b/docs/plugins/inspect/plugin-libde265.xml
index 7d3455e..eb1db39 100644
--- a/docs/plugins/inspect/plugin-libde265.xml
+++ b/docs/plugins/inspect/plugin-libde265.xml
@@ -3,7 +3,7 @@
<description>HEVC/H.265 decoder using libde265</description>
<filename>../../ext/libde265/.libs/libgstlibde265.so</filename>
<basename>libgstlibde265.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-midi.xml b/docs/plugins/inspect/plugin-midi.xml
index 3a0e8f1..2e55753 100644
--- a/docs/plugins/inspect/plugin-midi.xml
+++ b/docs/plugins/inspect/plugin-midi.xml
@@ -3,7 +3,7 @@
<description>Parse MIDI files</description>
<filename>../../gst/midi/.libs/libgstmidi.so</filename>
<basename>libgstmidi.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-mimic.xml b/docs/plugins/inspect/plugin-mimic.xml
index 972e4f1..fa6dce2 100644
--- a/docs/plugins/inspect/plugin-mimic.xml
+++ b/docs/plugins/inspect/plugin-mimic.xml
@@ -3,7 +3,7 @@
<description>Mimic codec</description>
<filename>../../ext/mimic/.libs/libgstmimic.so</filename>
<basename>libgstmimic.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-mms.xml b/docs/plugins/inspect/plugin-mms.xml
index 4b43286..280f07a 100644
--- a/docs/plugins/inspect/plugin-mms.xml
+++ b/docs/plugins/inspect/plugin-mms.xml
@@ -3,7 +3,7 @@
<description>Microsoft Multi Media Server streaming protocol support</description>
<filename>../../ext/libmms/.libs/libgstmms.so</filename>
<basename>libgstmms.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-modplug.xml b/docs/plugins/inspect/plugin-modplug.xml
index e4a3d55..51df842 100644
--- a/docs/plugins/inspect/plugin-modplug.xml
+++ b/docs/plugins/inspect/plugin-modplug.xml
@@ -3,7 +3,7 @@
<description>.MOD audio decoding</description>
<filename>../../ext/modplug/.libs/libgstmodplug.so</filename>
<basename>libgstmodplug.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-mpeg2enc.xml b/docs/plugins/inspect/plugin-mpeg2enc.xml
index cbfda70..226e516 100644
--- a/docs/plugins/inspect/plugin-mpeg2enc.xml
+++ b/docs/plugins/inspect/plugin-mpeg2enc.xml
@@ -3,7 +3,7 @@
<description>High-quality MPEG-1/2 video encoder</description>
<filename>../../ext/mpeg2enc/.libs/libgstmpeg2enc.so</filename>
<basename>libgstmpeg2enc.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>GPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-mpegpsdemux.xml b/docs/plugins/inspect/plugin-mpegpsdemux.xml
index 79b997a..c184885 100644
--- a/docs/plugins/inspect/plugin-mpegpsdemux.xml
+++ b/docs/plugins/inspect/plugin-mpegpsdemux.xml
@@ -3,7 +3,7 @@
<description>MPEG-PS demuxer</description>
<filename>../../gst/mpegdemux/.libs/libgstmpegpsdemux.so</filename>
<basename>libgstmpegpsdemux.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>unknown</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-mpegpsmux.xml b/docs/plugins/inspect/plugin-mpegpsmux.xml
index 0e61377..ef87eb3 100644
--- a/docs/plugins/inspect/plugin-mpegpsmux.xml
+++ b/docs/plugins/inspect/plugin-mpegpsmux.xml
@@ -3,7 +3,7 @@
<description>MPEG-PS muxer</description>
<filename>../../gst/mpegpsmux/.libs/libgstmpegpsmux.so</filename>
<basename>libgstmpegpsmux.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-mpegtsdemux.xml b/docs/plugins/inspect/plugin-mpegtsdemux.xml
index 2441c08..cc43d8f 100644
--- a/docs/plugins/inspect/plugin-mpegtsdemux.xml
+++ b/docs/plugins/inspect/plugin-mpegtsdemux.xml
@@ -3,7 +3,7 @@
<description>MPEG TS demuxer</description>
<filename>../../gst/mpegtsdemux/.libs/libgstmpegtsdemux.so</filename>
<basename>libgstmpegtsdemux.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-mpegtsmux.xml b/docs/plugins/inspect/plugin-mpegtsmux.xml
index 00444a6..a258235 100644
--- a/docs/plugins/inspect/plugin-mpegtsmux.xml
+++ b/docs/plugins/inspect/plugin-mpegtsmux.xml
@@ -3,7 +3,7 @@
<description>MPEG-TS muxer</description>
<filename>../../gst/mpegtsmux/.libs/libgstmpegtsmux.so</filename>
<basename>libgstmpegtsmux.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-mplex.xml b/docs/plugins/inspect/plugin-mplex.xml
index 243410f..c8d805d 100644
--- a/docs/plugins/inspect/plugin-mplex.xml
+++ b/docs/plugins/inspect/plugin-mplex.xml
@@ -3,7 +3,7 @@
<description>High-quality MPEG/DVD/SVCD/VCD video/audio multiplexer</description>
<filename>../../ext/mplex/.libs/libgstmplex.so</filename>
<basename>libgstmplex.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>GPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-musepack.xml b/docs/plugins/inspect/plugin-musepack.xml
index fc9b47e..9f679cc 100644
--- a/docs/plugins/inspect/plugin-musepack.xml
+++ b/docs/plugins/inspect/plugin-musepack.xml
@@ -3,7 +3,7 @@
<description>Musepack decoder</description>
<filename>../../ext/musepack/.libs/libgstmusepack.so</filename>
<basename>libgstmusepack.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-mxf.xml b/docs/plugins/inspect/plugin-mxf.xml
index 9fa350a..efea8e4 100644
--- a/docs/plugins/inspect/plugin-mxf.xml
+++ b/docs/plugins/inspect/plugin-mxf.xml
@@ -3,7 +3,7 @@
<description>MXF plugin library</description>
<filename>../../gst/mxf/.libs/libgstmxf.so</filename>
<basename>libgstmxf.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-netsim.xml b/docs/plugins/inspect/plugin-netsim.xml
index 6dcc1f7..390fb3f 100644
--- a/docs/plugins/inspect/plugin-netsim.xml
+++ b/docs/plugins/inspect/plugin-netsim.xml
@@ -3,7 +3,7 @@
<description>Network Simulator</description>
<filename>../../gst/netsim/.libs/libgstnetsim.so</filename>
<basename>libgstnetsim.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-ofa.xml b/docs/plugins/inspect/plugin-ofa.xml
index 137ea2f..2f134ca 100644
--- a/docs/plugins/inspect/plugin-ofa.xml
+++ b/docs/plugins/inspect/plugin-ofa.xml
@@ -3,7 +3,7 @@
<description>Calculate MusicIP fingerprint from audio files</description>
<filename>../../ext/ofa/.libs/libgstofa.so</filename>
<basename>libgstofa.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>GPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-openal.xml b/docs/plugins/inspect/plugin-openal.xml
index 20589ce..36d083f 100644
--- a/docs/plugins/inspect/plugin-openal.xml
+++ b/docs/plugins/inspect/plugin-openal.xml
@@ -3,7 +3,7 @@
<description>OpenAL plugin library</description>
<filename>../../ext/openal/.libs/libgstopenal.so</filename>
<basename>libgstopenal.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-opencv.xml b/docs/plugins/inspect/plugin-opencv.xml
index ba8d908..de1d5cc 100644
--- a/docs/plugins/inspect/plugin-opencv.xml
+++ b/docs/plugins/inspect/plugin-opencv.xml
@@ -3,7 +3,7 @@
<description>GStreamer OpenCV Plugins</description>
<filename>../../ext/opencv/.libs/libgstopencv.so</filename>
<basename>libgstopencv.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-openexr.xml b/docs/plugins/inspect/plugin-openexr.xml
index e9535d0..1630578 100644
--- a/docs/plugins/inspect/plugin-openexr.xml
+++ b/docs/plugins/inspect/plugin-openexr.xml
@@ -3,7 +3,7 @@
<description>OpenEXR image plugin</description>
<filename>../../ext/openexr/.libs/libgstopenexr.so</filename>
<basename>libgstopenexr.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-opengl.xml b/docs/plugins/inspect/plugin-opengl.xml
index 954b386..080bf77 100644
--- a/docs/plugins/inspect/plugin-opengl.xml
+++ b/docs/plugins/inspect/plugin-opengl.xml
@@ -3,7 +3,7 @@
<description>OpenGL plugin</description>
<filename>../../ext/gl/.libs/libgstopengl.so</filename>
<basename>libgstopengl.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-openh264.xml b/docs/plugins/inspect/plugin-openh264.xml
index f5b13b5..1488ea5 100644
--- a/docs/plugins/inspect/plugin-openh264.xml
+++ b/docs/plugins/inspect/plugin-openh264.xml
@@ -3,7 +3,7 @@
<description>OpenH264 encoder/decoder plugin</description>
<filename>../../ext/openh264/.libs/libgstopenh264.so</filename>
<basename>libgstopenh264.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>BSD</license>
<source>gst-plugins-bad</source>
<package>OpenWebRTC GStreamer plugins</package>
diff --git a/docs/plugins/inspect/plugin-openjpeg.xml b/docs/plugins/inspect/plugin-openjpeg.xml
index 64411f8..ab25670 100644
--- a/docs/plugins/inspect/plugin-openjpeg.xml
+++ b/docs/plugins/inspect/plugin-openjpeg.xml
@@ -3,7 +3,7 @@
<description>OpenJPEG-based JPEG2000 image decoder/encoder</description>
<filename>../../ext/openjpeg/.libs/libgstopenjpeg.so</filename>
<basename>libgstopenjpeg.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-opusparse.xml b/docs/plugins/inspect/plugin-opusparse.xml
index e6ac24d..ee21e8c 100644
--- a/docs/plugins/inspect/plugin-opusparse.xml
+++ b/docs/plugins/inspect/plugin-opusparse.xml
@@ -3,7 +3,7 @@
<description>OPUS parse plugin</description>
<filename>../../ext/opus/.libs/libgstopusparse.so</filename>
<basename>libgstopusparse.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-pcapparse.xml b/docs/plugins/inspect/plugin-pcapparse.xml
index e4c85ff..14daaf0 100644
--- a/docs/plugins/inspect/plugin-pcapparse.xml
+++ b/docs/plugins/inspect/plugin-pcapparse.xml
@@ -3,7 +3,7 @@
<description>Element parsing raw pcap streams</description>
<filename>../../gst/pcapparse/.libs/libgstpcapparse.so</filename>
<basename>libgstpcapparse.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer</package>
diff --git a/docs/plugins/inspect/plugin-pnm.xml b/docs/plugins/inspect/plugin-pnm.xml
index ba0e18a..5fcffba 100644
--- a/docs/plugins/inspect/plugin-pnm.xml
+++ b/docs/plugins/inspect/plugin-pnm.xml
@@ -3,7 +3,7 @@
<description>PNM plugin</description>
<filename>../../gst/pnm/.libs/libgstpnm.so</filename>
<basename>libgstpnm.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-qt.xml b/docs/plugins/inspect/plugin-qt.xml
index 14a5b7b..47af4b9 100644
--- a/docs/plugins/inspect/plugin-qt.xml
+++ b/docs/plugins/inspect/plugin-qt.xml
@@ -1,9 +1,9 @@
<plugin>
<name>qt</name>
- <description>Qt sink</description>
- <filename>../../ext/qt/.libs/libgstqtsink.so</filename>
- <basename>libgstqtsink.so</basename>
- <version>1.9.1</version>
+ <description>Qt gl plugin</description>
+ <filename>../../ext/qt/.libs/libgstqmlgl.so</filename>
+ <basename>libgstqmlgl.so</basename>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
@@ -24,5 +24,20 @@
</caps>
</pads>
</element>
+ <element>
+ <name>qmlglsrc</name>
+ <longname>Qt Video Source</longname>
+ <class>Source/Video</class>
+ <description>A video src the grab window from a qml view</description>
+ <author>Multimedia Team <shmmmw@freescale.com></author>
+ <pads>
+ <caps>
+ <name>src</name>
+ <direction>source</direction>
+ <presence>always</presence>
+ <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</details>
+ </caps>
+ </pads>
+ </element>
</elements>
</plugin>
\ No newline at end of file
diff --git a/docs/plugins/inspect/plugin-rawparse.xml b/docs/plugins/inspect/plugin-rawparse.xml
index c16cc6e..9317262 100644
--- a/docs/plugins/inspect/plugin-rawparse.xml
+++ b/docs/plugins/inspect/plugin-rawparse.xml
@@ -3,7 +3,7 @@
<description>Parses byte streams into raw frames</description>
<filename>../../gst/rawparse/.libs/libgstrawparse.so</filename>
<basename>libgstrawparse.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
@@ -13,7 +13,7 @@
<name>audioparse</name>
<longname>Audio Parse</longname>
<class>Filter/Audio</class>
- <description>Converts stream into audio frames</description>
+ <description>Converts stream into audio frames (deprecated: use rawaudioparse instead)</description>
<author>Sebastian Dröge <sebastian.droege@collabora.co.uk></author>
<pads>
<caps>
@@ -31,6 +31,48 @@
</pads>
</element>
<element>
+ <name>rawaudioparse</name>
+ <longname>rawaudioparse</longname>
+ <class>Codec/Parser/Audio</class>
+ <description>Converts unformatted data streams into timestamped raw audio frames</description>
+ <author>Carlos Rafael Giani <dv@pseudoterminal.org></author>
+ <pads>
+ <caps>
+ <name>sink</name>
+ <direction>sink</direction>
+ <presence>always</presence>
+ <details>audio/x-unaligned-raw, format=(string){ S8, U8, S16LE, S16BE, U16LE, U16BE, S24_32LE, S24_32BE, U24_32LE, U24_32BE, S32LE, S32BE, U32LE, U32BE, S24LE, S24BE, U24LE, U24BE, S20LE, S20BE, U20LE, U20BE, S18LE, S18BE, U18LE, U18BE, F32LE, F32BE, F64LE, F64BE }, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ], layout=(string){ interleaved, non-interleaved }; audio/x-raw, format=(string){ S8, U8, S16LE, S16BE, U16LE, U16BE, S24_32LE, S24_32BE, U24_32LE, U24_32BE, S32LE, S32BE, U32LE, U32BE, S24LE, S24BE, U24LE, U24BE, S20LE, S20BE, U20LE, U20BE, S18LE, S18BE, U18LE, U18BE, F32LE, F32BE, F64LE, F64BE }, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ], layout=(string){ interleaved, non-interleaved }; audio/x-alaw, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ]; audio/x-mulaw, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ]</details>
+ </caps>
+ <caps>
+ <name>src</name>
+ <direction>source</direction>
+ <presence>always</presence>
+ <details>audio/x-raw, format=(string){ S8, U8, S16LE, S16BE, U16LE, U16BE, S24_32LE, S24_32BE, U24_32LE, U24_32BE, S32LE, S32BE, U32LE, U32BE, S24LE, S24BE, U24LE, U24BE, S20LE, S20BE, U20LE, U20BE, S18LE, S18BE, U18LE, U18BE, F32LE, F32BE, F64LE, F64BE }, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ], layout=(string){ interleaved, non-interleaved }; audio/x-alaw, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ]; audio/x-mulaw, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ]</details>
+ </caps>
+ </pads>
+ </element>
+ <element>
+ <name>rawvideoparse</name>
+ <longname>rawvideoparse</longname>
+ <class>Codec/Parser/Video</class>
+ <description>Converts unformatted data streams into timestamped raw video frames</description>
+ <author>Carlos Rafael Giani <dv@pseudoterminal.org></author>
+ <pads>
+ <caps>
+ <name>sink</name>
+ <direction>sink</direction>
+ <presence>always</presence>
+ <details>video/x-unaligned-raw, format=(string){ I420, YV12, YUY2, UYVY, AYUV, RGBx, BGRx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, Y41B, Y42B, YVYU, Y444, v210, v216, NV12, NV21, NV16, NV61, NV24, GRAY8, GRAY16_BE, GRAY16_LE, v308, IYU2, RGB16, BGR16, RGB15, BGR15, UYVP, A420, RGB8P, YUV9, YVU9, IYU1, ARGB64, AYUV64, r210, I420_10LE, I420_10BE, I422_10LE, I422_10BE, Y444_10LE, Y444_10BE, GBR, GBR_10LE, GBR_10BE, NV12_64Z32, A420_10LE, A420_10BE, A422_10LE, A422_10BE, A444_10LE, A444_10BE, P010_10LE, P010_10BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string){ I420, YV12, YUY2, UYVY, AYUV, RGBx, BGRx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, Y41B, Y42B, YVYU, Y444, v210, v216, NV12, NV21, NV16, NV61, NV24, GRAY8, GRAY16_BE, GRAY16_LE, v308, IYU2, RGB16, BGR16, RGB15, BGR15, UYVP, A420, RGB8P, YUV9, YVU9, IYU1, ARGB64, AYUV64, r210, I420_10LE, I420_10BE, I422_10LE, I422_10BE, Y444_10LE, Y444_10BE, GBR, GBR_10LE, GBR_10BE, NV12_64Z32, A420_10LE, A420_10BE, A422_10LE, A422_10BE, A444_10LE, A444_10BE, P010_10LE, P010_10BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+ </caps>
+ <caps>
+ <name>src</name>
+ <direction>source</direction>
+ <presence>always</presence>
+ <details>video/x-raw, format=(string){ I420, YV12, YUY2, UYVY, AYUV, RGBx, BGRx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, Y41B, Y42B, YVYU, Y444, v210, v216, NV12, NV21, NV16, NV61, NV24, GRAY8, GRAY16_BE, GRAY16_LE, v308, IYU2, RGB16, BGR16, RGB15, BGR15, UYVP, A420, RGB8P, YUV9, YVU9, IYU1, ARGB64, AYUV64, r210, I420_10LE, I420_10BE, I422_10LE, I422_10BE, Y444_10LE, Y444_10BE, GBR, GBR_10LE, GBR_10BE, NV12_64Z32, A420_10LE, A420_10BE, A422_10LE, A422_10BE, A444_10LE, A444_10BE, P010_10LE, P010_10BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+ </caps>
+ </pads>
+ </element>
+ <element>
<name>unalignedaudioparse</name>
<longname>unalignedaudioparse</longname>
<class>Codec/Parser/Bin/Audio</class>
@@ -52,10 +94,31 @@
</pads>
</element>
<element>
+ <name>unalignedvideoparse</name>
+ <longname>unalignedvideoparse</longname>
+ <class>Codec/Parser/Bin/Video</class>
+ <description>Parse unaligned raw video data</description>
+ <author>Carlos Rafael Giani <dv@pseudoterminal.org></author>
+ <pads>
+ <caps>
+ <name>sink</name>
+ <direction>sink</direction>
+ <presence>always</presence>
+ <details>video/x-unaligned-raw, format=(string){ I420, YV12, YUY2, UYVY, AYUV, RGBx, BGRx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, Y41B, Y42B, YVYU, Y444, v210, v216, NV12, NV21, NV16, NV61, NV24, GRAY8, GRAY16_BE, GRAY16_LE, v308, IYU2, RGB16, BGR16, RGB15, BGR15, UYVP, A420, RGB8P, YUV9, YVU9, IYU1, ARGB64, AYUV64, r210, I420_10LE, I420_10BE, I422_10LE, I422_10BE, Y444_10LE, Y444_10BE, GBR, GBR_10LE, GBR_10BE, NV12_64Z32, A420_10LE, A420_10BE, A422_10LE, A422_10BE, A444_10LE, A444_10BE, P010_10LE, P010_10BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+ </caps>
+ <caps>
+ <name>src</name>
+ <direction>source</direction>
+ <presence>always</presence>
+ <details>video/x-raw, format=(string){ I420, YV12, YUY2, UYVY, AYUV, RGBx, BGRx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, Y41B, Y42B, YVYU, Y444, v210, v216, NV12, NV21, NV16, NV61, NV24, GRAY8, GRAY16_BE, GRAY16_LE, v308, IYU2, RGB16, BGR16, RGB15, BGR15, UYVP, A420, RGB8P, YUV9, YVU9, IYU1, ARGB64, AYUV64, r210, I420_10LE, I420_10BE, I422_10LE, I422_10BE, Y444_10LE, Y444_10BE, GBR, GBR_10LE, GBR_10BE, NV12_64Z32, A420_10LE, A420_10BE, A422_10LE, A422_10BE, A444_10LE, A444_10BE, P010_10LE, P010_10BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+ </caps>
+ </pads>
+ </element>
+ <element>
<name>videoparse</name>
<longname>Video Parse</longname>
<class>Filter/Video</class>
- <description>Converts stream into video frames</description>
+ <description>Converts stream into video frames (deprecated: use rawvideoparse instead)</description>
<author>David Schleef <ds@schleef.org>, Sebastian Dröge <sebastian.droege@collabora.co.uk></author>
<pads>
<caps>
@@ -68,7 +131,7 @@
<name>src</name>
<direction>source</direction>
<presence>always</presence>
- <details>video/x-raw; video/x-bayer</details>
+ <details>video/x-raw</details>
</caps>
</pads>
</element>
diff --git a/docs/plugins/inspect/plugin-removesilence.xml b/docs/plugins/inspect/plugin-removesilence.xml
index c551b8b..0150c4d 100644
--- a/docs/plugins/inspect/plugin-removesilence.xml
+++ b/docs/plugins/inspect/plugin-removesilence.xml
@@ -3,7 +3,7 @@
<description>Removes silence from an audio stream</description>
<filename>../../gst/removesilence/.libs/libgstremovesilence.so</filename>
<basename>libgstremovesilence.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-resindvd.xml b/docs/plugins/inspect/plugin-resindvd.xml
index 1e23d9e..fc86aa9 100644
--- a/docs/plugins/inspect/plugin-resindvd.xml
+++ b/docs/plugins/inspect/plugin-resindvd.xml
@@ -3,7 +3,7 @@
<description>Resin DVD playback elements</description>
<filename>../../ext/resindvd/.libs/libgstresindvd.so</filename>
<basename>libgstresindvd.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>GPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer</package>
diff --git a/docs/plugins/inspect/plugin-rfbsrc.xml b/docs/plugins/inspect/plugin-rfbsrc.xml
index ebd2f3a..2650b41 100644
--- a/docs/plugins/inspect/plugin-rfbsrc.xml
+++ b/docs/plugins/inspect/plugin-rfbsrc.xml
@@ -3,7 +3,7 @@
<description>Connects to a VNC server and decodes RFB stream</description>
<filename>../../gst/librfb/.libs/libgstrfbsrc.so</filename>
<basename>libgstrfbsrc.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-rsvg.xml b/docs/plugins/inspect/plugin-rsvg.xml
index 8251261..ee21ad1 100644
--- a/docs/plugins/inspect/plugin-rsvg.xml
+++ b/docs/plugins/inspect/plugin-rsvg.xml
@@ -3,7 +3,7 @@
<description>RSVG plugin library</description>
<filename>../../ext/rsvg/.libs/libgstrsvg.so</filename>
<basename>libgstrsvg.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-rtmp.xml b/docs/plugins/inspect/plugin-rtmp.xml
index ea8fa22..f363a3a 100644
--- a/docs/plugins/inspect/plugin-rtmp.xml
+++ b/docs/plugins/inspect/plugin-rtmp.xml
@@ -3,7 +3,7 @@
<description>RTMP source and sink</description>
<filename>../../ext/rtmp/.libs/libgstrtmp.so</filename>
<basename>libgstrtmp.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-rtponvif.xml b/docs/plugins/inspect/plugin-rtponvif.xml
index f608e62..b141e9d 100644
--- a/docs/plugins/inspect/plugin-rtponvif.xml
+++ b/docs/plugins/inspect/plugin-rtponvif.xml
@@ -3,7 +3,7 @@
<description>ONVIF Streaming features</description>
<filename>../../gst/onvif/.libs/libgstrtponvif.so</filename>
<basename>libgstrtponvif.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>unknown</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-sbc.xml b/docs/plugins/inspect/plugin-sbc.xml
index 558ac77..b0465f7 100644
--- a/docs/plugins/inspect/plugin-sbc.xml
+++ b/docs/plugins/inspect/plugin-sbc.xml
@@ -3,7 +3,7 @@
<description>SBC bluetooth audio support</description>
<filename>../../ext/sbc/.libs/libgstsbc.so</filename>
<basename>libgstsbc.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-schro.xml b/docs/plugins/inspect/plugin-schro.xml
index e3c75d4..b2faa17 100644
--- a/docs/plugins/inspect/plugin-schro.xml
+++ b/docs/plugins/inspect/plugin-schro.xml
@@ -3,7 +3,7 @@
<description>Schroedinger plugin</description>
<filename>../../ext/schroedinger/.libs/libgstschro.so</filename>
<basename>libgstschro.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-sdp.xml b/docs/plugins/inspect/plugin-sdp.xml
index 8edb192..69ee9ea 100644
--- a/docs/plugins/inspect/plugin-sdp.xml
+++ b/docs/plugins/inspect/plugin-sdp.xml
@@ -3,7 +3,7 @@
<description>configure streaming sessions using SDP</description>
<filename>../../gst/sdp/.libs/libgstsdpelem.so</filename>
<basename>libgstsdpelem.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-segmentclip.xml b/docs/plugins/inspect/plugin-segmentclip.xml
index 60add5e..a008873 100644
--- a/docs/plugins/inspect/plugin-segmentclip.xml
+++ b/docs/plugins/inspect/plugin-segmentclip.xml
@@ -3,7 +3,7 @@
<description>Segment clip elements</description>
<filename>../../gst/segmentclip/.libs/libgstsegmentclip.so</filename>
<basename>libgstsegmentclip.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-shm.xml b/docs/plugins/inspect/plugin-shm.xml
index 2d2d7d5..649a97b 100644
--- a/docs/plugins/inspect/plugin-shm.xml
+++ b/docs/plugins/inspect/plugin-shm.xml
@@ -3,7 +3,7 @@
<description>shared memory sink source</description>
<filename>../../sys/shm/.libs/libgstshm.so</filename>
<basename>libgstshm.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-smooth.xml b/docs/plugins/inspect/plugin-smooth.xml
index a9c015a..adcba6d 100644
--- a/docs/plugins/inspect/plugin-smooth.xml
+++ b/docs/plugins/inspect/plugin-smooth.xml
@@ -3,7 +3,7 @@
<description>Apply a smooth filter to an image</description>
<filename>../../gst/smooth/.libs/libgstsmooth.so</filename>
<basename>libgstsmooth.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-smoothstreaming.xml b/docs/plugins/inspect/plugin-smoothstreaming.xml
index 39663b2..a7d69fe 100644
--- a/docs/plugins/inspect/plugin-smoothstreaming.xml
+++ b/docs/plugins/inspect/plugin-smoothstreaming.xml
@@ -3,7 +3,7 @@
<description>Microsoft's Smooth Streaming format support </description>
<filename>../../ext/smoothstreaming/.libs/libgstsmoothstreaming.so</filename>
<basename>libgstsmoothstreaming.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-sndfile.xml b/docs/plugins/inspect/plugin-sndfile.xml
index d7e5021..7a03401 100644
--- a/docs/plugins/inspect/plugin-sndfile.xml
+++ b/docs/plugins/inspect/plugin-sndfile.xml
@@ -3,7 +3,7 @@
<description>use libsndfile to read and write various audio formats</description>
<filename>../../ext/sndfile/.libs/libgstsndfile.so</filename>
<basename>libgstsndfile.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-soundtouch.xml b/docs/plugins/inspect/plugin-soundtouch.xml
index 099111a..3433f2d 100644
--- a/docs/plugins/inspect/plugin-soundtouch.xml
+++ b/docs/plugins/inspect/plugin-soundtouch.xml
@@ -3,7 +3,7 @@
<description>Audio Pitch Controller & BPM Detection</description>
<filename>../../ext/soundtouch/.libs/libgstsoundtouch.so</filename>
<basename>libgstsoundtouch.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-spandsp.xml b/docs/plugins/inspect/plugin-spandsp.xml
index acbeb31..c4332e6 100644
--- a/docs/plugins/inspect/plugin-spandsp.xml
+++ b/docs/plugins/inspect/plugin-spandsp.xml
@@ -3,7 +3,7 @@
<description>libspandsp plugin</description>
<filename>../../ext/spandsp/.libs/libgstspandsp.so</filename>
<basename>libgstspandsp.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-speed.xml b/docs/plugins/inspect/plugin-speed.xml
index 1437d86..0060ff2 100644
--- a/docs/plugins/inspect/plugin-speed.xml
+++ b/docs/plugins/inspect/plugin-speed.xml
@@ -3,7 +3,7 @@
<description>Set speed/pitch on audio/raw streams (resampler)</description>
<filename>../../gst/speed/.libs/libgstspeed.so</filename>
<basename>libgstspeed.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-srtp.xml b/docs/plugins/inspect/plugin-srtp.xml
index b15d787..837d8ce 100644
--- a/docs/plugins/inspect/plugin-srtp.xml
+++ b/docs/plugins/inspect/plugin-srtp.xml
@@ -3,7 +3,7 @@
<description>GStreamer SRTP</description>
<filename>../../ext/srtp/.libs/libgstsrtp.so</filename>
<basename>libgstsrtp.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer</package>
diff --git a/docs/plugins/inspect/plugin-stereo.xml b/docs/plugins/inspect/plugin-stereo.xml
index 4282046..cb1882e 100644
--- a/docs/plugins/inspect/plugin-stereo.xml
+++ b/docs/plugins/inspect/plugin-stereo.xml
@@ -3,7 +3,7 @@
<description>Muck with the stereo signal, enhance it's 'stereo-ness'</description>
<filename>../../gst/stereo/.libs/libgststereo.so</filename>
<basename>libgststereo.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-subenc.xml b/docs/plugins/inspect/plugin-subenc.xml
index 82a3bc9..525ea9f 100644
--- a/docs/plugins/inspect/plugin-subenc.xml
+++ b/docs/plugins/inspect/plugin-subenc.xml
@@ -3,7 +3,7 @@
<description>subtitle encoders</description>
<filename>../../gst/subenc/.libs/libgstsubenc.so</filename>
<basename>libgstsubenc.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-teletext.xml b/docs/plugins/inspect/plugin-teletext.xml
index 61b0181..55ff028 100644
--- a/docs/plugins/inspect/plugin-teletext.xml
+++ b/docs/plugins/inspect/plugin-teletext.xml
@@ -3,7 +3,7 @@
<description>Teletext plugin</description>
<filename>../../ext/teletextdec/.libs/libgstteletextdec.so</filename>
<basename>libgstteletextdec.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer</package>
diff --git a/docs/plugins/inspect/plugin-timecode.xml b/docs/plugins/inspect/plugin-timecode.xml
new file mode 100644
index 0000000..def9d55
--- /dev/null
+++ b/docs/plugins/inspect/plugin-timecode.xml
@@ -0,0 +1,67 @@
+<plugin>
+ <name>timecode</name>
+ <description>Timecode-related elements</description>
+ <filename>../../gst/timecode/.libs/libgsttimecode.so</filename>
+ <basename>libgsttimecode.so</basename>
+ <version>1.9.2</version>
+ <license>LGPL</license>
+ <source>gst-plugins-bad</source>
+ <package>GStreamer Bad Plug-ins source release</package>
+ <origin>Unknown package origin</origin>
+ <elements>
+ <element>
+ <name>timecodestamper</name>
+ <longname>Timecode stamper</longname>
+ <class>Filter/Video</class>
+ <description>Attaches a timecode meta into each video frame</description>
+ <author>Vivia Nikolaidou <vivia@toolsonair.com</author>
+ <pads>
+ <caps>
+ <name>sink</name>
+ <direction>sink</direction>
+ <presence>always</presence>
+ <details>video/x-raw</details>
+ </caps>
+ <caps>
+ <name>src</name>
+ <direction>source</direction>
+ <presence>always</presence>
+ <details>video/x-raw</details>
+ </caps>
+ </pads>
+ </element>
+ <element>
+ <name>timecodewait</name>
+ <longname>Timecode Wait</longname>
+ <class>Filter/Audio/Video</class>
+ <description>Drops all audio/video until a specific timecode has been reached</description>
+ <author>Vivia Nikolaidou <vivia@toolsonair.com></author>
+ <pads>
+ <caps>
+ <name>asink</name>
+ <direction>sink</direction>
+ <presence>always</presence>
+ <details>audio/x-raw</details>
+ </caps>
+ <caps>
+ <name>vsink</name>
+ <direction>sink</direction>
+ <presence>always</presence>
+ <details>video/x-raw</details>
+ </caps>
+ <caps>
+ <name>asrc</name>
+ <direction>source</direction>
+ <presence>always</presence>
+ <details>audio/x-raw</details>
+ </caps>
+ <caps>
+ <name>vsrc</name>
+ <direction>source</direction>
+ <presence>always</presence>
+ <details>video/x-raw</details>
+ </caps>
+ </pads>
+ </element>
+ </elements>
+</plugin>
\ No newline at end of file
diff --git a/docs/plugins/inspect/plugin-uvch264.xml b/docs/plugins/inspect/plugin-uvch264.xml
index 04aeeda..c5212f2 100644
--- a/docs/plugins/inspect/plugin-uvch264.xml
+++ b/docs/plugins/inspect/plugin-uvch264.xml
@@ -3,7 +3,7 @@
<description>UVC compliant H264 encoding cameras plugin</description>
<filename>../../sys/uvch264/.libs/libgstuvch264.so</filename>
<basename>libgstuvch264.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-vcdsrc.xml b/docs/plugins/inspect/plugin-vcdsrc.xml
index c187ce7..96521f9 100644
--- a/docs/plugins/inspect/plugin-vcdsrc.xml
+++ b/docs/plugins/inspect/plugin-vcdsrc.xml
@@ -3,7 +3,7 @@
<description>Asynchronous read from VCD disk</description>
<filename>../../sys/vcd/.libs/libgstvcdsrc.so</filename>
<basename>libgstvcdsrc.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-videofiltersbad.xml b/docs/plugins/inspect/plugin-videofiltersbad.xml
index 2904dee..e94c006 100644
--- a/docs/plugins/inspect/plugin-videofiltersbad.xml
+++ b/docs/plugins/inspect/plugin-videofiltersbad.xml
@@ -3,7 +3,7 @@
<description>Video filters in gst-plugins-bad</description>
<filename>../../gst/videofilters/.libs/libgstvideofiltersbad.so</filename>
<basename>libgstvideofiltersbad.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins</package>
diff --git a/docs/plugins/inspect/plugin-videoframe_audiolevel.xml b/docs/plugins/inspect/plugin-videoframe_audiolevel.xml
index 8ad67a5..fe7b813 100644
--- a/docs/plugins/inspect/plugin-videoframe_audiolevel.xml
+++ b/docs/plugins/inspect/plugin-videoframe_audiolevel.xml
@@ -3,7 +3,7 @@
<description>Video frame-synchronized audio level</description>
<filename>../../gst/videoframe_audiolevel/.libs/libgstvideoframe_audiolevel.so</filename>
<basename>libgstvideoframe_audiolevel.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-videoparsersbad.xml b/docs/plugins/inspect/plugin-videoparsersbad.xml
index 1f2e63d..fd48c28 100644
--- a/docs/plugins/inspect/plugin-videoparsersbad.xml
+++ b/docs/plugins/inspect/plugin-videoparsersbad.xml
@@ -3,7 +3,7 @@
<description>videoparsers</description>
<filename>../../gst/videoparsers/.libs/libgstvideoparsersbad.so</filename>
<basename>libgstvideoparsersbad.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-videosignal.xml b/docs/plugins/inspect/plugin-videosignal.xml
index 8181995..0468fcf 100644
--- a/docs/plugins/inspect/plugin-videosignal.xml
+++ b/docs/plugins/inspect/plugin-videosignal.xml
@@ -3,7 +3,7 @@
<description>Various video signal analysers</description>
<filename>../../gst/videosignal/.libs/libgstvideosignal.so</filename>
<basename>libgstvideosignal.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-vmnc.xml b/docs/plugins/inspect/plugin-vmnc.xml
index 7e4e374..1bc64cf 100644
--- a/docs/plugins/inspect/plugin-vmnc.xml
+++ b/docs/plugins/inspect/plugin-vmnc.xml
@@ -3,7 +3,7 @@
<description>VmWare Video Codec plugins</description>
<filename>../../gst/vmnc/.libs/libgstvmnc.so</filename>
<basename>libgstvmnc.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-voaacenc.xml b/docs/plugins/inspect/plugin-voaacenc.xml
index e955be9..a4cfa91 100644
--- a/docs/plugins/inspect/plugin-voaacenc.xml
+++ b/docs/plugins/inspect/plugin-voaacenc.xml
@@ -3,7 +3,7 @@
<description>AAC audio encoder</description>
<filename>../../ext/voaacenc/.libs/libgstvoaacenc.so</filename>
<basename>libgstvoaacenc.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-voamrwbenc.xml b/docs/plugins/inspect/plugin-voamrwbenc.xml
index 313f0a7..9602b9c 100644
--- a/docs/plugins/inspect/plugin-voamrwbenc.xml
+++ b/docs/plugins/inspect/plugin-voamrwbenc.xml
@@ -3,7 +3,7 @@
<description>Adaptive Multi-Rate Wide-Band Encoder</description>
<filename>../../ext/voamrwbenc/.libs/libgstvoamrwbenc.so</filename>
<basename>libgstvoamrwbenc.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>unknown</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-waylandsink.xml b/docs/plugins/inspect/plugin-waylandsink.xml
index c87189b..05a9e84 100644
--- a/docs/plugins/inspect/plugin-waylandsink.xml
+++ b/docs/plugins/inspect/plugin-waylandsink.xml
@@ -3,7 +3,7 @@
<description>Wayland Video Sink</description>
<filename>../../ext/wayland/.libs/libgstwaylandsink.so</filename>
<basename>libgstwaylandsink.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-webp.xml b/docs/plugins/inspect/plugin-webp.xml
index a6564ac..b52b62f 100644
--- a/docs/plugins/inspect/plugin-webp.xml
+++ b/docs/plugins/inspect/plugin-webp.xml
@@ -3,7 +3,7 @@
<description>WebP plugin</description>
<filename>../../ext/webp/.libs/libgstwebp.so</filename>
<basename>libgstwebp.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-webrtcdsp.xml b/docs/plugins/inspect/plugin-webrtcdsp.xml
index 6136964..aba042e 100644
--- a/docs/plugins/inspect/plugin-webrtcdsp.xml
+++ b/docs/plugins/inspect/plugin-webrtcdsp.xml
@@ -3,7 +3,7 @@
<description>Voice pre-processing using WebRTC Audio Processing Library</description>
<filename>../../ext/webrtcdsp/.libs/libgstwebrtcdsp.so</filename>
<basename>libgstwebrtcdsp.so</basename>
- <version>1.9.0.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>WebRTCDsp</package>
diff --git a/docs/plugins/inspect/plugin-wildmidi.xml b/docs/plugins/inspect/plugin-wildmidi.xml
index 25ef128..3b8b814 100644
--- a/docs/plugins/inspect/plugin-wildmidi.xml
+++ b/docs/plugins/inspect/plugin-wildmidi.xml
@@ -3,7 +3,7 @@
<description>Wildmidi Plugin</description>
<filename>../../ext/timidity/.libs/libgstwildmidi.so</filename>
<basename>libgstwildmidi.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>GPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-x265.xml b/docs/plugins/inspect/plugin-x265.xml
index a1a55f4..df3ad86 100644
--- a/docs/plugins/inspect/plugin-x265.xml
+++ b/docs/plugins/inspect/plugin-x265.xml
@@ -3,7 +3,7 @@
<description>x265-based H265 plugins</description>
<filename>../../ext/x265/.libs/libgstx265.so</filename>
<basename>libgstx265.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>GPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-y4mdec.xml b/docs/plugins/inspect/plugin-y4mdec.xml
index 71c4296..3e3f090 100644
--- a/docs/plugins/inspect/plugin-y4mdec.xml
+++ b/docs/plugins/inspect/plugin-y4mdec.xml
@@ -3,7 +3,7 @@
<description>Demuxes/decodes YUV4MPEG streams</description>
<filename>../../gst/y4m/.libs/libgsty4mdec.so</filename>
<basename>libgsty4mdec.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins</package>
diff --git a/docs/plugins/inspect/plugin-yadif.xml b/docs/plugins/inspect/plugin-yadif.xml
index cb9fb36..7f41b1f 100644
--- a/docs/plugins/inspect/plugin-yadif.xml
+++ b/docs/plugins/inspect/plugin-yadif.xml
@@ -3,7 +3,7 @@
<description>YADIF deinterlacing filter</description>
<filename>../../gst/yadif/.libs/libgstyadif.so</filename>
<basename>libgstyadif.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>GPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins</package>
diff --git a/docs/plugins/inspect/plugin-zbar.xml b/docs/plugins/inspect/plugin-zbar.xml
index 2c8b1be..24c3ffd 100644
--- a/docs/plugins/inspect/plugin-zbar.xml
+++ b/docs/plugins/inspect/plugin-zbar.xml
@@ -3,7 +3,7 @@
<description>zbar barcode scanner</description>
<filename>../../ext/zbar/.libs/libgstzbar.so</filename>
<basename>libgstzbar.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/ext/Makefile.am b/ext/Makefile.am
index d0bf515..bae25c2 100644
--- a/ext/Makefile.am
+++ b/ext/Makefile.am
@@ -112,6 +112,12 @@
FAAD_DIR=
endif
+if USE_FDK_AAC
+ FDK_AAC_DIR=fdkaac
+else
+ FDK_AAC_DIR=
+endif
+
if USE_VOAACENC
VOAACENC_DIR=voaacenc
else
@@ -440,6 +446,7 @@
$(QT_DIR) \
$(FAAC_DIR) \
$(FAAD_DIR) \
+ $(FDK_AAC_DIR) \
$(FLITE_DIR) \
$(FLUIDSYNTH_DIR) \
$(GSM_DIR) \
@@ -503,6 +510,7 @@
wayland \
faac \
faad \
+ fdkaac \
flite \
fluidsynth \
gsm \
diff --git a/ext/Makefile.in b/ext/Makefile.in
index 94ecc06..25b1a99 100644
--- a/ext/Makefile.in
+++ b/ext/Makefile.in
@@ -304,6 +304,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -353,6 +355,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
@@ -798,6 +802,8 @@
@USE_FAAC_TRUE@FAAC_DIR = faac
@USE_FAAD_FALSE@FAAD_DIR =
@USE_FAAD_TRUE@FAAD_DIR = faad
+@USE_FDK_AAC_FALSE@FDK_AAC_DIR =
+@USE_FDK_AAC_TRUE@FDK_AAC_DIR = fdkaac
@USE_VOAACENC_FALSE@VOAACENC_DIR =
@USE_VOAACENC_TRUE@VOAACENC_DIR = voaacenc
@USE_FLITE_FALSE@FLITE_DIR =
@@ -928,6 +934,7 @@
$(QT_DIR) \
$(FAAC_DIR) \
$(FAAD_DIR) \
+ $(FDK_AAC_DIR) \
$(FLITE_DIR) \
$(FLUIDSYNTH_DIR) \
$(GSM_DIR) \
@@ -991,6 +998,7 @@
wayland \
faac \
faad \
+ fdkaac \
flite \
fluidsynth \
gsm \
diff --git a/ext/apexsink/Makefile.in b/ext/apexsink/Makefile.in
index 22b7474..f79d22d 100644
--- a/ext/apexsink/Makefile.in
+++ b/ext/apexsink/Makefile.in
@@ -328,6 +328,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -377,6 +379,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/ext/assrender/Makefile.in b/ext/assrender/Makefile.in
index e7fdf9a..bc3a6ac 100644
--- a/ext/assrender/Makefile.in
+++ b/ext/assrender/Makefile.in
@@ -325,6 +325,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -374,6 +376,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/ext/bs2b/Makefile.in b/ext/bs2b/Makefile.in
index 8d6bd86..24430b3 100644
--- a/ext/bs2b/Makefile.in
+++ b/ext/bs2b/Makefile.in
@@ -326,6 +326,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -375,6 +377,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/ext/bz2/Makefile.in b/ext/bz2/Makefile.in
index cac55b7..347870d 100644
--- a/ext/bz2/Makefile.in
+++ b/ext/bz2/Makefile.in
@@ -326,6 +326,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -375,6 +377,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/ext/chromaprint/Makefile.in b/ext/chromaprint/Makefile.in
index f66e98a..99f0b52 100644
--- a/ext/chromaprint/Makefile.in
+++ b/ext/chromaprint/Makefile.in
@@ -327,6 +327,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -376,6 +378,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/ext/curl/Makefile.in b/ext/curl/Makefile.in
index 6bc7a49..4bb3cb7 100644
--- a/ext/curl/Makefile.in
+++ b/ext/curl/Makefile.in
@@ -339,6 +339,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -388,6 +390,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/ext/daala/Makefile.in b/ext/daala/Makefile.in
index 38b201f..2b76f02 100644
--- a/ext/daala/Makefile.in
+++ b/ext/daala/Makefile.in
@@ -327,6 +327,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -376,6 +378,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/ext/daala/gstdaaladec.c b/ext/daala/gstdaaladec.c
index f401ff3..90fb38f 100644
--- a/ext/daala/gstdaaladec.c
+++ b/ext/daala/gstdaaladec.c
@@ -121,7 +121,7 @@
GST_DEBUG_FUNCPTR (daala_dec_decide_allocation);
GST_DEBUG_CATEGORY_INIT (daaladec_debug, "daaladec", 0, "Daala decoder");
- GST_DEBUG_CATEGIRY_GET (CAT_PERFORMANCE, "GST_PERFORMANCE");
+ GST_DEBUG_CATEGORY_GET (CAT_PERFORMANCE, "GST_PERFORMANCE");
}
static void
diff --git a/ext/dash/Makefile.in b/ext/dash/Makefile.in
index 5d75597..1872abf 100644
--- a/ext/dash/Makefile.in
+++ b/ext/dash/Makefile.in
@@ -330,6 +330,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -379,6 +381,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/ext/dash/gstdashdemux.c b/ext/dash/gstdashdemux.c
index c67c635..6e24747 100644
--- a/ext/dash/gstdashdemux.c
+++ b/ext/dash/gstdashdemux.c
@@ -189,6 +189,9 @@
PROP_MAX_BUFFERING_TIME,
PROP_BANDWIDTH_USAGE,
PROP_MAX_BITRATE,
+ PROP_MAX_VIDEO_WIDTH,
+ PROP_MAX_VIDEO_HEIGHT,
+ PROP_MAX_VIDEO_FRAMERATE,
PROP_PRESENTATION_DELAY,
PROP_LAST
};
@@ -196,7 +199,11 @@
/* Default values for properties */
#define DEFAULT_MAX_BUFFERING_TIME 30 /* in seconds */
#define DEFAULT_BANDWIDTH_USAGE 0.8 /* 0 to 1 */
-#define DEFAULT_MAX_BITRATE 24000000 /* in bit/s */
+#define DEFAULT_MAX_BITRATE 0 /* in bit/s */
+#define DEFAULT_MAX_VIDEO_WIDTH 0
+#define DEFAULT_MAX_VIDEO_HEIGHT 0
+#define DEFAULT_MAX_VIDEO_FRAMERATE_N 0
+#define DEFAULT_MAX_VIDEO_FRAMERATE_D 1
#define DEFAULT_PRESENTATION_DELAY NULL /* zero */
/* Clock drift compensation for live streams */
@@ -216,6 +223,12 @@
GstClock *ntp_clock;
};
+typedef struct
+{
+ guint64 start_offset, end_offset;
+ /* TODO: Timestamp and duration */
+} GstDashStreamSyncSample;
+
/* GObject */
static void gst_dash_demux_set_property (GObject * object, guint prop_id,
const GValue * value, GParamSpec * pspec);
@@ -260,6 +273,8 @@
static GstFlowReturn
gst_dash_demux_stream_fragment_finished (GstAdaptiveDemux * demux,
GstAdaptiveDemuxStream * stream);
+static gboolean gst_dash_demux_need_another_chunk (GstAdaptiveDemuxStream *
+ stream);
/* GstDashDemux */
static gboolean gst_dash_demux_setup_all_streams (GstDashDemux * demux);
@@ -317,10 +332,12 @@
GDateTime *now;
GDateTime *mstart;
GTimeSpan stream_now;
+ GstClockTime seg_duration;
if (self->client->mpd_node->availabilityStartTime == NULL)
return FALSE;
+ seg_duration = gst_mpd_client_get_maximum_segment_duration (self->client);
now = gst_dash_demux_get_server_now_utc (self);
mstart =
gst_date_time_to_g_date_time (self->client->
@@ -341,6 +358,17 @@
if (*start < 0)
*start = 0;
}
+
+ /* As defined in 5.3.9.5.3 of the DASH specification, a segment does
+ not become available until the sum of:
+ * the value of the MPD@availabilityStartTime,
+ * the PeriodStart time of the containing Period
+ * the MPD start time of the Media Segment, and
+ * the MPD duration of the Media Segment.
+ Therefore we need to subtract the media segment duration from the stop
+ time.
+ */
+ *stop -= seg_duration;
return TRUE;
}
@@ -397,8 +425,27 @@
g_object_class_install_property (gobject_class, PROP_MAX_BITRATE,
g_param_spec_uint ("max-bitrate", "Max bitrate",
- "Max of bitrate supported by target decoder",
- 1000, G_MAXUINT, DEFAULT_MAX_BITRATE,
+ "Max of bitrate supported by target video decoder (0 = no maximum)",
+ 0, G_MAXUINT, DEFAULT_MAX_BITRATE,
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+ g_object_class_install_property (gobject_class, PROP_MAX_VIDEO_WIDTH,
+ g_param_spec_uint ("max-video-width", "Max video width",
+ "Max video width to select (0 = no maximum)",
+ 0, G_MAXUINT, DEFAULT_MAX_VIDEO_WIDTH,
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+ g_object_class_install_property (gobject_class, PROP_MAX_VIDEO_HEIGHT,
+ g_param_spec_uint ("max-video-height", "Max video height",
+ "Max video height to select (0 = no maximum)",
+ 0, G_MAXUINT, DEFAULT_MAX_VIDEO_HEIGHT,
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+ g_object_class_install_property (gobject_class, PROP_MAX_VIDEO_FRAMERATE,
+ gst_param_spec_fraction ("max-video-framerate", "Max video framerate",
+ "Max video framerate to select (0/1 = no maximum)",
+ 0, 1, G_MAXINT, 1, DEFAULT_MAX_VIDEO_FRAMERATE_N,
+ DEFAULT_MAX_VIDEO_FRAMERATE_D,
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
g_object_class_install_property (gobject_class, PROP_PRESENTATION_DELAY,
@@ -461,6 +508,8 @@
gstadaptivedemux_class->finish_fragment =
gst_dash_demux_stream_fragment_finished;
gstadaptivedemux_class->data_received = gst_dash_demux_data_received;
+ gstadaptivedemux_class->need_another_chunk =
+ gst_dash_demux_need_another_chunk;
}
static void
@@ -469,6 +518,10 @@
/* Properties */
demux->max_buffering_time = DEFAULT_MAX_BUFFERING_TIME * GST_SECOND;
demux->max_bitrate = DEFAULT_MAX_BITRATE;
+ demux->max_video_width = DEFAULT_MAX_VIDEO_WIDTH;
+ demux->max_video_height = DEFAULT_MAX_VIDEO_HEIGHT;
+ demux->max_video_framerate_n = DEFAULT_MAX_VIDEO_FRAMERATE_N;
+ demux->max_video_framerate_d = DEFAULT_MAX_VIDEO_FRAMERATE_D;
demux->default_presentation_delay = DEFAULT_PRESENTATION_DELAY;
g_mutex_init (&demux->client_lock);
@@ -494,6 +547,16 @@
case PROP_MAX_BITRATE:
demux->max_bitrate = g_value_get_uint (value);
break;
+ case PROP_MAX_VIDEO_WIDTH:
+ demux->max_video_width = g_value_get_uint (value);
+ break;
+ case PROP_MAX_VIDEO_HEIGHT:
+ demux->max_video_height = g_value_get_uint (value);
+ break;
+ case PROP_MAX_VIDEO_FRAMERATE:
+ demux->max_video_framerate_n = gst_value_get_fraction_numerator (value);
+ demux->max_video_framerate_d = gst_value_get_fraction_denominator (value);
+ break;
case PROP_PRESENTATION_DELAY:
g_free (demux->default_presentation_delay);
demux->default_presentation_delay = g_value_dup_string (value);
@@ -521,6 +584,16 @@
case PROP_MAX_BITRATE:
g_value_set_uint (value, demux->max_bitrate);
break;
+ case PROP_MAX_VIDEO_WIDTH:
+ g_value_set_uint (value, demux->max_video_width);
+ break;
+ case PROP_MAX_VIDEO_HEIGHT:
+ g_value_set_uint (value, demux->max_video_height);
+ break;
+ case PROP_MAX_VIDEO_FRAMERATE:
+ gst_value_set_fraction (value, demux->max_video_framerate_n,
+ demux->max_video_framerate_d);
+ break;
case PROP_PRESENTATION_DELAY:
if (demux->default_presentation_delay == NULL)
g_value_set_static_string (value, "");
@@ -575,6 +648,7 @@
GstDashDemuxStream *stream;
GstActiveStream *active_stream;
GstCaps *caps;
+ GstStructure *s;
GstPad *srcpad;
gchar *lang = NULL;
GstTagList *tags = NULL;
@@ -583,6 +657,13 @@
if (active_stream == NULL)
continue;
+ if (demux->trickmode_no_audio
+ && active_stream->mimeType == GST_STREAM_AUDIO) {
+ GST_DEBUG_OBJECT (demux,
+ "Skipping audio stream %d because of TRICKMODE_NO_AUDIO flag", i);
+ continue;
+ }
+
srcpad = gst_dash_demux_create_pad (demux, active_stream);
if (srcpad == NULL)
continue;
@@ -618,6 +699,11 @@
stream = (GstDashDemuxStream *)
gst_adaptive_demux_stream_new (GST_ADAPTIVE_DEMUX_CAST (demux), srcpad);
stream->active_stream = active_stream;
+ s = gst_caps_get_structure (caps, 0);
+ stream->is_isobmff = gst_structure_has_name (s, "video/quicktime");
+ stream->first_sync_sample_always_after_moof = TRUE;
+ if (stream->is_isobmff)
+ stream->isobmff_adapter = gst_adapter_new ();
gst_adaptive_demux_stream_set_caps (GST_ADAPTIVE_DEMUX_STREAM_CAST (stream),
caps);
if (tags)
@@ -884,6 +970,10 @@
demux->n_audio_streams = 0;
demux->n_video_streams = 0;
+ demux->n_subtitle_streams = 0;
+
+ demux->trickmode_no_audio = FALSE;
+ demux->allow_trickmode_key_units = TRUE;
}
static GstCaps *
@@ -1026,6 +1116,9 @@
isombff = gst_mpd_client_has_isoff_ondemand_profile (dashdemux->client);
+ /* Reset chunk size if any */
+ stream->fragment.chunk_size = 0;
+
if (GST_ADAPTIVE_DEMUX_STREAM_NEED_HEADER (stream) && isombff) {
gst_dash_demux_stream_update_headers_info (stream);
dashstream->sidx_base_offset = stream->fragment.index_range_end + 1;
@@ -1036,6 +1129,24 @@
}
}
+ if (dashstream->moof_sync_samples
+ && GST_ADAPTIVE_DEMUX (dashdemux)->
+ segment.flags & GST_SEGMENT_FLAG_TRICKMODE_KEY_UNITS) {
+ GstDashStreamSyncSample *sync_sample =
+ &g_array_index (dashstream->moof_sync_samples, GstDashStreamSyncSample,
+ dashstream->current_sync_sample);
+
+ gst_mpd_client_get_next_fragment (dashdemux->client, dashstream->index,
+ &fragment);
+ stream->fragment.uri = fragment.uri;
+ stream->fragment.timestamp = GST_CLOCK_TIME_NONE;
+ stream->fragment.duration = GST_CLOCK_TIME_NONE;
+ stream->fragment.range_start = sync_sample->start_offset;
+ stream->fragment.range_end = sync_sample->end_offset;
+
+ return GST_FLOW_OK;
+ }
+
if (gst_mpd_client_get_next_fragment_timestamp (dashdemux->client,
dashstream->index, &ts)) {
if (GST_ADAPTIVE_DEMUX_STREAM_NEED_HEADER (stream)) {
@@ -1144,6 +1255,14 @@
GstDashDemuxStream *dashstream = (GstDashDemuxStream *) stream;
GstDashDemux *dashdemux = GST_DASH_DEMUX_CAST (stream->demux);
+ if (dashstream->moof)
+ gst_isoff_moof_box_free (dashstream->moof);
+ dashstream->moof = NULL;
+ if (dashstream->moof_sync_samples)
+ g_array_free (dashstream->moof_sync_samples, TRUE);
+ dashstream->moof_sync_samples = NULL;
+ dashstream->current_sync_sample = -1;
+
if (gst_mpd_client_has_isoff_ondemand_profile (dashdemux->client)) {
if (dashstream->sidx_parser.status == GST_ISOFF_SIDX_PARSER_FINISHED) {
gst_dash_demux_stream_sidx_seek (dashstream, forward, flags, ts,
@@ -1153,6 +1272,8 @@
/* FIXME - the final_ts won't be correct here */
dashstream->pending_seek_ts = ts;
}
+
+ return GST_FLOW_OK;
}
gst_mpd_client_stream_seek (dashdemux->client, dashstream->active_stream,
@@ -1161,6 +1282,26 @@
}
static gboolean
+gst_dash_demux_stream_has_next_sync_sample (GstAdaptiveDemuxStream * stream)
+{
+ GstDashDemuxStream *dashstream = (GstDashDemuxStream *) stream;
+
+ if (dashstream->moof_sync_samples
+ && GST_ADAPTIVE_DEMUX (stream->demux)->
+ segment.flags & GST_SEGMENT_FLAG_TRICKMODE_KEY_UNITS) {
+ if (stream->demux->segment.rate > 0.0) {
+ if (dashstream->current_sync_sample + 1 <
+ dashstream->moof_sync_samples->len)
+ return TRUE;
+ } else {
+ if (dashstream->current_sync_sample >= 1)
+ return TRUE;
+ }
+ }
+ return FALSE;
+}
+
+static gboolean
gst_dash_demux_stream_has_next_subfragment (GstAdaptiveDemuxStream * stream)
{
GstDashDemuxStream *dashstream = (GstDashDemuxStream *) stream;
@@ -1179,6 +1320,43 @@
}
static gboolean
+gst_dash_demux_stream_advance_sync_sample (GstAdaptiveDemuxStream * stream)
+{
+ GstDashDemuxStream *dashstream = (GstDashDemuxStream *) stream;
+ gboolean fragment_finished = FALSE;
+
+ if (dashstream->moof_sync_samples
+ && GST_ADAPTIVE_DEMUX (stream->demux)->
+ segment.flags & GST_SEGMENT_FLAG_TRICKMODE_KEY_UNITS) {
+ if (stream->demux->segment.rate > 0.0) {
+ dashstream->current_sync_sample++;
+ if (dashstream->current_sync_sample >= dashstream->moof_sync_samples->len) {
+ fragment_finished = TRUE;
+ }
+ } else {
+ if (dashstream->current_sync_sample == -1) {
+ dashstream->current_sync_sample =
+ dashstream->moof_sync_samples->len - 1;
+ } else if (dashstream->current_sync_sample == 0) {
+ dashstream->current_sync_sample = -1;
+ fragment_finished = TRUE;
+ } else {
+ dashstream->current_sync_sample--;
+ }
+ }
+ }
+
+ GST_DEBUG_OBJECT (stream->pad,
+ "Advancing sync sample #%d fragment_finished:%d",
+ dashstream->current_sync_sample, fragment_finished);
+
+ if (!fragment_finished)
+ stream->discont = TRUE;
+
+ return !fragment_finished;
+}
+
+static gboolean
gst_dash_demux_stream_advance_subfragment (GstAdaptiveDemuxStream * stream)
{
GstDashDemuxStream *dashstream = (GstDashDemuxStream *) stream;
@@ -1192,8 +1370,10 @@
if (sidx->entry_index < sidx->entries_count) {
fragment_finished = FALSE;
}
+ dashstream->sidx_index++;
} else {
sidx->entry_index--;
+ dashstream->sidx_index--;
if (sidx->entry_index >= 0) {
fragment_finished = FALSE;
}
@@ -1213,6 +1393,13 @@
GstDashDemux *dashdemux = GST_DASH_DEMUX_CAST (stream->demux);
GstDashDemuxStream *dashstream = (GstDashDemuxStream *) stream;
+ if (dashstream->moof_sync_samples
+ && GST_ADAPTIVE_DEMUX (dashdemux)->
+ segment.flags & GST_SEGMENT_FLAG_TRICKMODE_KEY_UNITS) {
+ if (gst_dash_demux_stream_has_next_sync_sample (stream))
+ return TRUE;
+ }
+
if (gst_mpd_client_has_isoff_ondemand_profile (dashdemux->client)) {
if (gst_dash_demux_stream_has_next_subfragment (stream))
return TRUE;
@@ -1230,6 +1417,22 @@
gst_isoff_sidx_parser_init (&dashstream->sidx_parser);
if (dashstream->sidx_adapter)
gst_adapter_clear (dashstream->sidx_adapter);
+
+ /* Reset ISOBMFF box parsing state */
+ if (dashstream->isobmff_adapter)
+ gst_adapter_clear (dashstream->isobmff_adapter);
+ dashstream->isobmff_parser.current_fourcc = 0;
+ dashstream->isobmff_parser.current_start_offset = 0;
+ dashstream->isobmff_parser.current_offset = 0;
+ dashstream->isobmff_parser.current_size = 0;
+
+ if (dashstream->moof)
+ gst_isoff_moof_box_free (dashstream->moof);
+ dashstream->moof = NULL;
+ if (dashstream->moof_sync_samples)
+ g_array_free (dashstream->moof_sync_samples, TRUE);
+ dashstream->moof_sync_samples = NULL;
+ dashstream->current_sync_sample = -1;
}
static GstFlowReturn
@@ -1240,12 +1443,38 @@
GST_DEBUG_OBJECT (stream->pad, "Advance fragment");
+ /* If downloading only keyframes, switch to the next one or fall through */
+ if (dashstream->moof_sync_samples
+ && GST_ADAPTIVE_DEMUX (dashdemux)->
+ segment.flags & GST_SEGMENT_FLAG_TRICKMODE_KEY_UNITS) {
+ if (gst_dash_demux_stream_advance_sync_sample (stream))
+ return GST_FLOW_OK;
+ }
+
+ if (dashstream->isobmff_adapter)
+ gst_adapter_clear (dashstream->isobmff_adapter);
+ dashstream->isobmff_parser.current_fourcc = 0;
+ dashstream->isobmff_parser.current_start_offset = 0;
+ dashstream->isobmff_parser.current_offset = 0;
+ dashstream->isobmff_parser.current_size = 0;
+
+ if (dashstream->moof)
+ gst_isoff_moof_box_free (dashstream->moof);
+ dashstream->moof = NULL;
+ if (dashstream->moof_sync_samples)
+ g_array_free (dashstream->moof_sync_samples, TRUE);
+ dashstream->moof_sync_samples = NULL;
+ dashstream->current_sync_sample = -1;
+
if (gst_mpd_client_has_isoff_ondemand_profile (dashdemux->client)) {
if (gst_dash_demux_stream_advance_subfragment (stream))
return GST_FLOW_OK;
}
- gst_dash_demux_clear_pending_stream_data (dashdemux, dashstream);
+ gst_isoff_sidx_parser_clear (&dashstream->sidx_parser);
+ gst_isoff_sidx_parser_init (&dashstream->sidx_parser);
+ if (dashstream->sidx_adapter)
+ gst_adapter_clear (dashstream->sidx_adapter);
return gst_mpd_client_advance_segment (dashdemux->client,
dashstream->active_stream, stream->demux->segment.rate > 0.0);
@@ -1258,6 +1487,7 @@
GstActiveStream *active_stream = NULL;
GList *rep_list = NULL;
gint new_index;
+ GstAdaptiveDemux *base_demux = stream->demux;
GstDashDemux *demux = GST_DASH_DEMUX_CAST (stream->demux);
GstDashDemuxStream *dashstream = (GstDashDemuxStream *) stream;
gboolean ret = FALSE;
@@ -1277,8 +1507,24 @@
GST_DEBUG_OBJECT (stream->pad,
"Trying to change to bitrate: %" G_GUINT64_FORMAT, bitrate);
+ if (active_stream->mimeType == GST_STREAM_VIDEO && demux->max_bitrate) {
+ bitrate = MIN (demux->max_bitrate, bitrate);
+ }
+
/* get representation index with current max_bandwidth */
- new_index = gst_mpdparser_get_rep_idx_with_max_bandwidth (rep_list, bitrate);
+ if ((base_demux->segment.flags & GST_SEGMENT_FLAG_TRICKMODE_KEY_UNITS) ||
+ ABS (base_demux->segment.rate) <= 1.0) {
+ new_index =
+ gst_mpdparser_get_rep_idx_with_max_bandwidth (rep_list, bitrate,
+ demux->max_video_width, demux->max_video_height,
+ demux->max_video_framerate_n, demux->max_video_framerate_d);
+ } else {
+ new_index =
+ gst_mpdparser_get_rep_idx_with_max_bandwidth (rep_list,
+ bitrate / ABS (base_demux->segment.rate), demux->max_video_width,
+ demux->max_video_height, demux->max_video_framerate_n,
+ demux->max_video_framerate_d);
+ }
/* if no representation has the required bandwidth, take the lowest one */
if (new_index == -1)
@@ -1332,9 +1578,9 @@
GstClockTime current_pos, target_pos;
guint current_period;
GstStreamPeriod *period;
- GList *iter;
+ GList *iter, *streams = NULL;
GstDashDemux *dashdemux = GST_DASH_DEMUX_CAST (demux);
- gboolean switched_period = FALSE;
+ gboolean trickmode_no_audio;
gst_event_parse_seek (seek, &rate, &format, &flags, &start_type, &start,
&stop_type, &stop);
@@ -1375,22 +1621,35 @@
GST_WARNING_OBJECT (demux, "Could not find seeked Period");
return FALSE;
}
+
+ trickmode_no_audio = ! !(flags & GST_SEEK_FLAG_TRICKMODE_NO_AUDIO);
+
+ streams = demux->streams;
if (current_period != gst_mpd_client_get_period_index (dashdemux->client)) {
GST_DEBUG_OBJECT (demux, "Seeking to Period %d", current_period);
/* clean old active stream list, if any */
gst_active_streams_free (dashdemux->client);
+ dashdemux->trickmode_no_audio = trickmode_no_audio;
/* setup video, audio and subtitle streams, starting from the new Period */
if (!gst_mpd_client_set_period_index (dashdemux->client, current_period)
|| !gst_dash_demux_setup_all_streams (dashdemux))
return FALSE;
- switched_period = TRUE;
+ streams = demux->next_streams;
+ } else if (dashdemux->trickmode_no_audio != trickmode_no_audio) {
+ /* clean old active stream list, if any */
+ gst_active_streams_free (dashdemux->client);
+ dashdemux->trickmode_no_audio = trickmode_no_audio;
+
+ /* setup video, audio and subtitle streams, starting from the new Period */
+ if (!gst_dash_demux_setup_all_streams (dashdemux))
+ return FALSE;
+ streams = demux->next_streams;
}
/* Update the current sequence on all streams */
- for (iter = (switched_period ? demux->next_streams : demux->streams); iter;
- iter = g_list_next (iter)) {
+ for (iter = streams; iter; iter = g_list_next (iter)) {
GstDashDemuxStream *dashstream = iter->data;
if (flags & GST_SEEK_FLAG_FLUSH) {
@@ -1618,11 +1877,26 @@
gst_dash_demux_stream_fragment_start (GstAdaptiveDemux * demux,
GstAdaptiveDemuxStream * stream)
{
+ GstDashDemux *dashdemux = GST_DASH_DEMUX_CAST (demux);
GstDashDemuxStream *dashstream = (GstDashDemuxStream *) stream;
dashstream->sidx_index_header_or_data = 0;
dashstream->sidx_current_offset = -1;
+ dashstream->isobmff_parser.index_header_or_data = 0;
+ dashstream->isobmff_parser.current_offset = -1;
+
+ /* We need to mark every first buffer of a key unit as discont,
+ * and also every first buffer of a moov and moof. This ensures
+ * that qtdemux takes note of our buffer offsets for each of those
+ * buffers instead of keeping track of them itself from the first
+ * buffer. We need offsets to be consistent between moof and mdat
+ */
+ if (dashstream->is_isobmff && dashdemux->allow_trickmode_key_units
+ && (demux->segment.flags & GST_SEGMENT_FLAG_TRICKMODE_KEY_UNITS)
+ && dashstream->active_stream->mimeType == GST_STREAM_VIDEO)
+ stream->discont = TRUE;
+
return TRUE;
}
@@ -1633,8 +1907,24 @@
GstDashDemux *dashdemux = GST_DASH_DEMUX_CAST (demux);
GstDashDemuxStream *dashstream = (GstDashDemuxStream *) stream;
- if (gst_mpd_client_has_isoff_ondemand_profile (dashdemux->client) &&
- dashstream->sidx_parser.status == GST_ISOFF_SIDX_PARSER_FINISHED) {
+ /* We need to mark every first buffer of a key unit as discont,
+ * and also every first buffer of a moov and moof. This ensures
+ * that qtdemux takes note of our buffer offsets for each of those
+ * buffers instead of keeping track of them itself from the first
+ * buffer. We need offsets to be consistent between moof and mdat
+ */
+ if (dashstream->is_isobmff && dashdemux->allow_trickmode_key_units
+ && (demux->segment.flags & GST_SEGMENT_FLAG_TRICKMODE_KEY_UNITS)
+ && dashstream->active_stream->mimeType == GST_STREAM_VIDEO)
+ stream->discont = TRUE;
+
+ /* Only handle fragment advancing specifically for SIDX if we're not
+ * in key unit mode */
+ if (!(dashstream->moof_sync_samples
+ && GST_ADAPTIVE_DEMUX (dashdemux)->
+ segment.flags & GST_SEGMENT_FLAG_TRICKMODE_KEY_UNITS)
+ && gst_mpd_client_has_isoff_ondemand_profile (dashdemux->client)
+ && dashstream->sidx_parser.status == GST_ISOFF_SIDX_PARSER_FINISHED) {
/* fragment is advanced on data_received when byte limits are reached */
if (gst_dash_demux_stream_has_next_fragment (stream))
return GST_FLOW_OK;
@@ -1648,6 +1938,570 @@
stream->fragment.duration);
}
+static gboolean
+gst_dash_demux_need_another_chunk (GstAdaptiveDemuxStream * stream)
+{
+ GstDashDemux *dashdemux = (GstDashDemux *) stream->demux;
+ GstDashDemuxStream *dashstream = (GstDashDemuxStream *) stream;
+
+ /* We're chunked downloading for ISOBMFF in KEY_UNITS mode for the actual
+ * fragment until we parsed the moof and arrived at the mdat. 8192 is a
+ * random guess for the moof size
+ */
+ if (dashstream->is_isobmff
+ && (GST_ADAPTIVE_DEMUX (stream->demux)->
+ segment.flags & GST_SEGMENT_FLAG_TRICKMODE_KEY_UNITS)
+ && dashstream->active_stream->mimeType == GST_STREAM_VIDEO
+ && !stream->downloading_header && !stream->downloading_index
+ && dashdemux->allow_trickmode_key_units) {
+ if (dashstream->isobmff_parser.current_fourcc != GST_ISOFF_FOURCC_MDAT) {
+ /* Need to download the moof first to know anything */
+
+ stream->fragment.chunk_size = 8192;
+ /* Do we have the first fourcc already or are we in the middle */
+ if (dashstream->isobmff_parser.current_fourcc == 0) {
+ stream->fragment.chunk_size += dashstream->moof_average_size;
+ if (dashstream->first_sync_sample_always_after_moof)
+ stream->fragment.chunk_size +=
+ dashstream->first_sync_sample_average_size;
+ }
+
+ if (gst_mpd_client_has_isoff_ondemand_profile (dashdemux->client) &&
+ dashstream->sidx_parser.sidx.entries) {
+ guint64 sidx_end_offset =
+ dashstream->sidx_base_offset +
+ SIDX_CURRENT_ENTRY (dashstream)->offset +
+ SIDX_CURRENT_ENTRY (dashstream)->size;
+
+ if (stream->fragment.chunk_size +
+ dashstream->isobmff_parser.current_offset > sidx_end_offset) {
+ stream->fragment.chunk_size =
+ sidx_end_offset - dashstream->isobmff_parser.current_offset;
+ }
+ }
+ } else if (dashstream->moof && dashstream->moof_sync_samples) {
+ /* Have the moof, either we're done now or we want to download the
+ * directly following sync sample */
+ if (dashstream->first_sync_sample_after_moof
+ && dashstream->current_sync_sample == 0) {
+ GstDashStreamSyncSample *sync_sample =
+ &g_array_index (dashstream->moof_sync_samples,
+ GstDashStreamSyncSample, 0);
+ guint64 end_offset = sync_sample->end_offset + 1;
+
+ if (gst_mpd_client_has_isoff_ondemand_profile (dashdemux->client) &&
+ dashstream->sidx_parser.sidx.entries) {
+ guint64 sidx_end_offset =
+ dashstream->sidx_base_offset +
+ SIDX_CURRENT_ENTRY (dashstream)->offset +
+ SIDX_CURRENT_ENTRY (dashstream)->size;
+
+ if (end_offset > sidx_end_offset) {
+ end_offset = sidx_end_offset;
+ }
+ }
+
+ if (dashstream->isobmff_parser.current_offset < end_offset) {
+ stream->fragment.chunk_size =
+ end_offset - dashstream->isobmff_parser.current_offset;
+ } else {
+ stream->fragment.chunk_size = 0;
+ }
+ } else {
+ stream->fragment.chunk_size = 0;
+ }
+ } else {
+ /* Have moof but can't do key-units mode, just download until the end */
+ stream->fragment.chunk_size = -1;
+ }
+ } else {
+ /* We might've decided that we can't allow key-unit only
+ * trickmodes while doing chunked downloading. In that case
+ * just download from here to the end now */
+ if (dashstream->moof
+ && (GST_ADAPTIVE_DEMUX (stream->demux)->
+ segment.flags & GST_SEGMENT_FLAG_TRICKMODE_KEY_UNITS))
+ stream->fragment.chunk_size = -1;
+ else
+ stream->fragment.chunk_size = 0;
+ }
+
+ return stream->fragment.chunk_size != 0;
+}
+
+static GstBuffer *
+gst_dash_demux_parse_isobmff (GstAdaptiveDemux * demux,
+ GstDashDemuxStream * dash_stream, GstBuffer * buffer)
+{
+ GstAdaptiveDemuxStream *stream = (GstAdaptiveDemuxStream *) dash_stream;
+ gsize available;
+ guint index_header_or_data;
+ GstMapInfo map;
+ GstByteReader reader;
+ guint32 fourcc;
+ guint header_size;
+ guint64 size, buffer_offset;
+
+ /* This must not be called when we're in the mdat. We only look at the mdat
+ * header and then stop parsing the boxes as we're only interested in the
+ * metadata! Handling mdat is the job of the surrounding code, as well as
+ * stopping or starting the next fragment when mdat is over (=> sidx)
+ */
+ g_assert (dash_stream->isobmff_parser.current_fourcc !=
+ GST_ISOFF_FOURCC_MDAT);
+
+ if (stream->downloading_index)
+ index_header_or_data = 1;
+ else if (stream->downloading_header)
+ index_header_or_data = 2;
+ else
+ index_header_or_data = 3;
+
+ if (dash_stream->isobmff_parser.index_header_or_data != index_header_or_data) {
+ /* Clear pending data */
+ if (gst_adapter_available (dash_stream->isobmff_adapter) != 0)
+ GST_ERROR_OBJECT (stream->pad,
+ "Had pending ISOBMFF data after switch between index/header/data");
+ gst_adapter_clear (dash_stream->isobmff_adapter);
+ dash_stream->isobmff_parser.current_fourcc = 0;
+ dash_stream->isobmff_parser.current_start_offset = 0;
+ dash_stream->isobmff_parser.current_offset = -1;
+ dash_stream->isobmff_parser.current_size = 0;
+ dash_stream->isobmff_parser.index_header_or_data = index_header_or_data;
+ }
+
+ if (dash_stream->isobmff_parser.current_offset == -1) {
+ dash_stream->isobmff_parser.current_offset =
+ GST_BUFFER_OFFSET_IS_VALID (buffer) ? GST_BUFFER_OFFSET (buffer) : 0;
+ }
+
+ gst_adapter_push (dash_stream->isobmff_adapter, buffer);
+
+ available = gst_adapter_available (dash_stream->isobmff_adapter);
+ buffer = gst_adapter_take_buffer (dash_stream->isobmff_adapter, available);
+ buffer_offset = dash_stream->isobmff_parser.current_offset;
+
+ /* Always at the start of a box here */
+ g_assert (dash_stream->isobmff_parser.current_size == 0);
+
+ /* At the start of a box => Parse it */
+ gst_buffer_map (buffer, &map, GST_MAP_READ);
+ gst_byte_reader_init (&reader, map.data, map.size);
+
+ /* While there are more boxes left to parse ... */
+ dash_stream->isobmff_parser.current_start_offset =
+ dash_stream->isobmff_parser.current_offset;
+ do {
+ dash_stream->isobmff_parser.current_fourcc = 0;
+ dash_stream->isobmff_parser.current_size = 0;
+
+ if (!gst_isoff_parse_box_header (&reader, &fourcc, NULL, &header_size,
+ &size)) {
+ break;
+ }
+
+ dash_stream->isobmff_parser.current_fourcc = fourcc;
+ if (size == 0) {
+ /* We assume this is mdat, anything else with "size until end"
+ * does not seem to make sense */
+ g_assert (dash_stream->isobmff_parser.current_fourcc ==
+ GST_ISOFF_FOURCC_MDAT);
+ dash_stream->isobmff_parser.current_size = -1;
+ break;
+ }
+
+ dash_stream->isobmff_parser.current_size = size;
+
+ /* Do we have the complete box or are at MDAT */
+ if (gst_byte_reader_get_remaining (&reader) < size - header_size ||
+ dash_stream->isobmff_parser.current_fourcc == GST_ISOFF_FOURCC_MDAT) {
+ /* Reset byte reader to the beginning of the box */
+ gst_byte_reader_set_pos (&reader,
+ gst_byte_reader_get_pos (&reader) - header_size);
+ break;
+ }
+
+ GST_LOG_OBJECT (stream->pad,
+ "box %" GST_FOURCC_FORMAT " at offset %" G_GUINT64_FORMAT " size %"
+ G_GUINT64_FORMAT, GST_FOURCC_ARGS (fourcc),
+ dash_stream->isobmff_parser.current_offset +
+ gst_byte_reader_get_pos (&reader) - header_size, size);
+
+ if (dash_stream->isobmff_parser.current_fourcc == GST_ISOFF_FOURCC_MOOF) {
+ GstByteReader sub_reader;
+
+ g_assert (dash_stream->moof == NULL);
+ g_assert (dash_stream->moof_sync_samples == NULL);
+ gst_byte_reader_get_sub_reader (&reader, &sub_reader, size - header_size);
+ dash_stream->moof = gst_isoff_moof_box_parse (&sub_reader);
+ dash_stream->moof_offset =
+ dash_stream->isobmff_parser.current_start_offset;
+ dash_stream->moof_size = size;
+ dash_stream->current_sync_sample = -1;
+
+ if (dash_stream->moof_average_size) {
+ if (dash_stream->moof_average_size < size)
+ dash_stream->moof_average_size =
+ (size * 3 + dash_stream->moof_average_size) / 4;
+ else
+ dash_stream->moof_average_size =
+ (size + dash_stream->moof_average_size + 3) / 4;
+ } else {
+ dash_stream->moof_average_size = size;
+ }
+ } else {
+ gst_byte_reader_skip (&reader, size - header_size);
+ }
+
+ dash_stream->isobmff_parser.current_fourcc = 0;
+ dash_stream->isobmff_parser.current_start_offset += size;
+ dash_stream->isobmff_parser.current_size = 0;
+ } while (gst_byte_reader_get_remaining (&reader) > 0);
+
+ gst_buffer_unmap (buffer, &map);
+
+ /* mdat? Push all we have and wait for it to be over */
+ if (dash_stream->isobmff_parser.current_fourcc == GST_ISOFF_FOURCC_MDAT) {
+ GstBuffer *pending;
+
+ GST_LOG_OBJECT (stream->pad,
+ "box %" GST_FOURCC_FORMAT " at offset %" G_GUINT64_FORMAT " size %"
+ G_GUINT64_FORMAT, GST_FOURCC_ARGS (fourcc),
+ dash_stream->isobmff_parser.current_offset +
+ gst_byte_reader_get_pos (&reader) - header_size,
+ dash_stream->isobmff_parser.current_size);
+
+ /* At mdat. Move the start of the mdat to the adapter and have everything
+ * else be pushed. We parsed all header boxes at this point and are not
+ * supposed to be called again until the next moof */
+ pending = _gst_buffer_split (buffer, gst_byte_reader_get_pos (&reader), -1);
+ gst_adapter_push (dash_stream->isobmff_adapter, pending);
+ dash_stream->isobmff_parser.current_offset +=
+ gst_byte_reader_get_pos (&reader);
+ dash_stream->isobmff_parser.current_size = 0;
+
+ GST_BUFFER_OFFSET (buffer) = buffer_offset;
+ GST_BUFFER_OFFSET_END (buffer) =
+ buffer_offset + gst_buffer_get_size (buffer);
+ return buffer;
+ } else if (gst_byte_reader_get_pos (&reader) != 0) {
+ GstBuffer *pending;
+
+ /* Multiple complete boxes and no mdat? Push them and keep the remainder,
+ * which is the start of the next box if any remainder */
+
+ pending = _gst_buffer_split (buffer, gst_byte_reader_get_pos (&reader), -1);
+ gst_adapter_push (dash_stream->isobmff_adapter, pending);
+ dash_stream->isobmff_parser.current_offset +=
+ gst_byte_reader_get_pos (&reader);
+ dash_stream->isobmff_parser.current_size = 0;
+
+ GST_BUFFER_OFFSET (buffer) = buffer_offset;
+ GST_BUFFER_OFFSET_END (buffer) =
+ buffer_offset + gst_buffer_get_size (buffer);
+ return buffer;
+ }
+
+ /* Not even a single complete, non-mdat box, wait */
+ dash_stream->isobmff_parser.current_size = 0;
+ gst_adapter_push (dash_stream->isobmff_adapter, buffer);
+
+ return NULL;
+}
+
+static gboolean
+gst_dash_demux_find_sync_samples (GstAdaptiveDemux * demux,
+ GstAdaptiveDemuxStream * stream)
+{
+ GstDashDemux *dashdemux = (GstDashDemux *) stream->demux;
+ GstDashDemuxStream *dash_stream = (GstDashDemuxStream *) stream;
+ guint i;
+ guint32 track_id = 0;
+ guint64 prev_traf_end;
+ gboolean trex_sample_flags = FALSE;
+
+ if (!dash_stream->moof) {
+ dashdemux->allow_trickmode_key_units = FALSE;
+ return FALSE;
+ }
+
+ dash_stream->current_sync_sample = -1;
+ dash_stream->moof_sync_samples =
+ g_array_new (FALSE, FALSE, sizeof (GstDashStreamSyncSample));
+
+ prev_traf_end = dash_stream->moof_offset;
+
+ /* generate table of keyframes and offsets */
+ for (i = 0; i < dash_stream->moof->traf->len; i++) {
+ GstTrafBox *traf = &g_array_index (dash_stream->moof->traf, GstTrafBox, i);
+ guint64 traf_offset = 0, prev_trun_end;
+ guint j;
+
+ if (i == 0) {
+ track_id = traf->tfhd.track_id;
+ } else if (track_id != traf->tfhd.track_id) {
+ GST_ERROR_OBJECT (stream->pad,
+ "moof with trafs of different track ids (%u != %u)", track_id,
+ traf->tfhd.track_id);
+ g_array_free (dash_stream->moof_sync_samples, TRUE);
+ dash_stream->moof_sync_samples = NULL;
+ dashdemux->allow_trickmode_key_units = FALSE;
+ return FALSE;
+ }
+
+ if (traf->tfhd.flags & GST_TFHD_FLAGS_BASE_DATA_OFFSET_PRESENT) {
+ traf_offset = traf->tfhd.base_data_offset;
+ } else if (traf->tfhd.flags & GST_TFHD_FLAGS_DEFAULT_BASE_IS_MOOF) {
+ traf_offset = dash_stream->moof_offset;
+ } else {
+ traf_offset = prev_traf_end;
+ }
+
+ prev_trun_end = traf_offset;
+
+ for (j = 0; j < traf->trun->len; j++) {
+ GstTrunBox *trun = &g_array_index (traf->trun, GstTrunBox, j);
+ guint64 trun_offset, prev_sample_end;
+ guint k;
+
+ if (trun->flags & GST_TRUN_FLAGS_DATA_OFFSET_PRESENT) {
+ trun_offset = traf_offset + trun->data_offset;
+ } else {
+ trun_offset = prev_trun_end;
+ }
+
+ prev_sample_end = trun_offset;
+ for (k = 0; k < trun->samples->len; k++) {
+ GstTrunSample *sample =
+ &g_array_index (trun->samples, GstTrunSample, k);
+ guint64 sample_offset;
+ guint32 sample_flags;
+#if 0
+ guint32 sample_duration;
+#endif
+
+ sample_offset = prev_sample_end;
+
+ if (trun->flags & GST_TRUN_FLAGS_SAMPLE_FLAGS_PRESENT) {
+ sample_flags = sample->sample_flags;
+ } else if ((trun->flags & GST_TRUN_FLAGS_FIRST_SAMPLE_FLAGS_PRESENT)
+ && k == 0) {
+ sample_flags = trun->first_sample_flags;
+ } else if (traf->
+ tfhd.flags & GST_TFHD_FLAGS_DEFAULT_SAMPLE_FLAGS_PRESENT) {
+ sample_flags = traf->tfhd.default_sample_flags;
+ } else {
+ trex_sample_flags = TRUE;
+ continue;
+ }
+
+#if 0
+ if (trun->flags & GST_TRUN_FLAGS_SAMPLE_DURATION_PRESENT) {
+ sample_duration = sample->sample_duration;
+ } else if (traf->
+ tfhd.flags & GST_TFHD_FLAGS_DEFAULT_SAMPLE_DURATION_PRESENT) {
+ sample_duration = traf->tfhd.default_sample_duration;
+ } else {
+ GST_FIXME_OBJECT (stream->pad,
+ "Sample duration given by trex - can't download only keyframes");
+ g_array_free (dash_stream->moof_sync_samples, TRUE);
+ dash_stream->moof_sync_samples = NULL;
+ return FALSE;
+ }
+#endif
+
+ if (trun->flags & GST_TRUN_FLAGS_SAMPLE_SIZE_PRESENT) {
+ prev_sample_end += sample->sample_size;
+ } else if (traf->
+ tfhd.flags & GST_TFHD_FLAGS_DEFAULT_SAMPLE_SIZE_PRESENT) {
+ prev_sample_end += traf->tfhd.default_sample_size;
+ } else {
+ GST_FIXME_OBJECT (stream->pad,
+ "Sample size given by trex - can't download only keyframes");
+ g_array_free (dash_stream->moof_sync_samples, TRUE);
+ dash_stream->moof_sync_samples = NULL;
+ dashdemux->allow_trickmode_key_units = FALSE;
+ return FALSE;
+ }
+
+ /* Non-non-sync sample aka sync sample */
+ if (!GST_ISOFF_SAMPLE_FLAGS_SAMPLE_IS_NON_SYNC_SAMPLE (sample_flags) ||
+ GST_ISOFF_SAMPLE_FLAGS_SAMPLE_DEPENDS_ON (sample_flags) == 2) {
+ GstDashStreamSyncSample sync_sample =
+ { sample_offset, prev_sample_end - 1 };
+ /* TODO: need timestamps so we can decide to download or not */
+ g_array_append_val (dash_stream->moof_sync_samples, sync_sample);
+ }
+ }
+
+ prev_trun_end = prev_sample_end;
+ }
+
+ prev_traf_end = prev_trun_end;
+ }
+
+ if (trex_sample_flags) {
+ if (dash_stream->moof_sync_samples->len > 0) {
+ GST_LOG_OBJECT (stream->pad,
+ "Some sample flags given by trex but still found sync samples");
+ } else {
+ GST_FIXME_OBJECT (stream->pad,
+ "Sample flags given by trex - can't download only keyframes");
+ g_array_free (dash_stream->moof_sync_samples, TRUE);
+ dash_stream->moof_sync_samples = NULL;
+ dashdemux->allow_trickmode_key_units = FALSE;
+ return FALSE;
+ }
+ }
+
+ if (dash_stream->moof_sync_samples->len == 0) {
+ GST_LOG_OBJECT (stream->pad, "No sync samples found in fragment");
+ g_array_free (dash_stream->moof_sync_samples, TRUE);
+ dash_stream->moof_sync_samples = NULL;
+ dashdemux->allow_trickmode_key_units = FALSE;
+ return FALSE;
+ }
+
+ {
+ GstDashStreamSyncSample *sync_sample =
+ &g_array_index (dash_stream->moof_sync_samples, GstDashStreamSyncSample,
+ 0);
+ guint size = sync_sample->end_offset + 1 - sync_sample->start_offset;
+
+ if (dash_stream->first_sync_sample_average_size) {
+ if (dash_stream->first_sync_sample_average_size < size)
+ dash_stream->first_sync_sample_average_size =
+ (size * 3 + dash_stream->first_sync_sample_average_size) / 4;
+ else
+ dash_stream->first_sync_sample_average_size =
+ (size + dash_stream->first_sync_sample_average_size * 3) / 4;
+ } else {
+ dash_stream->first_sync_sample_average_size = size;
+ }
+
+ if (dash_stream->moof_offset + dash_stream->moof_size + 8 <
+ sync_sample->start_offset) {
+ dash_stream->first_sync_sample_after_moof = FALSE;
+ dash_stream->first_sync_sample_always_after_moof = FALSE;
+ } else {
+ dash_stream->first_sync_sample_after_moof =
+ (dash_stream->moof_sync_samples->len == 1
+ || demux->segment.rate > 0.0);
+ }
+ }
+
+ return TRUE;
+}
+
+
+static GstFlowReturn
+gst_dash_demux_handle_isobmff_buffer (GstAdaptiveDemux * demux,
+ GstAdaptiveDemuxStream * stream, GstBuffer * buffer)
+{
+ GstDashDemuxStream *dash_stream = (GstDashDemuxStream *) stream;
+ GstDashDemux *dashdemux = GST_DASH_DEMUX_CAST (demux);
+ GstFlowReturn ret = GST_FLOW_OK;
+
+ if (dashdemux->allow_trickmode_key_units) {
+ if (dash_stream->isobmff_parser.current_fourcc != GST_ISOFF_FOURCC_MDAT) {
+ buffer = gst_dash_demux_parse_isobmff (demux, dash_stream, buffer);
+
+ if (buffer
+ && (ret =
+ gst_adaptive_demux_stream_push_buffer (stream,
+ buffer)) != GST_FLOW_OK)
+ return ret;
+ if (dash_stream->isobmff_parser.current_fourcc != GST_ISOFF_FOURCC_MDAT)
+ return ret;
+
+ /* Jump to the next sync sample. As we're doing chunked downloading
+ * here, just drop data until our chunk is over so we can reuse the
+ * HTTP connection instead of having to create a new one or
+ * reuse the data if the sync sample follows the moof */
+ if (dash_stream->active_stream->mimeType == GST_STREAM_VIDEO
+ && gst_dash_demux_find_sync_samples (demux, stream) &&
+ GST_ADAPTIVE_DEMUX (stream->demux)->
+ segment.flags & GST_SEGMENT_FLAG_TRICKMODE_KEY_UNITS) {
+
+ if (dash_stream->first_sync_sample_after_moof) {
+ /* If we're here, don't throw away data but collect sync
+ * sample while we're at it below. We're doing chunked
+ * downloading so might need to adjust the next chunk size for
+ * the remainder */
+ dash_stream->current_sync_sample = 0;
+ } else {
+ gst_adapter_clear (dash_stream->isobmff_adapter);
+ }
+ }
+
+ if (gst_adapter_available (dash_stream->isobmff_adapter) == 0)
+ return ret;
+
+ /* We have some data from the mdat available in the adapter, handle it
+ * below in the push code */
+ buffer =
+ gst_adapter_take_buffer (dash_stream->isobmff_adapter,
+ gst_adapter_available (dash_stream->isobmff_adapter));
+ } else {
+ if (dash_stream->isobmff_parser.current_offset == -1) {
+ dash_stream->isobmff_parser.current_offset =
+ GST_BUFFER_OFFSET_IS_VALID (buffer) ? GST_BUFFER_OFFSET (buffer) :
+ 0;
+ }
+ }
+
+ /* At mdat and isobmff and trick modes are allowed */
+
+ /* We're actually running in key-units trick mode */
+ if (dash_stream->active_stream->mimeType == GST_STREAM_VIDEO
+ && dash_stream->moof_sync_samples
+ && GST_ADAPTIVE_DEMUX (stream->demux)->
+ segment.flags & GST_SEGMENT_FLAG_TRICKMODE_KEY_UNITS) {
+
+ if (dash_stream->current_sync_sample == -1) {
+ /* We're doing chunked downloading and wait for finishing the current
+ * chunk so we can jump to the first keyframe */
+ gst_buffer_unref (buffer);
+ return GST_FLOW_OK;
+ } else if (dash_stream->first_sync_sample_after_moof
+ && dash_stream->current_sync_sample == 0) {
+ GstDashStreamSyncSample *sync_sample =
+ &g_array_index (dash_stream->moof_sync_samples,
+ GstDashStreamSyncSample, 0);
+ guint64 end_offset =
+ dash_stream->isobmff_parser.current_offset +
+ gst_buffer_get_size (buffer);
+
+ /* If the first keyframe follows directly the moof and we're
+ * downloading it here, make sure to not download too much */
+
+ if (end_offset > sync_sample->end_offset + 1) {
+ guint64 remaining =
+ sync_sample->end_offset + 1 -
+ dash_stream->isobmff_parser.current_offset;
+
+ if (remaining) {
+ GstBuffer *sub =
+ gst_buffer_copy_region (buffer, GST_BUFFER_COPY_ALL, 0,
+ remaining);
+ gst_buffer_unref (buffer);
+ buffer = sub;
+ } else {
+ gst_buffer_unref (buffer);
+ return GST_FLOW_OK;
+ }
+ }
+ }
+ }
+
+ GST_BUFFER_OFFSET (buffer) = dash_stream->isobmff_parser.current_offset;
+ dash_stream->isobmff_parser.current_offset += gst_buffer_get_size (buffer);
+ GST_BUFFER_OFFSET_END (buffer) = dash_stream->isobmff_parser.current_offset;
+ }
+
+ return gst_adaptive_demux_stream_push_buffer (stream, buffer);
+}
+
static GstFlowReturn
gst_dash_demux_data_received (GstAdaptiveDemux * demux,
GstAdaptiveDemuxStream * stream, GstBuffer * buffer)
@@ -1657,8 +2511,12 @@
GstFlowReturn ret = GST_FLOW_OK;
guint index_header_or_data;
- if (!gst_mpd_client_has_isoff_ondemand_profile (dashdemux->client))
- return gst_adaptive_demux_stream_push_buffer (stream, buffer);
+ if (!gst_mpd_client_has_isoff_ondemand_profile (dashdemux->client)) {
+ if (dash_stream->is_isobmff)
+ return gst_dash_demux_handle_isobmff_buffer (demux, stream, buffer);
+ else
+ return gst_adaptive_demux_stream_push_buffer (stream, buffer);
+ }
if (stream->downloading_index)
index_header_or_data = 1;
@@ -1741,25 +2599,52 @@
if (dash_stream->sidx_current_offset + available < sidx_end_offset) {
buffer = gst_adapter_take_buffer (dash_stream->sidx_adapter, available);
} else {
- buffer =
- gst_adapter_take_buffer (dash_stream->sidx_adapter,
- sidx_end_offset - dash_stream->sidx_current_offset);
- advance = TRUE;
+ /* In key-units mode, we advance the fragments manually once the
+ * current key-unit is over but throw away all data that is after
+ * the current sidx entry end */
+ if (dash_stream->moof_sync_samples
+ && (GST_ADAPTIVE_DEMUX (stream->demux)->
+ segment.flags & GST_SEGMENT_FLAG_TRICKMODE_KEY_UNITS)) {
+ if (sidx_end_offset <= dash_stream->sidx_current_offset) {
+ buffer = NULL;
+ gst_adapter_clear (dash_stream->sidx_adapter);
+ } else {
+ buffer =
+ gst_adapter_take_buffer (dash_stream->sidx_adapter,
+ sidx_end_offset - dash_stream->sidx_current_offset);
+ }
+ } else {
+ buffer =
+ gst_adapter_take_buffer (dash_stream->sidx_adapter,
+ sidx_end_offset - dash_stream->sidx_current_offset);
+ advance = TRUE;
+ }
}
- GST_BUFFER_OFFSET (buffer) = dash_stream->sidx_current_offset;
- GST_BUFFER_OFFSET_END (buffer) =
- GST_BUFFER_OFFSET (buffer) + gst_buffer_get_size (buffer);
- dash_stream->sidx_current_offset = GST_BUFFER_OFFSET_END (buffer);
- ret = gst_adaptive_demux_stream_push_buffer (stream, buffer);
- if (advance) {
- GstFlowReturn new_ret;
- new_ret =
- gst_adaptive_demux_stream_advance_fragment (demux, stream,
- SIDX_CURRENT_ENTRY (dash_stream)->duration);
- /* only overwrite if it was OK before */
- if (ret == GST_FLOW_OK)
- ret = new_ret;
+ if (buffer != NULL) {
+ GST_BUFFER_OFFSET (buffer) = dash_stream->sidx_current_offset;
+ GST_BUFFER_OFFSET_END (buffer) =
+ GST_BUFFER_OFFSET (buffer) + gst_buffer_get_size (buffer);
+ dash_stream->sidx_current_offset = GST_BUFFER_OFFSET_END (buffer);
+
+ if (dash_stream->is_isobmff)
+ ret = gst_dash_demux_handle_isobmff_buffer (demux, stream, buffer);
+ else
+ ret = gst_adaptive_demux_stream_push_buffer (stream, buffer);
+
+ if (!(dash_stream->moof_sync_samples
+ && (GST_ADAPTIVE_DEMUX (stream->demux)->
+ segment.flags & GST_SEGMENT_FLAG_TRICKMODE_KEY_UNITS))
+ && advance) {
+ GstFlowReturn new_ret;
+ new_ret =
+ gst_adaptive_demux_stream_advance_fragment (demux, stream,
+ SIDX_CURRENT_ENTRY (dash_stream)->duration);
+
+ /* only overwrite if it was OK before */
+ if (ret == GST_FLOW_OK)
+ ret = new_ret;
+ }
}
}
} else {
@@ -1772,7 +2657,10 @@
GST_BUFFER_OFFSET (buffer) + gst_buffer_get_size (buffer);
dash_stream->sidx_current_offset = GST_BUFFER_OFFSET_END (buffer);
- ret = gst_adaptive_demux_stream_push_buffer (stream, buffer);
+ if (dash_stream->is_isobmff)
+ return gst_dash_demux_handle_isobmff_buffer (demux, stream, buffer);
+ else
+ return gst_adaptive_demux_stream_push_buffer (stream, buffer);
}
return ret;
@@ -1786,6 +2674,8 @@
gst_isoff_sidx_parser_clear (&dash_stream->sidx_parser);
if (dash_stream->sidx_adapter)
g_object_unref (dash_stream->sidx_adapter);
+ if (dash_stream->isobmff_adapter)
+ g_object_unref (dash_stream->isobmff_adapter);
}
static GstDashDemuxClockDrift *
diff --git a/ext/dash/gstdashdemux.h b/ext/dash/gstdashdemux.h
index 5f0094b..0757d76 100644
--- a/ext/dash/gstdashdemux.h
+++ b/ext/dash/gstdashdemux.h
@@ -76,6 +76,26 @@
guint64 sidx_current_offset;
/* index = 1, header = 2, data = 3 */
guint sidx_index_header_or_data;
+
+ /* ISOBMFF box parsing */
+ gboolean is_isobmff;
+ GstAdapter *isobmff_adapter;
+ struct {
+ /* index = 1, header = 2, data = 3 */
+ guint index_header_or_data;
+ guint32 current_fourcc;
+ guint64 current_start_offset;
+ guint64 current_offset;
+ guint64 current_size;
+ } isobmff_parser;
+
+ GstMoofBox *moof;
+ guint64 moof_offset, moof_size;
+ GArray *moof_sync_samples;
+ guint current_sync_sample;
+
+ guint64 moof_average_size, first_sync_sample_average_size;
+ gboolean first_sync_sample_after_moof, first_sync_sample_always_after_moof;
};
/**
@@ -100,11 +120,16 @@
/* Properties */
GstClockTime max_buffering_time; /* Maximum buffering time accumulated during playback */
guint64 max_bitrate; /* max of bitrate supported by target decoder */
+ gint max_video_width, max_video_height;
+ gint max_video_framerate_n, max_video_framerate_d;
gchar* default_presentation_delay; /* presentation time delay if MPD@suggestedPresentationDelay is not present */
gint n_audio_streams;
gint n_video_streams;
gint n_subtitle_streams;
+
+ gboolean trickmode_no_audio;
+ gboolean allow_trickmode_key_units;
};
struct _GstDashDemuxClass
diff --git a/ext/dash/gstisoff.c b/ext/dash/gstisoff.c
index 3c30393..38e3ddc 100644
--- a/ext/dash/gstisoff.c
+++ b/ext/dash/gstisoff.c
@@ -25,6 +25,328 @@
#include "gstisoff.h"
#include <gst/base/gstbytereader.h>
+#include <string.h>
+
+/* gst_isoff_parse_box:
+ * @reader:
+ * @type: type that was found at the current position
+ * @extended_type: (allow-none): extended type if type=='uuid'
+ * @header_size: (allow-none): size of the box header (type, extended type and size)
+ * @size: size of the complete box including type, extended type and size
+ *
+ * Advances the byte reader to the start of the box content. To skip
+ * over the complete box, skip size - header_size bytes.
+ *
+ * Returns: TRUE if a box header could be parsed, FALSE if more data is needed
+ */
+gboolean
+gst_isoff_parse_box_header (GstByteReader * reader, guint32 * type,
+ guint8 extended_type[16], guint * header_size, guint64 * size)
+{
+ guint header_start_offset;
+ guint32 size_field;
+
+ header_start_offset = gst_byte_reader_get_pos (reader);
+
+ if (gst_byte_reader_get_remaining (reader) < 8)
+ goto not_enough_data;
+
+ size_field = gst_byte_reader_get_uint32_be_unchecked (reader);
+ *type = gst_byte_reader_get_uint32_le_unchecked (reader);
+
+ if (size_field == 1) {
+ if (gst_byte_reader_get_remaining (reader) < 8)
+ goto not_enough_data;
+ *size = gst_byte_reader_get_uint64_be_unchecked (reader);
+ } else {
+ *size = size_field;
+ }
+
+ if (*type == GST_ISOFF_FOURCC_UUID) {
+ if (gst_byte_reader_get_remaining (reader) < 16)
+ goto not_enough_data;
+
+ if (extended_type)
+ memcpy (extended_type, gst_byte_reader_get_data_unchecked (reader, 16),
+ 16);
+ }
+
+ if (header_size)
+ *header_size = gst_byte_reader_get_pos (reader) - header_start_offset;
+
+ return TRUE;
+
+not_enough_data:
+ gst_byte_reader_set_pos (reader, header_start_offset);
+ return FALSE;
+}
+
+static void
+gst_isoff_trun_box_clear (GstTrunBox * trun)
+{
+ if (trun->samples)
+ g_array_free (trun->samples, TRUE);
+}
+
+static void
+gst_isoff_traf_box_clear (GstTrafBox * traf)
+{
+ if (traf->trun)
+ g_array_free (traf->trun, TRUE);
+}
+
+static gboolean
+gst_isoff_mfhd_box_parse (GstMfhdBox * mfhd, GstByteReader * reader)
+{
+ guint8 version;
+ guint32 flags;
+
+ if (gst_byte_reader_get_remaining (reader) != 8)
+ return FALSE;
+
+ version = gst_byte_reader_get_uint8_unchecked (reader);
+ if (version != 0)
+ return FALSE;
+
+ flags = gst_byte_reader_get_uint24_be_unchecked (reader);
+ if (flags != 0)
+ return FALSE;
+
+ mfhd->sequence_number = gst_byte_reader_get_uint32_be_unchecked (reader);
+
+ return TRUE;
+}
+
+static gboolean
+gst_isoff_tfhd_box_parse (GstTfhdBox * tfhd, GstByteReader * reader)
+{
+ memset (tfhd, 0, sizeof (*tfhd));
+
+ if (gst_byte_reader_get_remaining (reader) < 4)
+ return FALSE;
+
+ tfhd->version = gst_byte_reader_get_uint8_unchecked (reader);
+ if (tfhd->version != 0)
+ return FALSE;
+
+ tfhd->flags = gst_byte_reader_get_uint24_be_unchecked (reader);
+
+ if (!gst_byte_reader_get_uint32_be (reader, &tfhd->track_id))
+ return FALSE;
+
+ if ((tfhd->flags & GST_TFHD_FLAGS_BASE_DATA_OFFSET_PRESENT) &&
+ !gst_byte_reader_get_uint64_be (reader, &tfhd->base_data_offset))
+ return FALSE;
+
+ if ((tfhd->flags & GST_TFHD_FLAGS_SAMPLE_DESCRIPTION_INDEX_PRESENT) &&
+ !gst_byte_reader_get_uint32_be (reader, &tfhd->sample_description_index))
+ return FALSE;
+
+ if ((tfhd->flags & GST_TFHD_FLAGS_DEFAULT_SAMPLE_DURATION_PRESENT) &&
+ !gst_byte_reader_get_uint32_be (reader, &tfhd->default_sample_duration))
+ return FALSE;
+
+ if ((tfhd->flags & GST_TFHD_FLAGS_DEFAULT_SAMPLE_SIZE_PRESENT) &&
+ !gst_byte_reader_get_uint32_be (reader, &tfhd->default_sample_size))
+ return FALSE;
+
+ if ((tfhd->flags & GST_TFHD_FLAGS_DEFAULT_SAMPLE_FLAGS_PRESENT) &&
+ !gst_byte_reader_get_uint32_be (reader, &tfhd->default_sample_flags))
+ return FALSE;
+
+ return TRUE;
+}
+
+static gboolean
+gst_isoff_trun_box_parse (GstTrunBox * trun, GstByteReader * reader)
+{
+ gint i;
+
+ memset (trun, 0, sizeof (*trun));
+
+ if (gst_byte_reader_get_remaining (reader) < 4)
+ return FALSE;
+
+ trun->version = gst_byte_reader_get_uint8_unchecked (reader);
+ if (trun->version != 0 && trun->version != 1)
+ return FALSE;
+
+ trun->flags = gst_byte_reader_get_uint24_be_unchecked (reader);
+
+ if (!gst_byte_reader_get_uint32_be (reader, &trun->sample_count))
+ return FALSE;
+
+ trun->samples =
+ g_array_sized_new (FALSE, FALSE, sizeof (GstTrunSample),
+ trun->sample_count);
+
+ if ((trun->flags & GST_TRUN_FLAGS_DATA_OFFSET_PRESENT) &&
+ !gst_byte_reader_get_uint32_be (reader, (guint32 *) & trun->data_offset))
+ return FALSE;
+
+ if ((trun->flags & GST_TRUN_FLAGS_FIRST_SAMPLE_FLAGS_PRESENT) &&
+ !gst_byte_reader_get_uint32_be (reader, &trun->first_sample_flags))
+ return FALSE;
+
+ for (i = 0; i < trun->sample_count; i++) {
+ GstTrunSample sample = { 0, };
+
+ if ((trun->flags & GST_TRUN_FLAGS_SAMPLE_DURATION_PRESENT) &&
+ !gst_byte_reader_get_uint32_be (reader, &sample.sample_duration))
+ goto error;
+
+ if ((trun->flags & GST_TRUN_FLAGS_SAMPLE_SIZE_PRESENT) &&
+ !gst_byte_reader_get_uint32_be (reader, &sample.sample_size))
+ goto error;
+
+ if ((trun->flags & GST_TRUN_FLAGS_SAMPLE_FLAGS_PRESENT) &&
+ !gst_byte_reader_get_uint32_be (reader, &sample.sample_flags))
+ goto error;
+
+ if ((trun->flags & GST_TRUN_FLAGS_SAMPLE_COMPOSITION_TIME_OFFSETS_PRESENT)
+ && !gst_byte_reader_get_uint32_be (reader,
+ &sample.sample_composition_time_offset.u))
+ goto error;
+
+ g_array_append_val (trun->samples, sample);
+ }
+
+ return TRUE;
+
+error:
+ gst_isoff_trun_box_clear (trun);
+ return FALSE;
+}
+
+static gboolean
+gst_isoff_traf_box_parse (GstTrafBox * traf, GstByteReader * reader)
+{
+ gboolean had_tfhd = FALSE;
+
+ memset (traf, 0, sizeof (*traf));
+ traf->trun = g_array_new (FALSE, FALSE, sizeof (GstTrunBox));
+ g_array_set_clear_func (traf->trun,
+ (GDestroyNotify) gst_isoff_trun_box_clear);
+
+ while (gst_byte_reader_get_remaining (reader) > 0) {
+ guint32 fourcc;
+ guint header_size;
+ guint64 size;
+
+ if (!gst_isoff_parse_box_header (reader, &fourcc, NULL, &header_size,
+ &size))
+ goto error;
+ if (gst_byte_reader_get_remaining (reader) < size - header_size)
+ goto error;
+
+ switch (fourcc) {
+ case GST_ISOFF_FOURCC_TFHD:{
+ GstByteReader sub_reader;
+
+ gst_byte_reader_get_sub_reader (reader, &sub_reader,
+ size - header_size);
+ if (!gst_isoff_tfhd_box_parse (&traf->tfhd, &sub_reader))
+ goto error;
+ had_tfhd = TRUE;
+ break;
+ }
+ case GST_ISOFF_FOURCC_TRUN:{
+ GstByteReader sub_reader;
+ GstTrunBox trun;
+
+ gst_byte_reader_get_sub_reader (reader, &sub_reader,
+ size - header_size);
+ if (!gst_isoff_trun_box_parse (&trun, &sub_reader))
+ goto error;
+
+ g_array_append_val (traf->trun, trun);
+ break;
+ }
+ default:
+ gst_byte_reader_skip (reader, size - header_size);
+ break;
+ }
+ }
+
+ if (!had_tfhd)
+ goto error;
+
+ return TRUE;
+
+error:
+ gst_isoff_traf_box_clear (traf);
+
+ return FALSE;
+}
+
+GstMoofBox *
+gst_isoff_moof_box_parse (GstByteReader * reader)
+{
+ GstMoofBox *moof;
+ gboolean had_mfhd = FALSE;
+
+ moof = g_new0 (GstMoofBox, 1);
+ moof->traf = g_array_new (FALSE, FALSE, sizeof (GstTrafBox));
+ g_array_set_clear_func (moof->traf,
+ (GDestroyNotify) gst_isoff_traf_box_clear);
+
+ while (gst_byte_reader_get_remaining (reader) > 0) {
+ guint32 fourcc;
+ guint header_size;
+ guint64 size;
+
+ if (!gst_isoff_parse_box_header (reader, &fourcc, NULL, &header_size,
+ &size))
+ goto error;
+ if (gst_byte_reader_get_remaining (reader) < size - header_size)
+ goto error;
+
+ switch (fourcc) {
+ case GST_ISOFF_FOURCC_MFHD:{
+ GstByteReader sub_reader;
+
+ gst_byte_reader_get_sub_reader (reader, &sub_reader,
+ size - header_size);
+ if (!gst_isoff_mfhd_box_parse (&moof->mfhd, &sub_reader))
+ goto error;
+ had_mfhd = TRUE;
+ break;
+ }
+ case GST_ISOFF_FOURCC_TRAF:{
+ GstByteReader sub_reader;
+ GstTrafBox traf;
+
+ gst_byte_reader_get_sub_reader (reader, &sub_reader,
+ size - header_size);
+ if (!gst_isoff_traf_box_parse (&traf, &sub_reader))
+ goto error;
+
+ g_array_append_val (moof->traf, traf);
+ break;
+ }
+ default:
+ gst_byte_reader_skip (reader, size - header_size);
+ break;
+ }
+ }
+
+ if (!had_mfhd)
+ goto error;
+
+ return moof;
+
+error:
+ gst_isoff_moof_box_free (moof);
+ return NULL;
+}
+
+void
+gst_isoff_moof_box_free (GstMoofBox * moof)
+{
+ g_array_free (moof->traf, TRUE);
+ g_free (moof);
+}
+
void
gst_isoff_sidx_parser_init (GstSidxParser * parser)
{
@@ -75,30 +397,27 @@
switch (parser->status) {
case GST_ISOFF_SIDX_PARSER_INIT:
- if (gst_byte_reader_get_remaining (&reader) < GST_ISOFF_FULL_BOX_SIZE) {
+ if (!gst_isoff_parse_box_header (&reader, &fourcc, NULL, NULL,
+ &parser->size))
break;
- }
- parser->size = gst_byte_reader_get_uint32_be_unchecked (&reader);
- fourcc = gst_byte_reader_get_uint32_le_unchecked (&reader);
if (fourcc != GST_ISOFF_FOURCC_SIDX) {
res = GST_ISOFF_PARSER_UNEXPECTED;
gst_byte_reader_set_pos (&reader, 0);
break;
}
- if (parser->size == 1) {
- if (gst_byte_reader_get_remaining (&reader) < 12) {
- gst_byte_reader_set_pos (&reader, 0);
- break;
- }
- parser->size = gst_byte_reader_get_uint64_be_unchecked (&reader);
- }
if (parser->size == 0) {
res = GST_ISOFF_PARSER_ERROR;
gst_byte_reader_set_pos (&reader, 0);
break;
}
+
+ /* Try again once we have enough data for the FullBox header */
+ if (gst_byte_reader_get_remaining (&reader) < 4) {
+ gst_byte_reader_set_pos (&reader, 0);
+ break;
+ }
parser->sidx.version = gst_byte_reader_get_uint8_unchecked (&reader);
parser->sidx.flags = gst_byte_reader_get_uint24_le_unchecked (&reader);
diff --git a/ext/dash/gstisoff.h b/ext/dash/gstisoff.h
index e535c69..ca7663a 100644
--- a/ext/dash/gstisoff.h
+++ b/ext/dash/gstisoff.h
@@ -26,6 +26,7 @@
#define __GST_ISOFF_H__
#include <gst/gst.h>
+#include <gst/base/base.h>
G_BEGIN_DECLS
@@ -36,11 +37,106 @@
GST_ISOFF_PARSER_ERROR
} GstIsoffParserResult;
-/* this is the minimum size, it can be larger if it
- * uses extended size or type */
-#define GST_ISOFF_FULL_BOX_SIZE 12
+gboolean gst_isoff_parse_box_header (GstByteReader * reader, guint32 * type, guint8 extended_type[16], guint * header_size, guint64 * size);
+#define GST_ISOFF_FOURCC_UUID GST_MAKE_FOURCC('u','u','i','d')
+#define GST_ISOFF_FOURCC_MOOF GST_MAKE_FOURCC('m','o','o','f')
+#define GST_ISOFF_FOURCC_MFHD GST_MAKE_FOURCC('m','f','h','d')
+#define GST_ISOFF_FOURCC_TFHD GST_MAKE_FOURCC('t','f','h','d')
+#define GST_ISOFF_FOURCC_TRUN GST_MAKE_FOURCC('t','r','u','n')
+#define GST_ISOFF_FOURCC_TRAF GST_MAKE_FOURCC('t','r','a','f')
+#define GST_ISOFF_FOURCC_MDAT GST_MAKE_FOURCC('m','d','a','t')
#define GST_ISOFF_FOURCC_SIDX GST_MAKE_FOURCC('s','i','d','x')
+
+#define GST_ISOFF_SAMPLE_FLAGS_IS_LEADING(flags) (((flags) >> 26) & 0x03)
+#define GST_ISOFF_SAMPLE_FLAGS_SAMPLE_DEPENDS_ON(flags) (((flags) >> 24) & 0x03)
+#define GST_ISOFF_SAMPLE_FLAGS_SAMPLE_IS_DEPENDED_ON(flags) (((flags) >> 22) & 0x03)
+#define GST_ISOFF_SAMPLE_FLAGS_SAMPLE_HAS_REDUNDANCY(flags) (((flags) >> 20) & 0x03)
+#define GST_ISOFF_SAMPLE_FLAGS_SAMPLE_PADDING_VALUE(flags) (((flags) >> 17) & 0x07)
+#define GST_ISOFF_SAMPLE_FLAGS_SAMPLE_IS_NON_SYNC_SAMPLE(flags) (((flags) >> 16) & 0x01)
+#define GST_ISOFF_SAMPLE_FLAGS_SAMPLE_DEGRADATION_PRIORITY(flags) (((flags) >> 0) & 0x0f)
+
+typedef struct _GstMfhdBox
+{
+ guint32 sequence_number;
+} GstMfhdBox;
+
+typedef enum
+{
+ GST_TFHD_FLAGS_BASE_DATA_OFFSET_PRESENT = 0x000001,
+ GST_TFHD_FLAGS_SAMPLE_DESCRIPTION_INDEX_PRESENT = 0x000002,
+ GST_TFHD_FLAGS_DEFAULT_SAMPLE_DURATION_PRESENT = 0x000008,
+ GST_TFHD_FLAGS_DEFAULT_SAMPLE_SIZE_PRESENT = 0x000010,
+ GST_TFHD_FLAGS_DEFAULT_SAMPLE_FLAGS_PRESENT = 0x000020,
+ GST_TFHD_FLAGS_DURATION_IS_EMPTY = 0x010000,
+ GST_TFHD_FLAGS_DEFAULT_BASE_IS_MOOF = 0x020000
+} GstTfhdFlags;
+
+typedef struct _GstTfhdBox
+{
+ guint8 version;
+ GstTfhdFlags flags;
+
+ guint32 track_id;
+
+ /* optional */
+ guint64 base_data_offset;
+ guint32 sample_description_index;
+ guint32 default_sample_duration;
+ guint32 default_sample_size;
+ guint32 default_sample_flags;
+} GstTfhdBox;
+
+typedef enum
+{
+ GST_TRUN_FLAGS_DATA_OFFSET_PRESENT = 0x000001,
+ GST_TRUN_FLAGS_FIRST_SAMPLE_FLAGS_PRESENT = 0x000004,
+ GST_TRUN_FLAGS_SAMPLE_DURATION_PRESENT = 0x000100,
+ GST_TRUN_FLAGS_SAMPLE_SIZE_PRESENT = 0x000200,
+ GST_TRUN_FLAGS_SAMPLE_FLAGS_PRESENT = 0x000400,
+ GST_TRUN_FLAGS_SAMPLE_COMPOSITION_TIME_OFFSETS_PRESENT = 0x000800
+} GstTrunFlags;
+
+typedef struct _GstTrunBox
+{
+ guint8 version;
+ GstTrunFlags flags;
+
+ guint32 sample_count;
+
+ /* optional */
+ gint32 data_offset;
+ guint32 first_sample_flags;
+ GArray *samples;
+} GstTrunBox;
+
+typedef struct _GstTrunSample
+{
+ guint32 sample_duration;
+ guint32 sample_size;
+ guint32 sample_flags;
+
+ union {
+ guint32 u; /* version 0 */
+ gint32 s; /* others */
+ } sample_composition_time_offset;
+} GstTrunSample;
+
+typedef struct _GstTrafBox
+{
+ GstTfhdBox tfhd;
+ GArray *trun;
+} GstTrafBox;
+
+typedef struct _GstMoofBox
+{
+ GstMfhdBox mfhd;
+ GArray *traf;
+} GstMoofBox;
+
+GstMoofBox * gst_isoff_moof_box_parse (GstByteReader *reader);
+void gst_isoff_moof_box_free (GstMoofBox *moof);
+
typedef struct _GstSidxBoxEntry
{
gboolean ref_type;
diff --git a/ext/dash/gstmpdparser.c b/ext/dash/gstmpdparser.c
index dd83165..10f0149 100644
--- a/ext/dash/gstmpdparser.c
+++ b/ext/dash/gstmpdparser.c
@@ -2453,7 +2453,8 @@
gint
gst_mpdparser_get_rep_idx_with_max_bandwidth (GList * Representations,
- gint max_bandwidth)
+ gint max_bandwidth, gint max_video_width, gint max_video_height, gint
+ max_video_framerate_n, gint max_video_framerate_d)
{
GList *list = NULL, *best = NULL;
GstRepresentationNode *representation;
@@ -2468,8 +2469,32 @@
return gst_mpdparser_get_rep_idx_with_min_bandwidth (Representations);
for (list = g_list_first (Representations); list; list = g_list_next (list)) {
+ GstFrameRate *framerate = NULL;
+
representation = (GstRepresentationNode *) list->data;
- if (representation && representation->bandwidth <= max_bandwidth &&
+
+ /* FIXME: Really? */
+ if (!representation)
+ continue;
+
+ framerate = representation->RepresentationBase->frameRate;
+ if (!framerate)
+ framerate = representation->RepresentationBase->maxFrameRate;
+
+ if (framerate && max_video_framerate_n > 0) {
+ if (gst_util_fraction_compare (framerate->num, framerate->den,
+ max_video_framerate_n, max_video_framerate_d) > 0)
+ continue;
+ }
+
+ if (max_video_width > 0
+ && representation->RepresentationBase->width > max_video_width)
+ continue;
+ if (max_video_height > 0
+ && representation->RepresentationBase->height > max_video_height)
+ continue;
+
+ if (representation->bandwidth <= max_bandwidth &&
representation->bandwidth > best_bandwidth) {
best = list;
best_bandwidth = representation->bandwidth;
@@ -5989,3 +6014,29 @@
}
return value;
}
+
+GstClockTime
+gst_mpd_client_get_maximum_segment_duration (GstMpdClient * client)
+{
+ GstClockTime ret = GST_CLOCK_TIME_NONE, dur;
+ GList *stream;
+
+ g_return_val_if_fail (client != NULL, GST_CLOCK_TIME_NONE);
+ g_return_val_if_fail (client->mpd_node != NULL, GST_CLOCK_TIME_NONE);
+
+ if (client->mpd_node->maxSegmentDuration != GST_MPD_DURATION_NONE) {
+ return client->mpd_node->maxSegmentDuration * GST_MSECOND;
+ }
+
+ /* According to the DASH specification, if maxSegmentDuration is not present:
+ "If not present, then the maximum Segment duration shall be the maximum
+ duration of any Segment documented in this MPD"
+ */
+ for (stream = client->active_streams; stream; stream = g_list_next (stream)) {
+ dur = gst_mpd_client_get_segment_duration (client, stream->data, NULL);
+ if (dur != GST_CLOCK_TIME_NONE && (dur > ret || ret == GST_CLOCK_TIME_NONE)) {
+ ret = dur;
+ }
+ }
+ return ret;
+}
diff --git a/ext/dash/gstmpdparser.h b/ext/dash/gstmpdparser.h
index 1b303aa..85b97ea 100644
--- a/ext/dash/gstmpdparser.h
+++ b/ext/dash/gstmpdparser.h
@@ -538,6 +538,7 @@
gboolean gst_mpd_client_setup_representation (GstMpdClient *client, GstActiveStream *stream, GstRepresentationNode *representation);
GstClockTime gst_mpd_client_get_next_fragment_duration (GstMpdClient * client, GstActiveStream * stream);
GstClockTime gst_mpd_client_get_media_presentation_duration (GstMpdClient *client);
+GstClockTime gst_mpd_client_get_maximum_segment_duration (GstMpdClient * client);
gboolean gst_mpd_client_get_last_fragment_timestamp_end (GstMpdClient * client, guint stream_idx, GstClockTime * ts);
gboolean gst_mpd_client_get_next_fragment_timestamp (GstMpdClient * client, guint stream_idx, GstClockTime * ts);
gboolean gst_mpd_client_get_next_fragment (GstMpdClient *client, guint indexStream, GstMediaFragmentInfo * fragment);
@@ -560,7 +561,7 @@
gboolean gst_mpd_client_has_previous_period (GstMpdClient * client);
/* Representation selection */
-gint gst_mpdparser_get_rep_idx_with_max_bandwidth (GList *Representations, gint max_bandwidth);
+gint gst_mpdparser_get_rep_idx_with_max_bandwidth (GList *Representations, gint max_bandwidth, gint max_video_width, gint max_video_height, gint max_video_framerate_n, gint max_video_framerate_d);
gint gst_mpdparser_get_rep_idx_with_min_bandwidth (GList * Representations);
/* URL management */
diff --git a/ext/dc1394/Makefile.in b/ext/dc1394/Makefile.in
index 24096f9..b73f914 100644
--- a/ext/dc1394/Makefile.in
+++ b/ext/dc1394/Makefile.in
@@ -326,6 +326,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -375,6 +377,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/ext/directfb/Makefile.in b/ext/directfb/Makefile.in
index 3fabeca..26a091f 100644
--- a/ext/directfb/Makefile.in
+++ b/ext/directfb/Makefile.in
@@ -335,6 +335,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -384,6 +386,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/ext/dtls/Makefile.in b/ext/dtls/Makefile.in
index 4b97fe8..d132b54 100644
--- a/ext/dtls/Makefile.in
+++ b/ext/dtls/Makefile.in
@@ -332,6 +332,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -381,6 +383,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/ext/dts/Makefile.in b/ext/dts/Makefile.in
index 03a6524..30956c0 100644
--- a/ext/dts/Makefile.in
+++ b/ext/dts/Makefile.in
@@ -326,6 +326,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -375,6 +377,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/ext/dts/gstdtsdec.c b/ext/dts/gstdtsdec.c
index 095238c..70ffbc7 100644
--- a/ext/dts/gstdtsdec.c
+++ b/ext/dts/gstdtsdec.c
@@ -38,8 +38,11 @@
#include "config.h"
#endif
+#ifdef HAVE_STDINT_H
+#include <stdint.h>
+#endif
+
#include <string.h>
-#include "_stdint.h"
#include <stdlib.h>
#include <gst/gst.h>
diff --git a/ext/faac/Makefile.in b/ext/faac/Makefile.in
index 9f1f8ce..4842462 100644
--- a/ext/faac/Makefile.in
+++ b/ext/faac/Makefile.in
@@ -325,6 +325,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -374,6 +376,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/ext/faad/Makefile.in b/ext/faad/Makefile.in
index 7e39159..64fd24f 100644
--- a/ext/faad/Makefile.in
+++ b/ext/faad/Makefile.in
@@ -326,6 +326,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -375,6 +377,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/ext/fdkaac/Makefile.am b/ext/fdkaac/Makefile.am
new file mode 100644
index 0000000..95cae3e
--- /dev/null
+++ b/ext/fdkaac/Makefile.am
@@ -0,0 +1,13 @@
+plugin_LTLIBRARIES = libgstfdkaac.la
+
+libgstfdkaac_la_SOURCES = plugin.c gstfdkaacenc.c gstfdkaacdec.c
+libgstfdkaac_la_CFLAGS = -DGST_USE_UNSTABLE_API \
+ $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) \
+ $(GST_CFLAGS) $(FDK_AAC_CFLAGS)
+libgstfdkaac_la_LIBADD = $(GST_PLUGINS_BASE_LIBS) \
+ -lgstaudio-@GST_API_VERSION@ -lgstpbutils-@GST_API_VERSION@ \
+ $(GST_BASE_LIBS) $(FDK_AAC_LIBS)
+libgstfdkaac_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
+libgstfdkaac_la_LIBTOOLFLAGS = $(GST_PLUGIN_LIBTOOLFLAGS)
+
+noinst_HEADERS = gstfdkaacenc.h gstfdkaacdec.h
diff --git a/sys/applemedia-nonpublic/Makefile.in b/ext/fdkaac/Makefile.in
similarity index 65%
copy from sys/applemedia-nonpublic/Makefile.in
copy to ext/fdkaac/Makefile.in
index e6c6a72..d716d8c 100644
--- a/sys/applemedia-nonpublic/Makefile.in
+++ b/ext/fdkaac/Makefile.in
@@ -90,16 +90,7 @@
build_triplet = @build@
host_triplet = @host@
target_triplet = @target@
-@HAVE_IOS_TRUE@am__append_1 = -fobjc-abi-version=2 -fobjc-legacy-dispatch
-
-#libgstapplemedia_nonpublic_la_SOURCES += \
-# celvideosrc.c \
-# mtapi.c \
-# celapi.c
-@HAVE_IOS_FALSE@am__append_2 = \
-@HAVE_IOS_FALSE@ mioapi.c
-
-subdir = sys/applemedia-nonpublic
+subdir = ext/fdkaac
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
$(top_srcdir)/common/m4/as-auto-alt.m4 \
@@ -172,33 +163,20 @@
am__installdirs = "$(DESTDIR)$(plugindir)"
LTLIBRARIES = $(plugin_LTLIBRARIES)
am__DEPENDENCIES_1 =
-libgstapplemedia_nonpublic_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \
+libgstfdkaac_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \
$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
-am__libgstapplemedia_nonpublic_la_SOURCES_DIST = plugin.m \
- bufferfactory.m corevideobuffer.c coremediabuffer.c cvapi.c \
- cmapi.c coremediactx.c dynapi.c mioapi.c
-@HAVE_IOS_FALSE@am__objects_1 = \
-@HAVE_IOS_FALSE@ libgstapplemedia_nonpublic_la-mioapi.lo
-am_libgstapplemedia_nonpublic_la_OBJECTS = \
- libgstapplemedia_nonpublic_la-plugin.lo \
- libgstapplemedia_nonpublic_la-bufferfactory.lo \
- libgstapplemedia_nonpublic_la-corevideobuffer.lo \
- libgstapplemedia_nonpublic_la-coremediabuffer.lo \
- libgstapplemedia_nonpublic_la-cvapi.lo \
- libgstapplemedia_nonpublic_la-cmapi.lo \
- libgstapplemedia_nonpublic_la-coremediactx.lo \
- libgstapplemedia_nonpublic_la-dynapi.lo $(am__objects_1)
-libgstapplemedia_nonpublic_la_OBJECTS = \
- $(am_libgstapplemedia_nonpublic_la_OBJECTS)
+am_libgstfdkaac_la_OBJECTS = libgstfdkaac_la-plugin.lo \
+ libgstfdkaac_la-gstfdkaacenc.lo \
+ libgstfdkaac_la-gstfdkaacdec.lo
+libgstfdkaac_la_OBJECTS = $(am_libgstfdkaac_la_OBJECTS)
AM_V_lt = $(am__v_lt_@AM_V@)
am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
am__v_lt_0 = --silent
am__v_lt_1 =
-libgstapplemedia_nonpublic_la_LINK = $(LIBTOOL) $(AM_V_lt) \
- $(libgstapplemedia_nonpublic_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
- --mode=link $(OBJCLD) \
- $(libgstapplemedia_nonpublic_la_OBJCFLAGS) $(OBJCFLAGS) \
- $(libgstapplemedia_nonpublic_la_LDFLAGS) $(LDFLAGS) -o $@
+libgstfdkaac_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+ $(libgstfdkaac_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link \
+ $(CCLD) $(libgstfdkaac_la_CFLAGS) $(CFLAGS) \
+ $(libgstfdkaac_la_LDFLAGS) $(LDFLAGS) -o $@
AM_V_P = $(am__v_P_@AM_V@)
am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
am__v_P_0 = false
@@ -233,26 +211,8 @@
am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
am__v_CCLD_0 = @echo " CCLD " $@;
am__v_CCLD_1 =
-OBJCCOMPILE = $(OBJC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
- $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_OBJCFLAGS) $(OBJCFLAGS)
-LTOBJCCOMPILE = $(LIBTOOL) $(AM_V_lt) $(AM_LIBTOOLFLAGS) \
- $(LIBTOOLFLAGS) --mode=compile $(OBJC) $(DEFS) \
- $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
- $(AM_OBJCFLAGS) $(OBJCFLAGS)
-AM_V_OBJC = $(am__v_OBJC_@AM_V@)
-am__v_OBJC_ = $(am__v_OBJC_@AM_DEFAULT_V@)
-am__v_OBJC_0 = @echo " OBJC " $@;
-am__v_OBJC_1 =
-OBJCLD = $(OBJC)
-OBJCLINK = $(LIBTOOL) $(AM_V_lt) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
- --mode=link $(OBJCLD) $(AM_OBJCFLAGS) $(OBJCFLAGS) \
- $(AM_LDFLAGS) $(LDFLAGS) -o $@
-AM_V_OBJCLD = $(am__v_OBJCLD_@AM_V@)
-am__v_OBJCLD_ = $(am__v_OBJCLD_@AM_DEFAULT_V@)
-am__v_OBJCLD_0 = @echo " OBJCLD " $@;
-am__v_OBJCLD_1 =
-SOURCES = $(libgstapplemedia_nonpublic_la_SOURCES)
-DIST_SOURCES = $(am__libgstapplemedia_nonpublic_la_SOURCES_DIST)
+SOURCES = $(libgstfdkaac_la_SOURCES)
+DIST_SOURCES = $(libgstfdkaac_la_SOURCES)
am__can_run_installinfo = \
case $$AM_UPDATE_INFO_DIR in \
n|no|NO) false;; \
@@ -367,6 +327,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -416,6 +378,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
@@ -823,64 +787,23 @@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
wayland_scanner = @wayland_scanner@
-plugin_LTLIBRARIES = libgstapplemedia_nonpublic.la
-libgstapplemedia_nonpublic_la_SOURCES = plugin.m bufferfactory.m \
- corevideobuffer.c coremediabuffer.c cvapi.c cmapi.c \
- coremediactx.c dynapi.c $(am__append_2)
-libgstapplemedia_nonpublic_la_CPPFLAGS = \
- -Dgst_dyn_api_get_type=gst_dyn_api_priv_get_type \
- -Dgst_dyn_api_debug=gst_dyn_api_priv_debug \
- -Dgst_dyn_api_new=gst_dyn_api_priv_new \
- -Dgst_core_media_buffer_new=gst_core_media_buffer_priv_new \
- -Dgst_core_media_buffer_get_type=gst_core_media_buffer_priv_get_type \
- -Dgst_core_media_buffer_get_pixel_buffer=gst_core_media_buffer_priv_get_pixel_buffer\
- -Dgst_core_video_buffer_new=gst_core_video_buffer_priv_new \
- -Dgst_core_video_buffer_get_type=gst_core_video_buffer_priv_get_type \
- -Dgst_core_media_ctx_new=gst_core_media_ctx_priv_new \
- -Dgst_core_media_ctx_get_type=gst_core_media_ctx_priv_get_type
+plugin_LTLIBRARIES = libgstfdkaac.la
+libgstfdkaac_la_SOURCES = plugin.c gstfdkaacenc.c gstfdkaacdec.c
+libgstfdkaac_la_CFLAGS = -DGST_USE_UNSTABLE_API \
+ $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) \
+ $(GST_CFLAGS) $(FDK_AAC_CFLAGS)
-libgstapplemedia_nonpublic_la_CFLAGS = \
- $(GST_CFLAGS) \
- $(GST_BASE_CFLAGS) \
- $(GST_PLUGINS_BASE_CFLAGS)
+libgstfdkaac_la_LIBADD = $(GST_PLUGINS_BASE_LIBS) \
+ -lgstaudio-@GST_API_VERSION@ -lgstpbutils-@GST_API_VERSION@ \
+ $(GST_BASE_LIBS) $(FDK_AAC_LIBS)
-libgstapplemedia_nonpublic_la_OBJCFLAGS = $(GST_OBJCFLAGS) \
- $(GST_BASE_CFLAGS) $(GST_PLUGINS_BASE_CFLAGS) $(am__append_1)
-libgstapplemedia_nonpublic_la_LIBADD = \
- $(GST_BASE_LIBS) \
- $(GST_PLUGINS_BASE_LIBS) \
- -lgstvideo-$(GST_API_VERSION) \
- $(GMODULE_NO_EXPORT_LIBS)
-
-libgstapplemedia_nonpublic_la_LIBTOOLFLAGS = $(GST_PLUGIN_LIBTOOLFLAGS) --tag=CC
-libgstapplemedia_nonpublic_la_LDFLAGS = \
- $(GST_PLUGIN_LDFLAGS) \
- $(GST_BASE_LDFLAGS) \
- $(GST_PLUGINS_BASE_LDFLAGS) \
- -Wl,-framework -Wl,Foundation \
- -Wl,-framework -Wl,CoreFoundation \
- -Wl,-framework -Wl,CoreVideo
-
-noinst_HEADERS = \
- miovideosrc.h \
- miovideodevice.h \
- celvideosrc.h \
- bufferfactory.h \
- corevideobuffer.h \
- coremediabuffer.h \
- coremediactx.h \
- mioapi.h \
- mtapi.h \
- celapi.h \
- cvapi.h \
- cmapi.h \
- dynapi.h \
- dynapi-internal.h
-
+libgstfdkaac_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
+libgstfdkaac_la_LIBTOOLFLAGS = $(GST_PLUGIN_LIBTOOLFLAGS)
+noinst_HEADERS = gstfdkaacenc.h gstfdkaacdec.h
all: all-am
.SUFFIXES:
-.SUFFIXES: .c .lo .m .o .obj
+.SUFFIXES: .c .lo .o .obj
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
@@ -890,9 +813,9 @@
exit 1;; \
esac; \
done; \
- echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu sys/applemedia-nonpublic/Makefile'; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu ext/fdkaac/Makefile'; \
$(am__cd) $(top_srcdir) && \
- $(AUTOMAKE) --gnu sys/applemedia-nonpublic/Makefile
+ $(AUTOMAKE) --gnu ext/fdkaac/Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
*config.status*) \
@@ -946,8 +869,8 @@
rm -f $${locs}; \
}
-libgstapplemedia_nonpublic.la: $(libgstapplemedia_nonpublic_la_OBJECTS) $(libgstapplemedia_nonpublic_la_DEPENDENCIES) $(EXTRA_libgstapplemedia_nonpublic_la_DEPENDENCIES)
- $(AM_V_OBJCLD)$(libgstapplemedia_nonpublic_la_LINK) -rpath $(plugindir) $(libgstapplemedia_nonpublic_la_OBJECTS) $(libgstapplemedia_nonpublic_la_LIBADD) $(LIBS)
+libgstfdkaac.la: $(libgstfdkaac_la_OBJECTS) $(libgstfdkaac_la_DEPENDENCIES) $(EXTRA_libgstfdkaac_la_DEPENDENCIES)
+ $(AM_V_CCLD)$(libgstfdkaac_la_LINK) -rpath $(plugindir) $(libgstfdkaac_la_OBJECTS) $(libgstfdkaac_la_LIBADD) $(LIBS)
mostlyclean-compile:
-rm -f *.$(OBJEXT)
@@ -955,15 +878,9 @@
distclean-compile:
-rm -f *.tab.c
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstapplemedia_nonpublic_la-bufferfactory.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstapplemedia_nonpublic_la-cmapi.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstapplemedia_nonpublic_la-coremediabuffer.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstapplemedia_nonpublic_la-coremediactx.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstapplemedia_nonpublic_la-corevideobuffer.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstapplemedia_nonpublic_la-cvapi.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstapplemedia_nonpublic_la-dynapi.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstapplemedia_nonpublic_la-mioapi.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstapplemedia_nonpublic_la-plugin.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstfdkaac_la-gstfdkaacdec.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstfdkaac_la-gstfdkaacenc.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstfdkaac_la-plugin.Plo@am__quote@
.c.o:
@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
@@ -989,92 +906,26 @@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
-libgstapplemedia_nonpublic_la-corevideobuffer.lo: corevideobuffer.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstapplemedia_nonpublic_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgstapplemedia_nonpublic_la_CPPFLAGS) $(CPPFLAGS) $(libgstapplemedia_nonpublic_la_CFLAGS) $(CFLAGS) -MT libgstapplemedia_nonpublic_la-corevideobuffer.lo -MD -MP -MF $(DEPDIR)/libgstapplemedia_nonpublic_la-corevideobuffer.Tpo -c -o libgstapplemedia_nonpublic_la-corevideobuffer.lo `test -f 'corevideobuffer.c' || echo '$(srcdir)/'`corevideobuffer.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstapplemedia_nonpublic_la-corevideobuffer.Tpo $(DEPDIR)/libgstapplemedia_nonpublic_la-corevideobuffer.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='corevideobuffer.c' object='libgstapplemedia_nonpublic_la-corevideobuffer.lo' libtool=yes @AMDEPBACKSLASH@
+libgstfdkaac_la-plugin.lo: plugin.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstfdkaac_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstfdkaac_la_CFLAGS) $(CFLAGS) -MT libgstfdkaac_la-plugin.lo -MD -MP -MF $(DEPDIR)/libgstfdkaac_la-plugin.Tpo -c -o libgstfdkaac_la-plugin.lo `test -f 'plugin.c' || echo '$(srcdir)/'`plugin.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstfdkaac_la-plugin.Tpo $(DEPDIR)/libgstfdkaac_la-plugin.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='plugin.c' object='libgstfdkaac_la-plugin.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstapplemedia_nonpublic_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgstapplemedia_nonpublic_la_CPPFLAGS) $(CPPFLAGS) $(libgstapplemedia_nonpublic_la_CFLAGS) $(CFLAGS) -c -o libgstapplemedia_nonpublic_la-corevideobuffer.lo `test -f 'corevideobuffer.c' || echo '$(srcdir)/'`corevideobuffer.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstfdkaac_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstfdkaac_la_CFLAGS) $(CFLAGS) -c -o libgstfdkaac_la-plugin.lo `test -f 'plugin.c' || echo '$(srcdir)/'`plugin.c
-libgstapplemedia_nonpublic_la-coremediabuffer.lo: coremediabuffer.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstapplemedia_nonpublic_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgstapplemedia_nonpublic_la_CPPFLAGS) $(CPPFLAGS) $(libgstapplemedia_nonpublic_la_CFLAGS) $(CFLAGS) -MT libgstapplemedia_nonpublic_la-coremediabuffer.lo -MD -MP -MF $(DEPDIR)/libgstapplemedia_nonpublic_la-coremediabuffer.Tpo -c -o libgstapplemedia_nonpublic_la-coremediabuffer.lo `test -f 'coremediabuffer.c' || echo '$(srcdir)/'`coremediabuffer.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstapplemedia_nonpublic_la-coremediabuffer.Tpo $(DEPDIR)/libgstapplemedia_nonpublic_la-coremediabuffer.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='coremediabuffer.c' object='libgstapplemedia_nonpublic_la-coremediabuffer.lo' libtool=yes @AMDEPBACKSLASH@
+libgstfdkaac_la-gstfdkaacenc.lo: gstfdkaacenc.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstfdkaac_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstfdkaac_la_CFLAGS) $(CFLAGS) -MT libgstfdkaac_la-gstfdkaacenc.lo -MD -MP -MF $(DEPDIR)/libgstfdkaac_la-gstfdkaacenc.Tpo -c -o libgstfdkaac_la-gstfdkaacenc.lo `test -f 'gstfdkaacenc.c' || echo '$(srcdir)/'`gstfdkaacenc.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstfdkaac_la-gstfdkaacenc.Tpo $(DEPDIR)/libgstfdkaac_la-gstfdkaacenc.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstfdkaacenc.c' object='libgstfdkaac_la-gstfdkaacenc.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstapplemedia_nonpublic_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgstapplemedia_nonpublic_la_CPPFLAGS) $(CPPFLAGS) $(libgstapplemedia_nonpublic_la_CFLAGS) $(CFLAGS) -c -o libgstapplemedia_nonpublic_la-coremediabuffer.lo `test -f 'coremediabuffer.c' || echo '$(srcdir)/'`coremediabuffer.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstfdkaac_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstfdkaac_la_CFLAGS) $(CFLAGS) -c -o libgstfdkaac_la-gstfdkaacenc.lo `test -f 'gstfdkaacenc.c' || echo '$(srcdir)/'`gstfdkaacenc.c
-libgstapplemedia_nonpublic_la-cvapi.lo: cvapi.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstapplemedia_nonpublic_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgstapplemedia_nonpublic_la_CPPFLAGS) $(CPPFLAGS) $(libgstapplemedia_nonpublic_la_CFLAGS) $(CFLAGS) -MT libgstapplemedia_nonpublic_la-cvapi.lo -MD -MP -MF $(DEPDIR)/libgstapplemedia_nonpublic_la-cvapi.Tpo -c -o libgstapplemedia_nonpublic_la-cvapi.lo `test -f 'cvapi.c' || echo '$(srcdir)/'`cvapi.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstapplemedia_nonpublic_la-cvapi.Tpo $(DEPDIR)/libgstapplemedia_nonpublic_la-cvapi.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='cvapi.c' object='libgstapplemedia_nonpublic_la-cvapi.lo' libtool=yes @AMDEPBACKSLASH@
+libgstfdkaac_la-gstfdkaacdec.lo: gstfdkaacdec.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstfdkaac_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstfdkaac_la_CFLAGS) $(CFLAGS) -MT libgstfdkaac_la-gstfdkaacdec.lo -MD -MP -MF $(DEPDIR)/libgstfdkaac_la-gstfdkaacdec.Tpo -c -o libgstfdkaac_la-gstfdkaacdec.lo `test -f 'gstfdkaacdec.c' || echo '$(srcdir)/'`gstfdkaacdec.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstfdkaac_la-gstfdkaacdec.Tpo $(DEPDIR)/libgstfdkaac_la-gstfdkaacdec.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstfdkaacdec.c' object='libgstfdkaac_la-gstfdkaacdec.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstapplemedia_nonpublic_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgstapplemedia_nonpublic_la_CPPFLAGS) $(CPPFLAGS) $(libgstapplemedia_nonpublic_la_CFLAGS) $(CFLAGS) -c -o libgstapplemedia_nonpublic_la-cvapi.lo `test -f 'cvapi.c' || echo '$(srcdir)/'`cvapi.c
-
-libgstapplemedia_nonpublic_la-cmapi.lo: cmapi.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstapplemedia_nonpublic_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgstapplemedia_nonpublic_la_CPPFLAGS) $(CPPFLAGS) $(libgstapplemedia_nonpublic_la_CFLAGS) $(CFLAGS) -MT libgstapplemedia_nonpublic_la-cmapi.lo -MD -MP -MF $(DEPDIR)/libgstapplemedia_nonpublic_la-cmapi.Tpo -c -o libgstapplemedia_nonpublic_la-cmapi.lo `test -f 'cmapi.c' || echo '$(srcdir)/'`cmapi.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstapplemedia_nonpublic_la-cmapi.Tpo $(DEPDIR)/libgstapplemedia_nonpublic_la-cmapi.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='cmapi.c' object='libgstapplemedia_nonpublic_la-cmapi.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstapplemedia_nonpublic_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgstapplemedia_nonpublic_la_CPPFLAGS) $(CPPFLAGS) $(libgstapplemedia_nonpublic_la_CFLAGS) $(CFLAGS) -c -o libgstapplemedia_nonpublic_la-cmapi.lo `test -f 'cmapi.c' || echo '$(srcdir)/'`cmapi.c
-
-libgstapplemedia_nonpublic_la-coremediactx.lo: coremediactx.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstapplemedia_nonpublic_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgstapplemedia_nonpublic_la_CPPFLAGS) $(CPPFLAGS) $(libgstapplemedia_nonpublic_la_CFLAGS) $(CFLAGS) -MT libgstapplemedia_nonpublic_la-coremediactx.lo -MD -MP -MF $(DEPDIR)/libgstapplemedia_nonpublic_la-coremediactx.Tpo -c -o libgstapplemedia_nonpublic_la-coremediactx.lo `test -f 'coremediactx.c' || echo '$(srcdir)/'`coremediactx.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstapplemedia_nonpublic_la-coremediactx.Tpo $(DEPDIR)/libgstapplemedia_nonpublic_la-coremediactx.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='coremediactx.c' object='libgstapplemedia_nonpublic_la-coremediactx.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstapplemedia_nonpublic_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgstapplemedia_nonpublic_la_CPPFLAGS) $(CPPFLAGS) $(libgstapplemedia_nonpublic_la_CFLAGS) $(CFLAGS) -c -o libgstapplemedia_nonpublic_la-coremediactx.lo `test -f 'coremediactx.c' || echo '$(srcdir)/'`coremediactx.c
-
-libgstapplemedia_nonpublic_la-dynapi.lo: dynapi.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstapplemedia_nonpublic_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgstapplemedia_nonpublic_la_CPPFLAGS) $(CPPFLAGS) $(libgstapplemedia_nonpublic_la_CFLAGS) $(CFLAGS) -MT libgstapplemedia_nonpublic_la-dynapi.lo -MD -MP -MF $(DEPDIR)/libgstapplemedia_nonpublic_la-dynapi.Tpo -c -o libgstapplemedia_nonpublic_la-dynapi.lo `test -f 'dynapi.c' || echo '$(srcdir)/'`dynapi.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstapplemedia_nonpublic_la-dynapi.Tpo $(DEPDIR)/libgstapplemedia_nonpublic_la-dynapi.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='dynapi.c' object='libgstapplemedia_nonpublic_la-dynapi.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstapplemedia_nonpublic_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgstapplemedia_nonpublic_la_CPPFLAGS) $(CPPFLAGS) $(libgstapplemedia_nonpublic_la_CFLAGS) $(CFLAGS) -c -o libgstapplemedia_nonpublic_la-dynapi.lo `test -f 'dynapi.c' || echo '$(srcdir)/'`dynapi.c
-
-libgstapplemedia_nonpublic_la-mioapi.lo: mioapi.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstapplemedia_nonpublic_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgstapplemedia_nonpublic_la_CPPFLAGS) $(CPPFLAGS) $(libgstapplemedia_nonpublic_la_CFLAGS) $(CFLAGS) -MT libgstapplemedia_nonpublic_la-mioapi.lo -MD -MP -MF $(DEPDIR)/libgstapplemedia_nonpublic_la-mioapi.Tpo -c -o libgstapplemedia_nonpublic_la-mioapi.lo `test -f 'mioapi.c' || echo '$(srcdir)/'`mioapi.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstapplemedia_nonpublic_la-mioapi.Tpo $(DEPDIR)/libgstapplemedia_nonpublic_la-mioapi.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mioapi.c' object='libgstapplemedia_nonpublic_la-mioapi.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstapplemedia_nonpublic_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgstapplemedia_nonpublic_la_CPPFLAGS) $(CPPFLAGS) $(libgstapplemedia_nonpublic_la_CFLAGS) $(CFLAGS) -c -o libgstapplemedia_nonpublic_la-mioapi.lo `test -f 'mioapi.c' || echo '$(srcdir)/'`mioapi.c
-
-.m.o:
-@am__fastdepOBJC_TRUE@ $(AM_V_OBJC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
-@am__fastdepOBJC_TRUE@ $(OBJCCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
-@am__fastdepOBJC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po
-@AMDEP_TRUE@@am__fastdepOBJC_FALSE@ $(AM_V_OBJC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepOBJC_FALSE@ DEPDIR=$(DEPDIR) $(OBJCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepOBJC_FALSE@ $(AM_V_OBJC@am__nodep@)$(OBJCCOMPILE) -c -o $@ $<
-
-.m.obj:
-@am__fastdepOBJC_TRUE@ $(AM_V_OBJC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\
-@am__fastdepOBJC_TRUE@ $(OBJCCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\
-@am__fastdepOBJC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po
-@AMDEP_TRUE@@am__fastdepOBJC_FALSE@ $(AM_V_OBJC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepOBJC_FALSE@ DEPDIR=$(DEPDIR) $(OBJCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepOBJC_FALSE@ $(AM_V_OBJC@am__nodep@)$(OBJCCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
-
-.m.lo:
-@am__fastdepOBJC_TRUE@ $(AM_V_OBJC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\
-@am__fastdepOBJC_TRUE@ $(LTOBJCCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
-@am__fastdepOBJC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo
-@AMDEP_TRUE@@am__fastdepOBJC_FALSE@ $(AM_V_OBJC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepOBJC_FALSE@ DEPDIR=$(DEPDIR) $(OBJCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepOBJC_FALSE@ $(AM_V_OBJC@am__nodep@)$(LTOBJCCOMPILE) -c -o $@ $<
-
-libgstapplemedia_nonpublic_la-plugin.lo: plugin.m
-@am__fastdepOBJC_TRUE@ $(AM_V_OBJC)$(LIBTOOL) $(AM_V_lt) $(libgstapplemedia_nonpublic_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(OBJC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgstapplemedia_nonpublic_la_CPPFLAGS) $(CPPFLAGS) $(libgstapplemedia_nonpublic_la_OBJCFLAGS) $(OBJCFLAGS) -MT libgstapplemedia_nonpublic_la-plugin.lo -MD -MP -MF $(DEPDIR)/libgstapplemedia_nonpublic_la-plugin.Tpo -c -o libgstapplemedia_nonpublic_la-plugin.lo `test -f 'plugin.m' || echo '$(srcdir)/'`plugin.m
-@am__fastdepOBJC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstapplemedia_nonpublic_la-plugin.Tpo $(DEPDIR)/libgstapplemedia_nonpublic_la-plugin.Plo
-@AMDEP_TRUE@@am__fastdepOBJC_FALSE@ $(AM_V_OBJC)source='plugin.m' object='libgstapplemedia_nonpublic_la-plugin.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepOBJC_FALSE@ DEPDIR=$(DEPDIR) $(OBJCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepOBJC_FALSE@ $(AM_V_OBJC@am__nodep@)$(LIBTOOL) $(AM_V_lt) $(libgstapplemedia_nonpublic_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(OBJC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgstapplemedia_nonpublic_la_CPPFLAGS) $(CPPFLAGS) $(libgstapplemedia_nonpublic_la_OBJCFLAGS) $(OBJCFLAGS) -c -o libgstapplemedia_nonpublic_la-plugin.lo `test -f 'plugin.m' || echo '$(srcdir)/'`plugin.m
-
-libgstapplemedia_nonpublic_la-bufferfactory.lo: bufferfactory.m
-@am__fastdepOBJC_TRUE@ $(AM_V_OBJC)$(LIBTOOL) $(AM_V_lt) $(libgstapplemedia_nonpublic_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(OBJC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgstapplemedia_nonpublic_la_CPPFLAGS) $(CPPFLAGS) $(libgstapplemedia_nonpublic_la_OBJCFLAGS) $(OBJCFLAGS) -MT libgstapplemedia_nonpublic_la-bufferfactory.lo -MD -MP -MF $(DEPDIR)/libgstapplemedia_nonpublic_la-bufferfactory.Tpo -c -o libgstapplemedia_nonpublic_la-bufferfactory.lo `test -f 'bufferfactory.m' || echo '$(srcdir)/'`bufferfactory.m
-@am__fastdepOBJC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstapplemedia_nonpublic_la-bufferfactory.Tpo $(DEPDIR)/libgstapplemedia_nonpublic_la-bufferfactory.Plo
-@AMDEP_TRUE@@am__fastdepOBJC_FALSE@ $(AM_V_OBJC)source='bufferfactory.m' object='libgstapplemedia_nonpublic_la-bufferfactory.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepOBJC_FALSE@ DEPDIR=$(DEPDIR) $(OBJCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepOBJC_FALSE@ $(AM_V_OBJC@am__nodep@)$(LIBTOOL) $(AM_V_lt) $(libgstapplemedia_nonpublic_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(OBJC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgstapplemedia_nonpublic_la_CPPFLAGS) $(CPPFLAGS) $(libgstapplemedia_nonpublic_la_OBJCFLAGS) $(OBJCFLAGS) -c -o libgstapplemedia_nonpublic_la-bufferfactory.lo `test -f 'bufferfactory.m' || echo '$(srcdir)/'`bufferfactory.m
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstfdkaac_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstfdkaac_la_CFLAGS) $(CFLAGS) -c -o libgstfdkaac_la-gstfdkaacdec.lo `test -f 'gstfdkaacdec.c' || echo '$(srcdir)/'`gstfdkaacdec.c
mostlyclean-libtool:
-rm -f *.lo
diff --git a/ext/fdkaac/gstfdkaacdec.c b/ext/fdkaac/gstfdkaacdec.c
new file mode 100644
index 0000000..181bd22
--- /dev/null
+++ b/ext/fdkaac/gstfdkaacdec.c
@@ -0,0 +1,438 @@
+/*
+ * Copyright (C) 2016 Sebastian Dröge <sebastian@centricular.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "gstfdkaacdec.h"
+
+#include <gst/pbutils/pbutils.h>
+
+#include <string.h>
+
+/* TODO:
+ * - LOAS / LATM support
+ * - Error concealment
+ */
+
+static GstStaticPadTemplate sink_template = GST_STATIC_PAD_TEMPLATE ("sink",
+ GST_PAD_SINK,
+ GST_PAD_ALWAYS,
+ GST_STATIC_CAPS ("audio/mpeg, "
+ "mpegversion = (int) 4, "
+ "stream-format = (string) { adts, adif, raw }")
+ );
+
+static GstStaticPadTemplate src_template = GST_STATIC_PAD_TEMPLATE ("src",
+ GST_PAD_SRC,
+ GST_PAD_ALWAYS,
+ GST_STATIC_CAPS ("audio/x-raw, "
+ "format = (string) " GST_AUDIO_NE (S16) ", "
+ "layout = (string) interleaved, "
+ "rate = (int) [8000, 96000], " "channels = (int) [1, 8]")
+ );
+
+GST_DEBUG_CATEGORY_STATIC (gst_fdkaacdec_debug);
+#define GST_CAT_DEFAULT gst_fdkaacdec_debug
+
+static gboolean gst_fdkaacdec_start (GstAudioDecoder * dec);
+static gboolean gst_fdkaacdec_stop (GstAudioDecoder * dec);
+static gboolean gst_fdkaacdec_set_format (GstAudioDecoder * dec,
+ GstCaps * caps);
+static GstFlowReturn gst_fdkaacdec_handle_frame (GstAudioDecoder * dec,
+ GstBuffer * in_buf);
+static void gst_fdkaacdec_flush (GstAudioDecoder * dec, gboolean hard);
+
+G_DEFINE_TYPE (GstFdkAacDec, gst_fdkaacdec, GST_TYPE_AUDIO_DECODER);
+
+static gboolean
+gst_fdkaacdec_start (GstAudioDecoder * dec)
+{
+ GstFdkAacDec *self = GST_FDKAACDEC (dec);
+
+ GST_DEBUG_OBJECT (self, "start");
+
+ return TRUE;
+}
+
+static gboolean
+gst_fdkaacdec_stop (GstAudioDecoder * dec)
+{
+ GstFdkAacDec *self = GST_FDKAACDEC (dec);
+
+ GST_DEBUG_OBJECT (self, "stop");
+
+ g_free (self->decode_buffer);
+ self->decode_buffer = NULL;
+
+ if (self->dec)
+ aacDecoder_Close (self->dec);
+ self->dec = NULL;
+
+ return TRUE;
+}
+
+static gboolean
+gst_fdkaacdec_set_format (GstAudioDecoder * dec, GstCaps * caps)
+{
+ GstFdkAacDec *self = GST_FDKAACDEC (dec);
+ TRANSPORT_TYPE transport_format;
+ GstStructure *s;
+ const gchar *stream_format;
+ AAC_DECODER_ERROR err;
+
+ if (self->dec) {
+ /* drain */
+ gst_fdkaacdec_handle_frame (dec, NULL);
+ aacDecoder_Close (self->dec);
+ self->dec = NULL;
+ }
+
+ s = gst_caps_get_structure (caps, 0);
+ stream_format = gst_structure_get_string (s, "stream-format");
+ if (strcmp (stream_format, "raw") == 0) {
+ transport_format = TT_MP4_RAW;
+ } else if (strcmp (stream_format, "adif") == 0) {
+ transport_format = TT_MP4_ADIF;
+ } else if (strcmp (stream_format, "adts") == 0) {
+ transport_format = TT_MP4_ADTS;
+ } else {
+ g_assert_not_reached ();
+ }
+
+ self->dec = aacDecoder_Open (transport_format, 1);
+ if (!self->dec) {
+ GST_ERROR_OBJECT (self, "Failed to open decoder");
+ return FALSE;
+ }
+
+ if (transport_format == TT_MP4_RAW) {
+ GstBuffer *codec_data = NULL;
+ GstMapInfo map;
+ guint8 *data;
+ guint size;
+
+ gst_structure_get (s, "codec_data", GST_TYPE_BUFFER, &codec_data, NULL);
+
+ if (!codec_data) {
+ GST_ERROR_OBJECT (self, "Raw AAC without codec_data not supported");
+ return FALSE;
+ }
+
+ gst_buffer_map (codec_data, &map, GST_MAP_READ);
+ data = map.data;
+ size = map.size;
+
+ if ((err = aacDecoder_ConfigRaw (self->dec, &data, &size)) != AAC_DEC_OK) {
+ gst_buffer_unmap (codec_data, &map);
+ GST_ERROR_OBJECT (self, "Invalid codec_data: %d", err);
+ return FALSE;
+ }
+
+ gst_buffer_unmap (codec_data, &map);
+ }
+
+ if ((err =
+ aacDecoder_SetParam (self->dec, AAC_PCM_OUTPUT_CHANNEL_MAPPING,
+ 0)) != AAC_DEC_OK) {
+ GST_ERROR_OBJECT (self, "Failed to set output channel mapping: %d", err);
+ return FALSE;
+ }
+
+ if ((err =
+ aacDecoder_SetParam (self->dec, AAC_PCM_OUTPUT_INTERLEAVED,
+ 0)) != AAC_DEC_OK) {
+ GST_ERROR_OBJECT (self, "Failed to set output channel mapping: %d", err);
+ return FALSE;
+ }
+
+ /* 8 channels * 2 bytes per sample * 2048 samples */
+ if (!self->decode_buffer) {
+ self->decode_buffer_size = 8 * 2 * 2048;
+ self->decode_buffer = g_malloc (self->decode_buffer_size);
+ }
+
+ return TRUE;
+}
+
+static GstFlowReturn
+gst_fdkaacdec_handle_frame (GstAudioDecoder * dec, GstBuffer * inbuf)
+{
+ GstFdkAacDec *self = GST_FDKAACDEC (dec);
+ GstFlowReturn ret = GST_FLOW_OK;
+ GstBuffer *outbuf;
+ GstMapInfo imap;
+ AAC_DECODER_ERROR err;
+ guint size, valid;
+ CStreamInfo *stream_info;
+ GstAudioInfo info;
+ guint flags = 0, i;
+ GstAudioChannelPosition pos[64], gst_pos[64];
+ gboolean need_reorder;
+
+ if (inbuf) {
+ gst_buffer_map (inbuf, &imap, GST_MAP_READ);
+ valid = size = imap.size;
+
+ if ((err =
+ aacDecoder_Fill (self->dec, (guint8 **) & imap.data, &size,
+ &valid)) != AAC_DEC_OK) {
+ GST_AUDIO_DECODER_ERROR (self, 1, STREAM, DECODE, (NULL),
+ ("filling error: %d", err), ret);
+ gst_buffer_unmap (inbuf, &imap);
+ goto out;
+ }
+ gst_buffer_unmap (inbuf, &imap);
+
+ if (GST_BUFFER_IS_DISCONT (inbuf))
+ flags |= AACDEC_INTR;
+ } else {
+ flags |= AACDEC_FLUSH;
+ }
+
+ if ((err =
+ aacDecoder_DecodeFrame (self->dec, (gint16 *) self->decode_buffer,
+ self->decode_buffer_size, flags)) != AAC_DEC_OK) {
+ GST_AUDIO_DECODER_ERROR (self, 1, STREAM, DECODE, (NULL),
+ ("decoding error: %d", err), ret);
+ goto out;
+ }
+
+ stream_info = aacDecoder_GetStreamInfo (self->dec);
+ if (!stream_info) {
+ GST_AUDIO_DECODER_ERROR (self, 1, STREAM, DECODE, (NULL),
+ ("failed to get stream info"), ret);
+ goto out;
+ }
+
+ /* FIXME: Don't recalculate this on every buffer */
+ if (stream_info->numChannels == 1) {
+ pos[0] = GST_AUDIO_CHANNEL_POSITION_MONO;
+ } else {
+ gint n_front = 0, n_side = 0, n_back = 0, n_lfe = 0;
+
+ /* FIXME: Can this be simplified somehow? */
+ for (i = 0; i < stream_info->numChannels; i++) {
+ if (stream_info->pChannelType[i] == ACT_FRONT) {
+ n_front++;
+ } else if (stream_info->pChannelType[i] == ACT_SIDE) {
+ n_side++;
+ } else if (stream_info->pChannelType[i] == ACT_BACK) {
+ n_back++;
+ } else if (stream_info->pChannelType[i] == ACT_LFE) {
+ n_lfe++;
+ } else {
+ GST_ERROR_OBJECT (self, "Channel type %d not supported",
+ stream_info->pChannelType[i]);
+ ret = GST_FLOW_NOT_NEGOTIATED;
+ goto out;
+ }
+ }
+
+ for (i = 0; i < stream_info->numChannels; i++) {
+ if (stream_info->pChannelType[i] == ACT_FRONT) {
+ if (stream_info->pChannelIndices[i] == 0) {
+ if (n_front & 1)
+ pos[i] = GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER;
+ else if (n_front > 2)
+ pos[i] = GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT_OF_CENTER;
+ else
+ pos[i] = GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT;
+ } else if (stream_info->pChannelIndices[i] == 1) {
+ if ((n_front & 1) && n_front > 3)
+ pos[i] = GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT_OF_CENTER;
+ else if (n_front & 1)
+ pos[i] = GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT;
+ else if (n_front > 2)
+ pos[i] = GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT_OF_CENTER;
+ else
+ pos[i] = GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT;
+ } else if (stream_info->pChannelIndices[i] == 2) {
+ if ((n_front & 1) && n_front > 3)
+ pos[i] = GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT_OF_CENTER;
+ else if (n_front & 1)
+ pos[i] = GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT;
+ else if (n_front > 2)
+ pos[i] = GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT;
+ else
+ g_assert_not_reached ();
+ } else if (stream_info->pChannelIndices[i] == 3) {
+ if ((n_front & 1) && n_front > 3)
+ pos[i] = GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT;
+ else if (n_front & 1)
+ g_assert_not_reached ();
+ else if (n_front > 2)
+ pos[i] = GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT;
+ else
+ g_assert_not_reached ();
+ } else if (stream_info->pChannelIndices[i] == 4) {
+ if ((n_front & 1) && n_front > 2)
+ pos[i] = GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT;
+ else if (n_front & 1)
+ g_assert_not_reached ();
+ else if (n_front > 2)
+ g_assert_not_reached ();
+ else
+ g_assert_not_reached ();
+ } else {
+ GST_ERROR_OBJECT (self, "Front channel index %d not supported",
+ stream_info->pChannelIndices[i]);
+ ret = GST_FLOW_NOT_NEGOTIATED;
+ goto out;
+ }
+ } else if (stream_info->pChannelType[i] == ACT_SIDE) {
+ if (n_side & 1) {
+ GST_ERROR_OBJECT (self, "Odd number of side channels not supported");
+ ret = GST_FLOW_NOT_NEGOTIATED;
+ goto out;
+ } else if (stream_info->pChannelIndices[i] == 0) {
+ pos[i] = GST_AUDIO_CHANNEL_POSITION_SIDE_LEFT;
+ } else if (stream_info->pChannelIndices[i] == 1) {
+ pos[i] = GST_AUDIO_CHANNEL_POSITION_SIDE_RIGHT;
+ } else {
+ GST_ERROR_OBJECT (self, "Side channel index %d not supported",
+ stream_info->pChannelIndices[i]);
+ ret = GST_FLOW_NOT_NEGOTIATED;
+ goto out;
+ }
+ } else if (stream_info->pChannelType[i] == ACT_BACK) {
+ if (stream_info->pChannelIndices[i] == 0) {
+ if (n_back & 1)
+ pos[i] = GST_AUDIO_CHANNEL_POSITION_REAR_CENTER;
+ else
+ pos[i] = GST_AUDIO_CHANNEL_POSITION_REAR_LEFT;
+ } else if (stream_info->pChannelIndices[i] == 1) {
+ if (n_back & 1)
+ pos[i] = GST_AUDIO_CHANNEL_POSITION_REAR_LEFT;
+ else
+ pos[i] = GST_AUDIO_CHANNEL_POSITION_REAR_RIGHT;
+ } else if (stream_info->pChannelIndices[i] == 2) {
+ if (n_back & 1)
+ pos[i] = GST_AUDIO_CHANNEL_POSITION_REAR_RIGHT;
+ else
+ g_assert_not_reached ();
+ } else {
+ GST_ERROR_OBJECT (self, "Side channel index %d not supported",
+ stream_info->pChannelIndices[i]);
+ ret = GST_FLOW_NOT_NEGOTIATED;
+ goto out;
+ }
+ } else if (stream_info->pChannelType[i] == ACT_LFE) {
+ if (stream_info->pChannelIndices[i] == 0) {
+ pos[i] = GST_AUDIO_CHANNEL_POSITION_LFE1;
+ } else {
+ GST_ERROR_OBJECT (self, "LFE channel index %d not supported",
+ stream_info->pChannelIndices[i]);
+ ret = GST_FLOW_NOT_NEGOTIATED;
+ goto out;
+ }
+ } else {
+ GST_ERROR_OBJECT (self, "Channel type %d not supported",
+ stream_info->pChannelType[i]);
+ ret = GST_FLOW_NOT_NEGOTIATED;
+ goto out;
+ }
+ }
+ }
+
+ memcpy (gst_pos, pos,
+ sizeof (GstAudioChannelPosition) * stream_info->numChannels);
+ if (!gst_audio_channel_positions_to_valid_order (gst_pos,
+ stream_info->numChannels)) {
+ ret = GST_FLOW_NOT_NEGOTIATED;
+ goto out;
+ }
+
+ need_reorder =
+ memcmp (pos, gst_pos,
+ sizeof (GstAudioChannelPosition) * stream_info->numChannels) != 0;
+
+ gst_audio_info_set_format (&info, GST_AUDIO_FORMAT_S16,
+ stream_info->sampleRate, stream_info->numChannels, gst_pos);
+ if (!gst_audio_decoder_set_output_format (dec, &info)) {
+ GST_ERROR_OBJECT (self, "Failed to set output format");
+ ret = GST_FLOW_NOT_NEGOTIATED;
+ goto out;
+ }
+
+ outbuf =
+ gst_audio_decoder_allocate_output_buffer (dec,
+ stream_info->frameSize * GST_AUDIO_INFO_BPF (&info));
+ gst_buffer_fill (outbuf, 0, self->decode_buffer,
+ gst_buffer_get_size (outbuf));
+
+ if (need_reorder) {
+ gst_audio_buffer_reorder_channels (outbuf, GST_AUDIO_INFO_FORMAT (&info),
+ GST_AUDIO_INFO_CHANNELS (&info), pos, gst_pos);
+ }
+
+ ret = gst_audio_decoder_finish_frame (dec, outbuf, 1);
+
+out:
+
+ return ret;
+}
+
+static void
+gst_fdkaacdec_flush (GstAudioDecoder * dec, gboolean hard)
+{
+ GstFdkAacDec *self = GST_FDKAACDEC (dec);
+
+ if (self->dec) {
+ AAC_DECODER_ERROR err;
+ if ((err =
+ aacDecoder_DecodeFrame (self->dec, (gint16 *) self->decode_buffer,
+ self->decode_buffer_size, AACDEC_FLUSH)) != AAC_DEC_OK) {
+ GST_ERROR_OBJECT (self, "flushing error: %d", err);
+ }
+ }
+}
+
+static void
+gst_fdkaacdec_init (GstFdkAacDec * self)
+{
+ self->dec = NULL;
+
+ gst_audio_decoder_set_drainable (GST_AUDIO_DECODER (self), TRUE);
+ gst_audio_decoder_set_needs_format (GST_AUDIO_DECODER (self), TRUE);
+}
+
+static void
+gst_fdkaacdec_class_init (GstFdkAacDecClass * klass)
+{
+ GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
+ GstAudioDecoderClass *base_class = GST_AUDIO_DECODER_CLASS (klass);
+
+ base_class->start = GST_DEBUG_FUNCPTR (gst_fdkaacdec_start);
+ base_class->stop = GST_DEBUG_FUNCPTR (gst_fdkaacdec_stop);
+ base_class->set_format = GST_DEBUG_FUNCPTR (gst_fdkaacdec_set_format);
+ base_class->handle_frame = GST_DEBUG_FUNCPTR (gst_fdkaacdec_handle_frame);
+ base_class->flush = GST_DEBUG_FUNCPTR (gst_fdkaacdec_flush);
+
+ gst_element_class_add_static_pad_template (element_class, &sink_template);
+ gst_element_class_add_static_pad_template (element_class, &src_template);
+
+ gst_element_class_set_static_metadata (element_class, "FDK AAC audio decoder",
+ "Codec/Decoder/Audio", "FDK AAC audio decoder",
+ "Sebastian Dröge <sebastian@centricular.com>");
+
+ GST_DEBUG_CATEGORY_INIT (gst_fdkaacdec_debug, "fdkaacdec", 0,
+ "fdkaac decoder");
+}
diff --git a/ext/fdkaac/gstfdkaacdec.h b/ext/fdkaac/gstfdkaacdec.h
new file mode 100644
index 0000000..a805a2a
--- /dev/null
+++ b/ext/fdkaac/gstfdkaacdec.h
@@ -0,0 +1,60 @@
+/*
+ * Copyright (C) 2016 Sebastian Dröge <sebastian@centricular.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GST_FDKAACDEC_H__
+#define __GST_FDKAACDEC_H__
+
+#include <gst/gst.h>
+#include <gst/audio/gstaudiodecoder.h>
+
+#include <fdk-aac/aacdecoder_lib.h>
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_FDKAACDEC \
+ (gst_fdkaacdec_get_type())
+#define GST_FDKAACDEC(obj) \
+ (G_TYPE_CHECK_INSTANCE_CAST((obj), GST_TYPE_FDKAACDEC, GstFdkAacDec))
+#define GST_FDKAACDEC_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_CAST((klass), GST_TYPE_FDKAACDEC, GstFdkAacDecClass))
+#define GST_IS_FDKAACDEC(obj) \
+ (G_TYPE_CHECK_INSTANCE_TYPE((obj), GST_TYPE_FDKAACDEC))
+#define GST_IS_FDKAACDEC_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_TYPE((klass), GST_TYPE_FDKAACDEC))
+
+typedef struct _GstFdkAacDec GstFdkAacDec;
+typedef struct _GstFdkAacDecClass GstFdkAacDecClass;
+
+struct _GstFdkAacDec {
+ GstAudioDecoder element;
+
+ HANDLE_AACDECODER dec;
+ guint8 *decode_buffer;
+ gint decode_buffer_size;
+};
+
+struct _GstFdkAacDecClass {
+ GstAudioDecoderClass parent_class;
+};
+
+GType gst_fdkaacdec_get_type (void);
+
+G_END_DECLS
+
+#endif /* __GST_FDKAACDEC_H__ */
diff --git a/ext/fdkaac/gstfdkaacenc.c b/ext/fdkaac/gstfdkaacenc.c
new file mode 100644
index 0000000..3405ec1
--- /dev/null
+++ b/ext/fdkaac/gstfdkaacenc.c
@@ -0,0 +1,608 @@
+/*
+ * Copyright (C) 2016 Sebastian Dröge <sebastian@centricular.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "gstfdkaacenc.h"
+
+#include <gst/pbutils/pbutils.h>
+
+#include <string.h>
+
+/* TODO:
+ * - Add support for other AOT / profiles
+ * - Expose more properties, e.g. afterburner and vbr
+ * - Signal encoder delay
+ * - LOAS / LATM support
+ */
+
+enum
+{
+ PROP_0,
+ PROP_BITRATE
+};
+
+#define DEFAULT_BITRATE (0)
+
+#define SAMPLE_RATES " 8000, " \
+ "11025, " \
+ "12000, " \
+ "16000, " \
+ "22050, " \
+ "24000, " \
+ "32000, " \
+ "44100, " \
+ "48000, " \
+ "64000, " \
+ "88200, " \
+ "96000"
+
+static const struct
+{
+ gint channels;
+ CHANNEL_MODE mode;
+ GstAudioChannelPosition positions[8];
+} channel_layouts[] = {
+ {
+ 1, MODE_1, {
+ GST_AUDIO_CHANNEL_POSITION_MONO}}, {
+ 2, MODE_2, {
+ GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
+ GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT}}, {
+ 3, MODE_1_2, {
+ GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER,
+ GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
+ GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT}}, {
+ 3, MODE_2_1, {
+ GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
+ GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT,
+ GST_AUDIO_CHANNEL_POSITION_LFE1}}, {
+ 4, MODE_1_2_1, {
+ GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER,
+ GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
+ GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT,
+ GST_AUDIO_CHANNEL_POSITION_REAR_CENTER}}, {
+ 5, MODE_1_2_2, {
+ GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER,
+ GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
+ GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT,
+ GST_AUDIO_CHANNEL_POSITION_SIDE_LEFT,
+ GST_AUDIO_CHANNEL_POSITION_SIDE_RIGHT}}, {
+ 6, MODE_1_2_2_1, {
+ GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER,
+ GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
+ GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT,
+ GST_AUDIO_CHANNEL_POSITION_SIDE_LEFT,
+ GST_AUDIO_CHANNEL_POSITION_SIDE_RIGHT,
+ GST_AUDIO_CHANNEL_POSITION_LFE1}}, {
+ 8, MODE_7_1_REAR_SURROUND, {
+ GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER,
+ GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
+ GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT,
+ GST_AUDIO_CHANNEL_POSITION_SIDE_LEFT,
+ GST_AUDIO_CHANNEL_POSITION_SIDE_RIGHT,
+ GST_AUDIO_CHANNEL_POSITION_REAR_LEFT,
+ GST_AUDIO_CHANNEL_POSITION_REAR_RIGHT,
+ GST_AUDIO_CHANNEL_POSITION_LFE1}}, {
+ 8, MODE_7_1_FRONT_CENTER, {
+ GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER,
+ GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT_OF_CENTER,
+ GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT_OF_CENTER,
+ GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
+ GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT,
+ GST_AUDIO_CHANNEL_POSITION_SIDE_LEFT,
+ GST_AUDIO_CHANNEL_POSITION_SIDE_RIGHT,
+ GST_AUDIO_CHANNEL_POSITION_LFE1}}
+};
+
+static GstStaticPadTemplate sink_template = GST_STATIC_PAD_TEMPLATE ("sink",
+ GST_PAD_SINK,
+ GST_PAD_ALWAYS,
+ GST_STATIC_CAPS ("audio/x-raw, "
+ "format = (string) " GST_AUDIO_NE (S16) ", "
+ "layout = (string) interleaved, "
+ "rate = (int) { " SAMPLE_RATES " }, "
+ "channels = (int) {1, 2, 3, 4, 5, 6, 8}")
+ );
+
+static GstStaticPadTemplate src_template = GST_STATIC_PAD_TEMPLATE ("src",
+ GST_PAD_SRC,
+ GST_PAD_ALWAYS,
+ GST_STATIC_CAPS ("audio/mpeg, "
+ "mpegversion = (int) {2, 4}, "
+ "rate = (int) { " SAMPLE_RATES " }, "
+ "channels = (int) {1, 2, 3, 4, 5, 6, 8}, "
+ "stream-format = (string) { adts, adif, raw }, "
+ "base-profile = (string) lc")
+ );
+
+GST_DEBUG_CATEGORY_STATIC (gst_fdkaacenc_debug);
+#define GST_CAT_DEFAULT gst_fdkaacenc_debug
+
+static void gst_fdkaacenc_set_property (GObject * object, guint prop_id,
+ const GValue * value, GParamSpec * pspec);
+static void gst_fdkaacenc_get_property (GObject * object, guint prop_id,
+ GValue * value, GParamSpec * pspec);
+static gboolean gst_fdkaacenc_start (GstAudioEncoder * enc);
+static gboolean gst_fdkaacenc_stop (GstAudioEncoder * enc);
+static gboolean gst_fdkaacenc_set_format (GstAudioEncoder * enc,
+ GstAudioInfo * info);
+static GstFlowReturn gst_fdkaacenc_handle_frame (GstAudioEncoder * enc,
+ GstBuffer * in_buf);
+static GstCaps *gst_fdkaacenc_get_caps (GstAudioEncoder * enc,
+ GstCaps * filter);
+
+G_DEFINE_TYPE (GstFdkAacEnc, gst_fdkaacenc, GST_TYPE_AUDIO_ENCODER);
+
+static void
+gst_fdkaacenc_set_property (GObject * object, guint prop_id,
+ const GValue * value, GParamSpec * pspec)
+{
+ GstFdkAacEnc *self = GST_FDKAACENC (object);
+
+ switch (prop_id) {
+ case PROP_BITRATE:
+ self->bitrate = g_value_get_int (value);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+ return;
+}
+
+static void
+gst_fdkaacenc_get_property (GObject * object, guint prop_id,
+ GValue * value, GParamSpec * pspec)
+{
+ GstFdkAacEnc *self = GST_FDKAACENC (object);
+
+ switch (prop_id) {
+ case PROP_BITRATE:
+ g_value_set_int (value, self->bitrate);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+ return;
+}
+
+static gboolean
+gst_fdkaacenc_start (GstAudioEncoder * enc)
+{
+ GstFdkAacEnc *self = GST_FDKAACENC (enc);
+
+ GST_DEBUG_OBJECT (self, "start");
+
+ return TRUE;
+}
+
+static gboolean
+gst_fdkaacenc_stop (GstAudioEncoder * enc)
+{
+ GstFdkAacEnc *self = GST_FDKAACENC (enc);
+
+ GST_DEBUG_OBJECT (self, "stop");
+
+ if (self->enc)
+ aacEncClose (&self->enc);
+
+ return TRUE;
+}
+
+static GstCaps *
+gst_fdkaacenc_get_caps (GstAudioEncoder * enc, GstCaps * filter)
+{
+ GstCaps *res, *caps;
+ gint i;
+
+ caps = gst_caps_new_empty ();
+
+ for (i = 0; i < G_N_ELEMENTS (channel_layouts); i++) {
+ guint64 channel_mask;
+ GstCaps *tmp =
+ gst_caps_make_writable (gst_pad_get_pad_template_caps
+ (GST_AUDIO_ENCODER_SINK_PAD (enc)));
+
+ if (channel_layouts[i].channels == 1) {
+ gst_caps_set_simple (tmp, "channels", G_TYPE_INT,
+ channel_layouts[i].channels, NULL);
+ } else {
+ gst_audio_channel_positions_to_mask (channel_layouts[i].positions,
+ channel_layouts[i].channels, FALSE, &channel_mask);
+ gst_caps_set_simple (tmp, "channels", G_TYPE_INT,
+ channel_layouts[i].channels, "channel-mask", GST_TYPE_BITMASK,
+ channel_mask, NULL);
+ }
+
+ gst_caps_append (caps, tmp);
+ }
+
+ res = gst_audio_encoder_proxy_getcaps (enc, caps, filter);
+ gst_caps_unref (caps);
+
+ return res;
+}
+
+static gboolean
+gst_fdkaacenc_set_format (GstAudioEncoder * enc, GstAudioInfo * info)
+{
+ GstFdkAacEnc *self = GST_FDKAACENC (enc);
+ gboolean ret = FALSE;
+ GstCaps *allowed_caps;
+ GstCaps *src_caps;
+ AACENC_ERROR err;
+ gint transmux = 0, aot = AOT_AAC_LC;
+ gint mpegversion = 4;
+ CHANNEL_MODE channel_mode;
+ AACENC_InfoStruct enc_info = { 0 };
+ gint bitrate;
+
+ if (self->enc) {
+ /* drain */
+ gst_fdkaacenc_handle_frame (enc, NULL);
+ aacEncClose (&self->enc);
+ }
+
+ allowed_caps = gst_pad_get_allowed_caps (GST_AUDIO_ENCODER_SRC_PAD (self));
+
+ GST_DEBUG_OBJECT (self, "allowed caps: %" GST_PTR_FORMAT, allowed_caps);
+
+ if (allowed_caps && gst_caps_get_size (allowed_caps) > 0) {
+ GstStructure *s = gst_caps_get_structure (allowed_caps, 0);
+ const gchar *str = NULL;
+
+ if ((str = gst_structure_get_string (s, "stream-format"))) {
+ if (strcmp (str, "adts") == 0) {
+ GST_DEBUG_OBJECT (self, "use ADTS format for output");
+ transmux = 2;
+ } else if (strcmp (str, "adif") == 0) {
+ GST_DEBUG_OBJECT (self, "use ADIF format for output");
+ transmux = 1;
+ } else if (strcmp (str, "raw") == 0) {
+ GST_DEBUG_OBJECT (self, "use RAW format for output");
+ transmux = 0;
+ }
+ }
+
+ gst_structure_get_int (s, "mpegversion", &mpegversion);
+ }
+ if (allowed_caps)
+ gst_caps_unref (allowed_caps);
+
+ if ((err =
+ aacEncOpen (&self->enc, 0,
+ GST_AUDIO_INFO_CHANNELS (info))) != AACENC_OK) {
+ GST_ERROR_OBJECT (self, "Unable to open encoder: %d\n", err);
+ return FALSE;
+ }
+
+ if (mpegversion == 4) {
+ aot = AOT_AAC_LC;
+ } else {
+ aot = AOT_MP2_AAC_LC;
+ }
+
+ if ((err = aacEncoder_SetParam (self->enc, AACENC_AOT, aot)) != AACENC_OK) {
+ GST_ERROR_OBJECT (self, "Unable to set AOT %d: %d\n", aot, err);
+ return FALSE;
+ }
+
+ if ((err = aacEncoder_SetParam (self->enc, AACENC_SAMPLERATE,
+ GST_AUDIO_INFO_RATE (info))) != AACENC_OK) {
+ GST_ERROR_OBJECT (self, "Unable to set sample rate %d: %d\n",
+ GST_AUDIO_INFO_RATE (info), err);
+ return FALSE;
+ }
+
+ if (GST_AUDIO_INFO_CHANNELS (info) == 1) {
+ channel_mode = MODE_1;
+ self->need_reorder = FALSE;
+ self->aac_positions = NULL;
+ } else {
+ guint64 in_channel_mask, out_channel_mask;
+ gint i;
+
+ for (i = 0; i < G_N_ELEMENTS (channel_layouts); i++) {
+ if (channel_layouts[i].channels != GST_AUDIO_INFO_CHANNELS (info))
+ continue;
+
+ gst_audio_channel_positions_to_mask (&GST_AUDIO_INFO_POSITION (info, 0),
+ GST_AUDIO_INFO_CHANNELS (info), FALSE, &in_channel_mask);
+ gst_audio_channel_positions_to_mask (channel_layouts[i].positions,
+ channel_layouts[i].channels, FALSE, &out_channel_mask);
+ if (in_channel_mask == out_channel_mask) {
+ channel_mode = channel_layouts[i].mode;
+ self->need_reorder =
+ memcmp (channel_layouts[i].positions,
+ &GST_AUDIO_INFO_POSITION (info, 0),
+ GST_AUDIO_INFO_CHANNELS (info) *
+ sizeof (GstAudioChannelPosition)) != 0;
+ self->aac_positions = channel_layouts[i].positions;
+ break;
+ }
+ }
+
+ if (i == G_N_ELEMENTS (channel_layouts)) {
+ GST_ERROR_OBJECT (self, "Couldn't find a valid channel layout");
+ return FALSE;
+ }
+ }
+
+ if ((err = aacEncoder_SetParam (self->enc, AACENC_CHANNELMODE,
+ channel_mode)) != AACENC_OK) {
+ GST_ERROR_OBJECT (self, "Unable to set channel mode %d: %d", channel_mode,
+ err);
+ return FALSE;
+ }
+
+ /* MPEG channel order */
+ if ((err = aacEncoder_SetParam (self->enc, AACENC_CHANNELORDER,
+ 0)) != AACENC_OK) {
+ GST_ERROR_OBJECT (self, "Unable to set channel order %d: %d", channel_mode,
+ err);
+ return FALSE;
+ }
+
+ bitrate = self->bitrate;
+ /* See
+ * http://wiki.hydrogenaud.io/index.php?title=Fraunhofer_FDK_AAC#Recommended_Sampling_Rate_and_Bitrate_Combinations
+ */
+ if (bitrate == 0) {
+ if (GST_AUDIO_INFO_CHANNELS (info) == 1) {
+ if (GST_AUDIO_INFO_RATE (info) < 16000) {
+ bitrate = 8000;
+ } else if (GST_AUDIO_INFO_RATE (info) == 16000) {
+ bitrate = 16000;
+ } else if (GST_AUDIO_INFO_RATE (info) < 32000) {
+ bitrate = 24000;
+ } else if (GST_AUDIO_INFO_RATE (info) == 32000) {
+ bitrate = 32000;
+ } else if (GST_AUDIO_INFO_RATE (info) <= 44100) {
+ bitrate = 56000;
+ } else {
+ bitrate = 160000;
+ }
+ } else if (GST_AUDIO_INFO_CHANNELS (info) == 2) {
+ if (GST_AUDIO_INFO_RATE (info) < 16000) {
+ bitrate = 16000;
+ } else if (GST_AUDIO_INFO_RATE (info) == 16000) {
+ bitrate = 24000;
+ } else if (GST_AUDIO_INFO_RATE (info) < 22050) {
+ bitrate = 32000;
+ } else if (GST_AUDIO_INFO_RATE (info) < 32000) {
+ bitrate = 40000;
+ } else if (GST_AUDIO_INFO_RATE (info) == 32000) {
+ bitrate = 96000;
+ } else if (GST_AUDIO_INFO_RATE (info) <= 44100) {
+ bitrate = 112000;
+ } else {
+ bitrate = 320000;
+ }
+ } else {
+ /* 5, 5.1 */
+ if (GST_AUDIO_INFO_RATE (info) < 32000) {
+ bitrate = 160000;
+ } else if (GST_AUDIO_INFO_RATE (info) <= 44100) {
+ bitrate = 240000;
+ } else {
+ bitrate = 320000;
+ }
+ }
+ }
+
+ if ((err = aacEncoder_SetParam (self->enc, AACENC_BITRATE,
+ bitrate)) != AACENC_OK) {
+ GST_ERROR_OBJECT (self, "Unable to set bitrate %d: %d", bitrate, err);
+ return FALSE;
+ }
+
+ if ((err = aacEncEncode (self->enc, NULL, NULL, NULL, NULL)) != AACENC_OK) {
+ GST_ERROR_OBJECT (self, "Unable to initialize encoder: %d", err);
+ return FALSE;
+ }
+
+ if ((err = aacEncInfo (self->enc, &enc_info)) != AACENC_OK) {
+ GST_ERROR_OBJECT (self, "Unable to get encoder info: %d", err);
+ return FALSE;
+ }
+
+ gst_audio_encoder_set_frame_max (enc, 1);
+ gst_audio_encoder_set_frame_samples_min (enc, enc_info.frameLength);
+ gst_audio_encoder_set_frame_samples_max (enc, enc_info.frameLength);
+ gst_audio_encoder_set_hard_min (enc, FALSE);
+ self->outbuf_size = enc_info.maxOutBufBytes;
+ self->samples_per_frame = enc_info.frameLength;
+
+ src_caps = gst_caps_new_simple ("audio/mpeg",
+ "mpegversion", G_TYPE_INT, mpegversion,
+ "channels", G_TYPE_INT, GST_AUDIO_INFO_CHANNELS (info),
+ "rate", G_TYPE_INT, GST_AUDIO_INFO_RATE (info), NULL);
+
+ /* raw */
+ if (transmux == 0) {
+ GstBuffer *codec_data =
+ gst_buffer_new_wrapped (g_memdup (enc_info.confBuf, enc_info.confSize),
+ enc_info.confSize);
+ gst_caps_set_simple (src_caps, "codec_data", GST_TYPE_BUFFER, codec_data,
+ "stream-format", G_TYPE_STRING, "raw", NULL);
+ gst_buffer_unref (codec_data);
+ } else if (transmux == 1) {
+ gst_caps_set_simple (src_caps, "stream-format", G_TYPE_STRING, "adif",
+ NULL);
+ } else if (transmux == 2) {
+ gst_caps_set_simple (src_caps, "stream-format", G_TYPE_STRING, "adts",
+ NULL);
+ } else {
+ g_assert_not_reached ();
+ }
+
+ gst_codec_utils_aac_caps_set_level_and_profile (src_caps, enc_info.confBuf,
+ enc_info.confSize);
+
+ ret = gst_audio_encoder_set_output_format (enc, src_caps);
+ gst_caps_unref (src_caps);
+
+ return ret;
+}
+
+static GstFlowReturn
+gst_fdkaacenc_handle_frame (GstAudioEncoder * enc, GstBuffer * inbuf)
+{
+ GstFdkAacEnc *self = GST_FDKAACENC (enc);
+ GstFlowReturn ret = GST_FLOW_OK;
+ GstAudioInfo *info;
+ GstMapInfo imap, omap;
+ GstBuffer *outbuf;
+ AACENC_BufDesc in_desc = { 0 };
+ AACENC_BufDesc out_desc = { 0 };
+ AACENC_InArgs in_args = { 0 };
+ AACENC_OutArgs out_args = { 0 };
+ gint in_id = IN_AUDIO_DATA, out_id = OUT_BITSTREAM_DATA;
+ gint in_sizes, out_sizes;
+ gint in_el_sizes, out_el_sizes;
+ AACENC_ERROR err;
+
+ info = gst_audio_encoder_get_audio_info (enc);
+
+ if (!inbuf) {
+ in_args.numInSamples = -1;
+ } else {
+ if (self->need_reorder) {
+ inbuf = gst_buffer_copy (inbuf);
+ gst_buffer_map (inbuf, &imap, GST_MAP_READWRITE);
+ gst_audio_reorder_channels (imap.data, imap.size,
+ GST_AUDIO_INFO_FORMAT (info), GST_AUDIO_INFO_CHANNELS (info),
+ &GST_AUDIO_INFO_POSITION (info, 0), self->aac_positions);
+ } else {
+ gst_buffer_map (inbuf, &imap, GST_MAP_READ);
+ }
+
+ in_args.numInSamples = imap.size / GST_AUDIO_INFO_BPS (info);
+
+ in_sizes = imap.size;
+ in_el_sizes = 2;
+ in_desc.bufferIdentifiers = &in_id;
+ in_desc.numBufs = 1;
+ in_desc.bufs = (void *) &imap.data;
+ in_desc.bufSizes = &in_sizes;
+ in_desc.bufElSizes = &in_el_sizes;
+ }
+
+ outbuf = gst_audio_encoder_allocate_output_buffer (enc, self->outbuf_size);
+ if (!outbuf) {
+ ret = GST_FLOW_ERROR;
+ goto out;
+ }
+
+ gst_buffer_map (outbuf, &omap, GST_MAP_WRITE);
+ out_sizes = omap.size;
+ out_el_sizes = 1;
+ out_desc.bufferIdentifiers = &out_id;
+ out_desc.numBufs = 1;
+ out_desc.bufs = (void *) &omap.data;
+ out_desc.bufSizes = &out_sizes;
+ out_desc.bufElSizes = &out_el_sizes;
+
+ if ((err = aacEncEncode (self->enc, &in_desc, &out_desc, &in_args,
+ &out_args)) != AACENC_OK) {
+ if (!inbuf && err == AACENC_ENCODE_EOF)
+ goto out;
+
+ GST_ERROR_OBJECT (self, "Failed to encode data: %d", err);
+ ret = GST_FLOW_ERROR;
+ goto out;
+ }
+
+ if (inbuf) {
+ gst_buffer_unmap (inbuf, &imap);
+ if (self->need_reorder)
+ gst_buffer_unref (inbuf);
+ inbuf = NULL;
+ }
+
+ if (!out_args.numOutBytes)
+ goto out;
+
+ gst_buffer_unmap (outbuf, &omap);
+ gst_buffer_set_size (outbuf, out_args.numOutBytes);
+
+ ret = gst_audio_encoder_finish_frame (enc, outbuf, self->samples_per_frame);
+ outbuf = NULL;
+
+out:
+ if (outbuf) {
+ gst_buffer_unmap (outbuf, &omap);
+ gst_buffer_unref (outbuf);
+ }
+ if (inbuf) {
+ gst_buffer_unmap (inbuf, &imap);
+ if (self->need_reorder)
+ gst_buffer_unref (inbuf);
+ }
+
+ return ret;
+}
+
+static void
+gst_fdkaacenc_init (GstFdkAacEnc * self)
+{
+ self->bitrate = DEFAULT_BITRATE;
+ self->enc = NULL;
+
+ gst_audio_encoder_set_drainable (GST_AUDIO_ENCODER (self), TRUE);
+}
+
+static void
+gst_fdkaacenc_class_init (GstFdkAacEncClass * klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
+ GstAudioEncoderClass *base_class = GST_AUDIO_ENCODER_CLASS (klass);
+
+ object_class->set_property = GST_DEBUG_FUNCPTR (gst_fdkaacenc_set_property);
+ object_class->get_property = GST_DEBUG_FUNCPTR (gst_fdkaacenc_get_property);
+
+ base_class->start = GST_DEBUG_FUNCPTR (gst_fdkaacenc_start);
+ base_class->stop = GST_DEBUG_FUNCPTR (gst_fdkaacenc_stop);
+ base_class->set_format = GST_DEBUG_FUNCPTR (gst_fdkaacenc_set_format);
+ base_class->getcaps = GST_DEBUG_FUNCPTR (gst_fdkaacenc_get_caps);
+ base_class->handle_frame = GST_DEBUG_FUNCPTR (gst_fdkaacenc_handle_frame);
+
+ g_object_class_install_property (object_class, PROP_BITRATE,
+ g_param_spec_int ("bitrate",
+ "Bitrate",
+ "Target Audio Bitrate (0 = fixed value based on "
+ " sample rate and channel count)",
+ 0, G_MAXINT, DEFAULT_BITRATE,
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+ gst_element_class_add_static_pad_template (element_class, &sink_template);
+ gst_element_class_add_static_pad_template (element_class, &src_template);
+
+ gst_element_class_set_static_metadata (element_class, "FDK AAC audio encoder",
+ "Codec/Encoder/Audio", "FDK AAC audio encoder",
+ "Sebastian Dröge <sebastian@centricular.com>");
+
+ GST_DEBUG_CATEGORY_INIT (gst_fdkaacenc_debug, "fdkaacenc", 0,
+ "fdkaac encoder");
+}
diff --git a/ext/fdkaac/gstfdkaacenc.h b/ext/fdkaac/gstfdkaacenc.h
new file mode 100644
index 0000000..8c3df47
--- /dev/null
+++ b/ext/fdkaac/gstfdkaacenc.h
@@ -0,0 +1,63 @@
+/*
+ * Copyright (C) 2016 Sebastian Dröge <sebastian@centricular.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GST_FDKAACENC_H__
+#define __GST_FDKAACENC_H__
+
+#include <gst/gst.h>
+#include <gst/audio/gstaudioencoder.h>
+
+#include <fdk-aac/aacenc_lib.h>
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_FDKAACENC \
+ (gst_fdkaacenc_get_type())
+#define GST_FDKAACENC(obj) \
+ (G_TYPE_CHECK_INSTANCE_CAST((obj), GST_TYPE_FDKAACENC, GstFdkAacEnc))
+#define GST_FDKAACENC_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_CAST((klass), GST_TYPE_FDKAACENC, GstFdkAacEncClass))
+#define GST_IS_FDKAACENC(obj) \
+ (G_TYPE_CHECK_INSTANCE_TYPE((obj), GST_TYPE_FDKAACENC))
+#define GST_IS_FDKAACENC_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_TYPE((klass), GST_TYPE_FDKAACENC))
+
+typedef struct _GstFdkAacEnc GstFdkAacEnc;
+typedef struct _GstFdkAacEncClass GstFdkAacEncClass;
+
+struct _GstFdkAacEnc {
+ GstAudioEncoder element;
+
+ HANDLE_AACENCODER enc;
+ gint bitrate;
+
+ guint outbuf_size, samples_per_frame;
+ gboolean need_reorder;
+ const GstAudioChannelPosition *aac_positions;
+};
+
+struct _GstFdkAacEncClass {
+ GstAudioEncoderClass parent_class;
+};
+
+GType gst_fdkaacenc_get_type (void);
+
+G_END_DECLS
+
+#endif /* __GST_FDKAACENC_H__ */
diff --git a/ext/fdkaac/plugin.c b/ext/fdkaac/plugin.c
new file mode 100644
index 0000000..e3aadec
--- /dev/null
+++ b/ext/fdkaac/plugin.c
@@ -0,0 +1,41 @@
+/*
+ * Copyright (C) 2016 Sebastian Dröge <sebastian@centricular.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <gst/gst.h>
+#include "gstfdkaacenc.h"
+#include "gstfdkaacdec.h"
+
+static gboolean
+plugin_init (GstPlugin * plugin)
+{
+ return gst_element_register (plugin, "fdkaacenc", GST_RANK_PRIMARY,
+ GST_TYPE_FDKAACENC)
+ && gst_element_register (plugin, "fdkaacdec", GST_RANK_MARGINAL,
+ GST_TYPE_FDKAACDEC);
+}
+
+GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
+ GST_VERSION_MINOR,
+ fdkaac,
+ "Fraunhofer FDK AAC Codec plugin",
+ plugin_init, VERSION, "LGPL", GST_PACKAGE_NAME, GST_PACKAGE_ORIGIN)
diff --git a/ext/flite/Makefile.in b/ext/flite/Makefile.in
index 99561a3..21972a2 100644
--- a/ext/flite/Makefile.in
+++ b/ext/flite/Makefile.in
@@ -324,6 +324,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -373,6 +375,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/ext/fluidsynth/Makefile.in b/ext/fluidsynth/Makefile.in
index e340836..3fc6651 100644
--- a/ext/fluidsynth/Makefile.in
+++ b/ext/fluidsynth/Makefile.in
@@ -333,6 +333,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -382,6 +384,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/ext/gl/Makefile.in b/ext/gl/Makefile.in
index 08449a8..e0146c2 100644
--- a/ext/gl/Makefile.in
+++ b/ext/gl/Makefile.in
@@ -471,6 +471,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -520,6 +522,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/ext/gl/caopengllayersink.h b/ext/gl/caopengllayersink.h
index e3de325..3507154 100644
--- a/ext/gl/caopengllayersink.h
+++ b/ext/gl/caopengllayersink.h
@@ -63,7 +63,6 @@
GstGLCAOpenGLLayer *layer;
- volatile gint to_quit;
gboolean keep_aspect_ratio;
/* avoid replacing the stored_buffer while drawing */
diff --git a/ext/gl/caopengllayersink.m b/ext/gl/caopengllayersink.m
index 83cb827..f547c73 100644
--- a/ext/gl/caopengllayersink.m
+++ b/ext/gl/caopengllayersink.m
@@ -492,7 +492,6 @@
_ensure_gl_setup (ca_sink);
break;
case GST_STATE_CHANGE_READY_TO_PAUSED:
- g_atomic_int_set (&ca_sink->to_quit, 0);
break;
case GST_STATE_CHANGE_PAUSED_TO_PLAYING:
break;
@@ -740,12 +739,6 @@
if (old_sync)
gst_buffer_unref (old_sync);
- if (g_atomic_int_get (&ca_sink->to_quit) != 0) {
- GST_ELEMENT_ERROR (ca_sink, RESOURCE, NOT_FOUND,
- ("%s", gst_gl_context_get_error ()), (NULL));
- return GST_FLOW_ERROR;
- }
-
return GST_FLOW_OK;
}
diff --git a/ext/gl/effects/gstgleffectblur.c b/ext/gl/effects/gstgleffectblur.c
index f03af37..074519a 100644
--- a/ext/gl/effects/gstgleffectblur.c
+++ b/ext/gl/effects/gstgleffectblur.c
@@ -40,79 +40,29 @@
return kernel;
}
-static void
-gst_gl_effects_blur_callback_hconv (gint width, gint height, guint texture,
- gpointer data)
-{
- GstGLShader *shader = NULL;
- GstGLEffects *effects = GST_GL_EFFECTS (data);
-
- if (NULL != (shader = gst_gl_effects_get_fragment_shader (effects, "hconv0",
- hconv7_fragment_source_gles2))) {
- GstGLFilter *filter = GST_GL_FILTER (effects);
- GstGLFuncs *gl = GST_GL_BASE_FILTER (filter)->context->gl_vtable;
-
-#if GST_GL_HAVE_OPENGL
- if (USING_OPENGL (GST_GL_BASE_FILTER (filter)->context)) {
- gl->MatrixMode (GL_PROJECTION);
- gl->LoadIdentity ();
- }
-#endif
-
- gst_gl_shader_use (shader);
-
- gl->ActiveTexture (GL_TEXTURE0);
- gl->BindTexture (GL_TEXTURE_2D, texture);
-
- gst_gl_shader_set_uniform_1i (shader, "tex", 0);
- gst_gl_shader_set_uniform_1f (shader, "gauss_width", width);
- gst_gl_shader_set_uniform_1fv (shader, "kernel", 7,
- gst_gl_effects_blur_kernel ());
-
- gst_gl_filter_draw_texture (filter, texture, width, height);
- }
-}
-
-static void
-gst_gl_effects_blur_callback_vconv (gint width, gint height, guint texture,
- gpointer data)
-{
- GstGLShader *shader = NULL;
- GstGLEffects *effects = GST_GL_EFFECTS (data);
- GstGLFilter *filter = GST_GL_FILTER (effects);
-
- if (NULL != (shader = gst_gl_effects_get_fragment_shader (effects, "vconv0",
- vconv7_fragment_source_gles2))) {
- GstGLFuncs *gl = GST_GL_BASE_FILTER (filter)->context->gl_vtable;
-
-#if GST_GL_HAVE_OPENGL
- if (USING_OPENGL (GST_GL_BASE_FILTER (filter)->context)) {
- gl->MatrixMode (GL_PROJECTION);
- gl->LoadIdentity ();
- }
-#endif
-
- gst_gl_shader_use (shader);
-
- gl->ActiveTexture (GL_TEXTURE0);
- gl->BindTexture (GL_TEXTURE_2D, texture);
-
- gst_gl_shader_set_uniform_1i (shader, "tex", 0);
- gst_gl_shader_set_uniform_1f (shader, "gauss_height", height);
- gst_gl_shader_set_uniform_1fv (shader, "kernel", 7,
- gst_gl_effects_blur_kernel ());
-
- gst_gl_filter_draw_texture (filter, texture, width, height);
- }
-}
-
void
gst_gl_effects_blur (GstGLEffects * effects)
{
GstGLFilter *filter = GST_GL_FILTER (effects);
+ GstGLShader *shader;
- gst_gl_filter_render_to_target (filter, TRUE, effects->intexture,
- effects->midtexture[0], gst_gl_effects_blur_callback_hconv, effects);
- gst_gl_filter_render_to_target (filter, FALSE, effects->midtexture[0],
- effects->outtexture, gst_gl_effects_blur_callback_vconv, effects);
+ shader = gst_gl_effects_get_fragment_shader (effects, "hconv0",
+ hconv7_fragment_source_gles2);
+ gst_gl_shader_use (shader);
+ gst_gl_shader_set_uniform_1f (shader, "gauss_width",
+ GST_VIDEO_INFO_WIDTH (&filter->in_info));
+ gst_gl_shader_set_uniform_1fv (shader, "kernel", 7,
+ gst_gl_effects_blur_kernel ());
+ gst_gl_filter_render_to_target_with_shader (filter, effects->intexture,
+ effects->midtexture[0], shader);
+
+ shader = gst_gl_effects_get_fragment_shader (effects, "vconv0",
+ vconv7_fragment_source_gles2);
+ gst_gl_shader_use (shader);
+ gst_gl_shader_set_uniform_1f (shader, "gauss_height",
+ GST_VIDEO_INFO_HEIGHT (&filter->in_info));
+ gst_gl_shader_set_uniform_1fv (shader, "kernel", 7,
+ gst_gl_effects_blur_kernel ());
+ gst_gl_filter_render_to_target_with_shader (filter, effects->midtexture[0],
+ effects->outtexture, shader);
}
diff --git a/ext/gl/effects/gstgleffectbulge.c b/ext/gl/effects/gstgleffectbulge.c
index 9856321..d2a9a14 100644
--- a/ext/gl/effects/gstgleffectbulge.c
+++ b/ext/gl/effects/gstgleffectbulge.c
@@ -23,44 +23,14 @@
#include "../gstgleffects.h"
-static void
-gst_gl_effects_bulge_callback (gint width, gint height, guint texture,
- gpointer data)
-{
- GstGLShader *shader;
- GstGLEffects *effects = GST_GL_EFFECTS (data);
- GstGLFilter *filter = GST_GL_FILTER (effects);
- GstGLContext *context = GST_GL_BASE_FILTER (filter)->context;
- GstGLFuncs *gl = context->gl_vtable;
-
- shader = gst_gl_effects_get_fragment_shader (effects, "bulge",
- bulge_fragment_source_gles2);
-
- if (!shader)
- return;
-
-#if GST_GL_HAVE_OPENGL
- if (USING_OPENGL (context)) {
- gl->MatrixMode (GL_PROJECTION);
- gl->LoadIdentity ();
- }
-#endif
-
- gst_gl_shader_use (shader);
-
- gl->ActiveTexture (GL_TEXTURE0);
- gl->BindTexture (GL_TEXTURE_2D, texture);
-
- gst_gl_shader_set_uniform_1i (shader, "tex", 0);
-
- gst_gl_filter_draw_texture (filter, texture, width, height);
-}
-
void
gst_gl_effects_bulge (GstGLEffects * effects)
{
GstGLFilter *filter = GST_GL_FILTER (effects);
+ GstGLShader *shader;
- gst_gl_filter_render_to_target (filter, TRUE, effects->intexture,
- effects->outtexture, gst_gl_effects_bulge_callback, effects);
+ shader = gst_gl_effects_get_fragment_shader (effects, "bulge",
+ bulge_fragment_source_gles2);
+ gst_gl_filter_render_to_target_with_shader (filter, effects->intexture,
+ effects->outtexture, shader);
}
diff --git a/ext/gl/effects/gstgleffectfisheye.c b/ext/gl/effects/gstgleffectfisheye.c
index 285deb3..fe3ebdc 100644
--- a/ext/gl/effects/gstgleffectfisheye.c
+++ b/ext/gl/effects/gstgleffectfisheye.c
@@ -23,44 +23,14 @@
#include "../gstgleffects.h"
-static void
-gst_gl_effects_fisheye_callback (gint width, gint height, guint texture,
- gpointer data)
-{
- GstGLShader *shader;
- GstGLEffects *effects = GST_GL_EFFECTS (data);
- GstGLFilter *filter = GST_GL_FILTER (effects);
- GstGLContext *context = GST_GL_BASE_FILTER (filter)->context;
- GstGLFuncs *gl = context->gl_vtable;
-
- shader = gst_gl_effects_get_fragment_shader (effects, "fisheye",
- fisheye_fragment_source_gles2);
-
- if (!shader)
- return;
-
-#if GST_GL_HAVE_OPENGL
- if (USING_OPENGL (context)) {
- gl->MatrixMode (GL_PROJECTION);
- gl->LoadIdentity ();
- }
-#endif
-
- gst_gl_shader_use (shader);
-
- gl->ActiveTexture (GL_TEXTURE0);
- gl->BindTexture (GL_TEXTURE_2D, texture);
-
- gst_gl_shader_set_uniform_1i (shader, "tex", 0);
-
- gst_gl_filter_draw_texture (filter, texture, width, height);
-}
-
void
gst_gl_effects_fisheye (GstGLEffects * effects)
{
GstGLFilter *filter = GST_GL_FILTER (effects);
+ GstGLShader *shader;
- gst_gl_filter_render_to_target (filter, TRUE, effects->intexture,
- effects->outtexture, gst_gl_effects_fisheye_callback, effects);
+ shader = gst_gl_effects_get_fragment_shader (effects, "fisheye",
+ fisheye_fragment_source_gles2);
+ gst_gl_filter_render_to_target_with_shader (filter, effects->intexture,
+ effects->outtexture, shader);
}
diff --git a/ext/gl/effects/gstgleffectglow.c b/ext/gl/effects/gstgleffectglow.c
index 9fc09e0..6309ce7 100644
--- a/ext/gl/effects/gstgleffectglow.c
+++ b/ext/gl/effects/gstgleffectglow.c
@@ -26,170 +26,61 @@
static gboolean kernel_ready = FALSE;
static float gauss_kernel[7];
-static void
-gst_gl_effects_glow_step_one (gint width, gint height, guint texture,
- gpointer data)
+void
+gst_gl_effects_glow (GstGLEffects * effects)
{
- GstGLShader *shader;
- GstGLEffects *effects = GST_GL_EFFECTS (data);
+ const GstGLFuncs *gl = GST_GL_BASE_FILTER (effects)->context->gl_vtable;
GstGLFilter *filter = GST_GL_FILTER (effects);
- GstGLContext *context = GST_GL_BASE_FILTER (filter)->context;
- GstGLFuncs *gl = context->gl_vtable;
-
- shader = gst_gl_effects_get_fragment_shader (effects, "luma_threshold",
- luma_threshold_fragment_source_gles2);
-
- if (!shader)
- return;
-
-#if GST_GL_HAVE_OPENGL
- if (USING_OPENGL (context)) {
- gl->MatrixMode (GL_PROJECTION);
- gl->LoadIdentity ();
- }
-#endif
-
- gst_gl_shader_use (shader);
-
- gl->ActiveTexture (GL_TEXTURE0);
- gl->BindTexture (GL_TEXTURE_2D, texture);
-
- gst_gl_shader_set_uniform_1i (shader, "tex", 0);
-
- gst_gl_filter_draw_texture (filter, texture, width, height);
-}
-
-static void
-gst_gl_effects_glow_step_two (gint width, gint height, guint texture,
- gpointer data)
-{
GstGLShader *shader;
- GstGLEffects *effects = GST_GL_EFFECTS (data);
- GstGLFilter *filter = GST_GL_FILTER (effects);
- GstGLContext *context = GST_GL_BASE_FILTER (filter)->context;
- GstGLFuncs *gl = context->gl_vtable;
-
- shader = gst_gl_effects_get_fragment_shader (effects, "hconv7",
- hconv7_fragment_source_gles2);
-
- if (!shader)
- return;
if (!kernel_ready) {
fill_gaussian_kernel (gauss_kernel, 7, 10.0);
kernel_ready = TRUE;
}
-#if GST_GL_HAVE_OPENGL
- if (USING_OPENGL (context)) {
- gl->MatrixMode (GL_PROJECTION);
- gl->LoadIdentity ();
- }
-#endif
+ /* threshold */
+ shader = gst_gl_effects_get_fragment_shader (effects, "luma_threshold",
+ luma_threshold_fragment_source_gles2);
+ gst_gl_filter_render_to_target_with_shader (filter, effects->intexture,
+ effects->midtexture[0], shader);
+
+ /* blur */
+ shader = gst_gl_effects_get_fragment_shader (effects, "hconv7",
+ hconv7_fragment_source_gles2);
gst_gl_shader_use (shader);
-
- gl->ActiveTexture (GL_TEXTURE1);
- gl->BindTexture (GL_TEXTURE_2D, texture);
-
- gst_gl_shader_set_uniform_1i (shader, "tex", 1);
gst_gl_shader_set_uniform_1fv (shader, "kernel", 7, gauss_kernel);
- gst_gl_shader_set_uniform_1f (shader, "gauss_width", width);
-
- gst_gl_filter_draw_texture (filter, texture, width, height);
-}
-
-static void
-gst_gl_effects_glow_step_three (gint width, gint height, guint texture,
- gpointer data)
-{
- GstGLShader *shader;
- GstGLEffects *effects = GST_GL_EFFECTS (data);
- GstGLFilter *filter = GST_GL_FILTER (effects);
- GstGLContext *context = GST_GL_BASE_FILTER (filter)->context;
- GstGLFuncs *gl = context->gl_vtable;
+ gst_gl_shader_set_uniform_1f (shader, "gauss_width",
+ GST_VIDEO_INFO_WIDTH (&filter->out_info));
+ gst_gl_filter_render_to_target_with_shader (filter, effects->midtexture[0],
+ effects->midtexture[1], shader);
shader = gst_gl_effects_get_fragment_shader (effects, "vconv7",
vconv7_fragment_source_gles2);
-
- if (!shader)
- return;
-
-#if GST_GL_HAVE_OPENGL
- if (USING_OPENGL (context)) {
- gl->MatrixMode (GL_PROJECTION);
- gl->LoadIdentity ();
- }
-#endif
-
gst_gl_shader_use (shader);
-
- gl->ActiveTexture (GL_TEXTURE1);
- gl->BindTexture (GL_TEXTURE_2D, texture);
-
- gst_gl_shader_set_uniform_1i (shader, "tex", 1);
gst_gl_shader_set_uniform_1fv (shader, "kernel", 7, gauss_kernel);
- gst_gl_shader_set_uniform_1f (shader, "gauss_height", height);
+ gst_gl_shader_set_uniform_1f (shader, "gauss_height",
+ GST_VIDEO_INFO_HEIGHT (&filter->out_info));
+ gst_gl_filter_render_to_target_with_shader (filter, effects->midtexture[1],
+ effects->midtexture[2], shader);
- gst_gl_filter_draw_texture (filter, texture, width, height);
-}
-
-static void
-gst_gl_effects_glow_step_four (gint width, gint height, guint texture,
- gpointer data)
-{
- GstGLShader *shader;
- GstGLEffects *effects = GST_GL_EFFECTS (data);
- GstGLFilter *filter = GST_GL_FILTER (effects);
- GstGLContext *context = GST_GL_BASE_FILTER (filter)->context;
- GstGLFuncs *gl = context->gl_vtable;
-
+ /* add blurred luma to intexture */
shader = gst_gl_effects_get_fragment_shader (effects, "sum",
sum_fragment_source_gles2);
-
- if (!shader)
- return;
-
-#if GST_GL_HAVE_OPENGL
- if (USING_OPENGL (context)) {
- gl->MatrixMode (GL_PROJECTION);
- gl->LoadIdentity ();
- }
-#endif
-
gst_gl_shader_use (shader);
gl->ActiveTexture (GL_TEXTURE2);
- gl->BindTexture (GL_TEXTURE_2D, effects->intexture);
+ gl->BindTexture (GL_TEXTURE_2D,
+ gst_gl_memory_get_texture_id (effects->intexture));
gst_gl_shader_set_uniform_1f (shader, "alpha", 1.0f);
gst_gl_shader_set_uniform_1i (shader, "base", 2);
gl->ActiveTexture (GL_TEXTURE1);
- gl->BindTexture (GL_TEXTURE_2D, texture);
+ gl->BindTexture (GL_TEXTURE_2D,
+ gst_gl_memory_get_texture_id (effects->midtexture[2]));
gst_gl_shader_set_uniform_1f (shader, "beta", (gfloat) 1 / 3.5f);
gst_gl_shader_set_uniform_1i (shader, "blend", 1);
-
- gst_gl_filter_draw_texture (filter, texture, width, height);
-}
-
-void
-gst_gl_effects_glow (GstGLEffects * effects)
-{
- GstGLFilter *filter = GST_GL_FILTER (effects);
-
- /* threshold */
- gst_gl_filter_render_to_target (filter, TRUE, effects->intexture,
- effects->midtexture[0], gst_gl_effects_glow_step_one, effects);
-
- /* blur */
- gst_gl_filter_render_to_target (filter, FALSE, effects->midtexture[0],
- effects->midtexture[1], gst_gl_effects_glow_step_two, effects);
-
- gst_gl_filter_render_to_target (filter, FALSE, effects->midtexture[1],
- effects->midtexture[2], gst_gl_effects_glow_step_three, effects);
-
- /* add blurred luma to intexture */
- gst_gl_filter_render_to_target (filter, FALSE, effects->midtexture[2],
- effects->outtexture, gst_gl_effects_glow_step_four, effects);
+ gst_gl_filter_render_to_target_with_shader (filter, effects->midtexture[2],
+ effects->outtexture, shader);
}
diff --git a/ext/gl/effects/gstgleffectidentity.c b/ext/gl/effects/gstgleffectidentity.c
index 5687d64..b81c32d 100644
--- a/ext/gl/effects/gstgleffectidentity.c
+++ b/ext/gl/effects/gstgleffectidentity.c
@@ -23,23 +23,13 @@
#include "../gstgleffects.h"
-static void
-gst_gl_effects_identity_callback (gint width, gint height, guint texture,
- gpointer data)
+void
+gst_gl_effects_identity (GstGLEffects * effects)
{
- GstGLEffects *effects = GST_GL_EFFECTS (data);
+ GstGLContext *context = GST_GL_BASE_FILTER (effects)->context;
GstGLFilter *filter = GST_GL_FILTER (effects);
- GstGLContext *context = GST_GL_BASE_FILTER (filter)->context;
- GstGLFuncs *gl = context->gl_vtable;
GstGLShader *shader;
-#if GST_GL_HAVE_OPENGL
- if (USING_OPENGL (context)) {
- gl->MatrixMode (GL_PROJECTION);
- gl->LoadIdentity ();
- }
-#endif
-
shader = g_hash_table_lookup (effects->shaderstable, "identity0");
if (!shader) {
GError *error = NULL;
@@ -50,28 +40,10 @@
return;
}
- filter->draw_attr_position_loc =
- gst_gl_shader_get_attribute_location (shader, "a_position");
- filter->draw_attr_texture_loc =
- gst_gl_shader_get_attribute_location (shader, "a_texcoord");
-
g_hash_table_insert (effects->shaderstable, (gchar *) "identity0", shader);
}
gst_gl_shader_use (shader);
- gl->ActiveTexture (GL_TEXTURE0);
- gl->BindTexture (GL_TEXTURE_2D, texture);
-
- gst_gl_shader_set_uniform_1i (shader, "tex", 0);
-
- gst_gl_filter_draw_texture (filter, texture, width, height);
-}
-
-void
-gst_gl_effects_identity (GstGLEffects * effects)
-{
- GstGLFilter *filter = GST_GL_FILTER (effects);
-
- gst_gl_filter_render_to_target (filter, TRUE, effects->intexture,
- effects->outtexture, gst_gl_effects_identity_callback, effects);
+ gst_gl_filter_render_to_target_with_shader (filter, effects->intexture,
+ effects->outtexture, shader);
}
diff --git a/ext/gl/effects/gstgleffectlaplacian.c b/ext/gl/effects/gstgleffectlaplacian.c
index ca5b88c..4652b0f 100644
--- a/ext/gl/effects/gstgleffectlaplacian.c
+++ b/ext/gl/effects/gstgleffectlaplacian.c
@@ -25,48 +25,28 @@
#include "../gstgleffects.h"
-static void
-gst_gl_effects_laplacian_callback (gint width, gint height, guint texture,
- gpointer data)
-{
- GstGLShader *shader = NULL;
- GstGLEffects *effects = GST_GL_EFFECTS (data);
- GstGLFilter *filter = GST_GL_FILTER (effects);
-
- if (NULL != (shader = gst_gl_effects_get_fragment_shader (effects, "conv0",
- conv9_fragment_source_gles2))) {
- GstGLFuncs *gl = GST_GL_BASE_FILTER (filter)->context->gl_vtable;
- static gfloat kernel[9] = { 0.0, -1.0, 0.0,
- -1.0, 4.0, -1.0,
- 0.0, -1.0, 0.0
- };
-
-#if GST_GL_HAVE_OPENGL
- if (USING_OPENGL (GST_GL_BASE_FILTER (filter)->context)) {
- gl->MatrixMode (GL_PROJECTION);
- gl->LoadIdentity ();
- }
-#endif
-
- gst_gl_shader_use (shader);
-
- gl->ActiveTexture (GL_TEXTURE0);
- gl->BindTexture (GL_TEXTURE_2D, texture);
-
- gst_gl_shader_set_uniform_1i (shader, "tex", 0);
- gst_gl_shader_set_uniform_1f (shader, "height", height);
- gst_gl_shader_set_uniform_1f (shader, "width", width);
- gst_gl_shader_set_uniform_1fv (shader, "kernel", 9, kernel);
- gst_gl_shader_set_uniform_1i (shader, "invert", effects->invert);
-
- gst_gl_filter_draw_texture (filter, texture, width, height);
- }
-}
+static gfloat kernel[9] = {
+ 0.0, -1.0, 0.0,
+ -1.0, 4.0, -1.0,
+ 0.0, -1.0, 0.0
+};
void
gst_gl_effects_laplacian (GstGLEffects * effects)
{
- gst_gl_filter_render_to_target (GST_GL_FILTER (effects), TRUE,
- effects->intexture, effects->outtexture,
- gst_gl_effects_laplacian_callback, effects);
+ GstGLFilter *filter = GST_GL_FILTER (effects);
+ GstGLShader *shader;
+
+ shader = gst_gl_effects_get_fragment_shader (effects, "conv0",
+ conv9_fragment_source_gles2);
+ gst_gl_shader_use (shader);
+ gst_gl_shader_set_uniform_1f (shader, "height",
+ GST_VIDEO_INFO_HEIGHT (&filter->in_info));
+ gst_gl_shader_set_uniform_1f (shader, "width",
+ GST_VIDEO_INFO_WIDTH (&filter->in_info));
+ gst_gl_shader_set_uniform_1fv (shader, "kernel", 9, kernel);
+ gst_gl_shader_set_uniform_1i (shader, "invert", effects->invert);
+
+ gst_gl_filter_render_to_target_with_shader (filter, effects->intexture,
+ effects->outtexture, shader);
}
diff --git a/ext/gl/effects/gstgleffectlumatocurve.c b/ext/gl/effects/gstgleffectlumatocurve.c
index 158fda0..a9c2a5b 100644
--- a/ext/gl/effects/gstgleffectlumatocurve.c
+++ b/ext/gl/effects/gstgleffectlumatocurve.c
@@ -26,13 +26,13 @@
void
gst_gl_effects_luma_to_curve (GstGLEffects * effects,
- const GstGLEffectsCurve * curve,
- gint curve_index, gint width, gint height, GLuint texture)
+ const GstGLEffectsCurve * curve, gint curve_index, GstGLMemory * in_tex,
+ GstGLMemory * out_tex)
{
- GstGLShader *shader;
+ GstGLContext *context = GST_GL_BASE_FILTER (effects)->context;
GstGLFilter *filter = GST_GL_FILTER (effects);
- GstGLContext *context = GST_GL_BASE_FILTER (filter)->context;
- GstGLFuncs *gl = context->gl_vtable;
+ const GstGLFuncs *gl = context->gl_vtable;
+ GstGLShader *shader;
shader = gst_gl_effects_get_fragment_shader (effects, "luma_to_curve",
luma_to_curve_fragment_source_gles2);
@@ -47,112 +47,46 @@
}
#endif
- gst_gl_shader_use (shader);
-
if (effects->curve[curve_index] == 0) {
/* this parameters are needed to have a right, predictable, mapping */
gl->GenTextures (1, &effects->curve[curve_index]);
-#if GST_GL_HAVE_OPENGL
- if (USING_OPENGL (context)) {
- gl->BindTexture (GL_TEXTURE_1D, effects->curve[curve_index]);
- gl->TexParameteri (GL_TEXTURE_1D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
- gl->TexParameteri (GL_TEXTURE_1D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
- gl->TexParameteri (GL_TEXTURE_1D, GL_TEXTURE_WRAP_S, GL_CLAMP);
- gl->TexParameteri (GL_TEXTURE_1D, GL_TEXTURE_WRAP_T, GL_CLAMP);
-
- gl->TexImage1D (GL_TEXTURE_1D, 0, curve->bytes_per_pixel,
- curve->width, 0, GL_RGB, GL_UNSIGNED_BYTE, curve->pixel_data);
- }
-#endif
- if (USING_GLES2 (context) || USING_OPENGL3 (context)) {
- gl->BindTexture (GL_TEXTURE_2D, effects->curve[curve_index]);
- gl->TexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
- gl->TexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
- gl->TexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
- gl->TexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
-
- gl->TexImage2D (GL_TEXTURE_2D, 0, GL_RGB,
- curve->width, 1, 0, GL_RGB, GL_UNSIGNED_BYTE, curve->pixel_data);
- }
- }
-
- gl->ActiveTexture (GL_TEXTURE2);
- gl->BindTexture (GL_TEXTURE_2D, texture);
-
- gst_gl_shader_set_uniform_1i (shader, "tex", 2);
-
-#if GST_GL_HAVE_OPENGL
- if (USING_OPENGL (context)) {
- gl->ActiveTexture (GL_TEXTURE1);
- gl->BindTexture (GL_TEXTURE_1D, effects->curve[curve_index]);
-
- gst_gl_shader_set_uniform_1i (shader, "curve", 1);
- }
-#endif
- if (USING_GLES2 (context) || USING_OPENGL3 (context)) {
- gl->ActiveTexture (GL_TEXTURE1);
gl->BindTexture (GL_TEXTURE_2D, effects->curve[curve_index]);
+ gl->TexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
+ gl->TexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
+ gl->TexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
+ gl->TexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
- gst_gl_shader_set_uniform_1i (shader, "curve", 1);
+ gl->TexImage2D (GL_TEXTURE_2D, 0, GL_RGB,
+ curve->width, 1, 0, GL_RGB, GL_UNSIGNED_BYTE, curve->pixel_data);
}
- gst_gl_filter_draw_texture (filter, texture, width, height);
-}
+ gst_gl_shader_use (shader);
+ gl->ActiveTexture (GL_TEXTURE2);
+ gl->BindTexture (GL_TEXTURE_2D, effects->curve[curve_index]);
-static void
-gst_gl_effects_heat_callback (gint width, gint height, guint texture,
- gpointer data)
-{
- GstGLEffects *effects = GST_GL_EFFECTS (data);
+ gst_gl_shader_set_uniform_1i (shader, "curve", 2);
- gst_gl_effects_luma_to_curve (effects, &heat_curve, GST_GL_EFFECTS_CURVE_HEAT,
- width, height, texture);
+ gst_gl_filter_render_to_target_with_shader (filter, in_tex, out_tex, shader);
}
void
gst_gl_effects_heat (GstGLEffects * effects)
{
- GstGLFilter *filter = GST_GL_FILTER (effects);
-
- gst_gl_filter_render_to_target (filter, TRUE, effects->intexture,
- effects->outtexture, gst_gl_effects_heat_callback, effects);
-}
-
-static void
-gst_gl_effects_sepia_callback (gint width, gint height, guint texture,
- gpointer data)
-{
- GstGLEffects *effects = GST_GL_EFFECTS (data);
-
- gst_gl_effects_luma_to_curve (effects, &sepia_curve,
- GST_GL_EFFECTS_CURVE_SEPIA, width, height, texture);
+ gst_gl_effects_luma_to_curve (effects, &heat_curve,
+ GST_GL_EFFECTS_CURVE_HEAT, effects->intexture, effects->outtexture);
}
void
gst_gl_effects_sepia (GstGLEffects * effects)
{
- GstGLFilter *filter = GST_GL_FILTER (effects);
-
- gst_gl_filter_render_to_target (filter, TRUE, effects->intexture,
- effects->outtexture, gst_gl_effects_sepia_callback, effects);
-}
-
-static void
-gst_gl_effects_luma_xpro_callback (gint width, gint height, guint texture,
- gpointer data)
-{
- GstGLEffects *effects = GST_GL_EFFECTS (data);
-
- gst_gl_effects_luma_to_curve (effects, &luma_xpro_curve,
- GST_GL_EFFECTS_CURVE_LUMA_XPRO, width, height, texture);
+ gst_gl_effects_luma_to_curve (effects, &sepia_curve,
+ GST_GL_EFFECTS_CURVE_SEPIA, effects->intexture, effects->outtexture);
}
void
gst_gl_effects_luma_xpro (GstGLEffects * effects)
{
- GstGLFilter *filter = GST_GL_FILTER (effects);
-
- gst_gl_filter_render_to_target (filter, TRUE, effects->intexture,
- effects->outtexture, gst_gl_effects_luma_xpro_callback, effects);
+ gst_gl_effects_luma_to_curve (effects, &luma_xpro_curve,
+ GST_GL_EFFECTS_CURVE_LUMA_XPRO, effects->intexture, effects->outtexture);
}
diff --git a/ext/gl/effects/gstgleffectlumatocurve.h b/ext/gl/effects/gstgleffectlumatocurve.h
index 509b45b..f90577f 100644
--- a/ext/gl/effects/gstgleffectlumatocurve.h
+++ b/ext/gl/effects/gstgleffectlumatocurve.h
@@ -28,8 +28,8 @@
void gst_gl_effects_luma_to_curve (GstGLEffects *effects,
const GstGLEffectsCurve *curve,
gint curve_index,
- gint width, gint height,
- GLuint texture);
+ GstGLMemory *in_tex,
+ GstGLMemory *out_tex);
G_END_DECLS
#endif /* __GST_GL_LUMA_TO_CURVE_H__ */
diff --git a/ext/gl/effects/gstgleffectmirror.c b/ext/gl/effects/gstgleffectmirror.c
index 5080099..a25d874 100644
--- a/ext/gl/effects/gstgleffectmirror.c
+++ b/ext/gl/effects/gstgleffectmirror.c
@@ -23,44 +23,14 @@
#include "../gstgleffects.h"
-static void
-gst_gl_effects_mirror_callback (gint width, gint height, guint texture,
- gpointer data)
-{
- GstGLShader *shader;
- GstGLFilter *filter = GST_GL_FILTER (data);
- GstGLEffects *effects = GST_GL_EFFECTS (filter);
- GstGLContext *context = GST_GL_BASE_FILTER (filter)->context;
- GstGLFuncs *gl = context->gl_vtable;
-
- shader = gst_gl_effects_get_fragment_shader (effects, "mirror",
- mirror_fragment_source_gles2);
-
- if (!shader)
- return;
-
-#if GST_GL_HAVE_OPENGL
- if (USING_OPENGL (context)) {
- gl->MatrixMode (GL_PROJECTION);
- gl->LoadIdentity ();
- }
-#endif
-
- gst_gl_shader_use (shader);
-
- gl->ActiveTexture (GL_TEXTURE0);
- gl->BindTexture (GL_TEXTURE_2D, texture);
-
- gst_gl_shader_set_uniform_1i (shader, "tex", 0);
-
- gst_gl_filter_draw_texture (filter, texture, width, height);
-}
-
void
gst_gl_effects_mirror (GstGLEffects * effects)
{
GstGLFilter *filter = GST_GL_FILTER (effects);
+ GstGLShader *shader;
- gst_gl_filter_render_to_target (filter, TRUE, effects->intexture,
- effects->outtexture, gst_gl_effects_mirror_callback, effects);
+ shader = gst_gl_effects_get_fragment_shader (effects, "mirror",
+ mirror_fragment_source_gles2);
+ gst_gl_filter_render_to_target_with_shader (filter, effects->intexture,
+ effects->outtexture, shader);
}
diff --git a/ext/gl/effects/gstgleffectrgbtocurve.c b/ext/gl/effects/gstgleffectrgbtocurve.c
index e2b6bdb..5bead68 100644
--- a/ext/gl/effects/gstgleffectrgbtocurve.c
+++ b/ext/gl/effects/gstgleffectrgbtocurve.c
@@ -26,13 +26,13 @@
static void
gst_gl_effects_rgb_to_curve (GstGLEffects * effects,
- const GstGLEffectsCurve * curve,
- gint curve_index, gint width, gint height, GLuint texture)
+ const GstGLEffectsCurve * curve, gint curve_index, GstGLMemory * in_tex,
+ GstGLMemory * out_tex)
{
- GstGLShader *shader;
+ GstGLContext *context = GST_GL_BASE_FILTER (effects)->context;
GstGLFilter *filter = GST_GL_FILTER (effects);
- GstGLContext *context = GST_GL_BASE_FILTER (filter)->context;
- GstGLFuncs *gl = context->gl_vtable;
+ const GstGLFuncs *gl = context->gl_vtable;
+ GstGLShader *shader;
shader = gst_gl_effects_get_fragment_shader (effects, "rgb_to_curve",
rgb_to_curve_fragment_source_gles2);
@@ -47,73 +47,32 @@
}
#endif
- gst_gl_shader_use (shader);
-
if (effects->curve[curve_index] == 0) {
/* this parameters are needed to have a right, predictable, mapping */
gl->GenTextures (1, &effects->curve[curve_index]);
-#if GST_GL_HAVE_OPENGL
- if (USING_OPENGL (context)) {
- gl->BindTexture (GL_TEXTURE_1D, effects->curve[curve_index]);
- gl->TexParameteri (GL_TEXTURE_1D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
- gl->TexParameteri (GL_TEXTURE_1D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
- gl->TexParameteri (GL_TEXTURE_1D, GL_TEXTURE_WRAP_S, GL_CLAMP);
- gl->TexParameteri (GL_TEXTURE_1D, GL_TEXTURE_WRAP_T, GL_CLAMP);
- gl->TexImage1D (GL_TEXTURE_1D, 0, GL_RGB,
- curve->width, 0, GL_RGB, GL_UNSIGNED_BYTE, curve->pixel_data);
- }
-#endif
- if (USING_GLES2 (context) || USING_OPENGL3 (context)) {
- gl->BindTexture (GL_TEXTURE_2D, effects->curve[curve_index]);
- gl->TexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
- gl->TexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
- gl->TexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
- gl->TexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
-
- gl->TexImage2D (GL_TEXTURE_2D, 0, GL_RGB,
- curve->width, 1, 0, GL_RGB, GL_UNSIGNED_BYTE, curve->pixel_data);
- }
- }
-
- gl->ActiveTexture (GL_TEXTURE0);
- gl->BindTexture (GL_TEXTURE_2D, texture);
-
- gst_gl_shader_set_uniform_1i (shader, "tex", 0);
-
-#if GST_GL_HAVE_OPENGL
- if (USING_OPENGL (context)) {
- gl->ActiveTexture (GL_TEXTURE1);
- gl->BindTexture (GL_TEXTURE_1D, effects->curve[curve_index]);
-
- gst_gl_shader_set_uniform_1i (shader, "curve", 1);
- }
-#endif
- if (USING_GLES2 (context) || USING_OPENGL3 (context)) {
- gl->ActiveTexture (GL_TEXTURE1);
gl->BindTexture (GL_TEXTURE_2D, effects->curve[curve_index]);
+ gl->TexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
+ gl->TexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
+ gl->TexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
+ gl->TexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
- gst_gl_shader_set_uniform_1i (shader, "curve", 1);
+ gl->TexImage2D (GL_TEXTURE_2D, 0, GL_RGB,
+ curve->width, 1, 0, GL_RGB, GL_UNSIGNED_BYTE, curve->pixel_data);
}
- gst_gl_filter_draw_texture (filter, texture, width, height);
-}
+ gst_gl_shader_use (shader);
+ gl->ActiveTexture (GL_TEXTURE2);
+ gl->BindTexture (GL_TEXTURE_2D, effects->curve[curve_index]);
-static void
-gst_gl_effects_xpro_callback (gint width, gint height, guint texture,
- gpointer data)
-{
- GstGLEffects *effects = GST_GL_EFFECTS (data);
+ gst_gl_shader_set_uniform_1i (shader, "curve", 2);
- gst_gl_effects_rgb_to_curve (effects, &xpro_curve, GST_GL_EFFECTS_CURVE_XPRO,
- width, height, texture);
+ gst_gl_filter_render_to_target_with_shader (filter, in_tex, out_tex, shader);
}
void
gst_gl_effects_xpro (GstGLEffects * effects)
{
- GstGLFilter *filter = GST_GL_FILTER (effects);
-
- gst_gl_filter_render_to_target (filter, TRUE, effects->intexture,
- effects->outtexture, gst_gl_effects_xpro_callback, effects);
+ gst_gl_effects_rgb_to_curve (effects, &xpro_curve, GST_GL_EFFECTS_CURVE_XPRO,
+ effects->intexture, effects->outtexture);
}
diff --git a/ext/gl/effects/gstgleffectsin.c b/ext/gl/effects/gstgleffectsin.c
index 5c09e8b..24b6613 100644
--- a/ext/gl/effects/gstgleffectsin.c
+++ b/ext/gl/effects/gstgleffectsin.c
@@ -23,44 +23,14 @@
#include "../gstgleffects.h"
-static void
-gst_gl_effects_sin_callback (gint width, gint height, guint texture,
- gpointer data)
-{
- GstGLShader *shader;
- GstGLEffects *effects = GST_GL_EFFECTS (data);
- GstGLFilter *filter = GST_GL_FILTER (effects);
- GstGLContext *context = GST_GL_BASE_FILTER (filter)->context;
- GstGLFuncs *gl = context->gl_vtable;
-
- shader = gst_gl_effects_get_fragment_shader (effects, "sin",
- sin_fragment_source_gles2);
-
- if (!shader)
- return;
-
-#if GST_GL_HAVE_OPENGL
- if (USING_OPENGL (context)) {
- gl->MatrixMode (GL_PROJECTION);
- gl->LoadIdentity ();
- }
-#endif
-
- gst_gl_shader_use (shader);
-
- gl->ActiveTexture (GL_TEXTURE0);
- gl->BindTexture (GL_TEXTURE_2D, texture);
-
- gst_gl_shader_set_uniform_1i (shader, "tex", 0);
-
- gst_gl_filter_draw_texture (filter, texture, width, height);
-}
-
void
gst_gl_effects_sin (GstGLEffects * effects)
{
GstGLFilter *filter = GST_GL_FILTER (effects);
+ GstGLShader *shader;
- gst_gl_filter_render_to_target (filter, TRUE, effects->intexture,
- effects->outtexture, gst_gl_effects_sin_callback, effects);
+ shader = gst_gl_effects_get_fragment_shader (effects, "sin",
+ sin_fragment_source_gles2);
+ gst_gl_filter_render_to_target_with_shader (filter, effects->intexture,
+ effects->outtexture, shader);
}
diff --git a/ext/gl/effects/gstgleffectsobel.c b/ext/gl/effects/gstgleffectsobel.c
index 8996b93..4fbe60f 100644
--- a/ext/gl/effects/gstgleffectsobel.c
+++ b/ext/gl/effects/gstgleffectsobel.c
@@ -25,144 +25,37 @@
#include "../gstgleffects.h"
-static void
-gst_gl_effects_sobel_callback_desaturate (gint width, gint height,
- guint texture, gpointer data)
-{
- GstGLShader *shader = NULL;
- GstGLEffects *effects = GST_GL_EFFECTS (data);
- GstGLFilter *filter = GST_GL_FILTER (effects);
-
- if (NULL != (shader = gst_gl_effects_get_fragment_shader (effects, "desat0",
- desaturate_fragment_source_gles2))) {
- GstGLFuncs *gl = GST_GL_BASE_FILTER (filter)->context->gl_vtable;
-
-#if GST_GL_HAVE_OPENGL
- if (USING_OPENGL (GST_GL_BASE_FILTER (filter)->context)) {
- gl->MatrixMode (GL_PROJECTION);
- gl->LoadIdentity ();
- }
-#endif
-
- gst_gl_shader_use (shader);
-
- gl->ActiveTexture (GL_TEXTURE0);
- gl->BindTexture (GL_TEXTURE_2D, texture);
-
- gst_gl_shader_set_uniform_1i (shader, "tex", 0);
-
- gst_gl_filter_draw_texture (filter, texture, width, height);
- }
-}
-
-static void
-gst_gl_effects_sobel_callback_hconv (gint width, gint height, guint texture,
- gpointer data)
-{
- GstGLShader *shader = NULL;
- GstGLEffects *effects = GST_GL_EFFECTS (data);
- GstGLFilter *filter = GST_GL_FILTER (effects);
-
- if (NULL != (shader = gst_gl_effects_get_fragment_shader (effects, "hconv0",
- sep_sobel_hconv3_fragment_source_gles2))) {
- GstGLFuncs *gl = GST_GL_BASE_FILTER (filter)->context->gl_vtable;
-
-#if GST_GL_HAVE_OPENGL
- if (USING_OPENGL (GST_GL_BASE_FILTER (filter)->context)) {
- gl->MatrixMode (GL_PROJECTION);
- gl->LoadIdentity ();
- }
-#endif
-
- gst_gl_shader_use (shader);
-
- gl->ActiveTexture (GL_TEXTURE0);
- gl->BindTexture (GL_TEXTURE_2D, texture);
-
- gst_gl_shader_set_uniform_1i (shader, "tex", 0);
- gst_gl_shader_set_uniform_1f (shader, "width", width);
-
- gst_gl_filter_draw_texture (filter, texture, width, height);
- }
-}
-
-static void
-gst_gl_effects_sobel_callback_vconv (gint width, gint height, guint texture,
- gpointer data)
-{
- GstGLShader *shader = NULL;
- GstGLEffects *effects = GST_GL_EFFECTS (data);
- GstGLFilter *filter = GST_GL_FILTER (effects);
-
- if (NULL != (shader = gst_gl_effects_get_fragment_shader (effects, "vconv0",
- sep_sobel_vconv3_fragment_source_gles2))) {
- GstGLFuncs *gl = GST_GL_BASE_FILTER (filter)->context->gl_vtable;
-
-#if GST_GL_HAVE_OPENGL
- if (USING_OPENGL (GST_GL_BASE_FILTER (filter)->context)) {
- gl->MatrixMode (GL_PROJECTION);
- gl->LoadIdentity ();
- }
-#endif
-
- gst_gl_shader_use (shader);
-
- gl->ActiveTexture (GL_TEXTURE0);
- gl->BindTexture (GL_TEXTURE_2D, texture);
-
- gst_gl_shader_set_uniform_1i (shader, "tex", 0);
- gst_gl_shader_set_uniform_1f (shader, "height", height);
-
- gst_gl_filter_draw_texture (filter, texture, width, height);
- }
-}
-
-static void
-gst_gl_effects_sobel_callback_length (gint width, gint height, guint texture,
- gpointer data)
-{
- GstGLShader *shader = NULL;
- GstGLEffects *effects = GST_GL_EFFECTS (data);
- GstGLFilter *filter = GST_GL_FILTER (effects);
-
- if (NULL != (shader = gst_gl_effects_get_fragment_shader (effects, "len0",
- sep_sobel_length_fragment_source_gles2))) {
- GstGLFuncs *gl = GST_GL_BASE_FILTER (filter)->context->gl_vtable;
-
-#if GST_GL_HAVE_OPENGL
- if (USING_OPENGL (GST_GL_BASE_FILTER (filter)->context)) {
- gl->MatrixMode (GL_PROJECTION);
- gl->LoadIdentity ();
- }
-#endif
-
- gst_gl_shader_use (shader);
-
- gl->ActiveTexture (GL_TEXTURE0);
- gl->BindTexture (GL_TEXTURE_2D, texture);
-
- gst_gl_shader_set_uniform_1i (shader, "tex", 0);
- gst_gl_shader_set_uniform_1i (shader, "invert", effects->invert);
-
- gst_gl_filter_draw_texture (filter, texture, width, height);
- }
-}
-
void
gst_gl_effects_sobel (GstGLEffects * effects)
{
GstGLFilter *filter = GST_GL_FILTER (effects);
+ GstGLShader *shader;
- gst_gl_filter_render_to_target (filter, TRUE,
- effects->intexture, effects->midtexture[0],
- gst_gl_effects_sobel_callback_desaturate, effects);
- gst_gl_filter_render_to_target (filter, FALSE,
- effects->midtexture[0], effects->midtexture[1],
- gst_gl_effects_sobel_callback_hconv, effects);
- gst_gl_filter_render_to_target (filter, FALSE,
- effects->midtexture[1], effects->midtexture[0],
- gst_gl_effects_sobel_callback_vconv, effects);
- gst_gl_filter_render_to_target (filter, FALSE,
- effects->midtexture[0], effects->outtexture,
- gst_gl_effects_sobel_callback_length, effects);
+ shader = gst_gl_effects_get_fragment_shader (effects, "desat0",
+ desaturate_fragment_source_gles2);
+ gst_gl_filter_render_to_target_with_shader (filter, effects->intexture,
+ effects->midtexture[0], shader);
+
+ shader = gst_gl_effects_get_fragment_shader (effects, "hconv0",
+ sep_sobel_hconv3_fragment_source_gles2);
+ gst_gl_shader_use (shader);
+ gst_gl_shader_set_uniform_1f (shader, "height",
+ GST_VIDEO_INFO_HEIGHT (&filter->out_info));
+ gst_gl_filter_render_to_target_with_shader (filter, effects->midtexture[0],
+ effects->midtexture[1], shader);
+
+ shader = gst_gl_effects_get_fragment_shader (effects, "vconv0",
+ sep_sobel_vconv3_fragment_source_gles2);
+ gst_gl_shader_use (shader);
+ gst_gl_shader_set_uniform_1f (shader, "width",
+ GST_VIDEO_INFO_WIDTH (&filter->out_info));
+ gst_gl_filter_render_to_target_with_shader (filter, effects->midtexture[1],
+ effects->midtexture[0], shader);
+
+ shader = gst_gl_effects_get_fragment_shader (effects, "len0",
+ sep_sobel_length_fragment_source_gles2);
+ gst_gl_shader_use (shader);
+ gst_gl_shader_set_uniform_1i (shader, "invert", effects->invert);
+ gst_gl_filter_render_to_target_with_shader (filter, effects->midtexture[0],
+ effects->outtexture, shader);
}
diff --git a/ext/gl/effects/gstgleffectsquare.c b/ext/gl/effects/gstgleffectsquare.c
index e74c943..911d30f 100644
--- a/ext/gl/effects/gstgleffectsquare.c
+++ b/ext/gl/effects/gstgleffectsquare.c
@@ -23,44 +23,14 @@
#include "../gstgleffects.h"
-static void
-gst_gl_effects_square_callback (gint width, gint height, guint texture,
- gpointer data)
-{
- GstGLShader *shader;
- GstGLEffects *effects = GST_GL_EFFECTS (data);
- GstGLFilter *filter = GST_GL_FILTER (effects);
- GstGLContext *context = GST_GL_BASE_FILTER (filter)->context;
- GstGLFuncs *gl = context->gl_vtable;
-
- shader = gst_gl_effects_get_fragment_shader (effects, "square",
- square_fragment_source_gles2);
-
- if (!shader)
- return;
-
-#if GST_GL_HAVE_OPENGL
- if (USING_OPENGL (context)) {
- gl->MatrixMode (GL_PROJECTION);
- gl->LoadIdentity ();
- }
-#endif
-
- gst_gl_shader_use (shader);
-
- gl->ActiveTexture (GL_TEXTURE0);
- gl->BindTexture (GL_TEXTURE_2D, texture);
-
- gst_gl_shader_set_uniform_1i (shader, "tex", 0);
-
- gst_gl_filter_draw_texture (filter, texture, width, height);
-}
-
void
gst_gl_effects_square (GstGLEffects * effects)
{
GstGLFilter *filter = GST_GL_FILTER (effects);
+ GstGLShader *shader;
- gst_gl_filter_render_to_target (filter, TRUE, effects->intexture,
- effects->outtexture, gst_gl_effects_square_callback, effects);
+ shader = gst_gl_effects_get_fragment_shader (effects, "square",
+ square_fragment_source_gles2);
+ gst_gl_filter_render_to_target_with_shader (filter, effects->intexture,
+ effects->outtexture, shader);
}
diff --git a/ext/gl/effects/gstgleffectsqueeze.c b/ext/gl/effects/gstgleffectsqueeze.c
index 2dbded5..1999978 100644
--- a/ext/gl/effects/gstgleffectsqueeze.c
+++ b/ext/gl/effects/gstgleffectsqueeze.c
@@ -23,44 +23,14 @@
#include "../gstgleffects.h"
-static void
-gst_gl_effects_squeeze_callback (gint width, gint height, guint texture,
- gpointer data)
-{
- GstGLShader *shader;
- GstGLFilter *filter = GST_GL_FILTER (data);
- GstGLEffects *effects = GST_GL_EFFECTS (data);
- GstGLContext *context = GST_GL_BASE_FILTER (filter)->context;
- GstGLFuncs *gl = context->gl_vtable;
-
- shader = gst_gl_effects_get_fragment_shader (effects, "squeeze",
- squeeze_fragment_source_gles2);
-
- if (!shader)
- return;
-
-#if GST_GL_HAVE_OPENGL
- if (USING_OPENGL (context)) {
- gl->MatrixMode (GL_PROJECTION);
- gl->LoadIdentity ();
- }
-#endif
-
- gst_gl_shader_use (shader);
-
- gl->ActiveTexture (GL_TEXTURE0);
- gl->BindTexture (GL_TEXTURE_2D, texture);
-
- gst_gl_shader_set_uniform_1i (shader, "tex", 0);
-
- gst_gl_filter_draw_texture (filter, texture, width, height);
-}
-
void
gst_gl_effects_squeeze (GstGLEffects * effects)
{
GstGLFilter *filter = GST_GL_FILTER (effects);
+ GstGLShader *shader;
- gst_gl_filter_render_to_target (filter, TRUE, effects->intexture,
- effects->outtexture, gst_gl_effects_squeeze_callback, effects);
+ shader = gst_gl_effects_get_fragment_shader (effects, "squeeze",
+ squeeze_fragment_source_gles2);
+ gst_gl_filter_render_to_target_with_shader (filter, effects->intexture,
+ effects->outtexture, shader);
}
diff --git a/ext/gl/effects/gstgleffectstretch.c b/ext/gl/effects/gstgleffectstretch.c
index d132bd0..bbc0c4c 100644
--- a/ext/gl/effects/gstgleffectstretch.c
+++ b/ext/gl/effects/gstgleffectstretch.c
@@ -23,43 +23,14 @@
#include "../gstgleffects.h"
-static void
-gst_gl_effects_stretch_callback (gint width, gint height, guint texture,
- gpointer data)
-{
- GstGLShader *shader;
- GstGLEffects *effects = GST_GL_EFFECTS (data);
- GstGLFilter *filter = GST_GL_FILTER (effects);
- GstGLContext *context = GST_GL_BASE_FILTER (filter)->context;
- GstGLFuncs *gl = context->gl_vtable;
-
- shader = gst_gl_effects_get_fragment_shader (effects, "stretch",
- stretch_fragment_source_gles2);
-
- if (!shader)
- return;
-
-#if GST_GL_HAVE_OPENGL
- if (USING_OPENGL (context)) {
- gl->MatrixMode (GL_PROJECTION);
- gl->LoadIdentity ();
- }
-#endif
- gst_gl_shader_use (shader);
-
- gl->ActiveTexture (GL_TEXTURE0);
- gl->BindTexture (GL_TEXTURE_2D, texture);
-
- gst_gl_shader_set_uniform_1i (shader, "tex", 0);
-
- gst_gl_filter_draw_texture (filter, texture, width, height);
-}
-
void
gst_gl_effects_stretch (GstGLEffects * effects)
{
GstGLFilter *filter = GST_GL_FILTER (effects);
+ GstGLShader *shader;
- gst_gl_filter_render_to_target (filter, TRUE, effects->intexture,
- effects->outtexture, gst_gl_effects_stretch_callback, effects);
+ shader = gst_gl_effects_get_fragment_shader (effects, "stretch",
+ stretch_fragment_source_gles2);
+ gst_gl_filter_render_to_target_with_shader (filter, effects->intexture,
+ effects->outtexture, shader);
}
diff --git a/ext/gl/effects/gstgleffecttunnel.c b/ext/gl/effects/gstgleffecttunnel.c
index 5029c51..4990b83 100644
--- a/ext/gl/effects/gstgleffecttunnel.c
+++ b/ext/gl/effects/gstgleffecttunnel.c
@@ -23,44 +23,14 @@
#include "../gstgleffects.h"
-static void
-gst_gl_effects_tunnel_callback (gint width, gint height, guint texture,
- gpointer data)
-{
- GstGLShader *shader;
- GstGLEffects *effects = GST_GL_EFFECTS (data);
- GstGLFilter *filter = GST_GL_FILTER (effects);
- GstGLContext *context = GST_GL_BASE_FILTER (filter)->context;
- GstGLFuncs *gl = context->gl_vtable;
-
- shader = gst_gl_effects_get_fragment_shader (effects, "tunnel",
- tunnel_fragment_source_gles2);
-
- if (!shader)
- return;
-
-#if GST_GL_HAVE_OPENGL
- if (USING_OPENGL (context)) {
- gl->MatrixMode (GL_PROJECTION);
- gl->LoadIdentity ();
- }
-#endif
-
- gst_gl_shader_use (shader);
-
- gl->ActiveTexture (GL_TEXTURE0);
- gl->BindTexture (GL_TEXTURE_2D, texture);
-
- gst_gl_shader_set_uniform_1i (shader, "tex", 0);
-
- gst_gl_filter_draw_texture (filter, texture, width, height);
-}
-
void
gst_gl_effects_tunnel (GstGLEffects * effects)
{
GstGLFilter *filter = GST_GL_FILTER (effects);
+ GstGLShader *shader;
- gst_gl_filter_render_to_target (filter, TRUE, effects->intexture,
- effects->outtexture, gst_gl_effects_tunnel_callback, effects);
+ shader = gst_gl_effects_get_fragment_shader (effects, "tunnel",
+ tunnel_fragment_source_gles2);
+ gst_gl_filter_render_to_target_with_shader (filter, effects->intexture,
+ effects->outtexture, shader);
}
diff --git a/ext/gl/effects/gstgleffecttwirl.c b/ext/gl/effects/gstgleffecttwirl.c
index 6c73f19..57a9b53 100644
--- a/ext/gl/effects/gstgleffecttwirl.c
+++ b/ext/gl/effects/gstgleffecttwirl.c
@@ -23,44 +23,14 @@
#include "../gstgleffects.h"
-static void
-gst_gl_effects_twirl_callback (gint width, gint height, guint texture,
- gpointer data)
-{
- GstGLShader *shader;
- GstGLEffects *effects = GST_GL_EFFECTS (data);
- GstGLFilter *filter = GST_GL_FILTER (effects);
- GstGLContext *context = GST_GL_BASE_FILTER (filter)->context;
- GstGLFuncs *gl = context->gl_vtable;
-
- shader = gst_gl_effects_get_fragment_shader (effects, "twirl",
- twirl_fragment_source_gles2);
-
- if (!shader)
- return;
-
-#if GST_GL_HAVE_OPENGL
- if (USING_OPENGL (context)) {
- gl->MatrixMode (GL_PROJECTION);
- gl->LoadIdentity ();
- }
-#endif
-
- gst_gl_shader_use (shader);
-
- gl->ActiveTexture (GL_TEXTURE0);
- gl->BindTexture (GL_TEXTURE_2D, texture);
-
- gst_gl_shader_set_uniform_1i (shader, "tex", 0);
-
- gst_gl_filter_draw_texture (filter, texture, width, height);
-}
-
void
gst_gl_effects_twirl (GstGLEffects * effects)
{
GstGLFilter *filter = GST_GL_FILTER (effects);
+ GstGLShader *shader;
- gst_gl_filter_render_to_target (filter, TRUE, effects->intexture,
- effects->outtexture, gst_gl_effects_twirl_callback, effects);
+ shader = gst_gl_effects_get_fragment_shader (effects, "twirl",
+ twirl_fragment_source_gles2);
+ gst_gl_filter_render_to_target_with_shader (filter, effects->intexture,
+ effects->outtexture, shader);
}
diff --git a/ext/gl/effects/gstgleffectxray.c b/ext/gl/effects/gstgleffectxray.c
index c045cb6..a7c9b36 100644
--- a/ext/gl/effects/gstgleffectxray.c
+++ b/ext/gl/effects/gstgleffectxray.c
@@ -28,297 +28,97 @@
static gboolean kernel_ready = FALSE;
static float gauss_kernel[7];
-static void
-gst_gl_effects_xray_step_one (gint width, gint height, guint texture,
- gpointer data)
+void
+gst_gl_effects_xray (GstGLEffects * effects)
{
- GstGLEffects *effects = GST_GL_EFFECTS (data);
-
- gst_gl_effects_luma_to_curve (effects, &xray_curve, GST_GL_EFFECTS_CURVE_XRAY,
- width, height, texture);
-}
-
-static void
-gst_gl_effects_xray_step_two (gint width, gint height, guint texture,
- gpointer data)
-{
- GstGLShader *shader;
- GstGLEffects *effects = GST_GL_EFFECTS (data);
+ const GstGLFuncs *gl = GST_GL_BASE_FILTER (effects)->context->gl_vtable;
GstGLFilter *filter = GST_GL_FILTER (effects);
- GstGLContext *context = GST_GL_BASE_FILTER (filter)->context;
- GstGLFuncs *gl = context->gl_vtable;
-
- shader = gst_gl_effects_get_fragment_shader (effects, "hconv7",
- hconv7_fragment_source_gles2);
-
- if (!shader)
- return;
+ GstGLShader *shader;
if (!kernel_ready) {
fill_gaussian_kernel (gauss_kernel, 7, 1.5);
kernel_ready = TRUE;
}
-#if GST_GL_HAVE_OPENGL
- if (USING_OPENGL (context)) {
- gl->MatrixMode (GL_PROJECTION);
- gl->LoadIdentity ();
- }
-#endif
-
- gst_gl_shader_use (shader);
-
- gl->ActiveTexture (GL_TEXTURE1);
- gl->BindTexture (GL_TEXTURE_2D, texture);
-
- gst_gl_shader_set_uniform_1i (shader, "tex", 1);
- gst_gl_shader_set_uniform_1fv (shader, "kernel", 9, gauss_kernel);
- gst_gl_shader_set_uniform_1f (shader, "gauss_width", width);
-
- gst_gl_filter_draw_texture (filter, texture, width, height);
-}
-
-static void
-gst_gl_effects_xray_step_three (gint width, gint height, guint texture,
- gpointer data)
-{
- GstGLShader *shader;
- GstGLEffects *effects = GST_GL_EFFECTS (data);
- GstGLFilter *filter = GST_GL_FILTER (effects);
- GstGLContext *context = GST_GL_BASE_FILTER (filter)->context;
- GstGLFuncs *gl = context->gl_vtable;
-
- shader = gst_gl_effects_get_fragment_shader (effects, "vconv7",
- vconv7_fragment_source_gles2);
-
- if (!shader)
- return;
-
-#if GST_GL_HAVE_OPENGL
- if (USING_OPENGL (context)) {
- gl->MatrixMode (GL_PROJECTION);
- gl->LoadIdentity ();
- }
-#endif
-
- gst_gl_shader_use (shader);
-
- gl->ActiveTexture (GL_TEXTURE1);
- gl->BindTexture (GL_TEXTURE_2D, texture);
-
- gst_gl_shader_set_uniform_1i (shader, "tex", 1);
- gst_gl_shader_set_uniform_1fv (shader, "kernel", 9, gauss_kernel);
- gst_gl_shader_set_uniform_1f (shader, "gauss_height", height);
-
- gst_gl_filter_draw_texture (filter, texture, width, height);
-}
-
-/* multipass separable sobel */
-static void
-gst_gl_effects_xray_desaturate (gint width, gint height, guint texture,
- gpointer data)
-{
- GstGLShader *shader;
- GstGLEffects *effects = GST_GL_EFFECTS (data);
- GstGLFilter *filter = GST_GL_FILTER (effects);
- GstGLContext *context = GST_GL_BASE_FILTER (filter)->context;
- GstGLFuncs *gl = context->gl_vtable;
-
- shader = gst_gl_effects_get_fragment_shader (effects, "desaturate",
- desaturate_fragment_source_gles2);
-
- if (!shader)
- return;
-
-#if GST_GL_HAVE_OPENGL
- if (USING_OPENGL (context)) {
- gl->MatrixMode (GL_PROJECTION);
- gl->LoadIdentity ();
- }
-#endif
-
- gst_gl_shader_use (shader);
-
- gl->ActiveTexture (GL_TEXTURE1);
- gl->BindTexture (GL_TEXTURE_2D, texture);
-
- gst_gl_shader_set_uniform_1i (shader, "tex", 1);
- gst_gl_filter_draw_texture (filter, texture, width, height);
-}
-
-static void
-gst_gl_effects_xray_sobel_hconv (gint width, gint height, guint texture,
- gpointer data)
-{
- GstGLShader *shader;
- GstGLEffects *effects = GST_GL_EFFECTS (data);
- GstGLFilter *filter = GST_GL_FILTER (effects);
- GstGLContext *context = GST_GL_BASE_FILTER (filter)->context;
- GstGLFuncs *gl = context->gl_vtable;
-
- shader = gst_gl_effects_get_fragment_shader (effects, "sobel_hconv3",
- sep_sobel_hconv3_fragment_source_gles2);
-
- if (!shader)
- return;
-
-#if GST_GL_HAVE_OPENGL
- if (USING_OPENGL (context)) {
- gl->MatrixMode (GL_PROJECTION);
- gl->LoadIdentity ();
- }
-#endif
-
- gst_gl_shader_use (shader);
-
- gl->ActiveTexture (GL_TEXTURE1);
- gl->BindTexture (GL_TEXTURE_2D, texture);
-
- gst_gl_shader_set_uniform_1i (shader, "tex", 1);
- gst_gl_shader_set_uniform_1f (shader, "width", width);
-
- gst_gl_filter_draw_texture (filter, texture, width, height);
-}
-
-static void
-gst_gl_effects_xray_sobel_vconv (gint width, gint height, guint texture,
- gpointer data)
-{
- GstGLShader *shader;
- GstGLEffects *effects = GST_GL_EFFECTS (data);
- GstGLFilter *filter = GST_GL_FILTER (effects);
- GstGLContext *context = GST_GL_BASE_FILTER (filter)->context;
- GstGLFuncs *gl = context->gl_vtable;
-
- shader = gst_gl_effects_get_fragment_shader (effects, "sobel_vconv3",
- sep_sobel_vconv3_fragment_source_gles2);
-
- if (!shader)
- return;
-
-#if GST_GL_HAVE_OPENGL
- if (USING_OPENGL (context)) {
- gl->MatrixMode (GL_PROJECTION);
- gl->LoadIdentity ();
- }
-#endif
-
- gst_gl_shader_use (shader);
-
- gl->ActiveTexture (GL_TEXTURE1);
- gl->BindTexture (GL_TEXTURE_2D, texture);
-
- gst_gl_shader_set_uniform_1i (shader, "tex", 1);
- gst_gl_shader_set_uniform_1f (shader, "height", height);
-
- gst_gl_filter_draw_texture (filter, texture, width, height);
-}
-
-static void
-gst_gl_effects_xray_sobel_length (gint width, gint height, guint texture,
- gpointer data)
-{
- GstGLShader *shader;
- GstGLEffects *effects = GST_GL_EFFECTS (data);
- GstGLFilter *filter = GST_GL_FILTER (effects);
- GstGLContext *context = GST_GL_BASE_FILTER (filter)->context;
- GstGLFuncs *gl = context->gl_vtable;
-
- shader = gst_gl_effects_get_fragment_shader (effects, "sobel_length",
- sep_sobel_length_fragment_source_gles2);
-
- if (!shader)
- return;
-
-#if GST_GL_HAVE_OPENGL
- if (USING_OPENGL (context)) {
- gl->MatrixMode (GL_PROJECTION);
- gl->LoadIdentity ();
- }
-#endif
-
- gst_gl_shader_use (shader);
-
- gl->ActiveTexture (GL_TEXTURE1);
- gl->BindTexture (GL_TEXTURE_2D, texture);
-
- gst_gl_shader_set_uniform_1i (shader, "tex", 1);
- gst_gl_shader_set_uniform_1i (shader, "invert", TRUE);
- gst_gl_filter_draw_texture (filter, texture, width, height);
-}
-
-/* end of sobel passes */
-
-static void
-gst_gl_effects_xray_step_five (gint width, gint height, guint texture,
- gpointer data)
-{
- GstGLShader *shader;
- GstGLEffects *effects = GST_GL_EFFECTS (data);
- GstGLFilter *filter = GST_GL_FILTER (effects);
- GstGLContext *context = GST_GL_BASE_FILTER (filter)->context;
- GstGLFuncs *gl = context->gl_vtable;
-
- shader = gst_gl_effects_get_fragment_shader (effects, "multiply",
- multiply_fragment_source_gles2);
-
- if (!shader)
- return;
-
-#if GST_GL_HAVE_OPENGL
- if (USING_OPENGL (context)) {
- gl->MatrixMode (GL_PROJECTION);
- gl->LoadIdentity ();
- }
-#endif
-
- gst_gl_shader_use (shader);
-
- gl->ActiveTexture (GL_TEXTURE2);
- gl->BindTexture (GL_TEXTURE_2D, effects->midtexture[2]);
-
- gst_gl_shader_set_uniform_1i (shader, "base", 2);
-
- gl->ActiveTexture (GL_TEXTURE1);
- gl->BindTexture (GL_TEXTURE_2D, texture);
-
- gst_gl_shader_set_uniform_1f (shader, "alpha", (gfloat) 0.5f);
- gst_gl_shader_set_uniform_1i (shader, "blend", 1);
-
- gst_gl_filter_draw_texture (filter, texture, width, height);
-}
-
-void
-gst_gl_effects_xray (GstGLEffects * effects)
-{
- GstGLFilter *filter = GST_GL_FILTER (effects);
/* map luma to xray curve */
- gst_gl_filter_render_to_target (filter, TRUE, effects->intexture,
- effects->midtexture[0], gst_gl_effects_xray_step_one, effects);
+ gst_gl_effects_luma_to_curve (effects, &xray_curve, GST_GL_EFFECTS_CURVE_XRAY,
+ effects->intexture, effects->midtexture[0]);
+
/* horizontal blur */
- gst_gl_filter_render_to_target (filter, FALSE, effects->midtexture[0],
- effects->midtexture[1], gst_gl_effects_xray_step_two, effects);
+ shader = gst_gl_effects_get_fragment_shader (effects, "hconv7",
+ hconv7_fragment_source_gles2);
+ gst_gl_shader_use (shader);
+ gst_gl_shader_set_uniform_1fv (shader, "kernel", 9, gauss_kernel);
+ gst_gl_shader_set_uniform_1f (shader, "gauss_width",
+ GST_VIDEO_INFO_WIDTH (&filter->in_info));
+ gst_gl_filter_render_to_target_with_shader (filter, effects->midtexture[0],
+ effects->midtexture[1], shader);
+
/* vertical blur */
- gst_gl_filter_render_to_target (filter, FALSE, effects->midtexture[1],
- effects->midtexture[2], gst_gl_effects_xray_step_three, effects);
+ shader = gst_gl_effects_get_fragment_shader (effects, "vconv7",
+ vconv7_fragment_source_gles2);
+ gst_gl_shader_use (shader);
+ gst_gl_shader_set_uniform_1fv (shader, "kernel", 9, gauss_kernel);
+ gst_gl_shader_set_uniform_1f (shader, "gauss_height",
+ GST_VIDEO_INFO_HEIGHT (&filter->out_info));
+ gst_gl_filter_render_to_target_with_shader (filter, effects->midtexture[1],
+ effects->midtexture[2], shader);
+
/* detect edges with Sobel */
/* the old version used edges from the blurred texture, this uses
* the ones from original texture, still not sure what I like
* more. This one gives better edges obviously but behaves badly
* with noise */
/* desaturate */
- gst_gl_filter_render_to_target (filter, TRUE, effects->intexture,
- effects->midtexture[3], gst_gl_effects_xray_desaturate, effects);
+ shader = gst_gl_effects_get_fragment_shader (effects, "desaturate",
+ desaturate_fragment_source_gles2);
+ gst_gl_filter_render_to_target_with_shader (filter, effects->intexture,
+ effects->midtexture[3], shader);
+
/* horizonal convolution */
- gst_gl_filter_render_to_target (filter, FALSE, effects->midtexture[3],
- effects->midtexture[4], gst_gl_effects_xray_sobel_hconv, effects);
+ shader = gst_gl_effects_get_fragment_shader (effects, "sobel_hconv3",
+ sep_sobel_hconv3_fragment_source_gles2);
+ gst_gl_shader_use (shader);
+ gst_gl_shader_set_uniform_1f (shader, "width",
+ GST_VIDEO_INFO_WIDTH (&filter->out_info));
+ gst_gl_filter_render_to_target_with_shader (filter, effects->midtexture[3],
+ effects->midtexture[4], shader);
+
/* vertical convolution */
- gst_gl_filter_render_to_target (filter, FALSE, effects->midtexture[4],
- effects->midtexture[3], gst_gl_effects_xray_sobel_vconv, effects);
+ shader = gst_gl_effects_get_fragment_shader (effects, "sobel_vconv3",
+ sep_sobel_vconv3_fragment_source_gles2);
+ gst_gl_shader_use (shader);
+ gst_gl_shader_set_uniform_1f (shader, "height",
+ GST_VIDEO_INFO_HEIGHT (&filter->out_info));
+ gst_gl_filter_render_to_target_with_shader (filter, effects->midtexture[4],
+ effects->midtexture[3], shader);
+
/* gradient length */
- gst_gl_filter_render_to_target (filter, FALSE, effects->midtexture[3],
- effects->midtexture[4], gst_gl_effects_xray_sobel_length, effects);
+ shader = gst_gl_effects_get_fragment_shader (effects, "sobel_length",
+ sep_sobel_length_fragment_source_gles2);
+ gst_gl_shader_use (shader);
+ gst_gl_shader_set_uniform_1i (shader, "invert", TRUE);
+ gst_gl_filter_render_to_target_with_shader (filter, effects->midtexture[3],
+ effects->midtexture[4], shader);
+
/* multiply edges with the blurred image */
- gst_gl_filter_render_to_target (filter, FALSE, effects->midtexture[4],
- effects->outtexture, gst_gl_effects_xray_step_five, effects);
+ shader = gst_gl_effects_get_fragment_shader (effects, "multiply",
+ multiply_fragment_source_gles2);
+ gst_gl_shader_use (shader);
+
+ gl->ActiveTexture (GL_TEXTURE2);
+ gl->BindTexture (GL_TEXTURE_2D,
+ gst_gl_memory_get_texture_id (effects->midtexture[2]));
+
+ gst_gl_shader_set_uniform_1i (shader, "base", 2);
+
+ gl->ActiveTexture (GL_TEXTURE1);
+ gl->BindTexture (GL_TEXTURE_2D,
+ gst_gl_memory_get_texture_id (effects->midtexture[4]));
+
+ gst_gl_shader_set_uniform_1f (shader, "alpha", (gfloat) 0.5f);
+ gst_gl_shader_set_uniform_1i (shader, "blend", 1);
+
+ gst_gl_filter_render_to_target_with_shader (filter, effects->midtexture[4],
+ effects->outtexture, shader);
}
diff --git a/ext/gl/gstglcolorbalance.c b/ext/gl/gstglcolorbalance.c
index 27dcb00..92d4447 100644
--- a/ext/gl/gstglcolorbalance.c
+++ b/ext/gl/gstglcolorbalance.c
@@ -231,13 +231,11 @@
gst_object_sync_values (GST_OBJECT (balance), stream_time);
}
-static void
-gst_gl_color_balance_callback (gint width, gint height, guint tex_id,
- gpointer data)
+static gboolean
+gst_gl_color_balance_filter_texture (GstGLFilter * filter, GstGLMemory * in_tex,
+ GstGLMemory * out_tex)
{
- GstGLColorBalance *balance = GST_GL_COLOR_BALANCE (data);
- GstGLFilter *filter = GST_GL_FILTER (data);
- const GstGLFuncs *gl = GST_GL_BASE_FILTER (data)->context->gl_vtable;
+ GstGLColorBalance *balance = GST_GL_COLOR_BALANCE (filter);
if (!balance->shader)
_create_shader (balance);
@@ -252,17 +250,8 @@
gst_gl_shader_set_uniform_1f (balance->shader, "hue", balance->hue);
GST_OBJECT_UNLOCK (balance);
- gl->BindTexture (GL_TEXTURE_2D, tex_id);
-
- gst_gl_filter_draw_texture (filter, tex_id, width, height);
-}
-
-static gboolean
-gst_gl_color_balance_filter_texture (GstGLFilter * filter, guint in_tex,
- guint out_tex)
-{
- gst_gl_filter_render_to_target (filter, TRUE, in_tex, out_tex,
- (GLCB) gst_gl_color_balance_callback, filter);
+ gst_gl_filter_render_to_target_with_shader (filter, in_tex, out_tex,
+ balance->shader);
return TRUE;
}
diff --git a/ext/gl/gstglcolorscale.c b/ext/gl/gstglcolorscale.c
index c7df0a8..2ca5480 100644
--- a/ext/gl/gstglcolorscale.c
+++ b/ext/gl/gstglcolorscale.c
@@ -74,7 +74,7 @@
static void gst_gl_colorscale_gl_stop (GstGLBaseFilter * base_filter);
static gboolean gst_gl_colorscale_filter_texture (GstGLFilter * filter,
- guint in_tex, guint out_tex);
+ GstGLMemory * in_tex, GstGLMemory * out_tex);
static void
gst_gl_colorscale_class_init (GstGLColorscaleClass * klass)
@@ -175,13 +175,13 @@
}
static gboolean
-gst_gl_colorscale_filter_texture (GstGLFilter * filter, guint in_tex,
- guint out_tex)
+gst_gl_colorscale_filter_texture (GstGLFilter * filter, GstGLMemory * in_tex,
+ GstGLMemory * out_tex)
{
GstGLColorscale *colorscale = GST_GL_COLORSCALE (filter);
if (gst_gl_context_get_gl_api (GST_GL_BASE_FILTER (filter)->context))
- gst_gl_filter_render_to_target_with_shader (filter, TRUE, in_tex, out_tex,
+ gst_gl_filter_render_to_target_with_shader (filter, in_tex, out_tex,
colorscale->shader);
return TRUE;
diff --git a/ext/gl/gstgldeinterlace.c b/ext/gl/gstgldeinterlace.c
index c1429a9..fe207cc 100644
--- a/ext/gl/gstgldeinterlace.c
+++ b/ext/gl/gstgldeinterlace.c
@@ -64,11 +64,11 @@
static gboolean gst_gl_deinterlace_filter (GstGLFilter * filter,
GstBuffer * inbuf, GstBuffer * outbuf);
static gboolean gst_gl_deinterlace_filter_texture (GstGLFilter * filter,
- guint in_tex, guint out_tex);
-static void gst_gl_deinterlace_vfir_callback (gint width, gint height,
- guint texture, gpointer stuff);
-static void gst_gl_deinterlace_greedyh_callback (gint width, gint height,
- guint texture, gpointer stuff);
+ GstGLMemory * in_tex, GstGLMemory * out_tex);
+static gboolean gst_gl_deinterlace_vfir_callback (GstGLFilter * filter,
+ GstGLMemory * in_tex, gpointer stuff);
+static gboolean gst_gl_deinterlace_greedyh_callback (GstGLFilter * filter,
+ GstGLMemory * in_tex, gpointer stuff);
/* *INDENT-OFF* */
static const gchar *greedyh_fragment_source =
@@ -276,7 +276,7 @@
filter->deinterlacefunc = gst_gl_deinterlace_vfir_callback;
filter->current_method = GST_GL_DEINTERLACE_VFIR;
filter->prev_buffer = NULL;
- filter->prev_tex = 0;
+ filter->prev_tex = NULL;
}
static gboolean
@@ -364,13 +364,13 @@
}
static gboolean
-gst_gl_deinterlace_filter_texture (GstGLFilter * filter, guint in_tex,
- guint out_tex)
+gst_gl_deinterlace_filter_texture (GstGLFilter * filter, GstGLMemory * in_tex,
+ GstGLMemory * out_tex)
{
GstGLDeinterlace *deinterlace_filter = GST_GL_DEINTERLACE (filter);
//blocking call, use a FBO
- gst_gl_filter_render_to_target (filter, TRUE, in_tex, out_tex,
+ gst_gl_filter_render_to_target (filter, in_tex, out_tex,
deinterlace_filter->deinterlacefunc, deinterlace_filter);
return TRUE;
@@ -424,20 +424,19 @@
return shader;
}
-static void
-gst_gl_deinterlace_vfir_callback (gint width, gint height, guint texture,
- gpointer stuff)
+static gboolean
+gst_gl_deinterlace_vfir_callback (GstGLFilter * filter, GstGLMemory * in_tex,
+ gpointer user_data)
{
- GstGLShader *shader;
- GstGLFilter *filter = GST_GL_FILTER (stuff);
GstGLContext *context = GST_GL_BASE_FILTER (filter)->context;
- GstGLFuncs *gl = context->gl_vtable;
+ const GstGLFuncs *gl = context->gl_vtable;
+ GstGLShader *shader;
shader = gst_gl_deinterlace_get_fragment_shader (filter, "vfir",
vfir_fragment_source);
if (!shader)
- return;
+ return FALSE;
#if GST_GL_HAVE_OPENGL
if (USING_OPENGL (context)) {
@@ -449,7 +448,7 @@
gst_gl_shader_use (shader);
gl->ActiveTexture (GL_TEXTURE0);
- gl->BindTexture (GL_TEXTURE_2D, texture);
+ gl->BindTexture (GL_TEXTURE_2D, gst_gl_memory_get_texture_id (in_tex));
gst_gl_shader_set_uniform_1i (shader, "tex", 0);
gst_gl_shader_set_uniform_1f (shader, "width",
@@ -457,15 +456,16 @@
gst_gl_shader_set_uniform_1f (shader, "height",
GST_VIDEO_INFO_HEIGHT (&filter->out_info));
- gst_gl_filter_draw_texture (filter, texture, width, height);
+ gst_gl_filter_draw_fullscreen_quad (filter);
+
+ return TRUE;
}
-static void
-gst_gl_deinterlace_greedyh_callback (gint width, gint height, guint texture,
- gpointer stuff)
+static gboolean
+gst_gl_deinterlace_greedyh_callback (GstGLFilter * filter, GstGLMemory * in_tex,
+ gpointer user_data)
{
GstGLShader *shader;
- GstGLFilter *filter = GST_GL_FILTER (stuff);
GstGLDeinterlace *deinterlace_filter = GST_GL_DEINTERLACE (filter);
GstGLContext *context = GST_GL_BASE_FILTER (filter)->context;
GstGLFuncs *gl = context->gl_vtable;
@@ -475,7 +475,7 @@
greedyh_fragment_source);
if (!shader)
- return;
+ return FALSE;
#if GST_GL_HAVE_OPENGL
if (USING_OPENGL (context)) {
@@ -486,14 +486,15 @@
gst_gl_shader_use (shader);
- if (G_LIKELY (deinterlace_filter->prev_tex != 0)) {
+ if (G_LIKELY (deinterlace_filter->prev_tex != NULL)) {
gl->ActiveTexture (GL_TEXTURE1);
gst_gl_shader_set_uniform_1i (shader, "tex_prev", 1);
- gl->BindTexture (GL_TEXTURE_2D, deinterlace_filter->prev_tex);
+ gl->BindTexture (GL_TEXTURE_2D,
+ gst_gl_memory_get_texture_id (deinterlace_filter->prev_tex));
}
gl->ActiveTexture (GL_TEXTURE0);
- gl->BindTexture (GL_TEXTURE_2D, texture);
+ gl->BindTexture (GL_TEXTURE_2D, gst_gl_memory_get_texture_id (in_tex));
gst_gl_shader_set_uniform_1i (shader, "tex", 0);
gst_gl_shader_set_uniform_1f (shader, "max_comb", 5.0f / 255.0f);
@@ -505,8 +506,10 @@
gst_gl_shader_set_uniform_1f (shader, "height",
GST_VIDEO_INFO_HEIGHT (&filter->out_info));
- gst_gl_filter_draw_texture (filter, texture, width, height);
+ gst_gl_filter_draw_fullscreen_quad (filter);
/* we keep the previous buffer around so this is safe */
- deinterlace_filter->prev_tex = texture;
+ deinterlace_filter->prev_tex = in_tex;
+
+ return TRUE;
}
diff --git a/ext/gl/gstgldeinterlace.h b/ext/gl/gstgldeinterlace.h
index 6a19d04..3d78d66 100644
--- a/ext/gl/gstgldeinterlace.h
+++ b/ext/gl/gstgldeinterlace.h
@@ -39,14 +39,14 @@
struct _GstGLDeinterlace
{
- GstGLFilter filter;
+ GstGLFilter filter;
- GLCB deinterlacefunc;
- GHashTable *shaderstable;
- GstBuffer *prev_buffer;
- guint prev_tex;
+ GstGLFilterRenderFunc deinterlacefunc;
+ GHashTable *shaderstable;
+ GstBuffer *prev_buffer;
+ GstGLMemory * prev_tex;
- gint current_method;
+ gint current_method;
};
struct _GstGLDeinterlaceClass
diff --git a/ext/gl/gstgldifferencematte.c b/ext/gl/gstgldifferencematte.c
index d6c35cb..d726c2e 100644
--- a/ext/gl/gstgldifferencematte.c
+++ b/ext/gl/gstgldifferencematte.c
@@ -62,7 +62,7 @@
guint prop_id, GValue * value, GParamSpec * pspec);
static gboolean gst_gl_differencematte_filter_texture (GstGLFilter * filter,
- guint in_tex, guint out_tex);
+ GstGLMemory * in_tex, GstGLMemory * out_tex);
static gboolean gst_gl_differencematte_loader (GstGLFilter * filter);
@@ -79,22 +79,23 @@
{
GstGLDifferenceMatte *differencematte = GST_GL_DIFFERENCEMATTE (filter);
GstGLContext *context = GST_GL_BASE_FILTER (filter)->context;
- const GstGLFuncs *gl = context->gl_vtable;
+ GstGLBaseMemoryAllocator *tex_alloc;
+ GstGLAllocationParams *params;
GError *error = NULL;
gint i;
- for (i = 0; i < 4; i++) {
- gl->GenTextures (1, &differencematte->midtexture[i]);
- gl->BindTexture (GL_TEXTURE_2D, differencematte->midtexture[i]);
- gl->TexImage2D (GL_TEXTURE_2D, 0, GL_RGBA8,
- GST_VIDEO_INFO_WIDTH (&filter->out_info),
- GST_VIDEO_INFO_HEIGHT (&filter->out_info),
- 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);
- gl->TexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
- gl->TexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
- gl->TexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
- gl->TexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
- }
+ tex_alloc = (GstGLBaseMemoryAllocator *)
+ gst_gl_memory_allocator_get_default (context);
+ params =
+ (GstGLAllocationParams *) gst_gl_video_allocation_params_new (context,
+ NULL, &filter->out_info, 0, NULL, GST_GL_TEXTURE_TARGET_2D,
+ GST_VIDEO_GL_TEXTURE_TYPE_RGBA);
+
+ for (i = 0; i < 4; i++)
+ differencematte->midtexture[i] =
+ (GstGLMemory *) gst_gl_base_memory_alloc (tex_alloc, params);
+ gst_gl_allocation_params_free (params);
+ gst_object_unref (tex_alloc);
if (!(differencematte->identity_shader =
gst_gl_shader_new_default (context, &error))) {
@@ -165,11 +166,18 @@
gst_gl_differencematte_reset_gl_resources (GstGLFilter * filter)
{
GstGLDifferenceMatte *differencematte = GST_GL_DIFFERENCEMATTE (filter);
- GstGLFuncs *gl = GST_GL_BASE_FILTER (filter)->context->gl_vtable;
gint i;
- gl->DeleteTextures (1, &differencematte->savedbgtexture);
- gl->DeleteTextures (1, &differencematte->newbgtexture);
+ if (differencematte->savedbgtexture) {
+ gst_memory_unref (GST_MEMORY_CAST (differencematte->savedbgtexture));
+ differencematte->savedbgtexture = NULL;
+ }
+
+ if (differencematte->newbgtexture) {
+ gst_memory_unref (GST_MEMORY_CAST (differencematte->newbgtexture));
+ differencematte->newbgtexture = NULL;
+ }
+
for (i = 0; i < 4; i++) {
if (differencematte->identity_shader) {
gst_object_unref (differencematte->identity_shader);
@@ -180,15 +188,14 @@
gst_object_unref (differencematte->shader[i]);
differencematte->shader[i] = NULL;
}
+
if (differencematte->midtexture[i]) {
- gl->DeleteTextures (1, &differencematte->midtexture[i]);
- differencematte->midtexture[i] = 0;
+ gst_memory_unref (GST_MEMORY_CAST (differencematte->midtexture[i]));
+ differencematte->midtexture[i] = NULL;
}
}
differencematte->location = NULL;
differencematte->pixbuf = NULL;
- differencematte->savedbgtexture = 0;
- differencematte->newbgtexture = 0;
differencematte->bg_has_changed = FALSE;
}
@@ -277,158 +284,146 @@
}
static void
-init_pixbuf_texture (GstGLContext * context, gpointer data)
+init_pixbuf_texture (GstGLDifferenceMatte * differencematte)
{
- GstGLDifferenceMatte *differencematte = GST_GL_DIFFERENCEMATTE (data);
- GstGLFilter *filter = GST_GL_FILTER (data);
- const GstGLFuncs *gl = context->gl_vtable;
- guint internal_format =
- gst_gl_sized_gl_format_from_gl_format_type (context, GL_RGBA,
- GL_UNSIGNED_BYTE);
+ GstGLContext *context = GST_GL_BASE_FILTER (differencematte)->context;
+ GstGLFilter *filter = GST_GL_FILTER (differencematte);
+ GstGLBaseMemoryAllocator *tex_alloc;
+ GstGLAllocationParams *params;
+ GstVideoInfo v_info;
- gl->DeleteTextures (1, &differencematte->newbgtexture);
- gl->GenTextures (1, &differencematte->newbgtexture);
- gl->BindTexture (GL_TEXTURE_2D, differencematte->newbgtexture);
- gl->TexImage2D (GL_TEXTURE_2D, 0, internal_format,
- (gint) differencematte->pbuf_width, (gint) differencematte->pbuf_height,
- 0, GL_RGBA, GL_UNSIGNED_BYTE, differencematte->pixbuf);
- gl->TexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
- gl->TexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
- gl->TexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
- gl->TexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
+ tex_alloc = (GstGLBaseMemoryAllocator *)
+ gst_gl_memory_allocator_get_default (context);
+ gst_video_info_set_format (&v_info, GST_VIDEO_FORMAT_RGBA,
+ differencematte->pbuf_width, differencematte->pbuf_height);
+ params =
+ (GstGLAllocationParams *) gst_gl_video_allocation_params_new (context,
+ NULL, &v_info, 0, NULL, GST_GL_TEXTURE_TARGET_2D,
+ GST_VIDEO_GL_TEXTURE_TYPE_RGBA);
- if (differencematte->savedbgtexture == 0) {
- gl->GenTextures (1, &differencematte->savedbgtexture);
- gl->BindTexture (GL_TEXTURE_2D, differencematte->savedbgtexture);
- gl->TexImage2D (GL_TEXTURE_2D, 0, internal_format,
- GST_VIDEO_INFO_WIDTH (&filter->out_info),
- GST_VIDEO_INFO_HEIGHT (&filter->out_info),
- 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);
- gl->TexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
- gl->TexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
- gl->TexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
- gl->TexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
+ differencematte->newbgtexture =
+ (GstGLMemory *) gst_gl_base_memory_alloc (tex_alloc, params);
+ gst_gl_allocation_params_free (params);
+
+ if (differencematte->savedbgtexture == NULL) {
+ params =
+ (GstGLAllocationParams *) gst_gl_video_allocation_params_new (context,
+ NULL, &filter->out_info, 0, NULL, GST_GL_TEXTURE_TARGET_2D,
+ GST_VIDEO_GL_TEXTURE_TYPE_RGBA);
+
+ differencematte->savedbgtexture =
+ (GstGLMemory *) gst_gl_base_memory_alloc (tex_alloc, params);
+ gst_gl_allocation_params_free (params);
}
+
+ gst_object_unref (tex_alloc);
}
-static void
-gst_gl_differencematte_diff (gint width, gint height, guint texture,
+static gboolean
+gst_gl_differencematte_diff (GstGLFilter * filter, GstGLMemory * in_tex,
gpointer stuff)
{
- GstGLDifferenceMatte *differencematte = GST_GL_DIFFERENCEMATTE (stuff);
- GstGLFilter *filter = GST_GL_FILTER (stuff);
- GstGLFuncs *gl = GST_GL_BASE_FILTER (filter)->context->gl_vtable;
+ GstGLDifferenceMatte *differencematte = GST_GL_DIFFERENCEMATTE (filter);
+ const GstGLFuncs *gl = GST_GL_BASE_FILTER (filter)->context->gl_vtable;
gst_gl_shader_use (differencematte->shader[0]);
gl->ActiveTexture (GL_TEXTURE0);
- gl->BindTexture (GL_TEXTURE_2D, texture);
+ gl->BindTexture (GL_TEXTURE_2D, gst_gl_memory_get_texture_id (in_tex));
gst_gl_shader_set_uniform_1i (differencematte->shader[0], "current", 0);
gl->ActiveTexture (GL_TEXTURE1);
- gl->BindTexture (GL_TEXTURE_2D, differencematte->savedbgtexture);
+ gl->BindTexture (GL_TEXTURE_2D,
+ gst_gl_memory_get_texture_id (differencematte->savedbgtexture));
gst_gl_shader_set_uniform_1i (differencematte->shader[0], "saved", 1);
- gst_gl_filter_draw_texture (filter, texture, width, height);
+ gst_gl_filter_draw_fullscreen_quad (filter);
+
+ return TRUE;
}
-static void
-gst_gl_differencematte_hblur (gint width, gint height, guint texture,
+static gboolean
+gst_gl_differencematte_hblur (GstGLFilter * filter, GstGLMemory * in_tex,
gpointer stuff)
{
- GstGLDifferenceMatte *differencematte = GST_GL_DIFFERENCEMATTE (stuff);
- GstGLFilter *filter = GST_GL_FILTER (stuff);
- GstGLFuncs *gl = GST_GL_BASE_FILTER (filter)->context->gl_vtable;
+ GstGLDifferenceMatte *differencematte = GST_GL_DIFFERENCEMATTE (filter);
+ const GstGLFuncs *gl = GST_GL_BASE_FILTER (filter)->context->gl_vtable;
gst_gl_shader_use (differencematte->shader[1]);
gl->ActiveTexture (GL_TEXTURE0);
- gl->BindTexture (GL_TEXTURE_2D, texture);
+ gl->BindTexture (GL_TEXTURE_2D, gst_gl_memory_get_texture_id (in_tex));
gst_gl_shader_set_uniform_1i (differencematte->shader[1], "tex", 0);
gst_gl_shader_set_uniform_1fv (differencematte->shader[1], "kernel", 7,
differencematte->kernel);
gst_gl_shader_set_uniform_1f (differencematte->shader[1], "gauss_width",
- width);
+ GST_VIDEO_INFO_WIDTH (&filter->out_info));
- gst_gl_filter_draw_texture (filter, texture, width, height);
+ gst_gl_filter_draw_fullscreen_quad (filter);
+
+ return TRUE;
}
-static void
-gst_gl_differencematte_vblur (gint width, gint height, guint texture,
+static gboolean
+gst_gl_differencematte_vblur (GstGLFilter * filter, GstGLMemory * in_tex,
gpointer stuff)
{
- GstGLDifferenceMatte *differencematte = GST_GL_DIFFERENCEMATTE (stuff);
- GstGLFilter *filter = GST_GL_FILTER (stuff);
- GstGLFuncs *gl = GST_GL_BASE_FILTER (filter)->context->gl_vtable;
+ GstGLDifferenceMatte *differencematte = GST_GL_DIFFERENCEMATTE (filter);
+ const GstGLFuncs *gl = GST_GL_BASE_FILTER (filter)->context->gl_vtable;
gst_gl_shader_use (differencematte->shader[2]);
gl->ActiveTexture (GL_TEXTURE0);
- gl->BindTexture (GL_TEXTURE_2D, texture);
+ gl->BindTexture (GL_TEXTURE_2D, gst_gl_memory_get_texture_id (in_tex));
gst_gl_shader_set_uniform_1i (differencematte->shader[2], "tex", 0);
gst_gl_shader_set_uniform_1fv (differencematte->shader[2], "kernel", 7,
differencematte->kernel);
gst_gl_shader_set_uniform_1f (differencematte->shader[2], "gauss_height",
- height);
+ GST_VIDEO_INFO_HEIGHT (&filter->out_info));
- gst_gl_filter_draw_texture (filter, texture, width, height);
+ gst_gl_filter_draw_fullscreen_quad (filter);
+
+ return TRUE;
}
-static void
-gst_gl_differencematte_interp (gint width, gint height, guint texture,
+static gboolean
+gst_gl_differencematte_interp (GstGLFilter * filter, GstGLMemory * in_tex,
gpointer stuff)
{
- GstGLDifferenceMatte *differencematte = GST_GL_DIFFERENCEMATTE (stuff);
- GstGLFilter *filter = GST_GL_FILTER (stuff);
- GstGLFuncs *gl = GST_GL_BASE_FILTER (filter)->context->gl_vtable;
+ GstGLDifferenceMatte *differencematte = GST_GL_DIFFERENCEMATTE (filter);
+ const GstGLFuncs *gl = GST_GL_BASE_FILTER (filter)->context->gl_vtable;
gst_gl_shader_use (differencematte->shader[3]);
gl->ActiveTexture (GL_TEXTURE0);
- gl->BindTexture (GL_TEXTURE_2D, texture);
+ gl->BindTexture (GL_TEXTURE_2D, gst_gl_memory_get_texture_id (in_tex));
gst_gl_shader_set_uniform_1i (differencematte->shader[3], "blend", 0);
gl->ActiveTexture (GL_TEXTURE1);
- gl->BindTexture (GL_TEXTURE_2D, differencematte->newbgtexture);
+ gl->BindTexture (GL_TEXTURE_2D, differencematte->newbgtexture->tex_id);
gst_gl_shader_set_uniform_1i (differencematte->shader[3], "base", 1);
gl->ActiveTexture (GL_TEXTURE2);
- gl->BindTexture (GL_TEXTURE_2D, differencematte->midtexture[2]);
+ gl->BindTexture (GL_TEXTURE_2D, differencematte->midtexture[2]->tex_id);
gst_gl_shader_set_uniform_1i (differencematte->shader[3], "alpha", 2);
- gst_gl_filter_draw_texture (filter, texture, width, height);
-}
+ gst_gl_filter_draw_fullscreen_quad (filter);
-static void
-gst_gl_differencematte_identity (gint width, gint height, guint texture,
- gpointer stuff)
-{
- GstGLDifferenceMatte *differencematte = GST_GL_DIFFERENCEMATTE (stuff);
- GstGLFilter *filter = GST_GL_FILTER (differencematte);
- GstGLFuncs *gl = GST_GL_BASE_FILTER (filter)->context->gl_vtable;
-
- gst_gl_shader_use (differencematte->identity_shader);
-
- gl->ActiveTexture (GL_TEXTURE0);
- gl->BindTexture (GL_TEXTURE_2D, texture);
-
- gst_gl_shader_set_uniform_1i (differencematte->identity_shader, "tex", 0);
-
- gst_gl_filter_draw_texture (filter, texture, width, height);
+ return TRUE;
}
static gboolean
-gst_gl_differencematte_filter_texture (GstGLFilter * filter, guint in_tex,
- guint out_tex)
+gst_gl_differencematte_filter_texture (GstGLFilter * filter,
+ GstGLMemory * in_tex, GstGLMemory * out_tex)
{
GstGLDifferenceMatte *differencematte = GST_GL_DIFFERENCEMATTE (filter);
@@ -439,15 +434,12 @@
if (!gst_gl_differencematte_loader (filter))
differencematte->pixbuf = NULL;
- /* if loader failed then context is turned off */
- gst_gl_context_thread_add (GST_GL_BASE_FILTER (filter)->context,
- init_pixbuf_texture, differencematte);
+ init_pixbuf_texture (differencematte);
/* save current frame, needed to calculate difference between
* this frame and next ones */
- gst_gl_filter_render_to_target (filter, TRUE, in_tex,
- differencematte->savedbgtexture,
- gst_gl_differencematte_identity, differencematte);
+ gst_gl_filter_render_to_target_with_shader (filter, in_tex,
+ differencematte->savedbgtexture, differencematte->identity_shader);
if (differencematte->pixbuf) {
free (differencematte->pixbuf);
@@ -457,21 +449,18 @@
differencematte->bg_has_changed = FALSE;
}
- if (differencematte->savedbgtexture != 0) {
- gst_gl_filter_render_to_target (filter, TRUE, in_tex,
- differencematte->midtexture[0], gst_gl_differencematte_diff,
- differencematte);
- gst_gl_filter_render_to_target (filter, FALSE,
- differencematte->midtexture[0], differencematte->midtexture[1],
- gst_gl_differencematte_hblur, differencematte);
- gst_gl_filter_render_to_target (filter, FALSE,
- differencematte->midtexture[1], differencematte->midtexture[2],
- gst_gl_differencematte_vblur, differencematte);
- gst_gl_filter_render_to_target (filter, TRUE, in_tex, out_tex,
- gst_gl_differencematte_interp, differencematte);
+ if (differencematte->savedbgtexture != NULL) {
+ gst_gl_filter_render_to_target (filter, in_tex,
+ differencematte->midtexture[0], gst_gl_differencematte_diff, NULL);
+ gst_gl_filter_render_to_target (filter, differencematte->midtexture[0],
+ differencematte->midtexture[1], gst_gl_differencematte_hblur, NULL);
+ gst_gl_filter_render_to_target (filter, differencematte->midtexture[1],
+ differencematte->midtexture[2], gst_gl_differencematte_vblur, NULL);
+ gst_gl_filter_render_to_target (filter, in_tex, out_tex,
+ gst_gl_differencematte_interp, NULL);
} else {
- gst_gl_filter_render_to_target (filter, TRUE, in_tex, out_tex,
- gst_gl_differencematte_identity, differencematte);
+ gst_gl_filter_render_to_target_with_shader (filter, in_tex, out_tex,
+ differencematte->identity_shader);
}
return TRUE;
diff --git a/ext/gl/gstgldifferencematte.h b/ext/gl/gstgldifferencematte.h
index 45ba553..a4fd275 100644
--- a/ext/gl/gstgldifferencematte.h
+++ b/ext/gl/gstgldifferencematte.h
@@ -45,10 +45,10 @@
guchar *pixbuf;
gint pbuf_width, pbuf_height;
- GLuint savedbgtexture;
- GLuint newbgtexture;
- GLuint midtexture[4];
- GLuint intexture;
+ GstGLMemory *savedbgtexture;
+ GstGLMemory *newbgtexture;
+ GstGLMemory *midtexture[4];
+ GstGLMemory *intexture;
float kernel[7];
};
diff --git a/ext/gl/gstgleffects.c b/ext/gl/gstgleffects.c
index 1518a64..458d95a 100644
--- a/ext/gl/gstgleffects.c
+++ b/ext/gl/gstgleffects.c
@@ -71,7 +71,7 @@
gpointer data);
static gboolean gst_gl_effects_filter_texture (GstGLFilter * filter,
- guint in_tex, guint out_tex);
+ GstGLMemory * in_tex, GstGLMemory * out_tex);
static gboolean gst_gl_effects_filters_is_property_supported (const
GstGLEffectsFilterDescriptor *, gint property);
@@ -232,7 +232,7 @@
effects->current_effect = effect_type;
break;
case GST_GL_EFFECT_XRAY:
- effects->effect = (GstGLEffectProcessFunc) gst_gl_effects_sin;
+ effects->effect = (GstGLEffectProcessFunc) gst_gl_effects_xray;
filter_class->supported_gl_api =
GST_GL_API_GLES2 | GST_GL_API_OPENGL | GST_GL_API_OPENGL3;
effects->current_effect = effect_type;
@@ -274,31 +274,27 @@
{
GstGLEffects *effects = GST_GL_EFFECTS (filter);
GstGLContext *context = GST_GL_BASE_FILTER (filter)->context;
- GstGLFuncs *gl = context->gl_vtable;
- guint internal_format;
- gint i = 0;
+ GstGLBaseMemoryAllocator *base_alloc;
+ GstGLAllocationParams *params;
+ gint i;
+
+ base_alloc = (GstGLBaseMemoryAllocator *)
+ gst_gl_memory_allocator_get_default (context);
+ params =
+ (GstGLAllocationParams *) gst_gl_video_allocation_params_new (context,
+ NULL, &filter->out_info, 0, NULL, GST_GL_TEXTURE_TARGET_2D,
+ GST_VIDEO_GL_TEXTURE_TYPE_RGBA);
for (i = 0; i < NEEDED_TEXTURES; i++) {
+ if (effects->midtexture[i])
+ gst_memory_unref (GST_MEMORY_CAST (effects->midtexture[i]));
- if (effects->midtexture[i]) {
- gl->DeleteTextures (1, &effects->midtexture[i]);
- effects->midtexture[i] = 0;
- }
-
- gl->GenTextures (1, &effects->midtexture[i]);
- gl->BindTexture (GL_TEXTURE_2D, effects->midtexture[i]);
- internal_format =
- gst_gl_sized_gl_format_from_gl_format_type (context, GL_RGBA,
- GL_UNSIGNED_BYTE);
- gl->TexImage2D (GL_TEXTURE_2D, 0, internal_format,
- GST_VIDEO_INFO_WIDTH (&filter->out_info),
- GST_VIDEO_INFO_HEIGHT (&filter->out_info), 0, GL_RGBA, GL_UNSIGNED_BYTE,
- NULL);
- gl->TexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
- gl->TexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
- gl->TexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
- gl->TexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
+ effects->midtexture[i] =
+ (GstGLMemory *) gst_gl_base_memory_alloc (base_alloc, params);
}
+
+ gst_object_unref (base_alloc);
+ gst_gl_allocation_params_free (params);
}
/* free resources that need a gl context */
@@ -310,8 +306,7 @@
gint i = 0;
for (i = 0; i < NEEDED_TEXTURES; i++) {
- gl->DeleteTextures (1, &effects->midtexture[i]);
- effects->midtexture[i] = 0;
+ gst_memory_unref (GST_MEMORY_CAST (effects->midtexture[i]));
}
for (i = 0; i < GST_GL_EFFECTS_N_CURVES; i++) {
gl->DeleteTextures (1, &effects->curve[i]);
@@ -396,10 +391,11 @@
}
static void
-set_horizontal_swap (GstGLContext * context, gpointer data)
+set_horizontal_swap (GstGLEffects * effects)
{
#if GST_GL_HAVE_OPENGL
- GstGLFuncs *gl = context->gl_vtable;
+ GstGLContext *context = GST_GL_BASE_FILTER (effects)->context;
+ const GstGLFuncs *gl = context->gl_vtable;
if (gst_gl_context_get_gl_api (context) & GST_GL_API_OPENGL) {
const gfloat mirrormatrix[16] = {
@@ -527,8 +523,8 @@
}
static gboolean
-gst_gl_effects_filter_texture (GstGLFilter * filter, guint in_tex,
- guint out_tex)
+gst_gl_effects_filter_texture (GstGLFilter * filter, GstGLMemory * in_tex,
+ GstGLMemory * out_tex)
{
GstGLEffects *effects = GST_GL_EFFECTS (filter);
@@ -536,8 +532,7 @@
effects->outtexture = out_tex;
if (effects->horizontal_swap == TRUE)
- gst_gl_context_thread_add (GST_GL_BASE_FILTER (filter)->context,
- set_horizontal_swap, effects);
+ set_horizontal_swap (effects);
effects->effect (effects);
diff --git a/ext/gl/gstgleffects.h b/ext/gl/gstgleffects.h
index ddd2292..151ab78 100644
--- a/ext/gl/gstgleffects.h
+++ b/ext/gl/gstgleffects.h
@@ -69,9 +69,9 @@
GstGLEffectProcessFunc effect;
gint current_effect;
- GLuint intexture;
- GLuint midtexture[NEEDED_TEXTURES];
- GLuint outtexture;
+ GstGLMemory *intexture;
+ GstGLMemory *midtexture[NEEDED_TEXTURES];
+ GstGLMemory *outtexture;
GLuint curve[GST_GL_EFFECTS_N_CURVES];
diff --git a/ext/gl/gstglfilterapp.c b/ext/gl/gstglfilterapp.c
index 715f6f3..925373b 100644
--- a/ext/gl/gstglfilterapp.c
+++ b/ext/gl/gstglfilterapp.c
@@ -69,7 +69,7 @@
static gboolean gst_gl_filter_app_set_caps (GstGLFilter * filter,
GstCaps * incaps, GstCaps * outcaps);
static gboolean gst_gl_filter_app_filter_texture (GstGLFilter * filter,
- guint in_tex, guint out_tex);
+ GstGLMemory * in_tex, GstGLMemory * out_tex);
static gboolean gst_gl_filter_app_gl_start (GstGLBaseFilter * base_filter);
static void gst_gl_filter_app_gl_stop (GstGLBaseFilter * base_filter);
@@ -184,57 +184,44 @@
return TRUE;
}
-static void
-_emit_draw_signal (guint tex, gint width, gint height, gpointer data)
-{
- GstGLFilterApp *app_filter = GST_GL_FILTER_APP (data);
- gboolean drawn;
-
- g_signal_emit (app_filter, gst_gl_filter_app_signals[CLIENT_DRAW_SIGNAL], 0,
- tex, width, height, &drawn);
-
- app_filter->default_draw = !drawn;
-}
-
struct glcb2
{
- GLCB func;
- gpointer data;
- guint texture;
- guint width;
- guint height;
+ GstGLFilterApp *app;
+ GstGLMemory *in_tex;
+ GstGLMemory *out_tex;
};
-/* convenience functions to simplify filter development */
-static void
-_glcb2 (gpointer data)
+static gboolean
+_emit_draw_signal (gpointer data)
{
struct glcb2 *cb = data;
+ gboolean drawn;
- cb->func (cb->width, cb->height, cb->texture, cb->data);
+ g_signal_emit (cb->app, gst_gl_filter_app_signals[CLIENT_DRAW_SIGNAL], 0,
+ cb->in_tex->tex_id, gst_gl_memory_get_texture_width (cb->out_tex),
+ gst_gl_memory_get_texture_height (cb->out_tex), &drawn);
+
+ return !drawn;
}
static gboolean
-gst_gl_filter_app_filter_texture (GstGLFilter * filter, guint in_tex,
- guint out_tex)
+gst_gl_filter_app_filter_texture (GstGLFilter * filter, GstGLMemory * in_tex,
+ GstGLMemory * out_tex)
{
GstGLFilterApp *app_filter = GST_GL_FILTER_APP (filter);
+ gboolean default_draw;
struct glcb2 cb;
- cb.func = (GLCB) _emit_draw_signal;
- cb.data = filter;
- cb.texture = in_tex;
- cb.width = GST_VIDEO_INFO_WIDTH (&filter->in_info);
- cb.height = GST_VIDEO_INFO_HEIGHT (&filter->in_info);
+ cb.app = app_filter;
+ cb.in_tex = in_tex;
+ cb.out_tex = out_tex;
- //blocking call, use a FBO
- gst_gl_context_use_fbo_v2 (GST_GL_BASE_FILTER (filter)->context,
- GST_VIDEO_INFO_WIDTH (&filter->out_info),
- GST_VIDEO_INFO_HEIGHT (&filter->out_info),
- filter->fbo, filter->depthbuffer, out_tex, _glcb2, &cb);
+ default_draw =
+ gst_gl_framebuffer_draw_to_texture (filter->fbo,
+ out_tex, _emit_draw_signal, &cb);
- if (app_filter->default_draw) {
- gst_gl_filter_render_to_target_with_shader (filter, TRUE, in_tex, out_tex,
+ if (default_draw) {
+ gst_gl_filter_render_to_target_with_shader (filter, in_tex, out_tex,
filter->default_shader);
}
diff --git a/ext/gl/gstglfilterapp.h b/ext/gl/gstglfilterapp.h
index a8978c5..d7e9a6f 100644
--- a/ext/gl/gstglfilterapp.h
+++ b/ext/gl/gstglfilterapp.h
@@ -37,8 +37,6 @@
struct _GstGLFilterApp
{
GstGLFilter filter;
-
- gboolean default_draw;
};
struct _GstGLFilterAppClass
diff --git a/ext/gl/gstglfiltercube.c b/ext/gl/gstglfiltercube.c
index d389310..717eba6 100644
--- a/ext/gl/gstglfiltercube.c
+++ b/ext/gl/gstglfiltercube.c
@@ -79,9 +79,9 @@
GstCaps * incaps, GstCaps * outcaps);
static void gst_gl_filter_cube_reset_gl (GstGLFilter * filter);
static gboolean gst_gl_filter_cube_init_shader (GstGLFilter * filter);
-static void _callback (gpointer stuff);
+static gboolean _callback (gpointer stuff);
static gboolean gst_gl_filter_cube_filter_texture (GstGLFilter * filter,
- guint in_tex, guint out_tex);
+ GstGLMemory * in_tex, GstGLMemory * out_tex);
/* vertex source */
static const gchar *cube_v_src =
@@ -335,20 +335,15 @@
}
static gboolean
-gst_gl_filter_cube_filter_texture (GstGLFilter * filter, guint in_tex,
- guint out_tex)
+gst_gl_filter_cube_filter_texture (GstGLFilter * filter, GstGLMemory * in_tex,
+ GstGLMemory * out_tex)
{
GstGLFilterCube *cube_filter = GST_GL_FILTER_CUBE (filter);
cube_filter->in_tex = in_tex;
- /* blocking call, use a FBO */
- gst_gl_context_use_fbo_v2 (GST_GL_BASE_FILTER (filter)->context,
- GST_VIDEO_INFO_WIDTH (&filter->out_info),
- GST_VIDEO_INFO_HEIGHT (&filter->out_info), filter->fbo,
- filter->depthbuffer, out_tex, _callback, (gpointer) cube_filter);
-
- return TRUE;
+ return gst_gl_framebuffer_draw_to_texture (filter->fbo, out_tex, _callback,
+ cube_filter);
}
/* *INDENT-OFF* */
@@ -440,7 +435,7 @@
gl->DisableVertexAttribArray (cube_filter->attr_texture);
}
-static void
+static gboolean
_callback (gpointer stuff)
{
GstGLFilter *filter = GST_GL_FILTER (stuff);
@@ -466,7 +461,7 @@
gst_gl_shader_use (cube_filter->shader);
gl->ActiveTexture (GL_TEXTURE0);
- gl->BindTexture (GL_TEXTURE_2D, cube_filter->in_tex);
+ gl->BindTexture (GL_TEXTURE_2D, cube_filter->in_tex->tex_id);
gst_gl_shader_set_uniform_1i (cube_filter->shader, "s_texture", 0);
gst_gl_shader_set_uniform_1f (cube_filter->shader, "xrot_degree", xrot);
gst_gl_shader_set_uniform_1f (cube_filter->shader, "yrot_degree", yrot);
@@ -516,4 +511,6 @@
xrot += 0.3f;
yrot += 0.2f;
zrot += 0.4f;
+
+ return TRUE;
}
diff --git a/ext/gl/gstglfiltercube.h b/ext/gl/gstglfiltercube.h
index 88b51a6..ee25048 100644
--- a/ext/gl/gstglfiltercube.h
+++ b/ext/gl/gstglfiltercube.h
@@ -40,6 +40,7 @@
GstGLFilter filter;
GstGLShader *shader;
+ GstGLMemory *in_tex;
/* background color */
gfloat red;
@@ -52,7 +53,6 @@
gdouble znear;
gdouble zfar;
- guint in_tex;
GLuint vao;
GLuint vbo_indices;
GLuint vertex_buffer;
diff --git a/ext/gl/gstglfilterglass.c b/ext/gl/gstglfilterglass.c
index 863793c..28bc485 100644
--- a/ext/gl/gstglfilterglass.c
+++ b/ext/gl/gstglfilterglass.c
@@ -66,14 +66,14 @@
static gboolean gst_gl_filter_glass_init_shader (GstGLFilter * filter);
static gboolean gst_gl_filter_glass_filter_texture (GstGLFilter * filter,
- guint in_tex, guint out_tex);
+ GstGLMemory * in_tex, GstGLMemory * out_tex);
static void gst_gl_filter_glass_draw_background_gradient ();
static void gst_gl_filter_glass_draw_video_plane (GstGLFilter * filter,
gint width, gint height, guint texture, gfloat center_x, gfloat center_y,
gfloat start_alpha, gfloat stop_alpha, gboolean reversed, gfloat rotation);
-static void gst_gl_filter_glass_callback (gpointer stuff);
+static gboolean gst_gl_filter_glass_callback (gpointer stuff);
/* *INDENT-OFF* */
static const gchar *glass_fragment_source =
@@ -238,18 +238,15 @@
}
static gboolean
-gst_gl_filter_glass_filter_texture (GstGLFilter * filter, guint in_tex,
- guint out_tex)
+gst_gl_filter_glass_filter_texture (GstGLFilter * filter, GstGLMemory * in_tex,
+ GstGLMemory * out_tex)
{
GstGLFilterGlass *glass_filter = GST_GL_FILTER_GLASS (filter);
+
glass_filter->in_tex = in_tex;
- //blocking call, use a FBO
- gst_gl_context_use_fbo_v2 (GST_GL_BASE_FILTER (filter)->context,
- GST_VIDEO_INFO_WIDTH (&filter->out_info),
- GST_VIDEO_INFO_HEIGHT (&filter->out_info),
- filter->fbo, filter->depthbuffer, out_tex,
- gst_gl_filter_glass_callback, (gpointer) glass_filter);
+ gst_gl_framebuffer_draw_to_texture (filter->fbo, out_tex,
+ gst_gl_filter_glass_callback, glass_filter);
return TRUE;
}
@@ -352,8 +349,7 @@
gl->DisableClientState (GL_COLOR_ARRAY);
}
-//opengl scene, params: input texture (not the output filter->texture)
-static void
+static gboolean
gst_gl_filter_glass_callback (gpointer stuff)
{
static gint64 start_time = 0;
@@ -365,7 +361,7 @@
gint width = GST_VIDEO_INFO_WIDTH (&filter->out_info);
gint height = GST_VIDEO_INFO_HEIGHT (&filter->out_info);
- guint texture = glass_filter->in_tex;
+ guint texture = glass_filter->in_tex->tex_id;
if (start_time == 0)
start_time = get_time ();
@@ -375,7 +371,7 @@
time_left -= 1000000 / 25;
if (time_left > 2000) {
GST_LOG ("escape");
- return;
+ return FALSE;
}
}
@@ -407,4 +403,6 @@
gst_gl_context_clear_shader (GST_GL_BASE_FILTER (filter)->context);
gl->Disable (GL_BLEND);
+
+ return TRUE;
}
diff --git a/ext/gl/gstglfilterglass.h b/ext/gl/gstglfilterglass.h
index 3897d02..1f1c91d 100644
--- a/ext/gl/gstglfilterglass.h
+++ b/ext/gl/gstglfilterglass.h
@@ -41,7 +41,8 @@
GstGLShader *passthrough_shader;
GstGLShader *shader;
gint64 timestamp;
- guint in_tex;
+ GstGLMemory *in_tex;
+ GstGLMemory *out_tex;
};
struct _GstGLFilterGlassClass
diff --git a/ext/gl/gstglfiltershader.c b/ext/gl/gstglfiltershader.c
index 2117388..93962f9 100644
--- a/ext/gl/gstglfiltershader.c
+++ b/ext/gl/gstglfiltershader.c
@@ -82,9 +82,9 @@
static gboolean gst_gl_filtershader_filter (GstGLFilter * filter,
GstBuffer * inbuf, GstBuffer * outbuf);
static gboolean gst_gl_filtershader_filter_texture (GstGLFilter * filter,
- guint in_tex, guint out_tex);
-static void gst_gl_filtershader_hcallback (gint width, gint height,
- guint texture, gpointer stuff);
+ GstGLMemory * in_tex, GstGLMemory * out_tex);
+static gboolean gst_gl_filtershader_hcallback (GstGLFilter * filter,
+ GstGLMemory * in_tex, gpointer stuff);
static void
gst_gl_filtershader_class_init (GstGLFilterShaderClass * klass)
@@ -313,13 +313,13 @@
}
static gboolean
-gst_gl_filtershader_filter_texture (GstGLFilter * filter, guint in_tex,
- guint out_tex)
+gst_gl_filtershader_filter_texture (GstGLFilter * filter, GstGLMemory * in_tex,
+ GstGLMemory * out_tex)
{
GstGLFilterShader *filtershader = GST_GL_FILTERSHADER (filter);
- gst_gl_filter_render_to_target (filter, TRUE, in_tex, out_tex,
- gst_gl_filtershader_hcallback, filtershader);
+ gst_gl_filter_render_to_target (filter, in_tex, out_tex,
+ gst_gl_filtershader_hcallback, NULL);
if (!filtershader->shader)
return FALSE;
@@ -493,17 +493,16 @@
return NULL;
}
-static void
-gst_gl_filtershader_hcallback (gint width, gint height, guint texture,
+static gboolean
+gst_gl_filtershader_hcallback (GstGLFilter * filter, GstGLMemory * in_tex,
gpointer stuff)
{
- GstGLFilter *filter = GST_GL_FILTER (stuff);
GstGLFilterShader *filtershader = GST_GL_FILTERSHADER (filter);
GstGLFuncs *gl = GST_GL_BASE_FILTER (filter)->context->gl_vtable;
GstGLShader *shader;
if (!(shader = _maybe_recompile_shader (filtershader)))
- return;
+ return FALSE;
gl->ClearColor (0.0, 0.0, 0.0, 1.0);
gl->Clear (GL_COLOR_BUFFER_BIT);
@@ -512,8 +511,10 @@
/* FIXME: propertise these */
gst_gl_shader_set_uniform_1i (shader, "tex", 0);
- gst_gl_shader_set_uniform_1f (shader, "width", width);
- gst_gl_shader_set_uniform_1f (shader, "height", height);
+ gst_gl_shader_set_uniform_1f (shader, "width",
+ GST_VIDEO_INFO_WIDTH (&filter->out_info));
+ gst_gl_shader_set_uniform_1f (shader, "height",
+ GST_VIDEO_INFO_HEIGHT (&filter->out_info));
gst_gl_shader_set_uniform_1f (shader, "time", filtershader->time);
/* FIXME: propertise these */
@@ -523,9 +524,11 @@
gst_gl_shader_get_attribute_location (shader, "a_texcoord");
gl->ActiveTexture (GL_TEXTURE0);
- gl->BindTexture (GL_TEXTURE_2D, texture);
+ gl->BindTexture (GL_TEXTURE_2D, gst_gl_memory_get_texture_id (in_tex));
- gst_gl_filter_draw_texture (filter, texture, width, height);
+ gst_gl_filter_draw_fullscreen_quad (filter);
gst_object_unref (shader);
+
+ return TRUE;
}
diff --git a/ext/gl/gstglimagesink.c b/ext/gl/gstglimagesink.c
index f176c23..385e3e4 100644
--- a/ext/gl/gstglimagesink.c
+++ b/ext/gl/gstglimagesink.c
@@ -468,16 +468,16 @@
/* horizontal-flip */
static const gfloat horizontal_flip_matrix[] = {
- 1.0f, 0.0f, 0.0f, 0.0f,
- 0.0f, -1.0f, 0.0f, 0.0f,
+ -1.0f, 0.0f, 0.0f, 0.0f,
+ 0.0f, 1.0f, 0.0f, 0.0f,
0.0f, 0.0f, 1.0f, 0.0f,
0.0f, 0.0f, 0.0f, 1.0f,
};
/* vertical-flip */
static const gfloat vertical_flip_matrix[] = {
- -1.0f, 0.0f, 0.0f, 0.0f,
- 0.0f, 1.0f, 0.0f, 0.0f,
+ 1.0f, 0.0f, 0.0f, 0.0f,
+ 0.0f, -1.0f, 0.0f, 0.0f,
0.0f, 0.0f, 1.0f, 0.0f,
0.0f, 0.0f, 0.0f, 1.0f,
};
@@ -1777,7 +1777,7 @@
if (g_atomic_int_get (&glimage_sink->to_quit) != 0) {
GST_ELEMENT_ERROR (glimage_sink, RESOURCE, NOT_FOUND,
- ("%s", gst_gl_context_get_error ()), (NULL));
+ ("%s", "Quit requested"), (NULL));
return GST_FLOW_ERROR;
}
@@ -1787,7 +1787,7 @@
redisplay_failed:
{
GST_ELEMENT_ERROR (glimage_sink, RESOURCE, NOT_FOUND,
- ("%s", gst_gl_context_get_error ()), (NULL));
+ ("%s", "Window redisplay failed"), (NULL));
return GST_FLOW_ERROR;
}
}
@@ -2306,7 +2306,7 @@
{
GstGLWindow *window;
- gst_gl_context_set_error (gl_sink->context, "Output window was closed");
+ GST_WARNING_OBJECT (gl_sink, "Output window was closed");
window = gst_gl_context_get_window (gl_sink->context);
diff --git a/ext/gl/gstglmixer.c b/ext/gl/gstglmixer.c
index 764a53c..3fc5aa6 100644
--- a/ext/gl/gstglmixer.c
+++ b/ext/gl/gstglmixer.c
@@ -410,8 +410,6 @@
gst_gl_mixer_init (GstGLMixer * mix)
{
mix->priv = GST_GL_MIXER_GET_PRIVATE (mix);
- mix->fbo = 0;
- mix->depthbuffer = 0;
mix->priv->gl_resource_ready = FALSE;
g_mutex_init (&mix->priv->gl_resource_lock);
@@ -512,33 +510,38 @@
return ret;
}
+static void
+_mixer_create_fbo (GstGLContext * context, GstGLMixer * mix)
+{
+ GstVideoAggregator *vagg = GST_VIDEO_AGGREGATOR (mix);
+ guint out_width = GST_VIDEO_INFO_WIDTH (&vagg->info);
+ guint out_height = GST_VIDEO_INFO_HEIGHT (&vagg->info);
+
+ mix->fbo =
+ gst_gl_framebuffer_new_with_default_depth (context, out_width,
+ out_height);
+}
+
static gboolean
gst_gl_mixer_decide_allocation (GstGLBaseMixer * base_mix, GstQuery * query)
{
GstGLMixer *mix = GST_GL_MIXER (base_mix);
GstGLMixerClass *mixer_class = GST_GL_MIXER_GET_CLASS (mix);
- GstVideoAggregator *vagg = GST_VIDEO_AGGREGATOR (mix);
GstGLContext *context = base_mix->context;
GstBufferPool *pool = NULL;
GstStructure *config;
GstCaps *caps;
guint min, max, size;
gboolean update_pool;
- guint out_width, out_height;
-
- out_width = GST_VIDEO_INFO_WIDTH (&vagg->info);
- out_height = GST_VIDEO_INFO_HEIGHT (&vagg->info);
g_mutex_lock (&mix->priv->gl_resource_lock);
mix->priv->gl_resource_ready = FALSE;
- if (mix->fbo) {
- gst_gl_context_del_fbo (context, mix->fbo, mix->depthbuffer);
- mix->fbo = 0;
- mix->depthbuffer = 0;
- }
+ if (mix->fbo)
+ gst_object_unref (mix->fbo);
- if (!gst_gl_context_gen_fbo (context, out_width, out_height,
- &mix->fbo, &mix->depthbuffer)) {
+ gst_gl_context_thread_add (context,
+ (GstGLContextThreadFunc) _mixer_create_fbo, mix);
+ if (!mix->fbo) {
g_cond_signal (&mix->priv->gl_resource_cond);
g_mutex_unlock (&mix->priv->gl_resource_lock);
goto context_error;
@@ -631,7 +634,7 @@
gboolean
gst_gl_mixer_process_textures (GstGLMixer * mix, GstBuffer * outbuf)
{
- guint out_tex;
+ GstGLMemory *out_tex;
gboolean res = TRUE;
GstVideoFrame out_frame;
GstVideoAggregator *vagg = GST_VIDEO_AGGREGATOR (mix);
@@ -645,7 +648,7 @@
return FALSE;
}
- out_tex = *(guint *) out_frame.data[0];
+ out_tex = (GstGLMemory *) out_frame.map[0].memory;
if (!gst_aggregator_iterate_sinkpads (GST_AGGREGATOR (mix),
(GstAggregatorPadForeachFunc) _upload_frames, NULL))
@@ -735,14 +738,13 @@
{
GstGLMixer *mix = GST_GL_MIXER (agg);
GstGLMixerClass *mixer_class = GST_GL_MIXER_GET_CLASS (mix);
- GstGLContext *context = GST_GL_BASE_MIXER (mix)->context;
if (mixer_class->reset)
mixer_class->reset (mix);
+
if (mix->fbo) {
- gst_gl_context_del_fbo (context, mix->fbo, mix->depthbuffer);
- mix->fbo = 0;
- mix->depthbuffer = 0;
+ gst_object_unref (mix->fbo);
+ mix->fbo = NULL;
}
gst_gl_mixer_reset (mix);
diff --git a/ext/gl/gstglmixer.h b/ext/gl/gstglmixer.h
index 81976a7..309f6bb 100644
--- a/ext/gl/gstglmixer.h
+++ b/ext/gl/gstglmixer.h
@@ -78,14 +78,13 @@
GstCaps* outcaps);
typedef void (*GstGLMixerReset) (GstGLMixer *mixer);
typedef gboolean (*GstGLMixerProcessFunc) (GstGLMixer *mix, GstBuffer *outbuf);
-typedef gboolean (*GstGLMixerProcessTextures) (GstGLMixer *mix, guint out_tex);
+typedef gboolean (*GstGLMixerProcessTextures) (GstGLMixer *mix, GstGLMemory *out_tex);
struct _GstGLMixer
{
GstGLBaseMixer vaggregator;
- GLuint fbo;
- GLuint depthbuffer;
+ GstGLFramebuffer *fbo;
GstCaps *out_caps;
diff --git a/ext/gl/gstglmosaic.c b/ext/gl/gstglmosaic.c
index bcf3833..41441b0 100644
--- a/ext/gl/gstglmosaic.c
+++ b/ext/gl/gstglmosaic.c
@@ -70,8 +70,8 @@
GstCaps * outcaps);
static gboolean gst_gl_mosaic_process_textures (GstGLMixer * mixer,
- guint out_tex);
-static void gst_gl_mosaic_callback (gpointer stuff);
+ GstGLMemory * out_tex);
+static gboolean gst_gl_mosaic_callback (gpointer stuff);
//vertex source
static const gchar *mosaic_v_src =
@@ -193,22 +193,31 @@
mosaic_v_src, mosaic_f_src, &mosaic->shader);
}
+static void
+_mosaic_render (GstGLContext * context, GstGLMosaic * mosaic)
+{
+ GstGLMixer *mixer = GST_GL_MIXER (mosaic);
+
+ gst_gl_framebuffer_draw_to_texture (mixer->fbo, mosaic->out_tex,
+ gst_gl_mosaic_callback, mosaic);
+}
+
static gboolean
-gst_gl_mosaic_process_textures (GstGLMixer * mix, guint out_tex)
+gst_gl_mosaic_process_textures (GstGLMixer * mix, GstGLMemory * out_tex)
{
GstGLMosaic *mosaic = GST_GL_MOSAIC (mix);
+ GstGLContext *context = GST_GL_BASE_MIXER (mix)->context;
- //blocking call, use a FBO
- gst_gl_context_use_fbo_v2 (GST_GL_BASE_MIXER (mix)->context,
- GST_VIDEO_INFO_WIDTH (&GST_VIDEO_AGGREGATOR (mix)->info),
- GST_VIDEO_INFO_HEIGHT (&GST_VIDEO_AGGREGATOR (mix)->info), mix->fbo,
- mix->depthbuffer, out_tex, gst_gl_mosaic_callback, (gpointer) mosaic);
+ mosaic->out_tex = out_tex;
+
+ gst_gl_context_thread_add (context, (GstGLContextThreadFunc) _mosaic_render,
+ mosaic);
return TRUE;
}
/* opengl scene, params: input texture (not the output mixer->texture) */
-static void
+static gboolean
gst_gl_mosaic_callback (gpointer stuff)
{
GstGLMosaic *mosaic = GST_GL_MOSAIC (stuff);
@@ -344,4 +353,6 @@
xrot += 0.6f;
yrot += 0.4f;
zrot += 0.8f;
+
+ return TRUE;
}
diff --git a/ext/gl/gstglmosaic.h b/ext/gl/gstglmosaic.h
index e0b340c..40f5d6c 100644
--- a/ext/gl/gstglmosaic.h
+++ b/ext/gl/gstglmosaic.h
@@ -40,6 +40,7 @@
GstGLMixer mixer;
GstGLShader *shader;
+ GstGLMemory *out_tex;
};
struct _GstGLMosaicClass
diff --git a/ext/gl/gstgloverlay.c b/ext/gl/gstgloverlay.c
index 7ae56d2..e7b4c0a 100644
--- a/ext/gl/gstgloverlay.c
+++ b/ext/gl/gstgloverlay.c
@@ -72,7 +72,7 @@
static void gst_gl_overlay_before_transform (GstBaseTransform * trans,
GstBuffer * outbuf);
static gboolean gst_gl_overlay_filter_texture (GstGLFilter * filter,
- guint in_tex, guint out_tex);
+ GstGLMemory * in_tex, GstGLMemory * out_tex);
static gboolean gst_gl_overlay_load_png (GstGLOverlay * overlay, FILE * fp);
static gboolean gst_gl_overlay_load_jpeg (GstGLOverlay * overlay, FILE * fp);
@@ -372,29 +372,31 @@
static void
_unbind_buffer (GstGLOverlay * overlay)
{
+ GstGLFilter *filter = GST_GL_FILTER (overlay);
const GstGLFuncs *gl = GST_GL_BASE_FILTER (overlay)->context->gl_vtable;
gl->BindBuffer (GL_ELEMENT_ARRAY_BUFFER, 0);
gl->BindBuffer (GL_ARRAY_BUFFER, 0);
- gl->DisableVertexAttribArray (overlay->attr_position);
- gl->DisableVertexAttribArray (overlay->attr_texture);
+ gl->DisableVertexAttribArray (filter->draw_attr_position_loc);
+ gl->DisableVertexAttribArray (filter->draw_attr_texture_loc);
}
static void
_bind_buffer (GstGLOverlay * overlay, GLuint vbo)
{
+ GstGLFilter *filter = GST_GL_FILTER (overlay);
const GstGLFuncs *gl = GST_GL_BASE_FILTER (overlay)->context->gl_vtable;
gl->BindBuffer (GL_ELEMENT_ARRAY_BUFFER, overlay->vbo_indices);
gl->BindBuffer (GL_ARRAY_BUFFER, vbo);
- gl->EnableVertexAttribArray (overlay->attr_position);
- gl->EnableVertexAttribArray (overlay->attr_texture);
+ gl->EnableVertexAttribArray (filter->draw_attr_position_loc);
+ gl->EnableVertexAttribArray (filter->draw_attr_texture_loc);
- gl->VertexAttribPointer (overlay->attr_position, 3, GL_FLOAT,
+ gl->VertexAttribPointer (filter->draw_attr_position_loc, 3, GL_FLOAT,
GL_FALSE, 5 * sizeof (GLfloat), (void *) 0);
- gl->VertexAttribPointer (overlay->attr_texture, 2, GL_FLOAT,
+ gl->VertexAttribPointer (filter->draw_attr_texture_loc, 2, GL_FLOAT,
GL_FALSE, 5 * sizeof (GLfloat), (void *) (3 * sizeof (GLfloat)));
}
@@ -410,15 +412,16 @@
static const GLushort indices[] = { 0, 1, 2, 0, 2, 3, };
/* *INDENT-ON* */
-static void
-gst_gl_overlay_callback (gint width, gint height, guint texture, gpointer stuff)
+static gboolean
+gst_gl_overlay_callback (GstGLFilter * filter, GstGLMemory * in_tex,
+ gpointer stuff)
{
- GstGLOverlay *overlay = GST_GL_OVERLAY (stuff);
- GstGLFilter *filter = GST_GL_FILTER (overlay);
+ GstGLOverlay *overlay = GST_GL_OVERLAY (filter);
GstMapInfo map_info;
guint image_tex;
gboolean memory_mapped = FALSE;
const GstGLFuncs *gl = GST_GL_BASE_FILTER (filter)->context->gl_vtable;
+ gboolean ret = FALSE;
#if GST_GL_HAVE_OPENGL
if (gst_gl_context_get_gl_api (GST_GL_BASE_FILTER (filter)->context) &
@@ -430,49 +433,19 @@
#endif
gl->ActiveTexture (GL_TEXTURE0);
- gl->BindTexture (GL_TEXTURE_2D, texture);
+ gl->BindTexture (GL_TEXTURE_2D, gst_gl_memory_get_texture_id (in_tex));
gst_gl_shader_use (overlay->shader);
gst_gl_shader_set_uniform_1f (overlay->shader, "alpha", 1.0f);
gst_gl_shader_set_uniform_1i (overlay->shader, "texture", 0);
- overlay->attr_position =
+ filter->draw_attr_position_loc =
gst_gl_shader_get_attribute_location (overlay->shader, "a_position");
- overlay->attr_texture =
+ filter->draw_attr_texture_loc =
gst_gl_shader_get_attribute_location (overlay->shader, "a_texcoord");
- if (!overlay->vbo) {
- if (gl->GenVertexArrays) {
- gl->GenVertexArrays (1, &overlay->vao);
- gl->BindVertexArray (overlay->vao);
- }
-
- gl->GenBuffers (1, &overlay->vbo);
- gl->BindBuffer (GL_ARRAY_BUFFER, overlay->vbo);
- gl->BufferData (GL_ARRAY_BUFFER, 4 * 5 * sizeof (GLfloat), v_vertices,
- GL_STATIC_DRAW);
-
- gl->GenBuffers (1, &overlay->vbo_indices);
- gl->BindBuffer (GL_ELEMENT_ARRAY_BUFFER, overlay->vbo_indices);
- gl->BufferData (GL_ELEMENT_ARRAY_BUFFER, sizeof (indices), indices,
- GL_STATIC_DRAW);
-
- if (gl->GenVertexArrays) {
- _bind_buffer (overlay, overlay->vbo);
- gl->BindVertexArray (0);
- }
-
- gl->BindBuffer (GL_ARRAY_BUFFER, 0);
- gl->BindBuffer (GL_ELEMENT_ARRAY_BUFFER, 0);
- }
-
- if (gl->GenVertexArrays)
- gl->BindVertexArray (overlay->vao);
- else
- _bind_buffer (overlay, overlay->vbo);
-
- gl->DrawElements (GL_TRIANGLES, 6, GL_UNSIGNED_SHORT, 0);
+ gst_gl_filter_draw_fullscreen_quad (filter);
if (!overlay->image_memory)
goto out;
@@ -490,6 +463,11 @@
gl->BindVertexArray (overlay->overlay_vao);
}
+ gl->GenBuffers (1, &overlay->vbo_indices);
+ gl->BindBuffer (GL_ELEMENT_ARRAY_BUFFER, overlay->vbo_indices);
+ gl->BufferData (GL_ELEMENT_ARRAY_BUFFER, sizeof (indices), indices,
+ GL_STATIC_DRAW);
+
gl->GenBuffers (1, &overlay->overlay_vbo);
gl->BindBuffer (GL_ARRAY_BUFFER, overlay->overlay_vbo);
gl->BindBuffer (GL_ELEMENT_ARRAY_BUFFER, overlay->vbo_indices);
@@ -553,6 +531,7 @@
gl->DrawElements (GL_TRIANGLES, 6, GL_UNSIGNED_SHORT, 0);
gl->Disable (GL_BLEND);
+ ret = TRUE;
out:
if (gl->GenVertexArrays) {
@@ -567,6 +546,8 @@
gst_memory_unmap ((GstMemory *) overlay->image_memory, &map_info);
overlay->geometry_change = FALSE;
+
+ return ret;
}
static gboolean
@@ -624,8 +605,8 @@
}
static gboolean
-gst_gl_overlay_filter_texture (GstGLFilter * filter, guint in_tex,
- guint out_tex)
+gst_gl_overlay_filter_texture (GstGLFilter * filter, GstGLMemory * in_tex,
+ GstGLMemory * out_tex)
{
GstGLOverlay *overlay = GST_GL_OVERLAY (filter);
@@ -641,7 +622,7 @@
overlay->location_has_changed = FALSE;
}
- gst_gl_filter_render_to_target (filter, TRUE, in_tex, out_tex,
+ gst_gl_filter_render_to_target (filter, in_tex, out_tex,
gst_gl_overlay_callback, overlay);
return TRUE;
diff --git a/ext/gl/gstglstereomix.c b/ext/gl/gstglstereomix.c
index 663c1b7..18e7111 100644
--- a/ext/gl/gstglstereomix.c
+++ b/ext/gl/gstglstereomix.c
@@ -21,6 +21,42 @@
* Boston, MA 02110-1301, USA.
*/
+/**
+ * SECTION:element-glstereomix
+ *
+ * Combine 2 input streams to produce a stereoscopic output
+ * stream. Input views are taken from the left pad and right pad
+ * respectively, and mixed according to their timelines.
+ *
+ * If either input stream is stereoscopic, the approproriate view
+ * (left or right) is taken from each stream and placed into the output.
+ *
+ * The multiview representation on the output is chosen according to
+ * the downstream caps.
+ *
+ * <refsect2>
+ * <title>Examples</title>
+ * |[
+ * gst-launch-1.0 -v videotestsrc pattern=ball name=left \
+ * videotestsrc name=right glstereomix name=mix \
+ * left. ! vid/x-raw,width=640,height=480! glupload ! mix. \
+ * right. ! video/x-raw,width=640,height=480! glupload ! mix. \
+ * mix. ! video/x-raw'(memory:GLMemory)',multiview-mode=side-by-side ! \
+ * queue ! glimagesink output-multiview-mode=side-by-side
+ * ]| Mix 2 different videotestsrc patterns into a side-by-side stereo image and display it.
+ * |[
+ * gst-launch-1.0 -ev v4l2src name=left \
+ * videotestsrc name=right \
+ * glstereomix name=mix \
+ * left. ! video/x-raw,width=640,height=480 ! glupload ! glcolorconvert ! mix. \
+ * right. ! video/x-raw,width=640,height=480 ! glupload ! mix. \
+ * mix. ! video/x-raw'(memory:GLMemory)',multiview-mode=top-bottom ! \
+ * glcolorconvert ! gldownload ! queue ! x264enc ! h264parse ! \
+ * mp4mux ! progressreport ! filesink location=output.mp4
+ * ]| Mix the input from a camera to the left view, and videotestsrc to the right view,
+ * and encode as a top-bottom frame packed H.264 video.
+ * </refsect2>
+ */
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
@@ -106,11 +142,6 @@
static gboolean gst_gl_stereo_mix_src_query (GstAggregator * agg,
GstQuery * query);
-static void
-gst_gl_stereo_mix_find_best_format (GstVideoAggregator * vagg,
- GstCaps * downstream_caps, GstVideoInfo * best_info,
- gboolean * at_least_one_alpha);
-
static void gst_gl_stereo_mix_set_property (GObject * object, guint prop_id,
const GValue * value, GParamSpec * pspec);
static void gst_gl_stereo_mix_get_property (GObject * object, guint prop_id,
@@ -163,7 +194,6 @@
videoaggregator_class->negotiated_caps = _negotiated_caps;
videoaggregator_class->get_output_buffer =
gst_gl_stereo_mix_get_output_buffer;
- videoaggregator_class->find_best_format = gst_gl_stereo_mix_find_best_format;
base_mix_class->supported_gl_api =
GST_GL_API_GLES2 | GST_GL_API_OPENGL | GST_GL_API_OPENGL3;
@@ -438,13 +468,97 @@
return result;
}
-/* Return the possible output caps we decided in find_best_format() */
+/* Return the possible output caps based on inputs and downstream prefs */
static GstCaps *
_update_caps (GstVideoAggregator * vagg, GstCaps * caps, GstCaps * filter)
{
GstGLStereoMix *mix = GST_GL_STEREO_MIX (vagg);
+ GList *l;
+ gint best_width = -1, best_height = -1;
+ gdouble best_fps = -1, cur_fps;
+ gint best_fps_n = 0, best_fps_d = 1;
+ GstVideoInfo *mix_info;
+ GstCaps *blend_caps, *tmp_caps;
+ GstCaps *out_caps;
- return gst_caps_ref (mix->out_caps);
+ GST_OBJECT_LOCK (vagg);
+
+ for (l = GST_ELEMENT (vagg)->sinkpads; l; l = l->next) {
+ GstVideoAggregatorPad *pad = l->data;
+ GstVideoInfo tmp = pad->info;
+ gint this_width, this_height;
+ gint fps_n, fps_d;
+
+ if (!pad->info.finfo)
+ continue;
+
+ /* This can happen if we release a pad and another pad hasn't been negotiated_caps yet */
+ if (GST_VIDEO_INFO_FORMAT (&pad->info) == GST_VIDEO_FORMAT_UNKNOWN)
+ continue;
+
+ /* Convert to per-view width/height for unpacked forms */
+ gst_video_multiview_video_info_change_mode (&tmp,
+ GST_VIDEO_MULTIVIEW_MODE_SEPARATED, GST_VIDEO_MULTIVIEW_FLAGS_NONE);
+
+ this_width = GST_VIDEO_INFO_WIDTH (&tmp);
+ this_height = GST_VIDEO_INFO_HEIGHT (&tmp);
+ fps_n = GST_VIDEO_INFO_FPS_N (&tmp);
+ fps_d = GST_VIDEO_INFO_FPS_D (&tmp);
+
+ GST_INFO_OBJECT (vagg, "Input pad %" GST_PTR_FORMAT
+ " w %u h %u", pad, this_width, this_height);
+
+ if (this_width == 0 || this_height == 0)
+ continue;
+
+ if (best_width < this_width)
+ best_width = this_width;
+ if (best_height < this_height)
+ best_height = this_height;
+
+ if (fps_d == 0)
+ cur_fps = 0.0;
+ else
+ gst_util_fraction_to_double (fps_n, fps_d, &cur_fps);
+
+ if (best_fps < cur_fps) {
+ best_fps = cur_fps;
+ best_fps_n = fps_n;
+ best_fps_d = fps_d;
+ }
+
+ /* FIXME: Preserve PAR for at least one input when different sized inputs */
+ }
+ GST_OBJECT_UNLOCK (vagg);
+
+ mix_info = &mix->mix_info;
+ gst_video_info_set_format (mix_info, GST_VIDEO_FORMAT_RGBA, best_width,
+ best_height);
+
+ GST_VIDEO_INFO_FPS_N (mix_info) = best_fps_n;
+ GST_VIDEO_INFO_FPS_D (mix_info) = best_fps_d;
+
+ GST_VIDEO_INFO_MULTIVIEW_MODE (mix_info) = GST_VIDEO_MULTIVIEW_MODE_SEPARATED;
+ GST_VIDEO_INFO_VIEWS (mix_info) = 2;
+
+ /* FIXME: If input is marked as flipped or flopped, preserve those flags */
+ GST_VIDEO_INFO_MULTIVIEW_FLAGS (mix_info) = GST_VIDEO_MULTIVIEW_FLAGS_NONE;
+
+ /* Choose our output format based on downstream preferences */
+ blend_caps = gst_video_info_to_caps (mix_info);
+
+ gst_caps_set_features (blend_caps, 0,
+ gst_caps_features_from_string (GST_CAPS_FEATURE_MEMORY_GL_MEMORY));
+
+ tmp_caps = get_converted_caps (GST_GL_STEREO_MIX (vagg), blend_caps);
+ gst_caps_unref (blend_caps);
+
+ out_caps = gst_caps_intersect (caps, tmp_caps);
+ gst_caps_unref (tmp_caps);
+
+ GST_DEBUG_OBJECT (vagg, "Possible output caps %" GST_PTR_FORMAT, out_caps);
+
+ return out_caps;
}
/* Called after videoaggregator fixates our caps */
@@ -462,8 +576,6 @@
return FALSE;
/* Update the glview_convert output */
- if (!gst_video_info_from_caps (&mix->out_info, caps))
- return FALSE;
/* We can configure the view_converter now */
gst_gl_view_convert_set_context (mix->viewconvert,
@@ -585,108 +697,3 @@
return TRUE;
}
-
-/* Iterate the input sink pads, and choose the blend format
- * we will generate before output conversion, which is RGBA
- * at some suitable size */
-static void
-gst_gl_stereo_mix_find_best_format (GstVideoAggregator * vagg,
- GstCaps * downstream_caps, GstVideoInfo * best_info,
- gboolean * at_least_one_alpha)
-{
- GstGLStereoMix *mix = GST_GL_STEREO_MIX (vagg);
- GList *l;
- gint best_width = -1, best_height = -1;
- gdouble best_fps = -1, cur_fps;
- gint best_fps_n = 0, best_fps_d = 1;
- GstVideoInfo *mix_info;
- GstCaps *blend_caps, *tmp_caps;
-
- /* We'll deal with alpha internally, so just tell aggregator to
- * be quiet */
- *at_least_one_alpha = FALSE;
-
- GST_OBJECT_LOCK (vagg);
-
- for (l = GST_ELEMENT (vagg)->sinkpads; l; l = l->next) {
- GstVideoAggregatorPad *pad = l->data;
- GstVideoInfo tmp = pad->info;
- gint this_width, this_height;
- gint fps_n, fps_d;
-
- if (!pad->info.finfo)
- continue;
-
- /* This can happen if we release a pad and another pad hasn't been negotiated_caps yet */
- if (GST_VIDEO_INFO_FORMAT (&pad->info) == GST_VIDEO_FORMAT_UNKNOWN)
- continue;
-
- /* Convert to per-view width/height for unpacked forms */
- gst_video_multiview_video_info_change_mode (&tmp,
- GST_VIDEO_MULTIVIEW_MODE_SEPARATED, GST_VIDEO_MULTIVIEW_FLAGS_NONE);
-
- this_width = GST_VIDEO_INFO_WIDTH (&tmp);
- this_height = GST_VIDEO_INFO_HEIGHT (&tmp);
- fps_n = GST_VIDEO_INFO_FPS_N (&tmp);
- fps_d = GST_VIDEO_INFO_FPS_D (&tmp);
-
- GST_INFO_OBJECT (vagg, "Input pad %" GST_PTR_FORMAT
- " w %u h %u", pad, this_width, this_height);
-
- if (this_width == 0 || this_height == 0)
- continue;
-
- if (best_width < this_width)
- best_width = this_width;
- if (best_height < this_height)
- best_height = this_height;
-
- if (fps_d == 0)
- cur_fps = 0.0;
- else
- gst_util_fraction_to_double (fps_n, fps_d, &cur_fps);
-
- if (best_fps < cur_fps) {
- best_fps = cur_fps;
- best_fps_n = fps_n;
- best_fps_d = fps_d;
- }
-
- /* FIXME: Preserve PAR for at least one input when different sized inputs */
- }
- GST_OBJECT_UNLOCK (vagg);
-
- mix_info = &mix->mix_info;
- gst_video_info_set_format (mix_info, GST_VIDEO_FORMAT_RGBA, best_width,
- best_height);
-
- GST_VIDEO_INFO_FPS_N (mix_info) = best_fps_n;
- GST_VIDEO_INFO_FPS_D (mix_info) = best_fps_d;
-
- GST_VIDEO_INFO_MULTIVIEW_MODE (mix_info) = GST_VIDEO_MULTIVIEW_MODE_SEPARATED;
- GST_VIDEO_INFO_VIEWS (mix_info) = 2;
-
- /* FIXME: If input is marked as flipped or flopped, preserve those flags */
- GST_VIDEO_INFO_MULTIVIEW_FLAGS (mix_info) = GST_VIDEO_MULTIVIEW_FLAGS_NONE;
-
- /* Choose our output format based on downstream preferences */
- blend_caps = gst_video_info_to_caps (mix_info);
-
- gst_caps_set_features (blend_caps, 0,
- gst_caps_features_from_string (GST_CAPS_FEATURE_MEMORY_GL_MEMORY));
-
- tmp_caps = get_converted_caps (GST_GL_STEREO_MIX (vagg), blend_caps);
- gst_caps_unref (blend_caps);
-
- if (mix->out_caps)
- gst_caps_unref (mix->out_caps);
-
- mix->out_caps = gst_caps_intersect (downstream_caps, tmp_caps);
- gst_caps_unref (tmp_caps);
-
- GST_DEBUG_OBJECT (vagg, "Possible output caps %" GST_PTR_FORMAT,
- mix->out_caps);
- /* Tell videoaggregator our preferred size. Actual info gets
- * overridden during caps nego */
- *best_info = *mix_info;
-}
diff --git a/ext/gl/gstglstereomix.h b/ext/gl/gstglstereomix.h
index b0f1bd2..9971a89 100644
--- a/ext/gl/gstglstereomix.h
+++ b/ext/gl/gstglstereomix.h
@@ -69,9 +69,6 @@
GstGLViewConvert *viewconvert;
GstGLStereoDownmix downmix_mode;
- GstCaps *out_caps;
- GstVideoInfo out_info;
-
GstVideoInfo mix_info;
GPtrArray *input_frames;
diff --git a/ext/gl/gstgltestsrc.c b/ext/gl/gstgltestsrc.c
index 69c8b33..62d231f 100644
--- a/ext/gl/gstgltestsrc.c
+++ b/ext/gl/gstgltestsrc.c
@@ -107,7 +107,7 @@
static gboolean gst_gl_test_src_decide_allocation (GstBaseSrc * basesrc,
GstQuery * query);
-static void gst_gl_test_src_callback (gpointer stuff);
+static gboolean gst_gl_test_src_callback (gpointer stuff);
static gboolean gst_gl_test_src_init_shader (GstGLTestSrc * gltestsrc);
@@ -454,22 +454,24 @@
return TRUE;
}
+static void
+_fill_gl (GstGLContext * context, GstGLTestSrc * src)
+{
+ src->gl_result = gst_gl_framebuffer_draw_to_texture (src->fbo, src->out_tex,
+ gst_gl_test_src_callback, src);
+}
+
static GstFlowReturn
gst_gl_test_src_fill (GstPushSrc * psrc, GstBuffer * buffer)
{
GstGLTestSrc *src = GST_GL_TEST_SRC (psrc);
GstClockTime next_time;
- gint width, height;
GstVideoFrame out_frame;
GstGLSyncMeta *sync_meta;
- guint out_tex;
if (G_UNLIKELY (!src->negotiated || !src->context))
goto not_negotiated;
- width = GST_VIDEO_INFO_WIDTH (&src->out_info);
- height = GST_VIDEO_INFO_HEIGHT (&src->out_info);
-
/* 0 framerate and we are at the second frame, eos */
if (G_UNLIKELY (GST_VIDEO_INFO_FPS_N (&src->out_info) == 0
&& src->n_frames == 1))
@@ -480,11 +482,11 @@
return GST_FLOW_NOT_NEGOTIATED;
}
- out_tex = *(guint *) out_frame.data[0];
+ src->out_tex = (GstGLMemory *) out_frame.map[0].memory;
- if (!gst_gl_context_use_fbo_v2 (src->context, width, height, src->fbo,
- src->depthbuffer, out_tex, gst_gl_test_src_callback,
- (gpointer) src)) {
+ gst_gl_context_thread_add (src->context, (GstGLContextThreadFunc) _fill_gl,
+ src);
+ if (!src->gl_result) {
gst_video_frame_unmap (&out_frame);
goto gl_error;
}
@@ -562,8 +564,11 @@
gst_object_unref (src->shader);
src->shader = NULL;
}
- //blocking call, delete the FBO
- gst_gl_context_del_fbo (src->context, src->fbo, src->depthbuffer);
+
+ if (src->fbo)
+ gst_object_unref (src->fbo);
+ src->fbo = NULL;
+
gst_object_unref (src->context);
src->context = NULL;
}
@@ -615,6 +620,14 @@
return FALSE;
}
+static void
+_src_generate_fbo_gl (GstGLContext * context, GstGLTestSrc * src)
+{
+ src->fbo = gst_gl_framebuffer_new_with_default_depth (src->context,
+ GST_VIDEO_INFO_WIDTH (&src->out_info),
+ GST_VIDEO_INFO_HEIGHT (&src->out_info));
+}
+
static gboolean
gst_gl_test_src_decide_allocation (GstBaseSrc * basesrc, GstQuery * query)
{
@@ -625,7 +638,6 @@
guint min, max, size;
gboolean update_pool;
GError *error = NULL;
- guint out_width, out_height;
if (!gst_gl_ensure_element_data (src, &src->display, &src->other_context))
return FALSE;
@@ -658,11 +670,9 @@
if ((gst_gl_context_get_gl_api (src->context) & SUPPORTED_GL_APIS) == 0)
goto unsupported_gl_api;
- out_width = GST_VIDEO_INFO_WIDTH (&src->out_info);
- out_height = GST_VIDEO_INFO_HEIGHT (&src->out_info);
-
- if (!gst_gl_context_gen_fbo (src->context, out_width, out_height,
- &src->fbo, &src->depthbuffer))
+ gst_gl_context_thread_add (src->context,
+ (GstGLContextThreadFunc) _src_generate_fbo_gl, src);
+ if (!src->fbo)
goto context_error;
gst_query_parse_allocation (query, &caps, NULL);
@@ -735,8 +745,7 @@
}
}
-//opengl scene
-static void
+static gboolean
gst_gl_test_src_callback (gpointer stuff)
{
GstGLTestSrc *src = GST_GL_TEST_SRC (stuff);
@@ -752,21 +761,18 @@
if (funcs == NULL) {
GST_ERROR_OBJECT (src, "Could not find an implementation of the "
"requested pattern");
- src->gl_result = FALSE;
- return;
+ return FALSE;
}
src->src_impl = funcs->new (src);
if (!(src->gl_result =
funcs->init (src->src_impl, src->context, &src->out_info))) {
GST_ERROR_OBJECT (src, "Failed to initialize pattern");
- return;
+ return FALSE;
}
src->active_pattern = src->set_pattern;
}
- src->gl_result = funcs->fill_bound_fbo (src->src_impl);
- if (!src->gl_result)
- GST_ERROR_OBJECT (src, "Failed to render the pattern");
+ return funcs->fill_bound_fbo (src->src_impl);
}
static GstStateChangeReturn
diff --git a/ext/gl/gstgltestsrc.h b/ext/gl/gstgltestsrc.h
index 1b566ad..df4abb7 100644
--- a/ext/gl/gstgltestsrc.h
+++ b/ext/gl/gstgltestsrc.h
@@ -62,8 +62,8 @@
/* video state */
GstVideoInfo out_info;
- GLuint fbo;
- GLuint depthbuffer;
+ GstGLFramebuffer *fbo;
+ GstGLMemory *out_tex;
GstGLShader *shader;
diff --git a/ext/gl/gstgltransformation.c b/ext/gl/gstgltransformation.c
index b303d0c..a4df304 100644
--- a/ext/gl/gstgltransformation.c
+++ b/ext/gl/gstgltransformation.c
@@ -55,6 +55,15 @@
#define gst_gl_transformation_parent_class parent_class
+#define VEC4_FORMAT "%f,%f,%f,%f"
+#define VEC4_ARGS(v) graphene_vec4_get_x (v), graphene_vec4_get_y (v), graphene_vec4_get_z (v), graphene_vec4_get_w (v)
+#define VEC3_FORMAT "%f,%f,%f"
+#define VEC3_ARGS(v) graphene_vec3_get_x (v), graphene_vec3_get_y (v), graphene_vec3_get_z (v)
+#define VEC2_FORMAT "%f,%f"
+#define VEC2_ARGS(v) graphene_vec2_get_x (v), graphene_vec2_get_y (v)
+#define POINT3D_FORMAT "%f,%f,%f"
+#define POINT3D_ARGS(p) (p)->x, (p)->y, (p)->z
+
enum
{
PROP_0,
@@ -97,7 +106,7 @@
static void gst_gl_transformation_reset_gl (GstGLFilter * filter);
static gboolean gst_gl_transformation_stop (GstBaseTransform * trans);
static gboolean gst_gl_transformation_init_shader (GstGLFilter * filter);
-static void gst_gl_transformation_callback (gpointer stuff);
+static gboolean gst_gl_transformation_callback (gpointer stuff);
static void gst_gl_transformation_build_mvp (GstGLTransformation *
transformation);
@@ -107,7 +116,7 @@
static gboolean gst_gl_transformation_filter (GstGLFilter * filter,
GstBuffer * inbuf, GstBuffer * outbuf);
static gboolean gst_gl_transformation_filter_texture (GstGLFilter * filter,
- guint in_tex, guint out_tex);
+ GstGLMemory * in_tex, GstGLMemory * out_tex);
static void
gst_gl_transformation_class_init (GstGLTransformationClass * klass)
@@ -277,14 +286,13 @@
graphene_point3d_t negative_pivot_vector;
- graphene_vec3_t eye;
graphene_vec3_t center;
graphene_vec3_t up;
gboolean current_passthrough;
gboolean passthrough;
- graphene_vec3_init (&eye, 0.f, 0.f, 1.f);
+ graphene_vec3_init (&transformation->camera_position, 0.f, 0.f, 1.f);
graphene_vec3_init (¢er, 0.f, 0.f, 0.f);
graphene_vec3_init (&up, 0.f, 1.f, 0.f);
@@ -323,8 +331,8 @@
transformation->aspect, transformation->znear, transformation->zfar);
}
- graphene_matrix_init_look_at (&transformation->view_matrix, &eye, ¢er,
- &up);
+ graphene_matrix_init_look_at (&transformation->view_matrix,
+ &transformation->camera_position, ¢er, &up);
current_passthrough =
gst_base_transform_is_passthrough (GST_BASE_TRANSFORM (transformation));
@@ -345,6 +353,13 @@
&transformation->view_matrix, &modelview_matrix);
graphene_matrix_multiply (&modelview_matrix,
&transformation->projection_matrix, &transformation->mvp_matrix);
+
+ graphene_matrix_inverse (&transformation->model_matrix,
+ &transformation->inv_model_matrix);
+ graphene_matrix_inverse (&transformation->view_matrix,
+ &transformation->inv_view_matrix);
+ graphene_matrix_inverse (&transformation->projection_matrix,
+ &transformation->inv_projection_matrix);
}
static void
@@ -447,6 +462,7 @@
g_value_set_float (value, filter->zpivot);
break;
case PROP_MVP:
+ /* FIXME: need to decompose this to support navigation events */
g_value_set_boxed (value, (gconstpointer) & filter->mvp_matrix);
break;
default:
@@ -473,142 +489,198 @@
}
static void
-_find_plane_normal (const graphene_point3d_t * A, const graphene_point3d_t * B,
- const graphene_point3d_t * C, graphene_vec3_t * plane_normal)
+_intersect_plane_and_ray (graphene_plane_t * video_plane, graphene_ray_t * ray,
+ graphene_point3d_t * result)
{
- graphene_vec3_t U, V, A_v, B_v, C_v;
-
- graphene_point3d_to_vec3 (A, &A_v);
- graphene_point3d_to_vec3 (B, &B_v);
- graphene_point3d_to_vec3 (C, &C_v);
-
- graphene_vec3_subtract (&B_v, &A_v, &U);
- graphene_vec3_subtract (&C_v, &A_v, &V);
-
- graphene_vec3_cross (&U, &V, plane_normal);
- graphene_vec3_normalize (plane_normal, plane_normal);
+ float t = graphene_ray_get_distance_to_plane (ray, video_plane);
+ GST_TRACE ("Calculated a distance of %f to the plane", t);
+ graphene_ray_get_position_at (ray, t, result);
}
static void
-_find_model_coords (GstGLTransformation * transformation,
- const graphene_point3d_t * screen_coords, graphene_point3d_t * res)
+_screen_coord_to_world_ray (GstGLTransformation * transformation, float x,
+ float y, graphene_ray_t * ray)
{
- graphene_matrix_t modelview, inverse_proj, inverse_modelview;
- graphene_vec4_t v1, v2;
- graphene_point3d_t p1;
- gfloat w;
+ GstGLFilter *filter = GST_GL_FILTER (transformation);
+ gfloat w = (gfloat) GST_VIDEO_INFO_WIDTH (&filter->in_info);
+ gfloat h = (gfloat) GST_VIDEO_INFO_HEIGHT (&filter->in_info);
+ graphene_vec3_t ray_eye_vec3, ray_world_dir, *ray_origin, *ray_direction;
+ graphene_vec3_t ray_ortho_dir;
+ graphene_point3d_t ray_clip, ray_eye;
+ graphene_vec2_t screen_coord;
- graphene_vec4_init (&v1, screen_coords->x, screen_coords->y, screen_coords->z,
- 1.);
- graphene_matrix_inverse (&transformation->projection_matrix, &inverse_proj);
- graphene_matrix_transform_vec4 (&inverse_proj, &v1, &v2);
+ /* GL is y-flipped. i.e. 0, 0 is the bottom left corner in screen space */
+ graphene_vec2_init (&screen_coord, (2. * x / w - 1.) / transformation->aspect,
+ 1. - 2. * y / h);
- /* perspective division */
- w = graphene_vec4_get_w (&v2);
- p1.x = graphene_vec4_get_x (&v2) / w;
- p1.y = graphene_vec4_get_y (&v2) / w;
- p1.z = graphene_vec4_get_z (&v2) / w;
+ graphene_point3d_init (&ray_clip, graphene_vec2_get_x (&screen_coord),
+ graphene_vec2_get_y (&screen_coord), -1.);
+ graphene_matrix_transform_point3d (&transformation->inv_projection_matrix,
+ &ray_clip, &ray_eye);
- graphene_matrix_multiply (&transformation->model_matrix,
- &transformation->view_matrix, &modelview);
- graphene_matrix_inverse (&modelview, &inverse_modelview);
- graphene_matrix_transform_point3d (&inverse_modelview, &p1, res);
+ graphene_vec3_init (&ray_eye_vec3, ray_eye.x, ray_eye.y, -1.);
+
+ if (transformation->ortho) {
+ graphene_vec3_init (&ray_ortho_dir, 0., 0., 1.);
+
+ ray_origin = &ray_eye_vec3;
+ ray_direction = &ray_ortho_dir;
+ } else {
+ graphene_matrix_transform_vec3 (&transformation->inv_view_matrix,
+ &ray_eye_vec3, &ray_world_dir);
+ graphene_vec3_normalize (&ray_world_dir, &ray_world_dir);
+
+ ray_origin = &transformation->camera_position;
+ ray_direction = &ray_world_dir;
+ }
+
+ graphene_ray_init_from_vec3 (ray, ray_origin, ray_direction);
+
+ GST_TRACE_OBJECT (transformation, "Calculated ray origin: " VEC3_FORMAT
+ " direction: " VEC3_FORMAT " from screen coordinates: " VEC2_FORMAT
+ " with %s projection",
+ VEC3_ARGS (ray_origin), VEC3_ARGS (ray_direction),
+ VEC2_ARGS (&screen_coord),
+ transformation->ortho ? "ortho" : "perspection");
}
+static void
+_init_world_video_plane (GstGLTransformation * transformation,
+ graphene_plane_t * video_plane)
+{
+ graphene_point3d_t bottom_left, bottom_right, top_left, top_right;
+ graphene_point3d_t world_bottom_left, world_bottom_right;
+ graphene_point3d_t world_top_left, world_top_right;
+
+ graphene_point3d_init (&top_left, -transformation->aspect, 1., 0.);
+ graphene_point3d_init (&top_right, transformation->aspect, 1., 0.);
+ graphene_point3d_init (&bottom_left, -transformation->aspect, -1., 0.);
+ graphene_point3d_init (&bottom_right, transformation->aspect, -1., 0.);
+
+ graphene_matrix_transform_point3d (&transformation->model_matrix,
+ &bottom_left, &world_bottom_left);
+ graphene_matrix_transform_point3d (&transformation->model_matrix,
+ &bottom_right, &world_bottom_right);
+ graphene_matrix_transform_point3d (&transformation->model_matrix,
+ &top_left, &world_top_left);
+ graphene_matrix_transform_point3d (&transformation->model_matrix,
+ &top_right, &world_top_right);
+
+ graphene_plane_init_from_points (video_plane, &world_bottom_left,
+ &world_top_right, &world_top_left);
+}
+
+static gboolean
+_screen_coord_to_model_coord (GstGLTransformation * transformation,
+ double x, double y, double *res_x, double *res_y)
+{
+ GstGLFilter *filter = GST_GL_FILTER (transformation);
+ double w = (double) GST_VIDEO_INFO_WIDTH (&filter->in_info);
+ double h = (double) GST_VIDEO_INFO_HEIGHT (&filter->in_info);
+ graphene_point3d_t world_point, model_coord;
+ graphene_plane_t video_plane;
+ graphene_ray_t ray;
+ double new_x, new_y;
+
+ _init_world_video_plane (transformation, &video_plane);
+ _screen_coord_to_world_ray (transformation, x, y, &ray);
+ _intersect_plane_and_ray (&video_plane, &ray, &world_point);
+ graphene_matrix_transform_point3d (&transformation->inv_model_matrix,
+ &world_point, &model_coord);
+
+ /* ndc to pixels. We render the frame Y-flipped so need to unflip the
+ * y coordinate */
+ new_x = (model_coord.x + 1.) * w / 2;
+ new_y = (1. - model_coord.y) * h / 2;
+
+ if (new_x < 0. || new_x > w || new_y < 0. || new_y > h)
+ /* coords off video surface */
+ return FALSE;
+
+ GST_DEBUG_OBJECT (transformation, "converted %f,%f to %f,%f", x, y, new_x,
+ new_y);
+
+ if (res_x)
+ *res_x = new_x;
+ if (res_y)
+ *res_y = new_y;
+
+ return TRUE;
+}
+
+#if 0
+/* debugging facilities for transforming vertices from model space to screen
+ * space */
+static void
+_ndc_to_viewport (GstGLTransformation * transformation, graphene_vec3_t * ndc,
+ int x, int y, int w, int h, float near, float far, graphene_vec3_t * result)
+{
+ GstGLFilter *filter = GST_GL_FILTER (transformation);
+ /* center of the viewport */
+ int o_x = x + w / 2;
+ int o_y = y + h / 2;
+
+ graphene_vec3_init (result, graphene_vec3_get_x (ndc) * w / 2 + o_x,
+ graphene_vec3_get_y (ndc) * h / 2 + o_y,
+ (far - near) * graphene_vec3_get_z (ndc) / 2 + (far + near) / 2);
+}
+
+static void
+_perspective_division (graphene_vec4_t * clip, graphene_vec3_t * result)
+{
+ float w = graphene_vec4_get_w (clip);
+
+ graphene_vec3_init (result, graphene_vec4_get_x (clip) / w,
+ graphene_vec4_get_y (clip) / w, graphene_vec4_get_z (clip) / w);
+}
+
+static void
+_vertex_to_screen_coord (GstGLTransformation * transformation,
+ graphene_vec4_t * vertex, graphene_vec3_t * view)
+{
+ GstGLFilter *filter = GST_GL_FILTER (transformation);
+ gint w = GST_VIDEO_INFO_WIDTH (&filter->in_info);
+ gint h = GST_VIDEO_INFO_HEIGHT (&filter->in_info);
+ graphene_vec4_t clip;
+ graphene_vec3_t ndc;
+
+ graphene_matrix_transform_vec4 (&transformation->mvp_matrix, vertex, &clip);
+ _perspective_division (&clip, &ndc);
+ _ndc_to_viewport (transformation, &ndc, 0, 0, w, h, 0., 1., view);
+}
+#endif
+
static gboolean
gst_gl_transformation_src_event (GstBaseTransform * trans, GstEvent * event)
{
GstGLTransformation *transformation = GST_GL_TRANSFORMATION (trans);
- GstGLFilter *filter = GST_GL_FILTER (trans);
- gdouble new_x, new_y, x, y;
GstStructure *structure;
gboolean ret;
GST_DEBUG_OBJECT (trans, "handling %s event", GST_EVENT_TYPE_NAME (event));
switch (GST_EVENT_TYPE (event)) {
- case GST_EVENT_NAVIGATION:
+ case GST_EVENT_NAVIGATION:{
+ gdouble x, y;
event =
GST_EVENT (gst_mini_object_make_writable (GST_MINI_OBJECT (event)));
structure = (GstStructure *) gst_event_get_structure (event);
if (gst_structure_get_double (structure, "pointer_x", &x) &&
gst_structure_get_double (structure, "pointer_y", &y)) {
- gfloat w = (gfloat) GST_VIDEO_INFO_WIDTH (&filter->in_info);
- gfloat h = (gfloat) GST_VIDEO_INFO_HEIGHT (&filter->in_info);
- graphene_point3d_t screen_point_near, screen_point_far;
- graphene_point3d_t model_coord_near, model_coord_far;
- graphene_point3d_t bottom_left, bottom_right, top_left, top_right;
- graphene_point3d_t result;
- graphene_vec3_t plane_normal;
- graphene_plane_t video_plane;
- gfloat d;
+ gdouble new_x, new_y;
- GST_DEBUG_OBJECT (trans, "converting %f,%f", x, y);
-
- graphene_point3d_init (&top_left, -1., 1., 0.);
- graphene_point3d_init (&top_right, 1., 1., 0.);
- graphene_point3d_init (&bottom_left, -1., -1., 0.);
- graphene_point3d_init (&bottom_right, 1., -1., 0.);
- /* to NDC */
- graphene_point3d_init (&screen_point_near, 2. * x / w - 1.,
- 2. * y / h - 1., -1.);
- graphene_point3d_init (&screen_point_far, 2. * x / w - 1.,
- 2. * y / h - 1., 1.);
-
- _find_plane_normal (&bottom_left, &top_left, &top_right, &plane_normal);
- graphene_plane_init_from_point (&video_plane, &plane_normal, &top_left);
- d = graphene_plane_get_constant (&video_plane);
-
- /* get the closest and furthest points in the viewing area for the
- * specified screen coordinate in order to construct a ray */
- _find_model_coords (transformation, &screen_point_near,
- &model_coord_near);
- _find_model_coords (transformation, &screen_point_far,
- &model_coord_far);
-
- {
- graphene_vec3_t model_coord_near_vec3, model_coord_far_vec3;
- graphene_vec3_t tmp, intersection, coord_dir;
- gfloat num, denom, t;
-
- /* get the direction of the ray */
- graphene_point3d_to_vec3 (&model_coord_near, &model_coord_near_vec3);
- graphene_point3d_to_vec3 (&model_coord_far, &model_coord_far_vec3);
- graphene_vec3_subtract (&model_coord_near_vec3, &model_coord_far_vec3,
- &coord_dir);
-
- /* Intersect the ray with the video plane to find the distance, t:
- * Ray: P = P0 + t Pdir
- * Plane: P dot N + d = 0
- *
- * Substituting for P and rearranging gives:
- *
- * t = (P0 dot N + d) / (Pdir dot N) */
- denom = graphene_vec3_dot (&coord_dir, &plane_normal);
- num = graphene_vec3_dot (&model_coord_near_vec3, &plane_normal);
- t = -(num + d) / denom;
-
- /* video coord = P0 + t Pdir */
- graphene_vec3_scale (&coord_dir, t, &tmp);
- graphene_vec3_add (&tmp, &model_coord_near_vec3, &intersection);
- graphene_point3d_init_from_vec3 (&result, &intersection);
- }
-
- new_x = (result.x / transformation->aspect + 1.) * w / 2;
- new_y = (result.y + 1.) * h / 2;
-
- if (new_x < 0. || new_x > w || new_y < 0 || new_y > h) {
- /* coords off video surface */
+ if (!_screen_coord_to_model_coord (transformation, x, y, &new_x,
+ &new_y)) {
gst_event_unref (event);
return TRUE;
}
- GST_DEBUG_OBJECT (trans, "to %fx%f", new_x, new_y);
gst_structure_set (structure, "pointer_x", G_TYPE_DOUBLE, new_x,
"pointer_y", G_TYPE_DOUBLE, new_y, NULL);
}
break;
+ }
default:
break;
}
@@ -782,19 +854,15 @@
}
static gboolean
-gst_gl_transformation_filter_texture (GstGLFilter * filter, guint in_tex,
- guint out_tex)
+gst_gl_transformation_filter_texture (GstGLFilter * filter,
+ GstGLMemory * in_tex, GstGLMemory * out_tex)
{
GstGLTransformation *transformation = GST_GL_TRANSFORMATION (filter);
transformation->in_tex = in_tex;
- /* blocking call, use a FBO */
- gst_gl_context_use_fbo_v2 (GST_GL_BASE_FILTER (filter)->context,
- GST_VIDEO_INFO_WIDTH (&filter->out_info),
- GST_VIDEO_INFO_HEIGHT (&filter->out_info),
- filter->fbo, filter->depthbuffer,
- out_tex, gst_gl_transformation_callback, (gpointer) transformation);
+ gst_gl_framebuffer_draw_to_texture (filter->fbo, out_tex,
+ (GstGLFramebufferFunc) gst_gl_transformation_callback, transformation);
return TRUE;
}
@@ -856,7 +924,7 @@
gl->DisableVertexAttribArray (transformation->attr_texture);
}
-static void
+static gboolean
gst_gl_transformation_callback (gpointer stuff)
{
GstGLFilter *filter = GST_GL_FILTER (stuff);
@@ -874,7 +942,7 @@
gst_gl_shader_use (transformation->shader);
gl->ActiveTexture (GL_TEXTURE0);
- gl->BindTexture (GL_TEXTURE_2D, transformation->in_tex);
+ gl->BindTexture (GL_TEXTURE_2D, transformation->in_tex->tex_id);
gst_gl_shader_set_uniform_1i (transformation->shader, "texture", 0);
graphene_matrix_to_float (&transformation->mvp_matrix, temp_matrix);
@@ -924,4 +992,6 @@
gst_gl_context_clear_shader (GST_GL_BASE_FILTER (filter)->context);
transformation->caps_change = FALSE;
+
+ return TRUE;
}
diff --git a/ext/gl/gstgltransformation.h b/ext/gl/gstgltransformation.h
index ed75ff6..a767be2 100644
--- a/ext/gl/gstgltransformation.h
+++ b/ext/gl/gstgltransformation.h
@@ -47,7 +47,8 @@
GLint attr_position;
GLint attr_texture;
- guint in_tex;
+ GstGLMemory *in_tex;
+ GstGLMemory *out_tex;
gfloat xrotation;
gfloat yrotation;
@@ -74,8 +75,13 @@
graphene_matrix_t model_matrix;
graphene_matrix_t view_matrix;
graphene_matrix_t projection_matrix;
+ graphene_matrix_t inv_model_matrix;
+ graphene_matrix_t inv_view_matrix;
+ graphene_matrix_t inv_projection_matrix;
graphene_matrix_t mvp_matrix;
+ graphene_vec3_t camera_position;
+
gboolean downstream_supports_affine_meta;
gboolean caps_change;
};
diff --git a/ext/gl/gstgluploadelement.c b/ext/gl/gstgluploadelement.c
index b65c0c4..f458a43 100644
--- a/ext/gl/gstgluploadelement.c
+++ b/ext/gl/gstgluploadelement.c
@@ -97,6 +97,8 @@
gst_gl_upload_element_init (GstGLUploadElement * upload)
{
gst_base_transform_set_prefer_passthrough (GST_BASE_TRANSFORM (upload), TRUE);
+
+ upload->upload = gst_gl_upload_new (NULL);
}
static gboolean
@@ -133,9 +135,11 @@
_gst_gl_upload_element_transform_caps (GstBaseTransform * bt,
GstPadDirection direction, GstCaps * caps, GstCaps * filter)
{
+ GstGLUploadElement *upload = GST_GL_UPLOAD_ELEMENT (bt);
GstGLContext *context = GST_GL_BASE_FILTER (bt)->context;
- return gst_gl_upload_transform_caps (context, direction, caps, filter);
+ return gst_gl_upload_transform_caps (upload->upload, context, direction, caps,
+ filter);
}
static gboolean
@@ -177,10 +181,10 @@
if (!ret)
return FALSE;
+ /* GstGLBaseFilter populates ->context in ::decide_allocation so now it's the
+ * time to set the ->upload context */
context = GST_GL_BASE_FILTER (trans)->context;
-
- if (!upload->upload)
- upload->upload = gst_gl_upload_new (context);
+ gst_gl_upload_set_context (upload->upload, context);
return gst_gl_upload_set_caps (upload->upload, upload->in_caps,
upload->out_caps);
@@ -220,6 +224,10 @@
return GST_FLOW_NOT_NEGOTIATED;
ret = gst_gl_upload_perform_with_buffer (upload->upload, buffer, outbuf);
+ if (ret == GST_GL_UPLOAD_RECONFIGURE) {
+ gst_base_transform_reconfigure_src (bt);
+ return GST_FLOW_OK;
+ }
if (ret != GST_GL_UPLOAD_DONE || *outbuf == NULL) {
GST_ELEMENT_ERROR (bt, RESOURCE, NOT_FOUND, ("%s",
diff --git a/ext/gl/gstglvideoflip.c b/ext/gl/gstglvideoflip.c
index 690396d..5d2dac5 100644
--- a/ext/gl/gstglvideoflip.c
+++ b/ext/gl/gstglvideoflip.c
@@ -46,6 +46,7 @@
{
PROP_0,
PROP_METHOD,
+ PROP_VIDEO_DIRECTION
};
static GstStaticPadTemplate _sink_template = GST_STATIC_PAD_TEMPLATE ("sink",
@@ -98,11 +99,6 @@
return video_flip_method_type;
}
-#define gst_gl_video_flip_parent_class parent_class
-G_DEFINE_TYPE_WITH_CODE (GstGLVideoFlip, gst_gl_video_flip,
- GST_TYPE_BIN, GST_DEBUG_CATEGORY_INIT (GST_CAT_DEFAULT,
- "glvideoflip", 0, "glvideoflip element"););
-
static void gst_gl_video_flip_finalize (GObject * object);
static void gst_gl_video_flip_set_property (GObject * object, guint prop_id,
const GValue * value, GParamSpec * pspec);
@@ -115,6 +111,24 @@
gpointer user_data);
static void
+gst_gl_video_flip_video_direction_interface_init (GstVideoDirectionInterface
+ * iface);
+
+#define gst_gl_video_flip_parent_class parent_class
+G_DEFINE_TYPE_WITH_CODE (GstGLVideoFlip, gst_gl_video_flip,
+ GST_TYPE_BIN, GST_DEBUG_CATEGORY_INIT (GST_CAT_DEFAULT,
+ "glvideoflip", 0, "glvideoflip element");
+ G_IMPLEMENT_INTERFACE (GST_TYPE_VIDEO_DIRECTION,
+ gst_gl_video_flip_video_direction_interface_init););
+
+static void
+gst_gl_video_flip_video_direction_interface_init (GstVideoDirectionInterface
+ * iface)
+{
+ /* We implement the video-direction property */
+}
+
+static void
gst_gl_video_flip_class_init (GstGLVideoFlipClass * klass)
{
GObjectClass *gobject_class;
@@ -128,10 +142,13 @@
gobject_class->get_property = gst_gl_video_flip_get_property;
g_object_class_install_property (gobject_class, PROP_METHOD,
- g_param_spec_enum ("method", "method", "method",
+ g_param_spec_enum ("method", "method",
+ "method (deprecated, use video-direction instead)",
GST_TYPE_GL_VIDEO_FLIP_METHOD, DEFAULT_METHOD,
GST_PARAM_CONTROLLABLE | G_PARAM_READWRITE | G_PARAM_CONSTRUCT |
G_PARAM_STATIC_STRINGS));
+ g_object_class_override_property (gobject_class, PROP_VIDEO_DIRECTION,
+ "video-direction");
gst_element_class_add_static_pad_template (element_class, &_src_template);
gst_element_class_add_static_pad_template (element_class, &_sink_template);
@@ -233,10 +250,10 @@
gst_structure_get_int (structure, "height", &height)) {
switch (vf->active_method) {
- case GST_GL_VIDEO_FLIP_METHOD_90R:
- case GST_GL_VIDEO_FLIP_METHOD_90L:
- case GST_GL_VIDEO_FLIP_METHOD_FLIP_UL_LR:
- case GST_GL_VIDEO_FLIP_METHOD_FLIP_UR_LL:
+ case GST_VIDEO_ORIENTATION_90R:
+ case GST_VIDEO_ORIENTATION_90L:
+ case GST_VIDEO_ORIENTATION_UL_LR:
+ case GST_VIDEO_ORIENTATION_UR_LL:
gst_structure_set (structure, "width", G_TYPE_INT, height,
"height", G_TYPE_INT, width, NULL);
if (gst_structure_get_fraction (structure, "pixel-aspect-ratio",
@@ -251,10 +268,10 @@
}
}
break;
- case GST_GL_VIDEO_FLIP_METHOD_IDENTITY:
- case GST_GL_VIDEO_FLIP_METHOD_180:
- case GST_GL_VIDEO_FLIP_METHOD_FLIP_HORIZ:
- case GST_GL_VIDEO_FLIP_METHOD_FLIP_VERT:
+ case GST_VIDEO_ORIENTATION_IDENTITY:
+ case GST_VIDEO_ORIENTATION_180:
+ case GST_VIDEO_ORIENTATION_HORIZ:
+ case GST_VIDEO_ORIENTATION_VERT:
break;
default:
g_assert_not_reached ();
@@ -268,7 +285,7 @@
/* with object lock */
static void
-_set_active_method (GstGLVideoFlip * vf, GstGLVideoFlipMethod method,
+_set_active_method (GstGLVideoFlip * vf, GstVideoOrientationMethod method,
GstCaps * caps)
{
gfloat rot_z = 0., scale_x = 1.0, scale_y = 1.0;
@@ -276,34 +293,34 @@
GstPad *srcpad;
switch (method) {
- case GST_GL_VIDEO_FLIP_METHOD_IDENTITY:
+ case GST_VIDEO_ORIENTATION_IDENTITY:
break;
- case GST_GL_VIDEO_FLIP_METHOD_90R:
+ case GST_VIDEO_ORIENTATION_90R:
scale_x *= vf->aspect;
scale_y *= 1. / vf->aspect;
rot_z = 90.;
break;
- case GST_GL_VIDEO_FLIP_METHOD_180:
+ case GST_VIDEO_ORIENTATION_180:
rot_z = 180.;
break;
- case GST_GL_VIDEO_FLIP_METHOD_90L:
+ case GST_VIDEO_ORIENTATION_90L:
scale_x *= vf->aspect;
scale_y *= 1. / vf->aspect;
rot_z = 270.;
break;
- case GST_GL_VIDEO_FLIP_METHOD_FLIP_HORIZ:
+ case GST_VIDEO_ORIENTATION_HORIZ:
scale_x *= -1.;
break;
- case GST_GL_VIDEO_FLIP_METHOD_FLIP_UR_LL:
+ case GST_VIDEO_ORIENTATION_UR_LL:
scale_x *= -vf->aspect;
scale_y *= 1. / vf->aspect;
rot_z = 90.;
break;
- case GST_GL_VIDEO_FLIP_METHOD_FLIP_VERT:
+ case GST_VIDEO_ORIENTATION_VERT:
scale_x *= -1.;
rot_z = 180.;
break;
- case GST_GL_VIDEO_FLIP_METHOD_FLIP_UL_LR:
+ case GST_VIDEO_ORIENTATION_UL_LR:
scale_x *= -vf->aspect;
scale_y *= 1. / vf->aspect;
rot_z = 270.;
@@ -331,10 +348,17 @@
}
static void
-gst_gl_video_flip_set_method (GstGLVideoFlip * vf, GstGLVideoFlipMethod method,
- gboolean from_tag)
+gst_gl_video_flip_set_method (GstGLVideoFlip * vf,
+ GstVideoOrientationMethod method, gboolean from_tag)
{
GST_OBJECT_LOCK (vf);
+
+ if (method == GST_VIDEO_ORIENTATION_CUSTOM) {
+ GST_WARNING_OBJECT (vf, "unsupported custom orientation");
+ GST_OBJECT_UNLOCK (vf);
+ return;
+ }
+
/* Store updated method */
if (from_tag)
vf->tag_method = method;
@@ -342,7 +366,7 @@
vf->method = method;
/* Get the new method */
- if (vf->method == GST_GL_VIDEO_FLIP_METHOD_AUTO)
+ if (vf->method == GST_VIDEO_ORIENTATION_AUTO)
method = vf->tag_method;
else
method = vf->method;
@@ -367,6 +391,7 @@
switch (prop_id) {
case PROP_METHOD:
+ case PROP_VIDEO_DIRECTION:
gst_gl_video_flip_set_method (vf, g_value_get_enum (value), FALSE);
break;
default:
@@ -383,6 +408,7 @@
switch (prop_id) {
case PROP_METHOD:
+ case PROP_VIDEO_DIRECTION:
g_value_set_enum (value, vf->method);
break;
default:
@@ -409,29 +435,25 @@
if (gst_tag_list_get_string (taglist, "image-orientation",
&orientation)) {
if (!g_strcmp0 ("rotate-0", orientation))
- gst_gl_video_flip_set_method (vf, GST_GL_VIDEO_FLIP_METHOD_IDENTITY,
+ gst_gl_video_flip_set_method (vf, GST_VIDEO_ORIENTATION_IDENTITY,
TRUE);
else if (!g_strcmp0 ("rotate-90", orientation))
- gst_gl_video_flip_set_method (vf, GST_GL_VIDEO_FLIP_METHOD_90R,
- TRUE);
+ gst_gl_video_flip_set_method (vf, GST_VIDEO_ORIENTATION_90R, TRUE);
else if (!g_strcmp0 ("rotate-180", orientation))
- gst_gl_video_flip_set_method (vf, GST_GL_VIDEO_FLIP_METHOD_180,
- TRUE);
+ gst_gl_video_flip_set_method (vf, GST_VIDEO_ORIENTATION_180, TRUE);
else if (!g_strcmp0 ("rotate-270", orientation))
- gst_gl_video_flip_set_method (vf, GST_GL_VIDEO_FLIP_METHOD_90L,
- TRUE);
+ gst_gl_video_flip_set_method (vf, GST_VIDEO_ORIENTATION_90L, TRUE);
else if (!g_strcmp0 ("flip-rotate-0", orientation))
gst_gl_video_flip_set_method (vf,
- GST_GL_VIDEO_FLIP_METHOD_FLIP_HORIZ, TRUE);
+ GST_VIDEO_ORIENTATION_HORIZ, TRUE);
else if (!g_strcmp0 ("flip-rotate-90", orientation))
gst_gl_video_flip_set_method (vf,
- GST_GL_VIDEO_FLIP_METHOD_FLIP_UR_LL, TRUE);
+ GST_VIDEO_ORIENTATION_UR_LL, TRUE);
else if (!g_strcmp0 ("flip-rotate-180", orientation))
- gst_gl_video_flip_set_method (vf,
- GST_GL_VIDEO_FLIP_METHOD_FLIP_VERT, TRUE);
+ gst_gl_video_flip_set_method (vf, GST_VIDEO_ORIENTATION_VERT, TRUE);
else if (!g_strcmp0 ("flip-rotate-270", orientation))
gst_gl_video_flip_set_method (vf,
- GST_GL_VIDEO_FLIP_METHOD_FLIP_UL_LR, TRUE);
+ GST_VIDEO_ORIENTATION_UL_LR, TRUE);
g_free (orientation);
}
diff --git a/ext/gl/gstglvideoflip.h b/ext/gl/gstglvideoflip.h
index 3b8e81b..36f8da0 100644
--- a/ext/gl/gstglvideoflip.h
+++ b/ext/gl/gstglvideoflip.h
@@ -78,9 +78,9 @@
GstCaps *input_caps;
/* properties */
- GstGLVideoFlipMethod method;
- GstGLVideoFlipMethod tag_method;
- GstGLVideoFlipMethod active_method;
+ GstVideoOrientationMethod method;
+ GstVideoOrientationMethod tag_method;
+ GstVideoOrientationMethod active_method;
gfloat aspect;
};
diff --git a/ext/gl/gstglvideomixer.c b/ext/gl/gstglvideomixer.c
index 83905d0..04fab6f 100644
--- a/ext/gl/gstglvideomixer.c
+++ b/ext/gl/gstglvideomixer.c
@@ -29,12 +29,12 @@
* <title>Examples</title>
* |[
* gst-launch-1.0 glvideomixer name=m ! glimagesink \
- * videotestsrc ! video/x-raw, format=YUY2 ! m. \
- * videotestsrc pattern=12 ! video/x-raw, format=I420, framerate=5/1, width=100, height=200 ! queue ! m. \
- * videotestsrc ! video/x-raw, format=RGB, framerate=15/1, width=1500, height=1500 ! gleffects effect=3 ! queue ! m. \
- * videotestsrc ! gleffects effect=2 ! queue ! m. \
- * videotestsrc ! glfiltercube ! queue ! m. \
- * videotestsrc ! gleffects effect=6 ! queue ! m.
+ * videotestsrc ! video/x-raw, format=YUY2 ! glupload ! glcolorconvert ! m. \
+ * videotestsrc pattern=12 ! video/x-raw, format=I420, framerate=5/1, width=100, height=200 ! queue ! \
+ * glupload ! glcolorconvert ! m. \
+ * videotestsrc ! glupload ! gleffects effect=2 ! queue ! m. \
+ * videotestsrc ! glupload ! glfiltercube ! queue ! m. \
+ * videotestsrc ! glupload ! gleffects effect=6 ! queue ! m.gst-launch-1.0 glvideomixer name=m ! glimagesink \
* ]|
* </refsect2>
*/
@@ -474,8 +474,8 @@
GstCaps * outcaps);
static gboolean gst_gl_video_mixer_process_textures (GstGLMixer * mixer,
- guint out_tex);
-static void gst_gl_video_mixer_callback (gpointer stuff);
+ GstGLMemory * out_tex);
+static gboolean gst_gl_video_mixer_callback (gpointer stuff);
/* *INDENT-OFF* */
@@ -1155,16 +1155,25 @@
video_mixer_f_src, &video_mixer->shader);
}
+static void
+_video_mixer_process_gl (GstGLContext * context, GstGLVideoMixer * video_mixer)
+{
+ GstGLMixer *mixer = GST_GL_MIXER (video_mixer);
+
+ gst_gl_framebuffer_draw_to_texture (mixer->fbo, video_mixer->out_tex,
+ gst_gl_video_mixer_callback, video_mixer);
+}
+
static gboolean
-gst_gl_video_mixer_process_textures (GstGLMixer * mix, guint out_tex)
+gst_gl_video_mixer_process_textures (GstGLMixer * mix, GstGLMemory * out_tex)
{
GstGLVideoMixer *video_mixer = GST_GL_VIDEO_MIXER (mix);
+ GstGLContext *context = GST_GL_BASE_MIXER (mix)->context;
- gst_gl_context_use_fbo_v2 (GST_GL_BASE_MIXER (mix)->context,
- GST_VIDEO_INFO_WIDTH (&GST_VIDEO_AGGREGATOR (mix)->info),
- GST_VIDEO_INFO_HEIGHT (&GST_VIDEO_AGGREGATOR (mix)->info),
- mix->fbo, mix->depthbuffer,
- out_tex, gst_gl_video_mixer_callback, (gpointer) video_mixer);
+ video_mixer->out_tex = out_tex;
+
+ gst_gl_context_thread_add (context,
+ (GstGLContextThreadFunc) _video_mixer_process_gl, video_mixer);
return TRUE;
}
@@ -1383,7 +1392,7 @@
}
/* opengl scene, params: input texture (not the output mixer->texture) */
-static void
+static gboolean
gst_gl_video_mixer_callback (gpointer stuff)
{
GstGLVideoMixer *video_mixer = GST_GL_VIDEO_MIXER (stuff);
@@ -1411,7 +1420,7 @@
}
if (!_draw_background (video_mixer))
- return;
+ return FALSE;
gst_gl_shader_use (video_mixer->shader);
@@ -1546,4 +1555,6 @@
gl->Disable (GL_BLEND);
gst_gl_context_clear_shader (GST_GL_BASE_MIXER (mixer)->context);
+
+ return TRUE;
}
diff --git a/ext/gl/gstglvideomixer.h b/ext/gl/gstglvideomixer.h
index a0776fd..f352646 100644
--- a/ext/gl/gstglvideomixer.h
+++ b/ext/gl/gstglvideomixer.h
@@ -125,6 +125,7 @@
GLuint vao;
GLuint vbo_indices;
GLuint checker_vbo;
+ GstGLMemory *out_tex;
};
struct _GstGLVideoMixerClass
diff --git a/ext/gl/gstglviewconvert.c b/ext/gl/gstglviewconvert.c
index 5a3c9fe..ba05a11 100644
--- a/ext/gl/gstglviewconvert.c
+++ b/ext/gl/gstglviewconvert.c
@@ -31,11 +31,13 @@
* <refsect2>
* <title>Examples</title>
* |[
- * gst-launch-1.0 videotestsrc ! glviewconvert ! glimagesink
- * ]|
+ * gst-launch-1.0 videotestsrc ! glupload ! glviewconvert ! glimagesink
+ * ]| Simple placebo example demonstrating identity passthrough of mono video
* |[
- * gst-launch-1.0 videotestsrc pattern=checkers-1 ! glviewconvert input-mode-override=side-by-side ! glimagesink -v
- * ]|
+ * gst-launch-1.0 videotestsrc pattern=checkers-1 ! glupload ! \
+ * glviewconvert input-mode-override=side-by-side ! glimagesink -v
+ * ]| Force re-interpretation of the input checkers pattern as a side-by-side stereoscopic
+ * image and display in glimagesink.
* FBO (Frame Buffer Object) and GLSL (OpenGL Shading Language) are required.
* </refsect2>
*/
diff --git a/ext/gme/Makefile.in b/ext/gme/Makefile.in
index 969a974..fde997a 100644
--- a/ext/gme/Makefile.in
+++ b/ext/gme/Makefile.in
@@ -325,6 +325,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -374,6 +376,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/ext/gme/gstgme.c b/ext/gme/gstgme.c
index 1c5c83c..4fb4429 100644
--- a/ext/gme/gstgme.c
+++ b/ext/gme/gstgme.c
@@ -353,9 +353,7 @@
if (flow_return == GST_FLOW_EOS) {
gst_pad_push_event (pad, gst_event_new_eos ());
} else if (flow_return < GST_FLOW_EOS || flow_return == GST_FLOW_NOT_LINKED) {
- GST_ELEMENT_ERROR (gme, STREAM, FAILED, ("Internal data stream error."),
- ("stream stopped, reason %s", gst_flow_get_name (flow_return)));
-
+ GST_ELEMENT_FLOW_ERROR (gme, flow_return);
gst_pad_push_event (pad, gst_event_new_eos ());
}
}
diff --git a/ext/gsm/Makefile.in b/ext/gsm/Makefile.in
index 9f42e3e..7f8be44 100644
--- a/ext/gsm/Makefile.in
+++ b/ext/gsm/Makefile.in
@@ -326,6 +326,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -375,6 +377,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/ext/gtk/Makefile.in b/ext/gtk/Makefile.in
index 5bc0735..1cc91c6 100644
--- a/ext/gtk/Makefile.in
+++ b/ext/gtk/Makefile.in
@@ -339,6 +339,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -388,6 +390,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/ext/hls/Makefile.am b/ext/hls/Makefile.am
index 189f9e6..8314ff0 100644
--- a/ext/hls/Makefile.am
+++ b/ext/hls/Makefile.am
@@ -4,6 +4,7 @@
libgsthls_la_SOURCES = \
m3u8.c \
gsthlsdemux.c \
+ gsthlsdemux-util.c \
gsthlsplugin.c \
gsthlssink.c \
gstm3u8playlist.c
@@ -12,7 +13,7 @@
libgsthls_la_LIBADD = \
$(top_builddir)/gst-libs/gst/uridownloader/libgsturidownloader-@GST_API_VERSION@.la \
$(top_builddir)/gst-libs/gst/adaptivedemux/libgstadaptivedemux-@GST_API_VERSION@.la \
- $(GST_PLUGINS_BASE_LIBS) -lgstpbutils-$(GST_API_VERSION) -lgstvideo-$(GST_API_VERSION) \
+ $(GST_PLUGINS_BASE_LIBS) -lgstpbutils-$(GST_API_VERSION) -lgstvideo-$(GST_API_VERSION) -lgsttag-$(GST_API_VERSION) \
$(GST_BASE_LIBS) $(GST_LIBS) $(LIBM) $(LIBGCRYPT_LIBS) $(NETTLE_LIBS) $(OPENSSL_LIBS)
libgsthls_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS) -no-undefined
libgsthls_la_LIBTOOLFLAGS = $(GST_PLUGIN_LIBTOOLFLAGS)
diff --git a/ext/hls/Makefile.in b/ext/hls/Makefile.in
index d6d3533..b3346df 100644
--- a/ext/hls/Makefile.in
+++ b/ext/hls/Makefile.in
@@ -170,8 +170,9 @@
$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
$(am__DEPENDENCIES_1)
am_libgsthls_la_OBJECTS = libgsthls_la-m3u8.lo \
- libgsthls_la-gsthlsdemux.lo libgsthls_la-gsthlsplugin.lo \
- libgsthls_la-gsthlssink.lo libgsthls_la-gstm3u8playlist.lo
+ libgsthls_la-gsthlsdemux.lo libgsthls_la-gsthlsdemux-util.lo \
+ libgsthls_la-gsthlsplugin.lo libgsthls_la-gsthlssink.lo \
+ libgsthls_la-gstm3u8playlist.lo
libgsthls_la_OBJECTS = $(am_libgsthls_la_OBJECTS)
AM_V_lt = $(am__v_lt_@AM_V@)
am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
@@ -331,6 +332,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -380,6 +383,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
@@ -791,6 +796,7 @@
libgsthls_la_SOURCES = \
m3u8.c \
gsthlsdemux.c \
+ gsthlsdemux-util.c \
gsthlsplugin.c \
gsthlssink.c \
gstm3u8playlist.c
@@ -799,7 +805,7 @@
libgsthls_la_LIBADD = \
$(top_builddir)/gst-libs/gst/uridownloader/libgsturidownloader-@GST_API_VERSION@.la \
$(top_builddir)/gst-libs/gst/adaptivedemux/libgstadaptivedemux-@GST_API_VERSION@.la \
- $(GST_PLUGINS_BASE_LIBS) -lgstpbutils-$(GST_API_VERSION) -lgstvideo-$(GST_API_VERSION) \
+ $(GST_PLUGINS_BASE_LIBS) -lgstpbutils-$(GST_API_VERSION) -lgstvideo-$(GST_API_VERSION) -lgsttag-$(GST_API_VERSION) \
$(GST_BASE_LIBS) $(GST_LIBS) $(LIBM) $(LIBGCRYPT_LIBS) $(NETTLE_LIBS) $(OPENSSL_LIBS)
libgsthls_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS) -no-undefined
@@ -891,6 +897,7 @@
distclean-compile:
-rm -f *.tab.c
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgsthls_la-gsthlsdemux-util.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgsthls_la-gsthlsdemux.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgsthls_la-gsthlsplugin.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgsthls_la-gsthlssink.Plo@am__quote@
@@ -935,6 +942,13 @@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgsthls_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsthls_la_CFLAGS) $(CFLAGS) -c -o libgsthls_la-gsthlsdemux.lo `test -f 'gsthlsdemux.c' || echo '$(srcdir)/'`gsthlsdemux.c
+libgsthls_la-gsthlsdemux-util.lo: gsthlsdemux-util.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgsthls_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsthls_la_CFLAGS) $(CFLAGS) -MT libgsthls_la-gsthlsdemux-util.lo -MD -MP -MF $(DEPDIR)/libgsthls_la-gsthlsdemux-util.Tpo -c -o libgsthls_la-gsthlsdemux-util.lo `test -f 'gsthlsdemux-util.c' || echo '$(srcdir)/'`gsthlsdemux-util.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgsthls_la-gsthlsdemux-util.Tpo $(DEPDIR)/libgsthls_la-gsthlsdemux-util.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gsthlsdemux-util.c' object='libgsthls_la-gsthlsdemux-util.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgsthls_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsthls_la_CFLAGS) $(CFLAGS) -c -o libgsthls_la-gsthlsdemux-util.lo `test -f 'gsthlsdemux-util.c' || echo '$(srcdir)/'`gsthlsdemux-util.c
+
libgsthls_la-gsthlsplugin.lo: gsthlsplugin.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgsthls_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsthls_la_CFLAGS) $(CFLAGS) -MT libgsthls_la-gsthlsplugin.lo -MD -MP -MF $(DEPDIR)/libgsthls_la-gsthlsplugin.Tpo -c -o libgsthls_la-gsthlsplugin.lo `test -f 'gsthlsplugin.c' || echo '$(srcdir)/'`gsthlsplugin.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgsthls_la-gsthlsplugin.Tpo $(DEPDIR)/libgsthls_la-gsthlsplugin.Plo
diff --git a/ext/hls/gsthlsdemux-util.c b/ext/hls/gsthlsdemux-util.c
new file mode 100644
index 0000000..252f042
--- /dev/null
+++ b/ext/hls/gsthlsdemux-util.c
@@ -0,0 +1,348 @@
+/* GStreamer
+ * Copyright (C) 2016 Jan Schmidt <jan@centricular.com>
+ * Copyright (C) 2016 Tim-Philipp Müller <tim@centricular.com>
+ *
+ * gsthlsdemux-util.c:
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <gst/gst.h>
+#include <gst/tag/tag.h>
+#include <string.h>
+
+#include "gsthlsdemux.h"
+
+GST_DEBUG_CATEGORY_EXTERN (gst_hls_demux_debug);
+#define GST_CAT_DEFAULT gst_hls_demux_debug
+
+/* Check for sync byte, error_indicator == 0 and packet has payload.
+ * Adaptation control field (data[3] & 0x30) may be zero for TS packets with
+ * null PIDs. Still, these streams are valid TS streams (for null packets,
+ * AFC is supposed to be 0x1, but the spec also says decoders should just
+ * discard any packets with AFC = 0x00) */
+#define IS_MPEGTS_HEADER(data) (data[0] == 0x47 && \
+ (data[1] & 0x80) == 0x00 && \
+ ((data[3] & 0x30) != 0x00 || \
+ ((data[3] & 0x30) == 0x00 && (data[1] & 0x1f) == 0x1f && (data[2] & 0xff) == 0xff)))
+
+#define PCRTIME_TO_GSTTIME(t) (((t) * (guint64)1000) / 27)
+#define MPEGTIME_TO_GSTTIME(t) (((t) * (guint64)100000) / 9)
+
+static gboolean
+have_ts_sync (const guint8 * data, guint size, guint packet_size, guint num)
+{
+ while (num-- > 0) {
+ if (size < packet_size)
+ return FALSE;
+ if (!IS_MPEGTS_HEADER (data))
+ return FALSE;
+ data += packet_size;
+ size -= packet_size;
+ }
+ return TRUE;
+}
+
+static gint
+find_offset (GstHLSTSReader * r, const guint8 * data, guint size)
+{
+ guint sync_points = CLAMP (size / 188, 25, 100);
+ guint off;
+ const gint packet_size = 188;
+
+ /* FIXME: check 192 as well, and maybe also 204, 208 */
+ for (off = 0; off < MIN (size, packet_size); ++off) {
+ if (have_ts_sync (data + off, size - off, packet_size, sync_points)) {
+ r->packet_size = packet_size;
+ return off;
+ }
+ }
+ return -1;
+}
+
+static gboolean
+handle_pcr (GstHLSTSReader * r, const guint8 * data, guint size)
+{
+ const guint8 *p = data;
+ guint32 hdr = GST_READ_UINT32_BE (p);
+ guint af_len, flags;
+
+ guint64 pcr_base, pcr_ext, pcr, ts;
+
+ data = p + 4;
+ if ((hdr & 0x00000020) == 0) /* has_adaptation_field */
+ return FALSE;
+ af_len = p[4]; /* adaptation_field_len */
+ ++data;
+ if (af_len < (1 + 6) || af_len > r->packet_size - (4 + 1))
+ return FALSE;
+ flags = data[0];
+ /* Does the packet have a PCR? */
+ if ((flags & 0x10) == 0)
+ return FALSE;
+ ++data;
+ --af_len;
+ pcr_base = (GST_READ_UINT64_BE (data) >> 16) >> (6 + 9);
+ pcr_ext = (GST_READ_UINT64_BE (data) >> 16) & 0x1ff;
+ pcr = pcr_base * 300 + pcr_ext;
+ ts = PCRTIME_TO_GSTTIME (pcr);
+ GST_LOG ("have PCR! %" G_GUINT64_FORMAT "\t%" GST_TIME_FORMAT,
+ pcr, GST_TIME_ARGS (ts));
+ if (r->first_pcr == GST_CLOCK_TIME_NONE)
+ r->first_pcr = ts;
+ r->last_pcr = ts;
+
+ return TRUE;
+}
+
+static gboolean
+handle_pmt (GstHLSTSReader * r, const guint8 * data, guint size)
+{
+ const guint8 *p = data;
+ guint32 hdr = GST_READ_UINT32_BE (p);
+ guint slen, pcr_pid;
+
+ data = p + 4;
+ if ((hdr & 0x00000020) != 0) /* has_adaptation_field */
+ data += 1 + p[4]; /* adaptation_field_len */
+ data += 1 + data[0]; /* pointer_field */
+ if (data[0] != 0x02) /* table_id */
+ return FALSE;
+ //gst_util_dump_mem (data, 8);
+ /* we assume the entire PMT fits into a single packet and this is it */
+ if (data[6] != 0 || data[6] != data[7])
+ return FALSE;
+ slen = GST_READ_UINT16_BE (data + 1) & 0x0FFF;
+ if (slen > (gsize) (p + r->packet_size - (data + 1 + 2)) || slen < 5 + 2 + 4)
+ return FALSE;
+ data += 3 + 5;
+ slen -= 5; /* bytes after section_length field itself */
+ slen -= 4; /* crc at end */
+ pcr_pid = GST_READ_UINT16_BE (data) & 0x1fff;
+ if (pcr_pid != 0x1fff) {
+ GST_DEBUG ("pcr_pid now: %04x", pcr_pid);
+ r->pcr_pid = pcr_pid;
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+static gboolean
+handle_pat (GstHLSTSReader * r, const guint8 * data, guint size)
+{
+ const guint8 *p = data;
+ guint32 hdr = GST_READ_UINT32_BE (p);
+ guint slen;
+
+ data = p + 4;
+ if ((hdr & 0x00000020) != 0) /* has_adaptation_field */
+ data += 1 + p[4]; /* adaptation_field_len */
+ data += 1 + data[0]; /* pointer_field */
+ if (data[0] != 0) /* table_id */
+ return FALSE;
+ /* we assume the entire PAT fits into a single packet and this is it */
+ if (data[6] != 0 || data[6] != data[7])
+ return FALSE;
+ slen = GST_READ_UINT16_BE (data + 1) & 0x0FFF;
+ if (slen > (gsize) (p + r->packet_size - (data + 1 + 2)) || slen < 5 + 4 + 4)
+ return FALSE;
+ data += 3 + 5;
+ slen -= 5; /* bytes after section_length field itself */
+ slen -= 4; /* crc at end */
+ while (slen >= 4) {
+ guint program_num = GST_READ_UINT16_BE (data);
+ guint val = GST_READ_UINT16_BE (data + 2) & 0x1fff;
+ if (program_num != 0) {
+ GST_DEBUG (" program %04x: pmt_pid : %04x\n", program_num, val);
+ r->pmt_pid = val;
+ return TRUE;
+ }
+ data += 4;
+ slen -= 4;
+ }
+
+ return FALSE;
+}
+
+void
+gst_hlsdemux_tsreader_init (GstHLSTSReader * r)
+{
+ r->rtype = GST_HLS_TSREADER_NONE;
+ r->packet_size = 188;
+ r->pmt_pid = r->pcr_pid = -1;
+ r->first_pcr = GST_CLOCK_TIME_NONE;
+ r->last_pcr = GST_CLOCK_TIME_NONE;
+}
+
+void
+gst_hlsdemux_tsreader_set_type (GstHLSTSReader * r, GstHLSTSReaderType rtype)
+{
+ r->rtype = rtype;
+ r->have_id3 = FALSE;
+}
+
+static gboolean
+gst_hlsdemux_tsreader_find_pcrs_mpegts (GstHLSTSReader * r,
+ GstBuffer * buffer, GstClockTime * first_pcr, GstClockTime * last_pcr)
+{
+ GstMapInfo info;
+ gint offset;
+ const guint8 *p;
+ const guint8 *data;
+ gsize size;
+
+ if (!gst_buffer_map (buffer, &info, GST_MAP_READ))
+ return FALSE;
+
+ data = info.data;
+ size = info.size;
+
+ *first_pcr = *last_pcr = GST_CLOCK_TIME_NONE;
+
+ offset = find_offset (r, data, size);
+ if (offset < 0) {
+ gst_buffer_unmap (buffer, &info);
+ return FALSE;
+ }
+
+ GST_LOG ("TS packet start offset: %d", offset);
+
+ /* We don't store a partial packet at the end,
+ * and just assume that the final PCR is
+ * going to be completely inside the last data
+ * segment passed to us */
+ data += offset;
+ size -= offset;
+
+ for (p = data; size >= r->packet_size;
+ p += r->packet_size, size -= r->packet_size) {
+ guint32 hdr = GST_READ_UINT32_BE (p);
+
+ /* sync byte (0x47), error indicator (TEI) not set, PID 0, has_payload */
+ if ((hdr & 0xFF9FFF10) == 0x47000010) {
+ GST_LOG ("Found packet for PID 0000 (PAT)");
+ handle_pat (r, p, size);
+ }
+ /* sync byte (0x47), error indicator (TEI) not set, has_payload, PID = PMT_pid */
+ else if ((hdr & 0xFF800010) == 0x47000010
+ && ((hdr >> 8) & 0x1fff) == r->pmt_pid) {
+ GST_LOG ("Found packet for PID %04x (PMT)", r->pmt_pid);
+ handle_pmt (r, p, size);
+ }
+ /* sync byte (0x47), error indicator (TEI) not set, has_payload */
+ else if ((hdr & 0xFF800010) == 0x47000010
+ && ((hdr >> 8) & 0x1fff) == r->pcr_pid) {
+ GST_LOG ("Found packet for PID %04x (PCR)", r->pcr_pid);
+ handle_pcr (r, p, size);
+ }
+ }
+
+ gst_buffer_unmap (buffer, &info);
+
+ *first_pcr = r->first_pcr;
+ *last_pcr = r->last_pcr;
+
+ /* Return TRUE if this piece was big enough to get a PCR from */
+ return (r->first_pcr != GST_CLOCK_TIME_NONE);
+}
+
+static gboolean
+gst_hlsdemux_tsreader_find_pcrs_id3 (GstHLSTSReader * r,
+ GstBuffer * buffer, GstClockTime * first_pcr, GstClockTime * last_pcr)
+{
+ GstMapInfo info;
+ guint32 tag_size;
+ gsize size;
+ GstTagList *taglist;
+ GstSample *priv_data = NULL;
+ GstBuffer *tag_buf;
+ guint64 pts;
+
+ *first_pcr = r->first_pcr;
+ *last_pcr = r->last_pcr;
+
+ if (r->have_id3)
+ return TRUE;
+
+ /* We need at least 10 bytes, starting with "ID3" for the header */
+ size = gst_buffer_get_size (buffer);
+ if (size < 10)
+ return FALSE;
+
+ /* Read the tag size */
+ tag_size = gst_tag_get_id3v2_tag_size (buffer);
+
+ /* Check we've collected that much */
+ if (size < tag_size)
+ return FALSE;
+
+ /* From here, whether the tag is valid or not we'll
+ * not try and read again */
+ r->have_id3 = TRUE;
+
+ /* Parse the tag */
+ taglist = gst_tag_list_from_id3v2_tag (buffer);
+ if (taglist == NULL)
+ return TRUE; /* Invalid tag, stop trying */
+
+ /* Extract the timestamps */
+ if (!gst_tag_list_get_sample (taglist, GST_TAG_PRIVATE_DATA, &priv_data))
+ goto out;
+
+ if (!g_str_equal ("com.apple.streaming.transportStreamTimestamp",
+ gst_structure_get_string (gst_sample_get_info (priv_data), "owner")))
+ goto out;
+
+ /* OK, now as per section 3, the tag contains a 33-bit PCR inside a 64-bit
+ * BE-word */
+ tag_buf = gst_sample_get_buffer (priv_data);
+ if (tag_buf == NULL)
+ goto out;
+
+ if (!gst_buffer_map (tag_buf, &info, GST_MAP_READ))
+ goto out;
+
+ pts = GST_READ_UINT64_BE (info.data);
+ *first_pcr = r->first_pcr = MPEGTIME_TO_GSTTIME (pts);
+
+ GST_LOG ("Got AAC TS PTS %" G_GUINT64_FORMAT " (%" G_GUINT64_FORMAT ")",
+ pts, r->first_pcr);
+
+ gst_buffer_unmap (tag_buf, &info);
+
+out:
+ if (priv_data)
+ gst_sample_unref (priv_data);
+
+ gst_tag_list_unref (taglist);
+
+ return TRUE;
+}
+
+gboolean
+gst_hlsdemux_tsreader_find_pcrs (GstHLSTSReader * r,
+ GstBuffer * buffer, GstClockTime * first_pcr, GstClockTime * last_pcr)
+{
+ if (r->rtype == GST_HLS_TSREADER_MPEGTS)
+ return gst_hlsdemux_tsreader_find_pcrs_mpegts (r, buffer, first_pcr,
+ last_pcr);
+
+ return gst_hlsdemux_tsreader_find_pcrs_id3 (r, buffer, first_pcr, last_pcr);
+}
diff --git a/ext/hls/gsthlsdemux.c b/ext/hls/gsthlsdemux.c
index 14e8819..a4eaacd 100644
--- a/ext/hls/gsthlsdemux.c
+++ b/ext/hls/gsthlsdemux.c
@@ -5,6 +5,7 @@
* Author: Youness Alaoui <youness.alaoui@collabora.co.uk>, Collabora Ltd.
* Author: Sebastian Dröge <sebastian.droege@collabora.co.uk>, Collabora Ltd.
* Copyright (C) 2014 Sebastian Dröge <sebastian@centricular.com>
+ * Copyright (C) 2015 Tim-Philipp Müller <tim@centricular.com>
*
* Gsthlsdemux.c:
*
@@ -54,9 +55,12 @@
GST_PAD_ALWAYS,
GST_STATIC_CAPS ("application/x-hls"));
-GST_DEBUG_CATEGORY_STATIC (gst_hls_demux_debug);
+GST_DEBUG_CATEGORY (gst_hls_demux_debug);
#define GST_CAT_DEFAULT gst_hls_demux_debug
+#define GST_M3U8_CLIENT_LOCK(l) /* FIXME */
+#define GST_M3U8_CLIENT_UNLOCK(l) /* FIXME */
+
/* GObject */
static void gst_hls_demux_finalize (GObject * obj);
@@ -72,11 +76,11 @@
static gboolean gst_hls_demux_change_playlist (GstHLSDemux * demux,
guint max_bitrate, gboolean * changed);
static GstBuffer *gst_hls_demux_decrypt_fragment (GstHLSDemux * demux,
- GstBuffer * encrypted_buffer, GError ** err);
+ GstHLSDemuxStream * stream, GstBuffer * encrypted_buffer, GError ** err);
static gboolean
-gst_hls_demux_decrypt_start (GstHLSDemux * demux, const guint8 * key_data,
- const guint8 * iv_data);
-static void gst_hls_demux_decrypt_end (GstHLSDemux * demux);
+gst_hls_demux_stream_decrypt_start (GstHLSDemuxStream * stream,
+ const guint8 * key_data, const guint8 * iv_data);
+static void gst_hls_demux_stream_decrypt_end (GstHLSDemuxStream * stream);
static gboolean gst_hls_demux_is_live (GstAdaptiveDemux * demux);
static GstClockTime gst_hls_demux_get_duration (GstAdaptiveDemux * demux);
@@ -93,6 +97,7 @@
GstAdaptiveDemuxStream * stream);
static GstFlowReturn gst_hls_demux_data_received (GstAdaptiveDemux * demux,
GstAdaptiveDemuxStream * stream, GstBuffer * buffer);
+static void gst_hls_demux_stream_free (GstAdaptiveDemuxStream * stream);
static gboolean gst_hls_demux_stream_has_next_fragment (GstAdaptiveDemuxStream *
stream);
static GstFlowReturn gst_hls_demux_advance_fragment (GstAdaptiveDemuxStream *
@@ -104,6 +109,9 @@
static void gst_hls_demux_reset (GstAdaptiveDemux * demux);
static gboolean gst_hls_demux_get_live_seek_range (GstAdaptiveDemux * demux,
gint64 * start, gint64 * stop);
+static GstM3U8 *gst_hls_demux_stream_get_m3u8 (GstHLSDemuxStream * hls_stream);
+static void gst_hls_demux_set_current_variant (GstHLSDemux * hlsdemux,
+ GstHLSVariantStream * variant);
#define gst_hls_demux_parent_class parent_class
G_DEFINE_TYPE (GstHLSDemux, gst_hls_demux, GST_TYPE_ADAPTIVE_DEMUX);
@@ -114,8 +122,7 @@
GstHLSDemux *demux = GST_HLS_DEMUX (obj);
gst_hls_demux_reset (GST_ADAPTIVE_DEMUX_CAST (demux));
- g_object_unref (demux->pending_encrypted_data);
- gst_m3u8_client_free (demux->client);
+ g_mutex_clear (&demux->keys_lock);
G_OBJECT_CLASS (parent_class)->finalize (obj);
}
@@ -160,6 +167,7 @@
adaptivedemux_class->stream_update_fragment_info =
gst_hls_demux_update_fragment_info;
adaptivedemux_class->stream_select_bitrate = gst_hls_demux_select_bitrate;
+ adaptivedemux_class->stream_free = gst_hls_demux_stream_free;
adaptivedemux_class->start_fragment = gst_hls_demux_start_fragment;
adaptivedemux_class->finish_fragment = gst_hls_demux_finish_fragment;
@@ -172,8 +180,11 @@
static void
gst_hls_demux_init (GstHLSDemux * demux)
{
- demux->do_typefind = TRUE;
- demux->pending_encrypted_data = gst_adapter_new ();
+ gst_adaptive_demux_set_stream_struct_size (GST_ADAPTIVE_DEMUX_CAST (demux),
+ sizeof (GstHLSDemuxStream));
+
+ demux->keys = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
+ g_mutex_init (&demux->keys_lock);
}
static GstStateChangeReturn
@@ -195,6 +206,7 @@
switch (transition) {
case GST_STATE_CHANGE_PAUSED_TO_READY:
gst_hls_demux_reset (GST_ADAPTIVE_DEMUX_CAST (demux));
+ g_hash_table_remove_all (demux->keys);
break;
default:
break;
@@ -230,15 +242,54 @@
}
static void
-gst_hls_demux_clear_pending_data (GstHLSDemux * hlsdemux)
+gst_hls_demux_stream_clear_pending_data (GstHLSDemuxStream * hls_stream)
{
- gst_hls_demux_decrypt_end (hlsdemux);
- gst_adapter_clear (hlsdemux->pending_encrypted_data);
- gst_buffer_replace (&hlsdemux->pending_decrypted_buffer, NULL);
- gst_buffer_replace (&hlsdemux->pending_typefind_buffer, NULL);
- hlsdemux->current_offset = -1;
+ if (hls_stream->pending_encrypted_data)
+ gst_adapter_clear (hls_stream->pending_encrypted_data);
+ gst_buffer_replace (&hls_stream->pending_decrypted_buffer, NULL);
+ gst_buffer_replace (&hls_stream->pending_typefind_buffer, NULL);
+ gst_buffer_replace (&hls_stream->pending_pcr_buffer, NULL);
+ hls_stream->current_offset = -1;
+ gst_hls_demux_stream_decrypt_end (hls_stream);
}
+static void
+gst_hls_demux_clear_all_pending_data (GstHLSDemux * hlsdemux)
+{
+ GstAdaptiveDemux *demux = (GstAdaptiveDemux *) hlsdemux;
+ GList *walk;
+
+ for (walk = demux->streams; walk != NULL; walk = walk->next) {
+ GstHLSDemuxStream *hls_stream = GST_HLS_DEMUX_STREAM_CAST (walk->data);
+ gst_hls_demux_stream_clear_pending_data (hls_stream);
+ }
+}
+
+#if 0
+static void
+gst_hls_demux_set_current (GstHLSDemux * self, GstM3U8 * m3u8)
+{
+ GST_M3U8_CLIENT_LOCK (self);
+ if (m3u8 != self->current) {
+ self->current = m3u8;
+ self->current->duration = GST_CLOCK_TIME_NONE;
+ self->current->current_file = NULL;
+
+#if 0
+ // FIXME: this makes no sense after we just set self->current=m3u8 above (tpm)
+ // also, these values don't necessarily align between different lists
+ m3u8->current_file_duration = self->current->current_file_duration;
+ m3u8->sequence = self->current->sequence;
+ m3u8->sequence_position = self->current->sequence_position;
+ m3u8->highest_sequence_number = self->current->highest_sequence_number;
+ m3u8->first_file_start = self->current->first_file_start;
+ m3u8->last_file_end = self->current->last_file_end;
+#endif
+ }
+ GST_M3U8_CLIENT_UNLOCK (self);
+}
+#endif
+
static gboolean
gst_hls_demux_seek (GstAdaptiveDemux * demux, GstEvent * seek)
{
@@ -247,15 +298,16 @@
GstSeekFlags flags;
GstSeekType start_type, stop_type;
gint64 start, stop;
- gdouble rate;
- GList *walk, *current_file = NULL;
+ gdouble rate, old_rate;
+ GList *walk, *stream_walk;
GstClockTime current_pos, target_pos;
gint64 current_sequence;
- GstM3U8MediaFile *file;
guint64 bitrate;
gboolean snap_before, snap_after, snap_nearest, keyunit;
gboolean reverse;
+ old_rate = demux->segment.rate;
+
gst_event_parse_seek (seek, &rate, &format, &flags, &start_type, &start,
&stop_type, &stop);
@@ -263,114 +315,110 @@
/* properly cleanup pending decryption status */
if (flags & GST_SEEK_FLAG_FLUSH) {
- gst_hls_demux_clear_pending_data (hlsdemux);
+ gst_hls_demux_clear_all_pending_data (hlsdemux);
}
/* Use I-frame variants for trick modes */
- if (hlsdemux->client->main->iframe_lists && rate < -1.0
- && demux->segment.rate >= -1.0 && demux->segment.rate <= 1.0) {
+ if (hlsdemux->master->iframe_variants != NULL
+ && rate < -1.0 && old_rate >= -1.0 && old_rate <= 1.0) {
GError *err = NULL;
- GST_M3U8_CLIENT_LOCK (hlsdemux->client);
/* Switch to I-frame variant */
- hlsdemux->client->main->current_variant =
- hlsdemux->client->main->iframe_lists;
- GST_M3U8_CLIENT_UNLOCK (hlsdemux->client);
- gst_m3u8_client_set_current (hlsdemux->client,
- hlsdemux->client->main->iframe_lists->data);
+ gst_hls_demux_set_current_variant (hlsdemux,
+ hlsdemux->master->iframe_variants->data);
gst_uri_downloader_reset (demux->downloader);
if (!gst_hls_demux_update_playlist (hlsdemux, FALSE, &err)) {
GST_ELEMENT_ERROR_FROM_ERROR (hlsdemux, "Could not switch playlist", err);
return FALSE;
}
//hlsdemux->discont = TRUE;
- hlsdemux->do_typefind = TRUE;
gst_hls_demux_change_playlist (hlsdemux, bitrate / ABS (rate), NULL);
- } else if (rate > -1.0 && rate <= 1.0 && (demux->segment.rate < -1.0
- || demux->segment.rate > 1.0)) {
+ } else if (rate > -1.0 && rate <= 1.0 && (old_rate < -1.0 || old_rate > 1.0)) {
GError *err = NULL;
- GST_M3U8_CLIENT_LOCK (hlsdemux->client);
/* Switch to normal variant */
- hlsdemux->client->main->current_variant = hlsdemux->client->main->lists;
- GST_M3U8_CLIENT_UNLOCK (hlsdemux->client);
- gst_m3u8_client_set_current (hlsdemux->client,
- hlsdemux->client->main->lists->data);
+ gst_hls_demux_set_current_variant (hlsdemux,
+ hlsdemux->master->variants->data);
gst_uri_downloader_reset (demux->downloader);
if (!gst_hls_demux_update_playlist (hlsdemux, FALSE, &err)) {
GST_ELEMENT_ERROR_FROM_ERROR (hlsdemux, "Could not switch playlist", err);
return FALSE;
}
//hlsdemux->discont = TRUE;
- hlsdemux->do_typefind = TRUE;
/* TODO why not continue using the same? that was being used up to now? */
gst_hls_demux_change_playlist (hlsdemux, bitrate, NULL);
}
+ for (stream_walk = demux->streams; stream_walk != NULL;
+ stream_walk = stream_walk->next) {
+ GstHLSDemuxStream *hls_stream =
+ GST_HLS_DEMUX_STREAM_CAST (stream_walk->data);
+ GstM3U8MediaFile *file = NULL;
- GST_M3U8_CLIENT_LOCK (hlsdemux->client);
- file = GST_M3U8_MEDIA_FILE (hlsdemux->client->current->files->data);
- current_sequence = file->sequence;
- current_pos = 0;
- reverse = rate < 0;
- target_pos = reverse ? stop : start;
+ current_sequence = 0;
+ current_pos = 0;
+ reverse = rate < 0;
+ target_pos = reverse ? stop : start;
- /* Snap to segment boundary. Improves seek performance on slow machines. */
- keyunit = ! !(flags & GST_SEEK_FLAG_KEY_UNIT);
- snap_nearest =
- (flags & GST_SEEK_FLAG_SNAP_NEAREST) == GST_SEEK_FLAG_SNAP_NEAREST;
- snap_before = ! !(flags & GST_SEEK_FLAG_SNAP_BEFORE);
- snap_after = ! !(flags & GST_SEEK_FLAG_SNAP_AFTER);
+ /* Snap to segment boundary. Improves seek performance on slow machines. */
+ keyunit = ! !(flags & GST_SEEK_FLAG_KEY_UNIT);
+ snap_nearest =
+ (flags & GST_SEEK_FLAG_SNAP_NEAREST) == GST_SEEK_FLAG_SNAP_NEAREST;
+ snap_before = ! !(flags & GST_SEEK_FLAG_SNAP_BEFORE);
+ snap_after = ! !(flags & GST_SEEK_FLAG_SNAP_AFTER);
- /* FIXME: Here we need proper discont handling */
- for (walk = hlsdemux->client->current->files; walk; walk = walk->next) {
- file = walk->data;
+ GST_M3U8_CLIENT_LOCK (hlsdemux->client);
+ /* FIXME: Here we need proper discont handling */
+ for (walk = hls_stream->playlist->files; walk; walk = walk->next) {
+ file = walk->data;
- current_sequence = file->sequence;
- current_file = walk;
- if ((!reverse && snap_after) || snap_nearest) {
- if (current_pos >= target_pos)
- break;
- if (snap_nearest && target_pos - current_pos < file->duration / 2)
- break;
- } else if (reverse && snap_after) {
- /* check if the next fragment is our target, in this case we want to
- * start from the previous fragment */
- GstClockTime next_pos = current_pos + file->duration;
+ current_sequence = file->sequence;
+ if ((!reverse && snap_after) || snap_nearest) {
+ if (current_pos >= target_pos)
+ break;
+ if (snap_nearest && target_pos - current_pos < file->duration / 2)
+ break;
+ } else if (reverse && snap_after) {
+ /* check if the next fragment is our target, in this case we want to
+ * start from the previous fragment */
+ GstClockTime next_pos = current_pos + file->duration;
- if (next_pos <= target_pos && target_pos < next_pos + file->duration) {
+ if (next_pos <= target_pos && target_pos < next_pos + file->duration) {
+ break;
+ }
+ } else if (current_pos <= target_pos
+ && target_pos < current_pos + file->duration) {
break;
}
- } else if (current_pos <= target_pos
- && target_pos < current_pos + file->duration) {
- break;
+ current_pos += file->duration;
}
- current_pos += file->duration;
- }
- if (walk == NULL) {
- GST_DEBUG_OBJECT (demux, "seeking further than track duration");
- current_sequence++;
- }
+ if (walk == NULL) {
+ GST_DEBUG_OBJECT (demux, "seeking further than track duration");
+ current_sequence++;
+ }
- GST_DEBUG_OBJECT (demux, "seeking to sequence %u", (guint) current_sequence);
- hlsdemux->reset_pts = TRUE;
- hlsdemux->client->sequence = current_sequence;
- hlsdemux->client->current_file =
- current_file ? current_file : hlsdemux->client->current->files;
- hlsdemux->client->sequence_position = current_pos;
- GST_M3U8_CLIENT_UNLOCK (hlsdemux->client);
+ GST_DEBUG_OBJECT (demux, "seeking to sequence %u",
+ (guint) current_sequence);
+ hls_stream->reset_pts = TRUE;
+ hls_stream->playlist->sequence = current_sequence;
+ hls_stream->playlist->current_file = walk;
+ hls_stream->playlist->sequence_position = current_pos;
+ GST_M3U8_CLIENT_UNLOCK (hlsdemux->client);
- /* Play from the end of the current selected segment */
- if (reverse && (snap_before || snap_after || snap_nearest))
- current_pos += file->duration;
+ /* Play from the end of the current selected segment */
+ if (file) {
+ if (reverse && (snap_before || snap_after || snap_nearest))
+ current_pos += file->duration;
+ }
- if (keyunit || snap_before || snap_after || snap_nearest) {
- if (!reverse)
- gst_segment_do_seek (&demux->segment, rate, format, flags, start_type,
- current_pos, stop_type, stop, NULL);
- else
- gst_segment_do_seek (&demux->segment, rate, format, flags, start_type,
- start, stop_type, current_pos, NULL);
+ if (keyunit || snap_before || snap_after || snap_nearest) {
+ if (!reverse)
+ gst_segment_do_seek (&demux->segment, rate, format, flags, start_type,
+ current_pos, stop_type, stop, NULL);
+ else
+ gst_segment_do_seek (&demux->segment, rate, format, flags, start_type,
+ start, stop_type, current_pos, NULL);
+ }
}
return TRUE;
@@ -386,75 +434,185 @@
return GST_FLOW_OK;
}
+static void
+create_stream_for_playlist (GstAdaptiveDemux * demux, GstM3U8 * playlist,
+ gboolean is_primary_playlist, gboolean selected)
+{
+ GstHLSDemux *hlsdemux = GST_HLS_DEMUX_CAST (demux);
+ GstHLSDemuxStream *hlsdemux_stream;
+ GstAdaptiveDemuxStream *stream;
+
+ if (!selected) {
+ /* FIXME: Later, create the stream but mark not-selected */
+ GST_LOG_OBJECT (demux, "Ignoring not-selected stream");
+ return;
+ }
+
+ stream = gst_adaptive_demux_stream_new (demux,
+ gst_hls_demux_create_pad (hlsdemux));
+
+ hlsdemux_stream = GST_HLS_DEMUX_STREAM_CAST (stream);
+
+ hlsdemux_stream->stream_type = GST_HLS_TSREADER_NONE;
+
+ hlsdemux_stream->playlist = gst_m3u8_ref (playlist);
+ hlsdemux_stream->is_primary_playlist = is_primary_playlist;
+
+ hlsdemux_stream->do_typefind = TRUE;
+ hlsdemux_stream->reset_pts = TRUE;
+}
+
static gboolean
gst_hls_demux_setup_streams (GstAdaptiveDemux * demux)
{
GstHLSDemux *hlsdemux = GST_HLS_DEMUX_CAST (demux);
+ GstHLSVariantStream *playlist = hlsdemux->current_variant;
+ gint i;
- /* only 1 output supported */
- gst_hls_demux_clear_pending_data (hlsdemux);
- gst_adaptive_demux_stream_new (demux, gst_hls_demux_create_pad (hlsdemux));
+ if (playlist == NULL) {
+ GST_WARNING_OBJECT (demux, "Can't configure streams - no variant selected");
+ return FALSE;
+ }
- hlsdemux->reset_pts = TRUE;
+ gst_hls_demux_clear_all_pending_data (hlsdemux);
+
+ /* 1 output for the main playlist */
+ create_stream_for_playlist (demux, playlist->m3u8, TRUE, TRUE);
+
+ for (i = 0; i < GST_HLS_N_MEDIA_TYPES; ++i) {
+ GList *mlist = playlist->media[i];
+ while (mlist != NULL) {
+ GstHLSMedia *media = mlist->data;
+
+ if (media->uri == NULL /* || media->mtype != GST_HLS_MEDIA_TYPE_AUDIO */ ) {
+ /* No uri means this is a placeholder for a stream
+ * contained in another mux */
+ GST_LOG_OBJECT (demux, "Skipping stream %s type %d with no URI",
+ media->name, media->mtype);
+ mlist = mlist->next;
+ continue;
+ }
+ GST_LOG_OBJECT (demux, "media of type %d - %s, uri: %s", i,
+ media->name, media->uri);
+ create_stream_for_playlist (demux, media->playlist, FALSE,
+ (media->mtype == GST_HLS_MEDIA_TYPE_VIDEO ||
+ media->mtype == GST_HLS_MEDIA_TYPE_AUDIO));
+
+ mlist = mlist->next;
+ }
+ }
return TRUE;
}
+static const gchar *
+gst_adaptive_demux_get_manifest_ref_uri (GstAdaptiveDemux * d)
+{
+ return d->manifest_base_uri ? d->manifest_base_uri : d->manifest_uri;
+}
+
+static void
+gst_hls_demux_set_current_variant (GstHLSDemux * hlsdemux,
+ GstHLSVariantStream * variant)
+{
+ if (hlsdemux->current_variant == variant || variant == NULL)
+ return;
+
+ if (hlsdemux->current_variant != NULL) {
+ gint i;
+
+ //#warning FIXME: Synching fragments across variants
+ // should be done based on media timestamps, and
+ // discont-sequence-numbers not sequence numbers.
+ variant->m3u8->sequence_position =
+ hlsdemux->current_variant->m3u8->sequence_position;
+ variant->m3u8->sequence = hlsdemux->current_variant->m3u8->sequence;
+
+ GST_DEBUG_OBJECT (hlsdemux,
+ "Switching Variant. Copying over sequence %" G_GINT64_FORMAT
+ " and sequence_pos %" GST_TIME_FORMAT, variant->m3u8->sequence,
+ GST_TIME_ARGS (variant->m3u8->sequence_position));
+
+ for (i = 0; i < GST_HLS_N_MEDIA_TYPES; ++i) {
+ GList *mlist = hlsdemux->current_variant->media[i];
+
+ while (mlist != NULL) {
+ GstHLSMedia *old_media = mlist->data;
+ GstHLSMedia *new_media =
+ gst_hls_variant_find_matching_media (variant, old_media);
+
+ if (new_media) {
+ new_media->playlist->sequence = old_media->playlist->sequence;
+ new_media->playlist->sequence_position =
+ old_media->playlist->sequence_position;
+ }
+ mlist = mlist->next;
+ }
+ }
+
+ gst_hls_variant_stream_unref (hlsdemux->current_variant);
+ }
+
+ hlsdemux->current_variant = gst_hls_variant_stream_ref (variant);
+
+}
static gboolean
gst_hls_demux_process_manifest (GstAdaptiveDemux * demux, GstBuffer * buf)
{
+ GstHLSVariantStream *variant;
GstHLSDemux *hlsdemux = GST_HLS_DEMUX_CAST (demux);
gchar *playlist = NULL;
- if (hlsdemux->client)
- gst_m3u8_client_free (hlsdemux->client);
-
- hlsdemux->client =
- gst_m3u8_client_new (demux->manifest_uri, demux->manifest_base_uri);
-
- GST_INFO_OBJECT (demux, "Changed location: %s (base uri: %s)",
- demux->manifest_uri, GST_STR_NULL (demux->manifest_base_uri));
+ GST_INFO_OBJECT (demux, "Initial playlist location: %s (base uri: %s)",
+ demux->manifest_uri, demux->manifest_base_uri);
playlist = gst_hls_src_buf_to_utf8_playlist (buf);
if (playlist == NULL) {
- GST_WARNING_OBJECT (demux, "Error validating first playlist.");
+ GST_WARNING_OBJECT (demux, "Error validating initial playlist");
return FALSE;
- } else if (!gst_m3u8_client_update (hlsdemux->client, playlist)) {
+ }
+
+ GST_M3U8_CLIENT_LOCK (self);
+ hlsdemux->master = gst_hls_master_playlist_new_from_data (playlist,
+ gst_adaptive_demux_get_manifest_ref_uri (demux));
+
+ if (hlsdemux->master == NULL || hlsdemux->master->variants == NULL) {
/* In most cases, this will happen if we set a wrong url in the
* source element and we have received the 404 HTML response instead of
* the playlist */
- GST_ELEMENT_ERROR (demux, STREAM, DECODE, ("Invalid playlist."), (NULL));
+ GST_ELEMENT_ERROR (demux, STREAM, DECODE, ("Invalid playlist."),
+ ("Could not parse playlist. Check if the URL is correct."));
+ GST_M3U8_CLIENT_UNLOCK (self);
return FALSE;
}
- /* If this playlist is a variant playlist, select the first one
- * and update it */
- if (gst_m3u8_client_has_variant_playlist (hlsdemux->client)) {
- GstM3U8 *child = NULL;
+ /* select the initial variant stream */
+ if (demux->connection_speed == 0) {
+ variant = hlsdemux->master->default_variant;
+ } else {
+ variant =
+ gst_hls_master_playlist_get_variant_for_bitrate (hlsdemux->master,
+ NULL, demux->connection_speed);
+ }
+
+ if (variant) {
+ GST_INFO_OBJECT (hlsdemux, "selected %s", variant->name);
+ gst_hls_demux_set_current_variant (hlsdemux, variant); // FIXME: inline?
+ }
+
+ /* get the selected media playlist (unless the inital list was one already) */
+ if (!hlsdemux->master->is_simple) {
GError *err = NULL;
- if (demux->connection_speed == 0) {
- GST_M3U8_CLIENT_LOCK (hlsdemux->client);
- child = hlsdemux->client->main->current_variant->data;
- GST_M3U8_CLIENT_UNLOCK (hlsdemux->client);
- } else {
- GList *tmp = gst_m3u8_client_get_playlist_for_bitrate (hlsdemux->client,
- demux->connection_speed);
- GST_M3U8_CLIENT_LOCK (hlsdemux->client);
- hlsdemux->client->main->current_variant = tmp;
- GST_M3U8_CLIENT_UNLOCK (hlsdemux->client);
-
- child = GST_M3U8 (tmp->data);
- }
-
- gst_m3u8_client_set_current (hlsdemux->client, child);
if (!gst_hls_demux_update_playlist (hlsdemux, FALSE, &err)) {
- GST_ELEMENT_ERROR_FROM_ERROR (demux, "Could not fetch the child playlist",
+ GST_ELEMENT_ERROR_FROM_ERROR (demux, "Could not fetch media playlist",
err);
+ GST_M3U8_CLIENT_UNLOCK (self);
return FALSE;
}
}
+ GST_M3U8_CLIENT_UNLOCK (self);
return gst_hls_demux_setup_streams (demux);
}
@@ -463,66 +621,111 @@
gst_hls_demux_get_duration (GstAdaptiveDemux * demux)
{
GstHLSDemux *hlsdemux = GST_HLS_DEMUX_CAST (demux);
+ GstClockTime duration = GST_CLOCK_TIME_NONE;
- return gst_m3u8_client_get_duration (hlsdemux->client);
+ if (hlsdemux->current_variant != NULL)
+ duration = gst_m3u8_get_duration (hlsdemux->current_variant->m3u8);
+
+ return duration;
}
static gboolean
gst_hls_demux_is_live (GstAdaptiveDemux * demux)
{
GstHLSDemux *hlsdemux = GST_HLS_DEMUX_CAST (demux);
+ gboolean is_live = FALSE;
- return gst_m3u8_client_is_live (hlsdemux->client);
+ if (hlsdemux->current_variant)
+ is_live = gst_hls_variant_stream_is_live (hlsdemux->current_variant);
+
+ return is_live;
+}
+
+static const GstHLSKey *
+gst_hls_demux_get_key (GstHLSDemux * demux, const gchar * key_url,
+ const gchar * referer, gboolean allow_cache)
+{
+ GstFragment *key_fragment;
+ GstBuffer *key_buffer;
+ GstHLSKey *key;
+ GError *err = NULL;
+
+ GST_LOG_OBJECT (demux, "Looking up key for key url %s", key_url);
+
+ g_mutex_lock (&demux->keys_lock);
+
+ key = g_hash_table_lookup (demux->keys, key_url);
+
+ if (key != NULL) {
+ GST_LOG_OBJECT (demux, "Found key for key url %s in key cache", key_url);
+ goto out;
+ }
+
+ GST_INFO_OBJECT (demux, "Fetching key %s", key_url);
+
+ key_fragment =
+ gst_uri_downloader_fetch_uri (GST_ADAPTIVE_DEMUX (demux)->downloader,
+ key_url, referer, FALSE, FALSE, allow_cache, &err);
+
+ if (key_fragment == NULL) {
+ GST_WARNING_OBJECT (demux, "Failed to download key to decrypt data: %s",
+ err ? err->message : "error");
+ g_clear_error (&err);
+ goto out;
+ }
+
+ key_buffer = gst_fragment_get_buffer (key_fragment);
+
+ key = g_new0 (GstHLSKey, 1);
+ if (gst_buffer_extract (key_buffer, 0, key->data, 16) < 16)
+ GST_WARNING_OBJECT (demux, "Download decryption key is too short!");
+
+ g_hash_table_insert (demux->keys, g_strdup (key_url), key);
+
+ gst_buffer_unref (key_buffer);
+ g_object_unref (key_fragment);
+
+out:
+
+ g_mutex_unlock (&demux->keys_lock);
+
+ if (key != NULL)
+ GST_MEMDUMP_OBJECT (demux, "Key", key->data, 16);
+
+ return key;
}
static gboolean
gst_hls_demux_start_fragment (GstAdaptiveDemux * demux,
GstAdaptiveDemuxStream * stream)
{
+ GstHLSDemuxStream *hls_stream = GST_HLS_DEMUX_STREAM_CAST (stream);
GstHLSDemux *hlsdemux = GST_HLS_DEMUX_CAST (demux);
+ const GstHLSKey *key;
+ GstM3U8 *m3u8;
- if (hlsdemux->current_key) {
- GError *err = NULL;
- GstFragment *key_fragment;
- GstBuffer *key_buffer;
- GstMapInfo key_info;
+ gst_hls_demux_stream_clear_pending_data (hls_stream);
- /* new key? */
- if (hlsdemux->key_url
- && strcmp (hlsdemux->key_url, hlsdemux->current_key) == 0) {
- key_fragment = g_object_ref (hlsdemux->key_fragment);
- } else {
- g_free (hlsdemux->key_url);
- hlsdemux->key_url = NULL;
+ /* Init the timestamp reader for this fragment */
+ gst_hlsdemux_tsreader_init (&hls_stream->tsreader);
+ /* Reset the stream type if we already know it */
+ gst_hlsdemux_tsreader_set_type (&hls_stream->tsreader,
+ hls_stream->stream_type);
- if (hlsdemux->key_fragment)
- g_object_unref (hlsdemux->key_fragment);
- hlsdemux->key_fragment = NULL;
+ /* If no decryption is needed, there's nothing to be done here */
+ if (hls_stream->current_key == NULL)
+ return TRUE;
- GST_INFO_OBJECT (demux, "Fetching key %s", hlsdemux->current_key);
- key_fragment =
- gst_uri_downloader_fetch_uri (demux->downloader,
- hlsdemux->current_key, hlsdemux->client->main ?
- hlsdemux->client->main->uri : NULL, FALSE, FALSE,
- hlsdemux->client->current ? hlsdemux->client->current->
- allowcache : TRUE, &err);
- if (key_fragment == NULL)
- goto key_failed;
- hlsdemux->key_url = g_strdup (hlsdemux->current_key);
- hlsdemux->key_fragment = g_object_ref (key_fragment);
- }
+ m3u8 = gst_hls_demux_stream_get_m3u8 (hls_stream);
- key_buffer = gst_fragment_get_buffer (key_fragment);
- gst_buffer_map (key_buffer, &key_info, GST_MAP_READ);
+ key = gst_hls_demux_get_key (hlsdemux, hls_stream->current_key,
+ m3u8->uri, m3u8->allowcache);
- gst_hls_demux_decrypt_start (hlsdemux, key_info.data, hlsdemux->current_iv);
+ if (key == NULL)
+ goto key_failed;
- gst_buffer_unmap (key_buffer, &key_info);
- gst_buffer_unref (key_buffer);
- g_object_unref (key_fragment);
- }
-
- gst_hls_demux_clear_pending_data (hlsdemux);
+ gst_hls_demux_stream_decrypt_start (hls_stream, key->data,
+ hls_stream->current_iv);
return TRUE;
@@ -535,63 +738,105 @@
}
}
-/* Handles decrypted buffers only */
+static GstHLSTSReaderType
+caps_to_reader (const GstCaps * caps)
+{
+ const GstStructure *s = gst_caps_get_structure (caps, 0);
+
+ if (gst_structure_has_name (s, "video/mpegts"))
+ return GST_HLS_TSREADER_MPEGTS;
+ if (gst_structure_has_name (s, "application/x-id3"))
+ return GST_HLS_TSREADER_ID3;
+
+ return GST_HLS_TSREADER_NONE;
+}
+
static GstFlowReturn
gst_hls_demux_handle_buffer (GstAdaptiveDemux * demux,
- GstAdaptiveDemuxStream * stream, GstBuffer * buffer, gboolean force)
+ GstAdaptiveDemuxStream * stream, GstBuffer * buffer, gboolean at_eos)
{
+ GstHLSDemuxStream *hls_stream = GST_HLS_DEMUX_STREAM_CAST (stream); // FIXME: pass HlsStream into function
GstHLSDemux *hlsdemux = GST_HLS_DEMUX_CAST (demux);
+ GstMapInfo info;
+ GstClockTime first_pcr, last_pcr;
- if (G_UNLIKELY (hlsdemux->do_typefind && buffer != NULL)) {
+ if (buffer == NULL)
+ return GST_FLOW_OK;
+
+ gst_buffer_map (buffer, &info, GST_MAP_READ);
+
+ if (G_UNLIKELY (hls_stream->do_typefind)) {
GstCaps *caps = NULL;
- GstMapInfo info;
guint buffer_size;
GstTypeFindProbability prob = GST_TYPE_FIND_NONE;
- if (hlsdemux->pending_typefind_buffer)
- buffer = gst_buffer_append (hlsdemux->pending_typefind_buffer, buffer);
- hlsdemux->pending_typefind_buffer = NULL;
+ if (hls_stream->pending_typefind_buffer)
+ buffer = gst_buffer_append (hls_stream->pending_typefind_buffer, buffer);
+ hls_stream->pending_typefind_buffer = NULL;
gst_buffer_map (buffer, &info, GST_MAP_READ);
buffer_size = info.size;
/* Typefind could miss if buffer is too small. In this case we
* will retry later */
- if (buffer_size >= (2 * 1024)) {
+ if (buffer_size >= (2 * 1024) || at_eos) {
caps =
gst_type_find_helper_for_data (GST_OBJECT_CAST (hlsdemux), info.data,
info.size, &prob);
}
- gst_buffer_unmap (buffer, &info);
if (G_UNLIKELY (!caps)) {
+ /* Won't need this mapping any more all paths return inside this if() */
+ gst_buffer_unmap (buffer, &info);
+
/* Only fail typefinding if we already a good amount of data
* and we still don't know the type */
- if (buffer_size > (2 * 1024 * 1024) || force) {
+ if (buffer_size > (2 * 1024 * 1024) || at_eos) {
GST_ELEMENT_ERROR (hlsdemux, STREAM, TYPE_NOT_FOUND,
("Could not determine type of stream"), (NULL));
gst_buffer_unref (buffer);
return GST_FLOW_NOT_NEGOTIATED;
- } else {
- hlsdemux->pending_typefind_buffer = buffer;
- return GST_FLOW_OK;
}
+
+ hls_stream->pending_typefind_buffer = buffer;
+
+ return GST_FLOW_OK;
}
GST_DEBUG_OBJECT (hlsdemux, "Typefind result: %" GST_PTR_FORMAT " prob:%d",
caps, prob);
+ hls_stream->stream_type = caps_to_reader (caps);
+ gst_hlsdemux_tsreader_set_type (&hls_stream->tsreader,
+ hls_stream->stream_type);
+
gst_adaptive_demux_stream_set_caps (stream, caps);
- hlsdemux->do_typefind = FALSE;
+
+ hls_stream->do_typefind = FALSE;
+ }
+ g_assert (hls_stream->pending_typefind_buffer == NULL);
+
+ gst_buffer_unmap (buffer, &info);
+
+ // Accumulate this buffer
+ if (hls_stream->pending_pcr_buffer) {
+ buffer = gst_buffer_append (hls_stream->pending_pcr_buffer, buffer);
+ hls_stream->pending_pcr_buffer = NULL;
}
- g_assert (hlsdemux->pending_typefind_buffer == NULL);
+ if (!gst_hlsdemux_tsreader_find_pcrs (&hls_stream->tsreader, buffer,
+ &first_pcr, &last_pcr)
+ && !at_eos) {
+ // Store this buffer for later
+ hls_stream->pending_pcr_buffer = buffer;
+ return GST_FLOW_OK;
+ }
if (buffer) {
buffer = gst_buffer_make_writable (buffer);
- GST_BUFFER_OFFSET (buffer) = hlsdemux->current_offset;
- hlsdemux->current_offset += gst_buffer_get_size (buffer);
- GST_BUFFER_OFFSET_END (buffer) = hlsdemux->current_offset;
+ GST_BUFFER_OFFSET (buffer) = hls_stream->current_offset;
+ hls_stream->current_offset += gst_buffer_get_size (buffer);
+ GST_BUFFER_OFFSET_END (buffer) = hls_stream->current_offset;
return gst_adaptive_demux_stream_push_buffer (stream, buffer);
}
return GST_FLOW_OK;
@@ -601,35 +846,50 @@
gst_hls_demux_finish_fragment (GstAdaptiveDemux * demux,
GstAdaptiveDemuxStream * stream)
{
- GstHLSDemux *hlsdemux = GST_HLS_DEMUX_CAST (demux);
+ GstHLSDemuxStream *hls_stream = GST_HLS_DEMUX_STREAM_CAST (stream); // FIXME: pass HlsStream into function
GstFlowReturn ret = GST_FLOW_OK;
- if (hlsdemux->current_key)
- gst_hls_demux_decrypt_end (hlsdemux);
+ if (hls_stream->current_key)
+ gst_hls_demux_stream_decrypt_end (hls_stream);
if (stream->last_ret == GST_FLOW_OK) {
- if (hlsdemux->pending_decrypted_buffer) {
- if (hlsdemux->current_key) {
+ if (hls_stream->pending_decrypted_buffer) {
+ if (hls_stream->current_key) {
GstMapInfo info;
gssize unpadded_size;
/* Handle pkcs7 unpadding here */
- gst_buffer_map (hlsdemux->pending_decrypted_buffer, &info,
+ gst_buffer_map (hls_stream->pending_decrypted_buffer, &info,
GST_MAP_READ);
unpadded_size = info.size - info.data[info.size - 1];
- gst_buffer_unmap (hlsdemux->pending_decrypted_buffer, &info);
+ gst_buffer_unmap (hls_stream->pending_decrypted_buffer, &info);
- gst_buffer_resize (hlsdemux->pending_decrypted_buffer, 0,
+ gst_buffer_resize (hls_stream->pending_decrypted_buffer, 0,
unpadded_size);
}
ret =
gst_hls_demux_handle_buffer (demux, stream,
- hlsdemux->pending_decrypted_buffer, TRUE);
- hlsdemux->pending_decrypted_buffer = NULL;
+ hls_stream->pending_decrypted_buffer, TRUE);
+ hls_stream->pending_decrypted_buffer = NULL;
+ }
+
+ if (ret == GST_FLOW_OK || ret == GST_FLOW_NOT_LINKED) {
+ if (hls_stream->pending_pcr_buffer) {
+ GstBuffer *buf = hls_stream->pending_pcr_buffer;
+ hls_stream->pending_pcr_buffer = NULL;
+
+ ret = gst_hls_demux_handle_buffer (demux, stream, buf, TRUE);
+ }
+
+ GST_LOG_OBJECT (stream,
+ "Fragment PCRs were %" GST_TIME_FORMAT " to %" GST_TIME_FORMAT,
+ GST_TIME_ARGS (hls_stream->tsreader.first_pcr),
+ GST_TIME_ARGS (hls_stream->tsreader.last_pcr));
}
}
- gst_hls_demux_clear_pending_data (hlsdemux);
+
+ gst_hls_demux_stream_clear_pending_data (hls_stream);
if (ret == GST_FLOW_OK || ret == GST_FLOW_NOT_LINKED)
return gst_adaptive_demux_stream_advance_fragment (demux, stream,
@@ -641,30 +901,34 @@
gst_hls_demux_data_received (GstAdaptiveDemux * demux,
GstAdaptiveDemuxStream * stream, GstBuffer * buffer)
{
+ GstHLSDemuxStream *hls_stream = GST_HLS_DEMUX_STREAM_CAST (stream);
GstHLSDemux *hlsdemux = GST_HLS_DEMUX_CAST (demux);
- if (hlsdemux->current_offset == -1)
- hlsdemux->current_offset =
- GST_BUFFER_OFFSET_IS_VALID (buffer) ? GST_BUFFER_OFFSET (buffer) : 0;
+ if (hls_stream->current_offset == -1)
+ hls_stream->current_offset = 0;
/* Is it encrypted? */
- if (hlsdemux->current_key) {
+ if (hls_stream->current_key) {
GError *err = NULL;
gsize size;
GstBuffer *tmp_buffer;
- gst_adapter_push (hlsdemux->pending_encrypted_data, buffer);
- size = gst_adapter_available (hlsdemux->pending_encrypted_data);
+ if (hls_stream->pending_encrypted_data == NULL)
+ hls_stream->pending_encrypted_data = gst_adapter_new ();
+
+ gst_adapter_push (hls_stream->pending_encrypted_data, buffer);
+ size = gst_adapter_available (hls_stream->pending_encrypted_data);
/* must be a multiple of 16 */
- size = size & (~0xF);
+ size &= (~0xF);
if (size == 0) {
return GST_FLOW_OK;
}
- buffer = gst_adapter_take_buffer (hlsdemux->pending_encrypted_data, size);
- buffer = gst_hls_demux_decrypt_fragment (hlsdemux, buffer, &err);
+ buffer = gst_adapter_take_buffer (hls_stream->pending_encrypted_data, size);
+ buffer =
+ gst_hls_demux_decrypt_fragment (hlsdemux, hls_stream, buffer, &err);
if (buffer == NULL) {
GST_ELEMENT_ERROR (demux, STREAM, DECODE, ("Failed to decrypt buffer"),
("decryption failed %s", err->message));
@@ -672,49 +936,95 @@
return GST_FLOW_ERROR;
}
- tmp_buffer = hlsdemux->pending_decrypted_buffer;
- hlsdemux->pending_decrypted_buffer = buffer;
+ tmp_buffer = hls_stream->pending_decrypted_buffer;
+ hls_stream->pending_decrypted_buffer = buffer;
buffer = tmp_buffer;
}
return gst_hls_demux_handle_buffer (demux, stream, buffer, FALSE);
}
+static void
+gst_hls_demux_stream_free (GstAdaptiveDemuxStream * stream)
+{
+ GstHLSDemuxStream *hls_stream = GST_HLS_DEMUX_STREAM_CAST (stream);
+
+ if (hls_stream->playlist) {
+ gst_m3u8_unref (hls_stream->playlist);
+ hls_stream->playlist = NULL;
+ }
+
+ if (hls_stream->pending_encrypted_data)
+ g_object_unref (hls_stream->pending_encrypted_data);
+
+ gst_buffer_replace (&hls_stream->pending_decrypted_buffer, NULL);
+ gst_buffer_replace (&hls_stream->pending_typefind_buffer, NULL);
+ gst_buffer_replace (&hls_stream->pending_pcr_buffer, NULL);
+
+ if (hls_stream->current_key) {
+ g_free (hls_stream->current_key);
+ hls_stream->current_key = NULL;
+ }
+ if (hls_stream->current_iv) {
+ g_free (hls_stream->current_iv);
+ hls_stream->current_iv = NULL;
+ }
+ gst_hls_demux_stream_decrypt_end (hls_stream);
+}
+
+static GstM3U8 *
+gst_hls_demux_stream_get_m3u8 (GstHLSDemuxStream * hlsdemux_stream)
+{
+ GstM3U8 *m3u8;
+
+ m3u8 = hlsdemux_stream->playlist;
+
+ return m3u8;
+}
+
static gboolean
gst_hls_demux_stream_has_next_fragment (GstAdaptiveDemuxStream * stream)
{
- GstHLSDemux *hlsdemux = GST_HLS_DEMUX_CAST (stream->demux);
+ gboolean has_next;
+ GstM3U8 *m3u8;
- return gst_m3u8_client_has_next_fragment (hlsdemux->client,
- stream->demux->segment.rate > 0);
+ m3u8 = gst_hls_demux_stream_get_m3u8 (GST_HLS_DEMUX_STREAM_CAST (stream));
+
+ has_next = gst_m3u8_has_next_fragment (m3u8, stream->demux->segment.rate > 0);
+
+ return has_next;
}
static GstFlowReturn
gst_hls_demux_advance_fragment (GstAdaptiveDemuxStream * stream)
{
- GstHLSDemux *hlsdemux = GST_HLS_DEMUX_CAST (stream->demux);
+ GstHLSDemuxStream *hlsdemux_stream = GST_HLS_DEMUX_STREAM_CAST (stream);
+ GstM3U8 *m3u8;
- gst_m3u8_client_advance_fragment (hlsdemux->client,
- stream->demux->segment.rate > 0);
- hlsdemux->reset_pts = FALSE;
+ m3u8 = gst_hls_demux_stream_get_m3u8 (hlsdemux_stream);
+
+ gst_m3u8_advance_fragment (m3u8, stream->demux->segment.rate > 0);
+ hlsdemux_stream->reset_pts = FALSE;
+
return GST_FLOW_OK;
}
static GstFlowReturn
gst_hls_demux_update_fragment_info (GstAdaptiveDemuxStream * stream)
{
+ GstHLSDemuxStream *hlsdemux_stream = GST_HLS_DEMUX_STREAM_CAST (stream);
GstHLSDemux *hlsdemux = GST_HLS_DEMUX_CAST (stream->demux);
- gchar *next_fragment_uri;
- GstClockTime duration;
- GstClockTime timestamp;
- gboolean discont;
- gint64 range_start, range_end;
- gchar *key = NULL;
- guint8 *iv = NULL;
+ GstM3U8MediaFile *file;
+ GstClockTime sequence_pos;
+ gboolean discont, forward;
+ GstM3U8 *m3u8;
- if (!gst_m3u8_client_get_next_fragment (hlsdemux->client, &discont,
- &next_fragment_uri, &duration, ×tamp, &range_start, &range_end,
- &key, &iv, stream->demux->segment.rate > 0)) {
+ m3u8 = gst_hls_demux_stream_get_m3u8 (hlsdemux_stream);
+
+ forward = (stream->demux->segment.rate > 0);
+ file = gst_m3u8_get_next_fragment (m3u8, forward, &sequence_pos, &discont);
+
+ if (file == NULL) {
GST_INFO_OBJECT (hlsdemux, "This playlist doesn't contain more fragments");
return GST_FLOW_EOS;
}
@@ -723,23 +1033,33 @@
discont = TRUE;
/* set up our source for download */
- if (hlsdemux->reset_pts || discont || stream->demux->segment.rate < 0.0) {
- stream->fragment.timestamp = timestamp;
+ if (hlsdemux_stream->reset_pts || discont
+ || stream->demux->segment.rate < 0.0) {
+ stream->fragment.timestamp = sequence_pos;
} else {
stream->fragment.timestamp = GST_CLOCK_TIME_NONE;
}
- g_free (hlsdemux->current_key);
- hlsdemux->current_key = key;
- g_free (hlsdemux->current_iv);
- hlsdemux->current_iv = iv;
+ g_free (hlsdemux_stream->current_key);
+ hlsdemux_stream->current_key = g_strdup (file->key);
+ g_free (hlsdemux_stream->current_iv);
+ hlsdemux_stream->current_iv = g_memdup (file->iv, sizeof (file->iv));
+
g_free (stream->fragment.uri);
- stream->fragment.uri = next_fragment_uri;
- stream->fragment.range_start = range_start;
- stream->fragment.range_end = range_end;
- stream->fragment.duration = duration;
+ stream->fragment.uri = g_strdup (file->uri);
+
+ GST_DEBUG_OBJECT (hlsdemux, "Stream %p URI now %s", stream, file->uri);
+
+ stream->fragment.range_start = file->offset;
+ if (file->size != -1)
+ stream->fragment.range_end = file->offset + file->size - 1;
+ else
+ stream->fragment.range_end = -1;
+
+ stream->fragment.duration = file->duration;
+
if (discont)
- stream->discont = discont;
+ stream->discont = TRUE;
return GST_FLOW_OK;
}
@@ -749,22 +1069,25 @@
{
GstAdaptiveDemux *demux = GST_ADAPTIVE_DEMUX_CAST (stream->demux);
GstHLSDemux *hlsdemux = GST_HLS_DEMUX_CAST (stream->demux);
+ GstHLSDemuxStream *hls_stream = GST_HLS_DEMUX_STREAM_CAST (stream);
+
gboolean changed = FALSE;
GST_M3U8_CLIENT_LOCK (hlsdemux->client);
- if (!hlsdemux->client->main->lists) {
+ if (hlsdemux->master == NULL || hlsdemux->master->is_simple) {
GST_M3U8_CLIENT_UNLOCK (hlsdemux->client);
return FALSE;
}
GST_M3U8_CLIENT_UNLOCK (hlsdemux->client);
- /* FIXME: Currently several issues have be found when letting bitrate adaptation
- * happen using trick modes (such as 'All streams finished without buffers') and
- * the adaptive algorithm does not properly behave. */
- if (demux->segment.rate != 1.0)
+ if (hls_stream->is_primary_playlist == FALSE) {
+ GST_LOG_OBJECT (hlsdemux,
+ "Stream %p Not choosing new bitrate - not the primary stream", stream);
return FALSE;
+ }
- gst_hls_demux_change_playlist (hlsdemux, bitrate, &changed);
+ gst_hls_demux_change_playlist (hlsdemux, bitrate / MAX (1.0,
+ ABS (demux->segment.rate)), &changed);
if (changed)
gst_hls_demux_setup_streams (GST_ADAPTIVE_DEMUX_CAST (hlsdemux));
return changed;
@@ -775,36 +1098,19 @@
{
GstHLSDemux *demux = GST_HLS_DEMUX_CAST (ademux);
- demux->do_typefind = TRUE;
- demux->reset_pts = TRUE;
-
- g_free (demux->key_url);
- demux->key_url = NULL;
-
- if (demux->key_fragment)
- g_object_unref (demux->key_fragment);
- demux->key_fragment = NULL;
-
- if (demux->client) {
- gst_m3u8_client_free (demux->client);
- demux->client = NULL;
+ GST_M3U8_CLIENT_LOCK (hlsdemux->client);
+ if (demux->master) {
+ gst_hls_master_playlist_unref (demux->master);
+ demux->master = NULL;
}
- /* TODO recreated on hls only if reset was not for disposing */
- demux->client = gst_m3u8_client_new ("", NULL);
-
+ if (demux->current_variant != NULL) {
+ gst_hls_variant_stream_unref (demux->current_variant);
+ demux->current_variant = NULL;
+ }
demux->srcpad_counter = 0;
- gst_hls_demux_clear_pending_data (demux);
- gst_buffer_replace (&demux->pending_typefind_buffer, NULL);
- if (demux->current_key) {
- g_free (demux->current_key);
- demux->current_key = NULL;
- }
- if (demux->current_iv) {
- g_free (demux->current_iv);
- demux->current_iv = NULL;
- }
- gst_hls_demux_decrypt_end (demux);
+ gst_hls_demux_clear_all_pending_data (demux);
+ GST_M3U8_CLIENT_UNLOCK (hlsdemux->client);
}
static gchar *
@@ -832,6 +1138,163 @@
return NULL;
}
+static gint
+gst_hls_demux_find_variant_match (const GstHLSVariantStream * a,
+ const GstHLSVariantStream * b)
+{
+ if (g_strcmp0 (a->name, b->name) == 0 &&
+ a->bandwidth == b->bandwidth &&
+ a->program_id == b->program_id &&
+ g_strcmp0 (a->codecs, b->codecs) == 0 &&
+ a->width == b->width &&
+ a->height == b->height && a->iframe == b->iframe) {
+ return 0;
+ }
+
+ return 1;
+}
+
+/* Update the master playlist, which contains the list of available
+ * variants */
+static gboolean
+gst_hls_demux_update_variant_playlist (GstHLSDemux * hlsdemux, gchar * data,
+ const gchar * uri, const gchar * base_uri)
+{
+ GstHLSMasterPlaylist *new_master, *old;
+ gboolean ret = FALSE;
+ GList *l, *unmatched_lists;
+ GstHLSVariantStream *new_variant;
+
+ new_master = gst_hls_master_playlist_new_from_data (data, base_uri ? base_uri : uri); // FIXME: check which uri to use here
+
+ if (new_master == NULL)
+ return ret;
+
+ if (new_master->is_simple) {
+ // FIXME: we should be able to support this though, in the unlikely
+ // case that it changed?
+ GST_ERROR
+ ("Cannot update variant playlist: New playlist is not a variant playlist");
+ gst_hls_master_playlist_unref (new_master);
+ return FALSE;
+ }
+
+ GST_M3U8_CLIENT_LOCK (self);
+
+ if (hlsdemux->master->is_simple) {
+ GST_ERROR
+ ("Cannot update variant playlist: Current playlist is not a variant playlist");
+ goto out;
+ }
+
+ /* Now see if the variant playlist still has the same lists */
+ unmatched_lists = g_list_copy (hlsdemux->master->variants);
+ for (l = new_master->variants; l != NULL; l = l->next) {
+ GList *match = g_list_find_custom (unmatched_lists, l->data,
+ (GCompareFunc) gst_hls_demux_find_variant_match);
+
+ if (match) {
+ GstHLSVariantStream *variant = l->data;
+ GstHLSVariantStream *old = match->data;
+
+ unmatched_lists = g_list_delete_link (unmatched_lists, match);
+ /* FIXME: Deal with losing position due to missing an update */
+ variant->m3u8->sequence_position = old->m3u8->sequence_position;
+ variant->m3u8->sequence = old->m3u8->sequence;
+ }
+ }
+
+ if (unmatched_lists != NULL) {
+ GST_WARNING ("Unable to match all playlists");
+
+ for (l = unmatched_lists; l != NULL; l = l->next) {
+ if (l->data == hlsdemux->current_variant) {
+ GST_WARNING ("Unable to match current playlist");
+ }
+ }
+
+ g_list_free (unmatched_lists);
+ }
+
+ /* Switch out the variant playlist */
+ old = hlsdemux->master;
+
+ // FIXME: check all this and also switch of variants, if anything needs updating
+ hlsdemux->master = new_master;
+
+ if (hlsdemux->current_variant == NULL) {
+ new_variant = new_master->default_variant;
+ } else {
+ /* Find the same variant in the new playlist */
+ new_variant =
+ gst_hls_master_playlist_get_matching_variant (new_master,
+ hlsdemux->current_variant);
+ }
+
+ /* Use the function to set the current variant, as it copies over data */
+ if (new_variant != NULL)
+ gst_hls_demux_set_current_variant (hlsdemux, new_variant);
+
+ gst_hls_master_playlist_unref (old);
+
+ ret = (hlsdemux->current_variant != NULL);
+out:
+ GST_M3U8_CLIENT_UNLOCK (self);
+
+ return ret;
+}
+
+static gboolean
+gst_hls_demux_update_rendition_manifest (GstHLSDemux * demux,
+ GstHLSMedia * media, GError ** err)
+{
+ GstAdaptiveDemux *adaptive_demux = GST_ADAPTIVE_DEMUX (demux);
+ GstFragment *download;
+ GstBuffer *buf;
+ gchar *playlist;
+ const gchar *main_uri;
+ GstM3U8 *m3u8;
+ gchar *uri = media->uri;
+
+ main_uri = gst_adaptive_demux_get_manifest_ref_uri (adaptive_demux);
+ download =
+ gst_uri_downloader_fetch_uri (adaptive_demux->downloader, uri, main_uri,
+ TRUE, TRUE, TRUE, err);
+
+ if (download == NULL)
+ return FALSE;
+
+ m3u8 = media->playlist;
+
+ /* Set the base URI of the playlist to the redirect target if any */
+ if (download->redirect_permanent && download->redirect_uri) {
+ gst_m3u8_set_uri (m3u8, download->redirect_uri, NULL, media->name);
+ } else {
+ gst_m3u8_set_uri (m3u8, download->uri, download->redirect_uri, media->name);
+ }
+
+ buf = gst_fragment_get_buffer (download);
+ playlist = gst_hls_src_buf_to_utf8_playlist (buf);
+ gst_buffer_unref (buf);
+ g_object_unref (download);
+
+ if (playlist == NULL) {
+ GST_WARNING_OBJECT (demux, "Couldn't validate playlist encoding");
+ g_set_error (err, GST_STREAM_ERROR, GST_STREAM_ERROR_WRONG_TYPE,
+ "Couldn't validate playlist encoding");
+ return FALSE;
+ }
+
+ if (!gst_m3u8_update (m3u8, playlist)) {
+ GST_WARNING_OBJECT (demux, "Couldn't update playlist");
+ g_set_error (err, GST_STREAM_ERROR, GST_STREAM_ERROR_FAILED,
+ "Couldn't update playlist");
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
static gboolean
gst_hls_demux_update_playlist (GstHLSDemux * demux, gboolean update,
GError ** err)
@@ -840,34 +1303,32 @@
GstFragment *download;
GstBuffer *buf;
gchar *playlist;
- gboolean main_checked = FALSE, updated = FALSE;
- gchar *uri, *main_uri;
+ gboolean main_checked = FALSE;
+ const gchar *main_uri;
+ GstM3U8 *m3u8;
+ gchar *uri;
+ gint i;
retry:
- uri = gst_m3u8_client_get_current_uri (demux->client);
- main_uri = gst_m3u8_client_get_uri (demux->client);
+ uri = gst_m3u8_get_uri (demux->current_variant->m3u8);
+ main_uri = gst_adaptive_demux_get_manifest_ref_uri (adaptive_demux);
download =
gst_uri_downloader_fetch_uri (adaptive_demux->downloader, uri, main_uri,
TRUE, TRUE, TRUE, err);
- g_free (main_uri);
if (download == NULL) {
gchar *base_uri;
- if (!update || main_checked
- || !gst_m3u8_client_has_variant_playlist (demux->client)) {
+ if (!update || main_checked || demux->master->is_simple) {
g_free (uri);
return FALSE;
}
-
g_clear_error (err);
- main_uri = gst_m3u8_client_get_uri (demux->client);
GST_INFO_OBJECT (demux,
"Updating playlist %s failed, attempt to refresh variant playlist %s",
uri, main_uri);
download =
gst_uri_downloader_fetch_uri (adaptive_demux->downloader,
main_uri, NULL, TRUE, TRUE, TRUE, err);
- g_free (main_uri);
if (download == NULL) {
g_free (uri);
return FALSE;
@@ -896,8 +1357,7 @@
base_uri = download->redirect_uri;
}
- if (!gst_m3u8_client_update_variant_playlist (demux->client, playlist,
- uri, base_uri)) {
+ if (!gst_hls_demux_update_variant_playlist (demux, playlist, uri, base_uri)) {
GST_WARNING_OBJECT (demux, "Failed to update the variant playlist");
g_object_unref (download);
g_set_error (err, GST_STREAM_ERROR, GST_STREAM_ERROR_FAILED,
@@ -912,18 +1372,16 @@
}
g_free (uri);
+ m3u8 = demux->current_variant->m3u8;
+
/* Set the base URI of the playlist to the redirect target if any */
- GST_M3U8_CLIENT_LOCK (demux->client);
- g_free (demux->client->current->uri);
- g_free (demux->client->current->base_uri);
if (download->redirect_permanent && download->redirect_uri) {
- demux->client->current->uri = g_strdup (download->redirect_uri);
- demux->client->current->base_uri = NULL;
+ gst_m3u8_set_uri (m3u8, download->redirect_uri, NULL,
+ demux->current_variant->name);
} else {
- demux->client->current->uri = g_strdup (download->uri);
- demux->client->current->base_uri = g_strdup (download->redirect_uri);
+ gst_m3u8_set_uri (m3u8, download->uri, download->redirect_uri,
+ demux->current_variant->name);
}
- GST_M3U8_CLIENT_UNLOCK (demux->client);
buf = gst_fragment_get_buffer (download);
playlist = gst_hls_src_buf_to_utf8_playlist (buf);
@@ -937,41 +1395,61 @@
return FALSE;
}
- updated = gst_m3u8_client_update (demux->client, playlist);
- if (!updated) {
+ if (!gst_m3u8_update (m3u8, playlist)) {
GST_WARNING_OBJECT (demux, "Couldn't update playlist");
g_set_error (err, GST_STREAM_ERROR, GST_STREAM_ERROR_FAILED,
"Couldn't update playlist");
return FALSE;
}
+ for (i = 0; i < GST_HLS_N_MEDIA_TYPES; ++i) {
+ GList *mlist = demux->current_variant->media[i];
+
+ while (mlist != NULL) {
+ GstHLSMedia *media = mlist->data;
+
+ if (media->uri == NULL) {
+ /* No uri means this is a placeholder for a stream
+ * contained in another mux */
+ mlist = mlist->next;
+ continue;
+ }
+ GST_LOG_OBJECT (demux,
+ "Updating playlist for media of type %d - %s, uri: %s", i,
+ media->name, media->uri);
+
+ if (!gst_hls_demux_update_rendition_manifest (demux, media, err))
+ return FALSE;
+
+ mlist = mlist->next;
+ }
+ }
+
/* If it's a live source, do not let the sequence number go beyond
* three fragments before the end of the list */
- if (update == FALSE && demux->client->current &&
- gst_m3u8_client_is_live (demux->client)) {
+ if (update == FALSE && gst_m3u8_is_live (m3u8)) {
gint64 last_sequence, first_sequence;
GST_M3U8_CLIENT_LOCK (demux->client);
last_sequence =
- GST_M3U8_MEDIA_FILE (g_list_last (demux->client->current->
- files)->data)->sequence;
+ GST_M3U8_MEDIA_FILE (g_list_last (m3u8->files)->data)->sequence;
first_sequence =
- GST_M3U8_MEDIA_FILE (demux->client->current->files->data)->sequence;
+ GST_M3U8_MEDIA_FILE (g_list_first (m3u8->files)->data)->sequence;
GST_DEBUG_OBJECT (demux,
"sequence:%" G_GINT64_FORMAT " , first_sequence:%" G_GINT64_FORMAT
- " , last_sequence:%" G_GINT64_FORMAT, demux->client->sequence,
+ " , last_sequence:%" G_GINT64_FORMAT, m3u8->sequence,
first_sequence, last_sequence);
- if (demux->client->sequence >= last_sequence - 3) {
+ if (m3u8->sequence >= last_sequence - 3) {
//demux->need_segment = TRUE;
/* Make sure we never go below the minimum sequence number */
- demux->client->sequence = MAX (first_sequence, last_sequence - 3);
+ m3u8->sequence = MAX (first_sequence, last_sequence - 3);
GST_DEBUG_OBJECT (demux,
"Sequence is beyond playlist. Moving back to %" G_GINT64_FORMAT,
- demux->client->sequence);
+ m3u8->sequence);
}
GST_M3U8_CLIENT_UNLOCK (demux->client);
- } else if (demux->client->current && !gst_m3u8_client_is_live (demux->client)) {
+ } else if (!gst_m3u8_is_live (m3u8)) {
GstClockTime current_pos, target_pos;
guint sequence = 0;
GList *walk;
@@ -990,15 +1468,15 @@
} else {
target_pos = 0;
}
- if (GST_CLOCK_TIME_IS_VALID (demux->client->sequence_position)) {
- target_pos = MAX (target_pos, demux->client->sequence_position);
+ if (GST_CLOCK_TIME_IS_VALID (m3u8->sequence_position)) {
+ target_pos = MAX (target_pos, m3u8->sequence_position);
}
GST_LOG_OBJECT (demux, "Looking for sequence position %"
GST_TIME_FORMAT " in updated playlist", GST_TIME_ARGS (target_pos));
current_pos = 0;
- for (walk = demux->client->current->files; walk; walk = walk->next) {
+ for (walk = m3u8->files; walk; walk = walk->next) {
GstM3U8MediaFile *file = walk->data;
sequence = file->sequence;
@@ -1011,19 +1489,20 @@
/* End of playlist */
if (!walk)
sequence++;
- demux->client->sequence = sequence;
- demux->client->sequence_position = current_pos;
+ m3u8->sequence = sequence;
+ m3u8->sequence_position = current_pos;
GST_M3U8_CLIENT_UNLOCK (demux->client);
}
- return updated;
+ return TRUE;
}
static gboolean
gst_hls_demux_change_playlist (GstHLSDemux * demux, guint max_bitrate,
gboolean * changed)
{
- GList *previous_variant, *current_variant;
+ GstHLSVariantStream *lowest_variant, *lowest_ivariant;
+ GstHLSVariantStream *previous_variant, *new_variant;
gint old_bandwidth, new_bandwidth;
GstAdaptiveDemux *adaptive_demux = GST_ADAPTIVE_DEMUX_CAST (demux);
GstAdaptiveDemuxStream *stream;
@@ -1032,15 +1511,16 @@
stream = adaptive_demux->streams->data;
- previous_variant = demux->client->main->current_variant;
- current_variant = gst_m3u8_client_get_playlist_for_bitrate (demux->client,
- max_bitrate);
+ previous_variant = demux->current_variant;
+ new_variant =
+ gst_hls_master_playlist_get_variant_for_bitrate (demux->master,
+ demux->current_variant, max_bitrate);
GST_M3U8_CLIENT_LOCK (demux->client);
retry_failover_protection:
- old_bandwidth = GST_M3U8 (previous_variant->data)->bandwidth;
- new_bandwidth = GST_M3U8 (current_variant->data)->bandwidth;
+ old_bandwidth = previous_variant->bandwidth;
+ new_bandwidth = new_variant->bandwidth;
/* Don't do anything else if the playlist is the same */
if (new_bandwidth == old_bandwidth) {
@@ -1048,19 +1528,19 @@
return TRUE;
}
- demux->client->main->current_variant = current_variant;
GST_M3U8_CLIENT_UNLOCK (demux->client);
- gst_m3u8_client_set_current (demux->client, current_variant->data);
+ gst_hls_demux_set_current_variant (demux, new_variant);
GST_INFO_OBJECT (demux, "Client was on %dbps, max allowed is %dbps, switching"
" to bitrate %dbps", old_bandwidth, max_bitrate, new_bandwidth);
if (gst_hls_demux_update_playlist (demux, TRUE, NULL)) {
+ const gchar *main_uri;
gchar *uri;
- gchar *main_uri;
- uri = gst_m3u8_client_get_current_uri (demux->client);
- main_uri = gst_m3u8_client_get_uri (demux->client);
+
+ uri = gst_m3u8_get_uri (new_variant->m3u8);
+ main_uri = gst_adaptive_demux_get_manifest_ref_uri (adaptive_demux);
gst_element_post_message (GST_ELEMENT_CAST (demux),
gst_message_new_element (GST_OBJECT_CAST (demux),
gst_structure_new (GST_ADAPTIVE_DEMUX_STATISTICS_MESSAGE_NAME,
@@ -1068,58 +1548,60 @@
main_uri, "uri", G_TYPE_STRING,
uri, "bitrate", G_TYPE_INT, new_bandwidth, NULL)));
g_free (uri);
- g_free (main_uri);
if (changed)
*changed = TRUE;
stream->discont = TRUE;
} else {
- GList *failover = NULL;
+ GstHLSVariantStream *failover_variant = NULL;
+ GList *failover;
GST_INFO_OBJECT (demux, "Unable to update playlist. Switching back");
GST_M3U8_CLIENT_LOCK (demux->client);
- failover = g_list_previous (current_variant);
- if (failover && new_bandwidth == GST_M3U8 (failover->data)->bandwidth) {
- current_variant = failover;
+ /* we find variants by bitrate by going from highest to lowest, so it's
+ * possible that there's another variant with the same bitrate before the
+ * one selected which we can use as failover */
+ failover = g_list_find (demux->master->variants, new_variant);
+ if (failover != NULL)
+ failover = failover->prev;
+ if (failover != NULL)
+ failover_variant = failover->data;
+ if (failover_variant && new_bandwidth == failover_variant->bandwidth) {
+ new_variant = failover_variant;
goto retry_failover_protection;
}
- demux->client->main->current_variant = previous_variant;
GST_M3U8_CLIENT_UNLOCK (demux->client);
- gst_m3u8_client_set_current (demux->client, previous_variant->data);
+ gst_hls_demux_set_current_variant (demux, previous_variant);
/* Try a lower bitrate (or stop if we just tried the lowest) */
- if (GST_M3U8 (previous_variant->data)->iframe && new_bandwidth ==
- GST_M3U8 (g_list_first (demux->client->main->iframe_lists)->data)->
- bandwidth)
+ lowest_variant = demux->master->variants->data;
+ lowest_ivariant = demux->master->iframe_variants->data;
+ if (previous_variant->iframe && new_bandwidth == lowest_ivariant->bandwidth)
return FALSE;
- else if (!GST_M3U8 (previous_variant->data)->iframe && new_bandwidth ==
- GST_M3U8 (g_list_first (demux->client->main->lists)->data)->bandwidth)
+ if (!previous_variant->iframe && new_bandwidth == lowest_variant->bandwidth)
return FALSE;
else
return gst_hls_demux_change_playlist (demux, new_bandwidth - 1, changed);
}
- /* Force typefinding since we might have changed media type */
- demux->do_typefind = TRUE;
-
return TRUE;
}
#if defined(HAVE_OPENSSL)
static gboolean
-gst_hls_demux_decrypt_start (GstHLSDemux * demux, const guint8 * key_data,
- const guint8 * iv_data)
+gst_hls_demux_stream_decrypt_start (GstHLSDemuxStream * stream,
+ const guint8 * key_data, const guint8 * iv_data)
{
- EVP_CIPHER_CTX_init (&demux->aes_ctx);
- if (!EVP_DecryptInit_ex (&demux->aes_ctx, EVP_aes_128_cbc (), NULL, key_data,
+ EVP_CIPHER_CTX_init (&stream->aes_ctx);
+ if (!EVP_DecryptInit_ex (&stream->aes_ctx, EVP_aes_128_cbc (), NULL, key_data,
iv_data))
return FALSE;
- EVP_CIPHER_CTX_set_padding (&demux->aes_ctx, 0);
+ EVP_CIPHER_CTX_set_padding (&stream->aes_ctx, 0);
return TRUE;
}
static gboolean
-decrypt_fragment (GstHLSDemux * demux, gsize length,
+decrypt_fragment (GstHLSDemuxStream * stream, gsize length,
const guint8 * encrypted_data, guint8 * decrypted_data)
{
int len, flen = 0;
@@ -1128,102 +1610,102 @@
return FALSE;
len = (int) length;
- if (!EVP_DecryptUpdate (&demux->aes_ctx, decrypted_data, &len, encrypted_data,
- len))
+ if (!EVP_DecryptUpdate (&stream->aes_ctx, decrypted_data, &len,
+ encrypted_data, len))
return FALSE;
- EVP_DecryptFinal_ex (&demux->aes_ctx, decrypted_data + len, &flen);
+ EVP_DecryptFinal_ex (&stream->aes_ctx, decrypted_data + len, &flen);
g_return_val_if_fail (len + flen == length, FALSE);
return TRUE;
}
static void
-gst_hls_demux_decrypt_end (GstHLSDemux * demux)
+gst_hls_demux_stream_decrypt_end (GstHLSDemuxStream * stream)
{
- EVP_CIPHER_CTX_cleanup (&demux->aes_ctx);
+ EVP_CIPHER_CTX_cleanup (&stream->aes_ctx);
}
#elif defined(HAVE_NETTLE)
static gboolean
-gst_hls_demux_decrypt_start (GstHLSDemux * demux, const guint8 * key_data,
- const guint8 * iv_data)
+gst_hls_demux_stream_decrypt_start (GstHLSDemuxStream * stream,
+ const guint8 * key_data, const guint8 * iv_data)
{
- aes_set_decrypt_key (&demux->aes_ctx.ctx, 16, key_data);
- CBC_SET_IV (&demux->aes_ctx, iv_data);
+ aes_set_decrypt_key (&stream->aes_ctx.ctx, 16, key_data);
+ CBC_SET_IV (&stream->aes_ctx, iv_data);
return TRUE;
}
static gboolean
-decrypt_fragment (GstHLSDemux * demux, gsize length,
+decrypt_fragment (GstHLSDemuxStream * stream, gsize length,
const guint8 * encrypted_data, guint8 * decrypted_data)
{
if (length % 16 != 0)
return FALSE;
- CBC_DECRYPT (&demux->aes_ctx, aes_decrypt, length, decrypted_data,
+ CBC_DECRYPT (&stream->aes_ctx, aes_decrypt, length, decrypted_data,
encrypted_data);
return TRUE;
}
static void
-gst_hls_demux_decrypt_end (GstHLSDemux * demux)
+gst_hls_demux_stream_decrypt_end (GstHLSDemuxStream * stream)
{
/* NOP */
}
#else
static gboolean
-gst_hls_demux_decrypt_start (GstHLSDemux * demux, const guint8 * key_data,
- const guint8 * iv_data)
+gst_hls_demux_stream_decrypt_start (GstHLSDemuxStream * stream,
+ const guint8 * key_data, const guint8 * iv_data)
{
gcry_error_t err = 0;
gboolean ret = FALSE;
err =
- gcry_cipher_open (&demux->aes_ctx, GCRY_CIPHER_AES128,
+ gcry_cipher_open (&stream->aes_ctx, GCRY_CIPHER_AES128,
GCRY_CIPHER_MODE_CBC, 0);
if (err)
goto out;
- err = gcry_cipher_setkey (demux->aes_ctx, key_data, 16);
+ err = gcry_cipher_setkey (stream->aes_ctx, key_data, 16);
if (err)
goto out;
- err = gcry_cipher_setiv (demux->aes_ctx, iv_data, 16);
+ err = gcry_cipher_setiv (stream->aes_ctx, iv_data, 16);
if (!err)
ret = TRUE;
out:
if (!ret)
- if (demux->aes_ctx)
- gcry_cipher_close (demux->aes_ctx);
+ if (stream->aes_ctx)
+ gcry_cipher_close (stream->aes_ctx);
return ret;
}
static gboolean
-decrypt_fragment (GstHLSDemux * demux, gsize length,
+decrypt_fragment (GstHLSDemuxStream * stream, gsize length,
const guint8 * encrypted_data, guint8 * decrypted_data)
{
gcry_error_t err = 0;
- err = gcry_cipher_decrypt (demux->aes_ctx, decrypted_data, length,
+ err = gcry_cipher_decrypt (stream->aes_ctx, decrypted_data, length,
encrypted_data, length);
return err == 0;
}
static void
-gst_hls_demux_decrypt_end (GstHLSDemux * demux)
+gst_hls_demux_stream_decrypt_end (GstHLSDemuxStream * stream)
{
- if (demux->aes_ctx) {
- gcry_cipher_close (demux->aes_ctx);
- demux->aes_ctx = NULL;
+ if (stream->aes_ctx) {
+ gcry_cipher_close (stream->aes_ctx);
+ stream->aes_ctx = NULL;
}
}
#endif
static GstBuffer *
-gst_hls_demux_decrypt_fragment (GstHLSDemux * demux,
+gst_hls_demux_decrypt_fragment (GstHLSDemux * demux, GstHLSDemuxStream * stream,
GstBuffer * encrypted_buffer, GError ** err)
{
GstBuffer *decrypted_buffer = NULL;
@@ -1236,7 +1718,7 @@
gst_buffer_map (encrypted_buffer, &encrypted_info, GST_MAP_READ);
gst_buffer_map (decrypted_buffer, &decrypted_info, GST_MAP_WRITE);
- if (!decrypt_fragment (demux, encrypted_info.size,
+ if (!decrypt_fragment (stream, encrypted_info.size,
encrypted_info.data, decrypted_info.data))
goto decrypt_error;
@@ -1266,9 +1748,16 @@
gst_hls_demux_get_manifest_update_interval (GstAdaptiveDemux * demux)
{
GstHLSDemux *hlsdemux = GST_HLS_DEMUX_CAST (demux);
+ GstClockTime target_duration;
- return gst_util_uint64_scale (gst_m3u8_client_get_target_duration
- (hlsdemux->client), G_USEC_PER_SEC, GST_SECOND);
+ if (hlsdemux->current_variant) {
+ target_duration =
+ gst_m3u8_get_target_duration (hlsdemux->current_variant->m3u8);
+ } else {
+ target_duration = 5 * GST_SECOND;
+ }
+
+ return gst_util_uint64_scale (target_duration, G_USEC_PER_SEC, GST_SECOND);
}
static gboolean
@@ -1276,6 +1765,12 @@
gint64 * stop)
{
GstHLSDemux *hlsdemux = GST_HLS_DEMUX_CAST (demux);
+ gboolean ret = FALSE;
- return gst_m3u8_client_get_seek_range (hlsdemux->client, start, stop);
+ if (hlsdemux->current_variant) {
+ ret =
+ gst_m3u8_get_seek_range (hlsdemux->current_variant->m3u8, start, stop);
+ }
+
+ return ret;
}
diff --git a/ext/hls/gsthlsdemux.h b/ext/hls/gsthlsdemux.h
index f0c530e..3b6a4c0 100644
--- a/ext/hls/gsthlsdemux.h
+++ b/ext/hls/gsthlsdemux.h
@@ -1,6 +1,7 @@
/* GStreamer
* Copyright (C) 2010 Marc-Andre Lureau <marcandre.lureau@gmail.com>
* Copyright (C) 2010 Andoni Morales Alastruey <ylatuya@gmail.com>
+ * Copyright (C) 2015 Tim-Philipp Müller <tim@centricular.com>
*
* gsthlsdemux.h:
*
@@ -38,6 +39,7 @@
#endif
G_BEGIN_DECLS
+
#define GST_TYPE_HLS_DEMUX \
(gst_hls_demux_get_type())
#define GST_HLS_DEMUX(obj) \
@@ -52,8 +54,74 @@
(G_TYPE_INSTANCE_GET_CLASS ((obj),GST_TYPE_HLS_DEMUX,GstHLSDemuxClass))
#define GST_HLS_DEMUX_CAST(obj) \
((GstHLSDemux *)obj)
+
typedef struct _GstHLSDemux GstHLSDemux;
typedef struct _GstHLSDemuxClass GstHLSDemuxClass;
+typedef struct _GstHLSDemuxStream GstHLSDemuxStream;
+typedef struct _GstHLSTSReader GstHLSTSReader;
+
+#define GST_HLS_DEMUX_STREAM_CAST(stream) ((GstHLSDemuxStream *)(stream))
+
+typedef enum {
+ GST_HLS_TSREADER_NONE,
+ GST_HLS_TSREADER_MPEGTS,
+ GST_HLS_TSREADER_ID3
+} GstHLSTSReaderType;
+
+struct _GstHLSTSReader
+{
+ GstHLSTSReaderType rtype;
+ gboolean have_id3;
+
+ gint packet_size;
+ gint pmt_pid;
+ gint pcr_pid;
+
+ GstClockTime last_pcr;
+ GstClockTime first_pcr;
+};
+
+struct _GstHLSDemuxStream
+{
+ GstAdaptiveDemux adaptive_demux_stream;
+
+ GstHLSTSReaderType stream_type;
+
+ GstM3U8 *playlist;
+ gboolean is_primary_playlist;
+
+ gboolean do_typefind; /* Whether we need to typefind the next buffer */
+ GstBuffer *pending_typefind_buffer; /* for collecting data until typefind succeeds */
+
+ GstAdapter *pending_encrypted_data; /* for chunking data into 16 byte multiples for decryption */
+ GstBuffer *pending_decrypted_buffer; /* last decrypted buffer for pkcs7 unpadding.
+ We only know that it is the last at EOS */
+ guint64 current_offset; /* offset we're currently at */
+ gboolean reset_pts;
+
+ /* decryption tooling */
+#if defined(HAVE_OPENSSL)
+ EVP_CIPHER_CTX aes_ctx;
+#elif defined(HAVE_NETTLE)
+ struct CBC_CTX (struct aes_ctx, AES_BLOCK_SIZE) aes_ctx;
+#else
+ gcry_cipher_hd_t aes_ctx;
+#endif
+
+ gchar *current_key;
+ guint8 *current_iv;
+
+ /* Accumulator for reading PAT/PMT/PCR from
+ * the stream so we can set timestamps/segments
+ * and switch cleanly */
+ GstBuffer *pending_pcr_buffer;
+
+ GstHLSTSReader tsreader;
+};
+
+typedef struct {
+ guint8 data[16];
+} GstHLSKey;
/**
* GstHLSDemux:
@@ -66,30 +134,15 @@
gint srcpad_counter;
- gchar *uri; /* Original playlist URI */
- GstM3U8Client *client; /* M3U8 client */
- gboolean do_typefind; /* Whether we need to typefind the next buffer */
+ /* Decryption key cache: url => GstHLSKey */
+ GHashTable *keys;
+ GMutex keys_lock;
- /* Cache for the last key */
- gchar *key_url;
- GstFragment *key_fragment;
+ /* FIXME: check locking, protected automatically by manifest_lock already? */
+ /* The master playlist with the available variant streams */
+ GstHLSMasterPlaylist *master;
- /* decryption tooling */
-#if defined(HAVE_OPENSSL)
- EVP_CIPHER_CTX aes_ctx;
-#elif defined(HAVE_NETTLE)
- struct CBC_CTX (struct aes_ctx, AES_BLOCK_SIZE) aes_ctx;
-#else
- gcry_cipher_hd_t aes_ctx;
-#endif
- gchar *current_key;
- guint8 *current_iv;
- GstAdapter *pending_encrypted_data; /* for chunking data into 16 byte multiples for decryption */
- GstBuffer *pending_decrypted_buffer; /* last decrypted buffer for pkcs7 unpadding.
- We only know that it is the last at EOS */
- GstBuffer *pending_typefind_buffer; /* for collecting data until typefind succeeds */
- guint64 current_offset; /* offset we're currently at */
- gboolean reset_pts;
+ GstHLSVariantStream *current_variant;
};
struct _GstHLSDemuxClass
@@ -97,6 +150,13 @@
GstAdaptiveDemuxClass parent_class;
};
+
+void gst_hlsdemux_tsreader_init (GstHLSTSReader *r);
+void gst_hlsdemux_tsreader_set_type (GstHLSTSReader *r, GstHLSTSReaderType rtype);
+
+gboolean gst_hlsdemux_tsreader_find_pcrs (GstHLSTSReader *r, GstBuffer *buffer,
+ GstClockTime *first_pcr, GstClockTime *last_pcr);
+
GType gst_hls_demux_get_type (void);
G_END_DECLS
diff --git a/ext/hls/m3u8.c b/ext/hls/m3u8.c
index df267f7..bdb4acf 100644
--- a/ext/hls/m3u8.c
+++ b/ext/hls/m3u8.c
@@ -1,5 +1,6 @@
/* GStreamer
* Copyright (C) 2010 Marc-Andre Lureau <marcandre.lureau@gmail.com>
+ * Copyright (C) 2015 Tim-Philipp Müller <tim@centricular.com>
*
* m3u8.c:
*
@@ -30,60 +31,85 @@
#define GST_CAT_DEFAULT hls_debug
-static GstM3U8 *gst_m3u8_new (void);
-static void gst_m3u8_free (GstM3U8 * m3u8);
-static gboolean gst_m3u8_update (GstM3U8Client * client, GstM3U8 * m3u8,
- gchar * data, gboolean * updated);
static GstM3U8MediaFile *gst_m3u8_media_file_new (gchar * uri,
gchar * title, GstClockTime duration, guint sequence);
-static void gst_m3u8_media_file_free (GstM3U8MediaFile * self);
gchar *uri_join (const gchar * uri, const gchar * path);
-static GstM3U8 *
+GstM3U8 *
gst_m3u8_new (void)
{
GstM3U8 *m3u8;
m3u8 = g_new0 (GstM3U8, 1);
+ m3u8->current_file = NULL;
+ m3u8->current_file_duration = GST_CLOCK_TIME_NONE;
+ m3u8->sequence = -1;
+ m3u8->sequence_position = 0;
+ m3u8->highest_sequence_number = -1;
+ m3u8->duration = GST_CLOCK_TIME_NONE;
+
+ g_mutex_init (&m3u8->lock);
+ m3u8->ref_count = 1;
+
return m3u8;
}
+/* call with M3U8_LOCK held */
static void
-gst_m3u8_set_uri (GstM3U8 * self, gchar * uri, gchar * base_uri, gchar * name)
+gst_m3u8_take_uri (GstM3U8 * self, gchar * uri, gchar * base_uri, gchar * name)
{
g_return_if_fail (self != NULL);
- g_free (self->uri);
- self->uri = uri;
-
- g_free (self->base_uri);
- self->base_uri = base_uri;
-
- g_free (self->name);
- self->name = name;
+ if (self->uri != uri) {
+ g_free (self->uri);
+ self->uri = uri;
+ }
+ if (self->base_uri != base_uri) {
+ g_free (self->base_uri);
+ self->base_uri = base_uri;
+ }
+ if (self->name != name) {
+ g_free (self->name);
+ self->name = name;
+ }
}
-static void
-gst_m3u8_free (GstM3U8 * self)
+void
+gst_m3u8_set_uri (GstM3U8 * m3u8, const gchar * uri, const gchar * base_uri,
+ const gchar * name)
{
- g_return_if_fail (self != NULL);
+ GST_M3U8_LOCK (m3u8);
+ gst_m3u8_take_uri (m3u8, g_strdup (uri), g_strdup (base_uri),
+ g_strdup (name));
+ GST_M3U8_UNLOCK (m3u8);
+}
- g_free (self->uri);
- g_free (self->base_uri);
- g_free (self->name);
- g_free (self->codecs);
+GstM3U8 *
+gst_m3u8_ref (GstM3U8 * m3u8)
+{
+ g_assert (m3u8 != NULL && m3u8->ref_count > 0);
- g_list_foreach (self->files, (GFunc) gst_m3u8_media_file_free, NULL);
- g_list_free (self->files);
+ g_atomic_int_add (&m3u8->ref_count, 1);
+ return m3u8;
+}
- g_free (self->last_data);
- g_list_foreach (self->lists, (GFunc) gst_m3u8_free, NULL);
- g_list_free (self->lists);
- g_list_foreach (self->iframe_lists, (GFunc) gst_m3u8_free, NULL);
- g_list_free (self->iframe_lists);
+void
+gst_m3u8_unref (GstM3U8 * self)
+{
+ g_return_if_fail (self != NULL && self->ref_count > 0);
- g_free (self);
+ if (g_atomic_int_dec_and_test (&self->ref_count)) {
+ g_free (self->uri);
+ g_free (self->base_uri);
+ g_free (self->name);
+
+ g_list_foreach (self->files, (GFunc) gst_m3u8_media_file_unref, NULL);
+ g_list_free (self->files);
+
+ g_free (self->last_data);
+ g_free (self);
+ }
}
static GstM3U8MediaFile *
@@ -97,19 +123,31 @@
file->title = title;
file->duration = duration;
file->sequence = sequence;
+ file->ref_count = 1;
return file;
}
-static void
-gst_m3u8_media_file_free (GstM3U8MediaFile * self)
+GstM3U8MediaFile *
+gst_m3u8_media_file_ref (GstM3U8MediaFile * mfile)
{
- g_return_if_fail (self != NULL);
+ g_assert (mfile != NULL && mfile->ref_count > 0);
- g_free (self->title);
- g_free (self->uri);
- g_free (self->key);
- g_free (self);
+ g_atomic_int_add (&mfile->ref_count, 1);
+ return mfile;
+}
+
+void
+gst_m3u8_media_file_unref (GstM3U8MediaFile * self)
+{
+ g_return_if_fail (self != NULL && self->ref_count > 0);
+
+ if (g_atomic_int_dec_and_test (&self->ref_count)) {
+ g_free (self->title);
+ g_free (self->uri);
+ g_free (self->key);
+ g_free (self);
+ }
}
static gboolean
@@ -257,32 +295,27 @@
}
static gint
-_m3u8_compare_uri (GstM3U8 * a, gchar * uri)
+gst_hls_variant_stream_compare_by_bitrate (gconstpointer a, gconstpointer b)
{
- g_return_val_if_fail (a != NULL, 0);
- g_return_val_if_fail (uri != NULL, 0);
+ const GstHLSVariantStream *vs_a = (const GstHLSVariantStream *) a;
+ const GstHLSVariantStream *vs_b = (const GstHLSVariantStream *) b;
- return g_strcmp0 (a->uri, uri);
-}
+ if (vs_a->bandwidth == vs_b->bandwidth)
+ return g_strcmp0 (vs_a->name, vs_b->name);
-static gint
-gst_m3u8_compare_playlist_by_bitrate (gconstpointer a, gconstpointer b)
-{
- return ((GstM3U8 *) (a))->bandwidth - ((GstM3U8 *) (b))->bandwidth;
+ return vs_a->bandwidth - vs_b->bandwidth;
}
/*
* @data: a m3u8 playlist text data, taking ownership
*/
-static gboolean
-gst_m3u8_update (GstM3U8Client * client, GstM3U8 * self, gchar * data,
- gboolean * updated)
+gboolean
+gst_m3u8_update (GstM3U8 * self, gchar * data)
{
gint val;
GstClockTime duration;
gchar *title, *end;
gboolean discontinuity = FALSE;
- GstM3U8 *list;
gchar *current_key = NULL;
gboolean have_iv = FALSE;
guint8 iv[16] = { 0, };
@@ -291,22 +324,27 @@
g_return_val_if_fail (self != NULL, FALSE);
g_return_val_if_fail (data != NULL, FALSE);
- g_return_val_if_fail (updated != NULL, FALSE);
- *updated = TRUE;
+ GST_M3U8_LOCK (self);
/* check if the data changed since last update */
if (self->last_data && g_str_equal (self->last_data, data)) {
GST_DEBUG ("Playlist is the same as previous one");
- *updated = FALSE;
g_free (data);
+ GST_M3U8_UNLOCK (self);
return TRUE;
}
if (!g_str_has_prefix (data, "#EXTM3U")) {
GST_WARNING ("Data doesn't start with #EXTM3U");
- *updated = FALSE;
g_free (data);
+ GST_M3U8_UNLOCK (self);
+ return FALSE;
+ }
+
+ if (g_strrstr (data, "\n#EXT-X-STREAM-INF:") != NULL) {
+ GST_WARNING ("Not a media playlist, but a master playlist!");
+ GST_M3U8_UNLOCK (self);
return FALSE;
}
@@ -315,19 +353,18 @@
g_free (self->last_data);
self->last_data = data;
- client->current_file = NULL;
+ self->current_file = NULL;
if (self->files) {
- g_list_foreach (self->files, (GFunc) gst_m3u8_media_file_free, NULL);
+ g_list_foreach (self->files, (GFunc) gst_m3u8_media_file_unref, NULL);
g_list_free (self->files);
self->files = NULL;
}
- client->duration = GST_CLOCK_TIME_NONE;
+ self->duration = GST_CLOCK_TIME_NONE;
mediasequence = 0;
/* By default, allow caching */
self->allowcache = TRUE;
- list = NULL;
duration = 0;
title = NULL;
data += 7;
@@ -343,28 +380,13 @@
*r = '\0';
if (data[0] != '#' && data[0] != '\0') {
- gchar *name = data;
- if (duration <= 0 && list == NULL) {
- GST_LOG ("%s: got line without EXTINF or EXTSTREAMINF, dropping", data);
+ if (duration <= 0) {
+ GST_LOG ("%s: got line without EXTINF, dropping", data);
goto next_line;
}
data = uri_join (self->base_uri ? self->base_uri : self->uri, data);
- if (data == NULL)
- goto next_line;
-
- if (list != NULL) {
- if (g_list_find_custom (self->lists, data,
- (GCompareFunc) _m3u8_compare_uri)) {
- GST_DEBUG ("Already have a list with this URI");
- gst_m3u8_free (list);
- g_free (data);
- } else {
- gst_m3u8_set_uri (list, data, NULL, g_strdup (name));
- self->lists = g_list_append (self->lists, list);
- }
- list = NULL;
- } else {
+ if (data != NULL) {
GstM3U8MediaFile *file;
file = gst_m3u8_media_file_new (data, title, duration, mediasequence++);
@@ -435,62 +457,6 @@
} else if (g_str_has_prefix (data_ext_x, "VERSION:")) {
if (int_from_string (data + 15, &data, &val))
self->version = val;
- } else if (g_str_has_prefix (data_ext_x, "STREAM-INF:") ||
- g_str_has_prefix (data_ext_x, "I-FRAME-STREAM-INF:")) {
- gchar *v, *a;
- gboolean iframe = g_str_has_prefix (data_ext_x, "I-FRAME-STREAM-INF:");
- GstM3U8 *new_list;
-
- new_list = gst_m3u8_new ();
- new_list->iframe = iframe;
- data = data + (iframe ? 26 : 18);
- while (data && parse_attributes (&data, &a, &v)) {
- if (g_str_equal (a, "BANDWIDTH")) {
- if (!int_from_string (v, NULL, &new_list->bandwidth))
- GST_WARNING ("Error while reading BANDWIDTH");
- } else if (g_str_equal (a, "PROGRAM-ID")) {
- if (!int_from_string (v, NULL, &new_list->program_id))
- GST_WARNING ("Error while reading PROGRAM-ID");
- } else if (g_str_equal (a, "CODECS")) {
- g_free (new_list->codecs);
- new_list->codecs = g_strdup (v);
- } else if (g_str_equal (a, "RESOLUTION")) {
- if (!int_from_string (v, &v, &new_list->width))
- GST_WARNING ("Error while reading RESOLUTION width");
- if (!v || *v != 'x') {
- GST_WARNING ("Missing height");
- } else {
- v = g_utf8_next_char (v);
- if (!int_from_string (v, NULL, &new_list->height))
- GST_WARNING ("Error while reading RESOLUTION height");
- }
- } else if (iframe && g_str_equal (a, "URI")) {
- gchar *name;
- gchar *uri;
-
- uri = uri_join (self->base_uri ? self->base_uri : self->uri, v);
- if (uri) {
- name = g_strdup (uri);
- gst_m3u8_set_uri (new_list, uri, NULL, name);
- }
- }
- }
-
- if (iframe) {
- if (g_list_find_custom (self->iframe_lists, new_list->uri,
- (GCompareFunc) _m3u8_compare_uri)) {
- GST_DEBUG ("Already have a list with this URI");
- gst_m3u8_free (new_list);
- } else {
- self->iframe_lists = g_list_append (self->iframe_lists, new_list);
- }
- } else {
- if (list != NULL) {
- GST_WARNING ("Found a list without a uri..., dropping");
- gst_m3u8_free (list);
- }
- list = new_list;
- }
} else if (g_str_has_prefix (data_ext_x, "TARGETDURATION:")) {
if (int_from_string (data + 22, &data, &val))
self->targetduration = val * GST_SECOND;
@@ -579,38 +545,16 @@
g_free (current_key);
current_key = NULL;
+ if (self->files == NULL) {
+ GST_ERROR ("Invalid media playlist, it does not contain any media files");
+ GST_M3U8_UNLOCK (self);
+ return FALSE;
+ }
+
self->files = g_list_reverse (self->files);
- /* reorder playlists by bitrate */
- if (self->lists) {
- gchar *top_variant_uri = NULL;
- gboolean iframe = FALSE;
-
- if (!self->current_variant) {
- top_variant_uri = GST_M3U8 (self->lists->data)->uri;
- } else {
- top_variant_uri = GST_M3U8 (self->current_variant->data)->uri;
- iframe = GST_M3U8 (self->current_variant->data)->iframe;
- }
-
- self->lists =
- g_list_sort (self->lists,
- (GCompareFunc) gst_m3u8_compare_playlist_by_bitrate);
-
- self->iframe_lists =
- g_list_sort (self->iframe_lists,
- (GCompareFunc) gst_m3u8_compare_playlist_by_bitrate);
-
- if (iframe)
- self->current_variant =
- g_list_find_custom (self->iframe_lists, top_variant_uri,
- (GCompareFunc) _m3u8_compare_uri);
- else
- self->current_variant = g_list_find_custom (self->lists, top_variant_uri,
- (GCompareFunc) _m3u8_compare_uri);
- }
/* calculate the start and end times of this media playlist. */
- if (self->files) {
+ {
GList *walk;
GstM3U8MediaFile *file;
GstClockTime duration = 0;
@@ -618,231 +562,75 @@
for (walk = self->files; walk; walk = walk->next) {
file = walk->data;
duration += file->duration;
- if (file->sequence > client->highest_sequence_number) {
- if (client->highest_sequence_number >= 0) {
+ if (file->sequence > self->highest_sequence_number) {
+ if (self->highest_sequence_number >= 0) {
/* if an update of the media playlist has been missed, there
will be a gap between self->highest_sequence_number and the
first sequence number in this media playlist. In this situation
assume that the missing fragments had a duration of
targetduration each */
- client->last_file_end +=
- (file->sequence - client->highest_sequence_number -
+ self->last_file_end +=
+ (file->sequence - self->highest_sequence_number -
1) * self->targetduration;
}
- client->last_file_end += file->duration;
- client->highest_sequence_number = file->sequence;
+ self->last_file_end += file->duration;
+ self->highest_sequence_number = file->sequence;
}
}
- if (GST_M3U8_CLIENT_IS_LIVE (client)) {
- client->first_file_start = client->last_file_end - duration;
+ if (GST_M3U8_IS_LIVE (self)) {
+ self->first_file_start = self->last_file_end - duration;
GST_DEBUG ("Live playlist range %" GST_TIME_FORMAT " -> %"
- GST_TIME_FORMAT, GST_TIME_ARGS (client->first_file_start),
- GST_TIME_ARGS (client->last_file_end));
+ GST_TIME_FORMAT, GST_TIME_ARGS (self->first_file_start),
+ GST_TIME_ARGS (self->last_file_end));
}
- client->duration = duration;
+ self->duration = duration;
}
+ /* first-time setup */
+ if (self->files && self->sequence == -1) {
+ GList *file;
+
+ if (GST_M3U8_IS_LIVE (self)) {
+ gint i;
+
+ file = g_list_last (self->files);
+
+ /* for live streams, start GST_M3U8_LIVE_MIN_FRAGMENT_DISTANCE from
+ * the end of the playlist. See section 6.3.3 of HLS draft. Note
+ * the -1, because GST_M3U8_LIVE_MIN_FRAGMENT_DISTANCE = 1 means
+ * start 1 target-duration from the end */
+ for (i = 0; i < GST_M3U8_LIVE_MIN_FRAGMENT_DISTANCE - 1 && file->prev;
+ ++i)
+ file = file->prev;
+ } else {
+ file = g_list_first (self->files);
+ }
+ self->current_file = file;
+ self->sequence = GST_M3U8_MEDIA_FILE (file->data)->sequence;
+ self->sequence_position = 0;
+ GST_DEBUG ("first sequence: %u", (guint) self->sequence);
+ }
+
+ GST_LOG ("processed media playlist %s, %u fragments", self->name,
+ g_list_length (self->files));
+
+ GST_M3U8_UNLOCK (self);
+
return TRUE;
}
-GstM3U8Client *
-gst_m3u8_client_new (const gchar * uri, const gchar * base_uri)
-{
- GstM3U8Client *client;
-
- g_return_val_if_fail (uri != NULL, NULL);
-
- client = g_new0 (GstM3U8Client, 1);
- client->main = gst_m3u8_new ();
- client->current = NULL;
- client->current_file = NULL;
- client->current_file_duration = GST_CLOCK_TIME_NONE;
- client->sequence = -1;
- client->sequence_position = 0;
- client->highest_sequence_number = -1;
- client->duration = GST_CLOCK_TIME_NONE;
- g_mutex_init (&client->lock);
- gst_m3u8_set_uri (client->main, g_strdup (uri), g_strdup (base_uri), NULL);
-
- return client;
-}
-
-void
-gst_m3u8_client_free (GstM3U8Client * self)
-{
- g_return_if_fail (self != NULL);
-
- gst_m3u8_free (self->main);
- g_mutex_clear (&self->lock);
- g_free (self);
-}
-
-void
-gst_m3u8_client_set_current (GstM3U8Client * self, GstM3U8 * m3u8)
-{
- g_return_if_fail (self != NULL);
-
- GST_M3U8_CLIENT_LOCK (self);
- if (m3u8 != self->current) {
- self->current = m3u8;
- self->duration = GST_CLOCK_TIME_NONE;
- self->current_file = NULL;
- }
- GST_M3U8_CLIENT_UNLOCK (self);
-}
-
-gboolean
-gst_m3u8_client_update (GstM3U8Client * self, gchar * data)
-{
- GstM3U8 *m3u8;
- gboolean updated = FALSE;
- gboolean ret = FALSE;
-
- g_return_val_if_fail (self != NULL, FALSE);
-
- GST_M3U8_CLIENT_LOCK (self);
- m3u8 = self->current ? self->current : self->main;
-
- if (!gst_m3u8_update (self, m3u8, data, &updated))
- goto out;
-
- if (!updated)
- goto out;
-
- if (self->current && !self->current->files) {
- GST_ERROR ("Invalid media playlist, it does not contain any media files");
- goto out;
- }
-
- /* select the first playlist, for now */
- if (!self->current) {
- if (self->main->lists) {
- self->current = self->main->current_variant->data;
- } else {
- self->current = self->main;
- }
- }
-
- if (m3u8->files && self->sequence == -1) {
- if (GST_M3U8_CLIENT_IS_LIVE (self)) {
- /* for live streams, start GST_M3U8_LIVE_MIN_FRAGMENT_DISTANCE from
- the end of the playlist. See section 6.3.3 of HLS draft */
- gint pos =
- g_list_length (m3u8->files) - GST_M3U8_LIVE_MIN_FRAGMENT_DISTANCE;
- self->current_file = g_list_nth (m3u8->files, pos >= 0 ? pos : 0);
- } else {
- self->current_file = g_list_first (m3u8->files);
- }
- self->sequence = GST_M3U8_MEDIA_FILE (self->current_file->data)->sequence;
- self->sequence_position = 0;
- GST_DEBUG ("Setting first sequence at %u", (guint) self->sequence);
- }
-
- ret = TRUE;
-out:
- GST_M3U8_CLIENT_UNLOCK (self);
- return ret;
-}
-
-static gint
-_find_m3u8_list_match (const GstM3U8 * a, const GstM3U8 * b)
-{
- if (g_strcmp0 (a->name, b->name) == 0 &&
- a->bandwidth == b->bandwidth &&
- a->program_id == b->program_id &&
- g_strcmp0 (a->codecs, b->codecs) == 0 &&
- a->width == b->width &&
- a->height == b->height && a->iframe == b->iframe) {
- return 0;
- }
-
- return 1;
-}
-
-gboolean
-gst_m3u8_client_update_variant_playlist (GstM3U8Client * self, gchar * data,
- const gchar * uri, const gchar * base_uri)
-{
- gboolean ret = FALSE;
- GList *list_entry, *unmatched_lists;
- GstM3U8Client *new_client;
- GstM3U8 *old;
-
- g_return_val_if_fail (self != NULL, FALSE);
-
- new_client = gst_m3u8_client_new (uri, base_uri);
- if (gst_m3u8_client_update (new_client, data)) {
- if (!new_client->main->lists) {
- GST_ERROR
- ("Cannot update variant playlist: New playlist is not a variant playlist");
- gst_m3u8_client_free (new_client);
- return FALSE;
- }
-
- GST_M3U8_CLIENT_LOCK (self);
-
- if (!self->main->lists) {
- GST_ERROR
- ("Cannot update variant playlist: Current playlist is not a variant playlist");
- goto out;
- }
-
- /* Now see if the variant playlist still has the same lists */
- unmatched_lists = g_list_copy (self->main->lists);
- for (list_entry = new_client->main->lists; list_entry;
- list_entry = list_entry->next) {
- GList *match = g_list_find_custom (unmatched_lists, list_entry->data,
- (GCompareFunc) _find_m3u8_list_match);
- if (match)
- unmatched_lists = g_list_delete_link (unmatched_lists, match);
- }
-
- if (unmatched_lists != NULL) {
- GST_WARNING ("Unable to match all playlists");
-
- for (list_entry = unmatched_lists; list_entry;
- list_entry = list_entry->next) {
- if (list_entry->data == self->current) {
- GST_WARNING ("Unable to match current playlist");
- }
- }
-
- g_list_free (unmatched_lists);
- }
-
- /* Switch out the variant playlist, steal it from new_client */
- old = self->main;
-
- self->main = new_client->main;
- new_client->main = gst_m3u8_new ();
-
- if (self->main->lists)
- self->current = self->main->current_variant->data;
- else
- self->current = self->main;
-
- gst_m3u8_free (old);
-
- ret = TRUE;
-
- out:
- GST_M3U8_CLIENT_UNLOCK (self);
- }
-
- gst_m3u8_client_free (new_client);
- return ret;
-}
-
+/* call with M3U8_LOCK held */
static GList *
-find_next_fragment (GstM3U8Client * client, GList * l, gboolean forward)
+m3u8_find_next_fragment (GstM3U8 * m3u8, gboolean forward)
{
GstM3U8MediaFile *file;
+ GList *l = m3u8->files;
if (forward) {
while (l) {
file = l->data;
- if (file->sequence >= client->sequence)
+ if (file->sequence >= m3u8->sequence)
break;
l = l->next;
@@ -853,7 +641,7 @@
while (l) {
file = l->data;
- if (file->sequence <= client->sequence)
+ if (file->sequence <= m3u8->sequence)
break;
l = l->prev;
@@ -863,102 +651,78 @@
return l;
}
-static gboolean
-has_next_fragment (GstM3U8Client * client, GList * l, gboolean forward)
+GstM3U8MediaFile *
+gst_m3u8_get_next_fragment (GstM3U8 * m3u8, gboolean forward,
+ GstClockTime * sequence_position, gboolean * discont)
{
- l = find_next_fragment (client, l, forward);
+ GstM3U8MediaFile *file = NULL;
- if (l) {
- return (forward && l->next) || (!forward && l->prev);
- }
+ g_return_val_if_fail (m3u8 != NULL, NULL);
- return FALSE;
+ GST_M3U8_LOCK (m3u8);
+
+ GST_DEBUG ("Looking for fragment %" G_GINT64_FORMAT, m3u8->sequence);
+
+ if (m3u8->sequence < 0) /* can't happen really */
+ goto out;
+
+ if (m3u8->current_file == NULL)
+ m3u8->current_file = m3u8_find_next_fragment (m3u8, forward);
+
+ if (m3u8->current_file == NULL)
+ goto out;
+
+ file = gst_m3u8_media_file_ref (m3u8->current_file->data);
+
+ GST_DEBUG ("Got fragment with sequence %u (current sequence %u)",
+ (guint) file->sequence, (guint) m3u8->sequence);
+
+ if (sequence_position)
+ *sequence_position = m3u8->sequence_position;
+ if (discont)
+ *discont = file->discont || (m3u8->sequence != file->sequence);
+
+ m3u8->current_file_duration = file->duration;
+ m3u8->sequence = file->sequence;
+
+out:
+
+ GST_M3U8_UNLOCK (m3u8);
+
+ return file;
}
gboolean
-gst_m3u8_client_get_next_fragment (GstM3U8Client * client,
- gboolean * discontinuity, gchar ** uri, GstClockTime * duration,
- GstClockTime * timestamp, gint64 * range_start, gint64 * range_end,
- gchar ** key, guint8 ** iv, gboolean forward)
+gst_m3u8_has_next_fragment (GstM3U8 * m3u8, gboolean forward)
{
- GstM3U8MediaFile *file;
+ gboolean have_next;
+ GList *cur;
- g_return_val_if_fail (client != NULL, FALSE);
- g_return_val_if_fail (client->current != NULL, FALSE);
+ g_return_val_if_fail (m3u8 != NULL, FALSE);
- GST_M3U8_CLIENT_LOCK (client);
- GST_DEBUG ("Looking for fragment %" G_GINT64_FORMAT, client->sequence);
- if (client->sequence < 0) {
- GST_M3U8_CLIENT_UNLOCK (client);
- return FALSE;
- }
- if (!client->current_file) {
- client->current_file =
- find_next_fragment (client, client->current->files, forward);
- }
+ GST_M3U8_LOCK (m3u8);
- if (!client->current_file) {
- GST_M3U8_CLIENT_UNLOCK (client);
- return FALSE;
- }
+ GST_DEBUG ("Checking next fragment %" G_GINT64_FORMAT,
+ m3u8->sequence + (forward ? 1 : -1));
- file = GST_M3U8_MEDIA_FILE (client->current_file->data);
- GST_DEBUG ("Got fragment with sequence %u (client sequence %u)",
- (guint) file->sequence, (guint) client->sequence);
-
- client->current_file_duration = file->duration;
- if (timestamp)
- *timestamp = client->sequence_position;
-
- if (discontinuity)
- *discontinuity = client->sequence != file->sequence || file->discont;
- if (uri)
- *uri = g_strdup (file->uri);
- if (duration)
- *duration = file->duration;
- if (range_start)
- *range_start = file->offset;
- if (range_end)
- *range_end = file->size != -1 ? file->offset + file->size - 1 : -1;
- if (key)
- *key = g_strdup (file->key);
- if (iv) {
- *iv = g_new (guint8, sizeof (file->iv));
- memcpy (*iv, file->iv, sizeof (file->iv));
- }
-
- client->sequence = file->sequence;
-
- GST_M3U8_CLIENT_UNLOCK (client);
- return TRUE;
-}
-
-gboolean
-gst_m3u8_client_has_next_fragment (GstM3U8Client * client, gboolean forward)
-{
- gboolean ret;
-
- g_return_val_if_fail (client != NULL, FALSE);
- g_return_val_if_fail (client->current != NULL, FALSE);
-
- GST_M3U8_CLIENT_LOCK (client);
- GST_DEBUG ("Checking if has next fragment %" G_GINT64_FORMAT,
- client->sequence + (forward ? 1 : -1));
- if (client->current_file) {
- ret =
- (forward ? client->current_file->next : client->current_file->prev) !=
- NULL;
+ if (m3u8->current_file) {
+ cur = m3u8->current_file;
} else {
- ret = has_next_fragment (client, client->current->files, forward);
+ cur = m3u8_find_next_fragment (m3u8, forward);
}
- GST_M3U8_CLIENT_UNLOCK (client);
- return ret;
+
+ have_next = (forward && cur->next) || (!forward && cur->prev);
+
+ GST_M3U8_UNLOCK (m3u8);
+
+ return have_next;
}
+/* call with M3U8_LOCK held */
static void
-alternate_advance (GstM3U8Client * client, gboolean forward)
+m3u8_alternate_advance (GstM3U8 * m3u8, gboolean forward)
{
- gint targetnum = client->sequence;
+ gint targetnum = m3u8->sequence;
GList *tmp;
GstM3U8MediaFile *mf;
@@ -968,7 +732,7 @@
else
targetnum -= 1;
- for (tmp = client->current->files; tmp; tmp = tmp->next) {
+ for (tmp = m3u8->files; tmp; tmp = tmp->next) {
mf = (GstM3U8MediaFile *) tmp->data;
if (mf->sequence == targetnum)
break;
@@ -977,218 +741,161 @@
GST_WARNING ("Can't find next fragment");
return;
}
- client->current_file = tmp;
- client->sequence = targetnum;
- client->current_file_duration =
- GST_M3U8_MEDIA_FILE (client->current_file->data)->duration;
+ m3u8->current_file = tmp;
+ m3u8->sequence = targetnum;
+ m3u8->current_file_duration = GST_M3U8_MEDIA_FILE (tmp->data)->duration;
}
void
-gst_m3u8_client_advance_fragment (GstM3U8Client * client, gboolean forward)
+gst_m3u8_advance_fragment (GstM3U8 * m3u8, gboolean forward)
{
GstM3U8MediaFile *file;
- g_return_if_fail (client != NULL);
- g_return_if_fail (client->current != NULL);
+ g_return_if_fail (m3u8 != NULL);
- GST_M3U8_CLIENT_LOCK (client);
+ GST_M3U8_LOCK (m3u8);
+
GST_DEBUG ("Sequence position was %" GST_TIME_FORMAT,
- GST_TIME_ARGS (client->sequence_position));
- if (GST_CLOCK_TIME_IS_VALID (client->current_file_duration)) {
+ GST_TIME_ARGS (m3u8->sequence_position));
+ if (GST_CLOCK_TIME_IS_VALID (m3u8->current_file_duration)) {
/* Advance our position based on the previous fragment we played */
if (forward)
- client->sequence_position += client->current_file_duration;
- else if (client->current_file_duration < client->sequence_position)
- client->sequence_position -= client->current_file_duration;
+ m3u8->sequence_position += m3u8->current_file_duration;
+ else if (m3u8->current_file_duration < m3u8->sequence_position)
+ m3u8->sequence_position -= m3u8->current_file_duration;
else
- client->sequence_position = 0;
- client->current_file_duration = GST_CLOCK_TIME_NONE;
+ m3u8->sequence_position = 0;
+ m3u8->current_file_duration = GST_CLOCK_TIME_NONE;
GST_DEBUG ("Sequence position now %" GST_TIME_FORMAT,
- GST_TIME_ARGS (client->sequence_position));
+ GST_TIME_ARGS (m3u8->sequence_position));
}
- if (!client->current_file) {
+ if (!m3u8->current_file) {
GList *l;
- GST_DEBUG ("Looking for fragment %" G_GINT64_FORMAT, client->sequence);
- for (l = client->current->files; l != NULL; l = l->next) {
- if (GST_M3U8_MEDIA_FILE (l->data)->sequence == client->sequence) {
- client->current_file = l;
+ GST_DEBUG ("Looking for fragment %" G_GINT64_FORMAT, m3u8->sequence);
+ for (l = m3u8->files; l != NULL; l = l->next) {
+ if (GST_M3U8_MEDIA_FILE (l->data)->sequence == m3u8->sequence) {
+ m3u8->current_file = l;
break;
}
}
- if (client->current_file == NULL) {
+ if (m3u8->current_file == NULL) {
GST_DEBUG
("Could not find current fragment, trying next fragment directly");
- alternate_advance (client, forward);
+ m3u8_alternate_advance (m3u8, forward);
/* Resync sequence number if the above has failed for live streams */
- if (client->current_file == NULL && GST_M3U8_CLIENT_IS_LIVE (client)) {
+ if (m3u8->current_file == NULL && GST_M3U8_IS_LIVE (m3u8)) {
/* for live streams, start GST_M3U8_LIVE_MIN_FRAGMENT_DISTANCE from
the end of the playlist. See section 6.3.3 of HLS draft */
gint pos =
- g_list_length (client->current->files) -
- GST_M3U8_LIVE_MIN_FRAGMENT_DISTANCE;
- client->current_file =
- g_list_nth (client->current->files, pos >= 0 ? pos : 0);
- client->current_file_duration =
- GST_M3U8_MEDIA_FILE (client->current_file->data)->duration;
+ g_list_length (m3u8->files) - GST_M3U8_LIVE_MIN_FRAGMENT_DISTANCE;
+ m3u8->current_file = g_list_nth (m3u8->files, pos >= 0 ? pos : 0);
+ m3u8->current_file_duration =
+ GST_M3U8_MEDIA_FILE (m3u8->current_file->data)->duration;
GST_WARNING ("Resyncing live playlist");
}
- GST_M3U8_CLIENT_UNLOCK (client);
- return;
+ goto out;
}
}
- file = GST_M3U8_MEDIA_FILE (client->current_file->data);
+ file = GST_M3U8_MEDIA_FILE (m3u8->current_file->data);
GST_DEBUG ("Advancing from sequence %u", (guint) file->sequence);
if (forward) {
- client->current_file = client->current_file->next;
- if (client->current_file) {
- client->sequence =
- GST_M3U8_MEDIA_FILE (client->current_file->data)->sequence;
+ m3u8->current_file = m3u8->current_file->next;
+ if (m3u8->current_file) {
+ m3u8->sequence = GST_M3U8_MEDIA_FILE (m3u8->current_file->data)->sequence;
} else {
- client->sequence = file->sequence + 1;
+ m3u8->sequence = file->sequence + 1;
}
} else {
- client->current_file = client->current_file->prev;
- if (client->current_file) {
- client->sequence =
- GST_M3U8_MEDIA_FILE (client->current_file->data)->sequence;
+ m3u8->current_file = m3u8->current_file->prev;
+ if (m3u8->current_file) {
+ m3u8->sequence = GST_M3U8_MEDIA_FILE (m3u8->current_file->data)->sequence;
} else {
- client->sequence = file->sequence - 1;
+ m3u8->sequence = file->sequence - 1;
}
}
- if (client->current_file) {
+ if (m3u8->current_file) {
/* Store duration of the fragment we're using to update the position
* the next time we advance */
- client->current_file_duration =
- GST_M3U8_MEDIA_FILE (client->current_file->data)->duration;
+ m3u8->current_file_duration =
+ GST_M3U8_MEDIA_FILE (m3u8->current_file->data)->duration;
}
- GST_M3U8_CLIENT_UNLOCK (client);
-}
-static void
-_sum_duration (GstM3U8MediaFile * self, GstClockTime * duration)
-{
- *duration += self->duration;
+out:
+
+ GST_M3U8_UNLOCK (m3u8);
}
GstClockTime
-gst_m3u8_client_get_duration (GstM3U8Client * client)
+gst_m3u8_get_duration (GstM3U8 * m3u8)
{
GstClockTime duration = GST_CLOCK_TIME_NONE;
- g_return_val_if_fail (client != NULL, GST_CLOCK_TIME_NONE);
+ g_return_val_if_fail (m3u8 != NULL, GST_CLOCK_TIME_NONE);
- GST_M3U8_CLIENT_LOCK (client);
+ GST_M3U8_LOCK (m3u8);
+
/* We can only get the duration for on-demand streams */
- if (!client->current || !client->current->endlist) {
- GST_M3U8_CLIENT_UNLOCK (client);
- return GST_CLOCK_TIME_NONE;
- }
+ if (!m3u8->endlist)
+ goto out;
- if (!GST_CLOCK_TIME_IS_VALID (client->duration) && client->current->files) {
- client->duration = 0;
- g_list_foreach (client->current->files, (GFunc) _sum_duration,
- &client->duration);
+ if (!GST_CLOCK_TIME_IS_VALID (m3u8->duration) && m3u8->files != NULL) {
+ GList *f;
+
+ m3u8->duration = 0;
+ for (f = m3u8->files; f != NULL; f = f->next)
+ m3u8->duration += GST_M3U8_MEDIA_FILE (f)->duration;
}
- duration = client->duration;
- GST_M3U8_CLIENT_UNLOCK (client);
+ duration = m3u8->duration;
+
+out:
+
+ GST_M3U8_UNLOCK (m3u8);
return duration;
}
GstClockTime
-gst_m3u8_client_get_target_duration (GstM3U8Client * client)
+gst_m3u8_get_target_duration (GstM3U8 * m3u8)
{
- GstClockTime duration = 0;
+ GstClockTime target_duration;
- g_return_val_if_fail (client != NULL, GST_CLOCK_TIME_NONE);
+ g_return_val_if_fail (m3u8 != NULL, GST_CLOCK_TIME_NONE);
- GST_M3U8_CLIENT_LOCK (client);
- duration = client->current->targetduration;
- GST_M3U8_CLIENT_UNLOCK (client);
- return duration;
+ GST_M3U8_LOCK (m3u8);
+ target_duration = m3u8->targetduration;
+ GST_M3U8_UNLOCK (m3u8);
+
+ return target_duration;
}
gchar *
-gst_m3u8_client_get_uri (GstM3U8Client * client)
+gst_m3u8_get_uri (GstM3U8 * m3u8)
{
gchar *uri;
- g_return_val_if_fail (client != NULL, NULL);
+ GST_M3U8_LOCK (m3u8);
+ uri = g_strdup (m3u8->uri);
+ GST_M3U8_UNLOCK (m3u8);
- GST_M3U8_CLIENT_LOCK (client);
- uri = client->main ? g_strdup (client->main->uri) : NULL;
- GST_M3U8_CLIENT_UNLOCK (client);
- return uri;
-}
-
-gchar *
-gst_m3u8_client_get_current_uri (GstM3U8Client * client)
-{
- gchar *uri;
-
- g_return_val_if_fail (client != NULL, NULL);
-
- GST_M3U8_CLIENT_LOCK (client);
- uri = g_strdup (client->current->uri);
- GST_M3U8_CLIENT_UNLOCK (client);
return uri;
}
gboolean
-gst_m3u8_client_has_variant_playlist (GstM3U8Client * client)
+gst_m3u8_is_live (GstM3U8 * m3u8)
{
- gboolean ret;
+ gboolean is_live;
- g_return_val_if_fail (client != NULL, FALSE);
+ g_return_val_if_fail (m3u8 != NULL, FALSE);
- GST_M3U8_CLIENT_LOCK (client);
- ret = (client->main->lists != NULL);
- GST_M3U8_CLIENT_UNLOCK (client);
- return ret;
-}
+ GST_M3U8_LOCK (m3u8);
+ is_live = GST_M3U8_IS_LIVE (m3u8);
+ GST_M3U8_UNLOCK (m3u8);
-gboolean
-gst_m3u8_client_is_live (GstM3U8Client * client)
-{
- gboolean ret;
-
- g_return_val_if_fail (client != NULL, FALSE);
-
- GST_M3U8_CLIENT_LOCK (client);
- ret = GST_M3U8_CLIENT_IS_LIVE (client);
- GST_M3U8_CLIENT_UNLOCK (client);
- return ret;
-}
-
-GList *
-gst_m3u8_client_get_playlist_for_bitrate (GstM3U8Client * client, guint bitrate)
-{
- GList *list, *current_variant;
-
- GST_M3U8_CLIENT_LOCK (client);
- current_variant = client->main->current_variant;
-
- /* Go to the highest possible bandwidth allowed */
- while (GST_M3U8 (current_variant->data)->bandwidth <= bitrate) {
- list = g_list_next (current_variant);
- if (!list)
- break;
- current_variant = list;
- }
-
- while (GST_M3U8 (current_variant->data)->bandwidth > bitrate) {
- list = g_list_previous (current_variant);
- if (!list)
- break;
- current_variant = list;
- }
- GST_M3U8_CLIENT_UNLOCK (client);
-
- return current_variant;
+ return is_live;
}
gchar *
@@ -1248,8 +955,7 @@
}
gboolean
-gst_m3u8_client_get_seek_range (GstM3U8Client * client, gint64 * start,
- gint64 * stop)
+gst_m3u8_get_seek_range (GstM3U8 * m3u8, gint64 * start, gint64 * stop)
{
GstClockTime duration = 0;
GList *walk;
@@ -1257,36 +963,641 @@
guint count;
guint min_distance = 0;
- g_return_val_if_fail (client != NULL, FALSE);
+ g_return_val_if_fail (m3u8 != NULL, FALSE);
- GST_M3U8_CLIENT_LOCK (client);
+ GST_M3U8_LOCK (m3u8);
- if (client->current == NULL || client->current->files == NULL) {
- GST_M3U8_CLIENT_UNLOCK (client);
- return FALSE;
- }
+ if (m3u8->files == NULL)
+ goto out;
- if (GST_M3U8_CLIENT_IS_LIVE (client)) {
+ if (GST_M3U8_IS_LIVE (m3u8)) {
/* min_distance is used to make sure the seek range is never closer than
GST_M3U8_LIVE_MIN_FRAGMENT_DISTANCE fragments from the end of a live
playlist - see 6.3.3. "Playing the Playlist file" of the HLS draft */
min_distance = GST_M3U8_LIVE_MIN_FRAGMENT_DISTANCE;
}
- count = g_list_length (client->current->files);
+ count = g_list_length (m3u8->files);
- for (walk = client->current->files;
- walk && count >= min_distance; walk = walk->next) {
+ for (walk = m3u8->files; walk && count >= min_distance; walk = walk->next) {
file = walk->data;
--count;
duration += file->duration;
}
- if (duration <= 0) {
- GST_M3U8_CLIENT_UNLOCK (client);
- return FALSE;
- }
- *start = client->first_file_start;
+ if (duration <= 0)
+ goto out;
+
+ *start = m3u8->first_file_start;
*stop = *start + duration;
- GST_M3U8_CLIENT_UNLOCK (client);
- return TRUE;
+
+out:
+
+ GST_M3U8_UNLOCK (m3u8);
+ return (duration > 0);
+}
+
+GstHLSMedia *
+gst_hls_media_ref (GstHLSMedia * media)
+{
+ g_assert (media != NULL && media->ref_count > 0);
+ g_atomic_int_add (&media->ref_count, 1);
+ return media;
+}
+
+void
+gst_hls_media_unref (GstHLSMedia * media)
+{
+ g_assert (media != NULL && media->ref_count > 0);
+ if (g_atomic_int_dec_and_test (&media->ref_count)) {
+ g_free (media->group_id);
+ g_free (media->name);
+ g_free (media->uri);
+ g_free (media);
+ }
+}
+
+static GstHLSMediaType
+gst_m3u8_get_hls_media_type_from_string (const gchar * type_name)
+{
+ if (strcmp (type_name, "AUDIO") == 0)
+ return GST_HLS_MEDIA_TYPE_AUDIO;
+ if (strcmp (type_name, "VIDEO") == 0)
+ return GST_HLS_MEDIA_TYPE_VIDEO;
+ if (strcmp (type_name, "SUBTITLES") == 0)
+ return GST_HLS_MEDIA_TYPE_SUBTITLES;
+ if (strcmp (type_name, "CLOSED_CAPTIONS") == 0)
+ return GST_HLS_MEDIA_TYPE_CLOSED_CAPTIONS;
+
+ return GST_HLS_MEDIA_TYPE_INVALID;
+}
+
+#define GST_HLS_MEDIA_TYPE_NAME(mtype) gst_m3u8_hls_media_type_get_nick(mtype)
+static inline const gchar *
+gst_m3u8_hls_media_type_get_nick (GstHLSMediaType mtype)
+{
+ static const gchar *nicks[GST_HLS_N_MEDIA_TYPES] = { "audio", "video",
+ "subtitle", "closed-captions"
+ };
+
+ if (mtype < 0 || mtype >= GST_HLS_N_MEDIA_TYPES)
+ return "invalid";
+
+ return nicks[mtype];
+}
+
+/* returns unquoted copy of string */
+static gchar *
+gst_m3u8_unquote (const gchar * str)
+{
+ const gchar *start, *end;
+
+ start = strchr (str, '"');
+ if (start == NULL)
+ return g_strdup (str);
+ end = strchr (start + 1, '"');
+ if (end == NULL) {
+ GST_WARNING ("Broken quoted string [%s] - can't find end quote", str);
+ return g_strdup (start + 1);
+ }
+ return g_strndup (start + 1, (gsize) (end - (start + 1)));
+}
+
+static GstHLSMedia *
+gst_m3u8_parse_media (gchar * desc, const gchar * base_uri)
+{
+ GstHLSMediaType mtype = GST_HLS_MEDIA_TYPE_INVALID;
+ GstHLSMedia *media;
+ gchar *a, *v;
+
+ media = g_new0 (GstHLSMedia, 1);
+ media->ref_count = 1;
+ media->playlist = gst_m3u8_new ();
+
+ GST_LOG ("parsing %s", desc);
+ while (desc != NULL && parse_attributes (&desc, &a, &v)) {
+ if (strcmp (a, "TYPE") == 0) {
+ media->mtype = gst_m3u8_get_hls_media_type_from_string (v);
+ } else if (strcmp (a, "GROUP-ID") == 0) {
+ g_free (media->group_id);
+ media->group_id = gst_m3u8_unquote (v);
+ } else if (strcmp (a, "NAME") == 0) {
+ g_free (media->name);
+ media->name = gst_m3u8_unquote (v);
+ } else if (strcmp (a, "URI") == 0) {
+ gchar *uri;
+
+ g_free (media->uri);
+ uri = gst_m3u8_unquote (v);
+ media->uri = uri_join (base_uri, uri);
+ g_free (uri);
+ } else if (strcmp (a, "LANGUAGE") == 0) {
+ g_free (media->lang);
+ media->lang = gst_m3u8_unquote (v);
+ } else if (strcmp (a, "DEFAULT") == 0) {
+ media->is_default = g_ascii_strcasecmp (v, "yes") == 0;
+ } else if (strcmp (a, "FORCED") == 0) {
+ media->forced = g_ascii_strcasecmp (v, "yes") == 0;
+ } else if (strcmp (a, "AUTOSELECT") == 0) {
+ media->autoselect = g_ascii_strcasecmp (v, "yes") == 0;
+ } else {
+ /* unhandled: ASSOC-LANGUAGE, INSTREAM-ID, CHARACTERISTICS */
+ GST_FIXME ("EXT-X-MEDIA: unhandled attribute: %s = %s", a, v);
+ }
+ }
+
+ if (media->mtype == GST_HLS_MEDIA_TYPE_INVALID)
+ goto required_attributes_missing;
+
+ if (media->uri == NULL)
+ goto existing_stream;
+
+ if (media->group_id == NULL || media->name == NULL)
+ goto required_attributes_missing;
+
+ if (mtype == GST_HLS_MEDIA_TYPE_CLOSED_CAPTIONS)
+ goto uri_with_cc;
+
+ GST_DEBUG ("media: %s, group '%s', name '%s', uri '%s', %s %s %s, lang=%s",
+ GST_HLS_MEDIA_TYPE_NAME (media->mtype), media->group_id, media->name,
+ media->uri, media->is_default ? "default" : "-",
+ media->autoselect ? "autoselect" : "-",
+ media->forced ? "forced" : "-", media->lang ? media->lang : "??");
+
+ return media;
+
+uri_with_cc:
+ {
+ GST_WARNING ("closed captions EXT-X-MEDIA should not have URI specified");
+ goto out_error;
+ }
+required_attributes_missing:
+ {
+ GST_WARNING ("EXT-X-MEDIA description is missing required attributes");
+ goto out_error;
+ /* fall through */
+ }
+existing_stream:
+ {
+ GST_DEBUG ("EXT-X-MEDIA without URI, describes embedded stream, skipping");
+ /* fall through */
+ }
+
+out_error:
+ {
+ gst_hls_media_unref (media);
+ return NULL;
+ }
+}
+
+static GstHLSVariantStream *
+gst_hls_variant_stream_new (void)
+{
+ GstHLSVariantStream *stream;
+
+ stream = g_new0 (GstHLSVariantStream, 1);
+ stream->m3u8 = gst_m3u8_new ();
+ stream->refcount = 1;
+ return stream;
+}
+
+GstHLSVariantStream *
+gst_hls_variant_stream_ref (GstHLSVariantStream * stream)
+{
+ g_atomic_int_inc (&stream->refcount);
+ return stream;
+}
+
+void
+gst_hls_variant_stream_unref (GstHLSVariantStream * stream)
+{
+ if (g_atomic_int_dec_and_test (&stream->refcount)) {
+ gint i;
+
+ g_free (stream->name);
+ g_free (stream->uri);
+ g_free (stream->codecs);
+ gst_m3u8_unref (stream->m3u8);
+ for (i = 0; i < GST_HLS_N_MEDIA_TYPES; ++i) {
+ g_free (stream->media_groups[i]);
+ g_list_free_full (stream->media[i], (GDestroyNotify) gst_hls_media_unref);
+ }
+ g_free (stream);
+ }
+}
+
+static GstHLSVariantStream *
+find_variant_stream_by_name (GList * list, const gchar * name)
+{
+ for (; list != NULL; list = list->next) {
+ GstHLSVariantStream *variant_stream = list->data;
+
+ if (variant_stream->name != NULL && !strcmp (variant_stream->name, name))
+ return variant_stream;
+ }
+ return NULL;
+}
+
+static GstHLSVariantStream *
+find_variant_stream_by_uri (GList * list, const gchar * uri)
+{
+ for (; list != NULL; list = list->next) {
+ GstHLSVariantStream *variant_stream = list->data;
+
+ if (variant_stream->uri != NULL && !strcmp (variant_stream->uri, uri))
+ return variant_stream;
+ }
+ return NULL;
+}
+
+static GstHLSMasterPlaylist *
+gst_hls_master_playlist_new (void)
+{
+ GstHLSMasterPlaylist *playlist;
+
+ playlist = g_new0 (GstHLSMasterPlaylist, 1);
+ playlist->refcount = 1;
+ playlist->is_simple = FALSE;
+
+ return playlist;
+}
+
+void
+gst_hls_master_playlist_unref (GstHLSMasterPlaylist * playlist)
+{
+ if (g_atomic_int_dec_and_test (&playlist->refcount)) {
+ g_list_free_full (playlist->variants,
+ (GDestroyNotify) gst_hls_variant_stream_unref);
+ g_list_free_full (playlist->iframe_variants,
+ (GDestroyNotify) gst_hls_variant_stream_unref);
+ g_free (playlist->last_data);
+ g_free (playlist);
+ }
+}
+
+static gint
+hls_media_name_compare_func (gconstpointer media, gconstpointer name)
+{
+ return strcmp (((GstHLSMedia *) media)->name, (const gchar *) name);
+}
+
+/* Takes ownership of @data */
+GstHLSMasterPlaylist *
+gst_hls_master_playlist_new_from_data (gchar * data, const gchar * base_uri)
+{
+ GHashTable *media_groups[GST_HLS_N_MEDIA_TYPES] = { NULL, };
+ GstHLSMasterPlaylist *playlist;
+ GstHLSVariantStream *pending_stream;
+ gchar *end, *free_data = data;
+ gint val, i;
+ GList *l;
+
+ if (!g_str_has_prefix (data, "#EXTM3U")) {
+ GST_WARNING ("Data doesn't start with #EXTM3U");
+ g_free (free_data);
+ return NULL;
+ }
+
+ playlist = gst_hls_master_playlist_new ();
+
+ /* store data before we modify it for parsing */
+ playlist->last_data = g_strdup (data);
+
+ GST_TRACE ("data:\n%s", data);
+
+ if (strstr (data, "\n#EXTINF:") != NULL) {
+ GST_INFO ("This is a simple media playlist, not a master playlist");
+
+ pending_stream = gst_hls_variant_stream_new ();
+ pending_stream->name = g_strdup (base_uri);
+ pending_stream->uri = g_strdup (base_uri);
+ gst_m3u8_set_uri (pending_stream->m3u8, base_uri, NULL, base_uri);
+ playlist->variants = g_list_append (playlist->variants, pending_stream);
+ playlist->default_variant = gst_hls_variant_stream_ref (pending_stream);
+ playlist->is_simple = TRUE;
+
+ if (!gst_m3u8_update (pending_stream->m3u8, data)) {
+ GST_WARNING ("Failed to parse media playlist");
+ gst_hls_master_playlist_unref (playlist);
+ playlist = NULL;
+ }
+ return playlist;
+ }
+
+ pending_stream = NULL;
+ data += 7;
+ while (TRUE) {
+ gchar *r;
+
+ end = g_utf8_strchr (data, -1, '\n');
+ if (end)
+ *end = '\0';
+
+ r = g_utf8_strchr (data, -1, '\r');
+ if (r)
+ *r = '\0';
+
+ if (data[0] != '#' && data[0] != '\0') {
+ gchar *name, *uri;
+
+ if (pending_stream == NULL) {
+ GST_LOG ("%s: got line without EXT-STREAM-INF, dropping", data);
+ goto next_line;
+ }
+
+ name = data;
+ uri = uri_join (base_uri, name);
+ if (uri == NULL)
+ goto next_line;
+
+ pending_stream->name = g_strdup (name);
+ pending_stream->uri = uri;
+
+ if (find_variant_stream_by_name (playlist->variants, name)
+ || find_variant_stream_by_uri (playlist->variants, uri)) {
+ GST_DEBUG ("Already have a list with this name or URI: %s", name);
+ gst_hls_variant_stream_unref (pending_stream);
+ } else {
+ GST_INFO ("stream %s @ %u: %s", name, pending_stream->bandwidth, uri);
+ gst_m3u8_set_uri (pending_stream->m3u8, uri, NULL, name);
+ playlist->variants = g_list_append (playlist->variants, pending_stream);
+ /* use first stream in the playlist as default */
+ if (playlist->default_variant == NULL) {
+ playlist->default_variant =
+ gst_hls_variant_stream_ref (pending_stream);
+ }
+ }
+ pending_stream = NULL;
+ } else if (g_str_has_prefix (data, "#EXT-X-VERSION:")) {
+ if (int_from_string (data + 15, &data, &val))
+ playlist->version = val;
+ } else if (g_str_has_prefix (data, "#EXT-X-STREAM-INF:") ||
+ g_str_has_prefix (data, "#EXT-X-I-FRAME-STREAM-INF:")) {
+ GstHLSVariantStream *stream;
+ gchar *v, *a;
+
+ stream = gst_hls_variant_stream_new ();
+ stream->iframe = g_str_has_prefix (data, "#EXT-X-I-FRAME-STREAM-INF:");
+ data += stream->iframe ? 26 : 18;
+ while (data && parse_attributes (&data, &a, &v)) {
+ if (g_str_equal (a, "BANDWIDTH")) {
+ if (!int_from_string (v, NULL, &stream->bandwidth))
+ GST_WARNING ("Error while reading BANDWIDTH");
+ } else if (g_str_equal (a, "PROGRAM-ID")) {
+ if (!int_from_string (v, NULL, &stream->program_id))
+ GST_WARNING ("Error while reading PROGRAM-ID");
+ } else if (g_str_equal (a, "CODECS")) {
+ g_free (stream->codecs);
+ stream->codecs = g_strdup (v);
+ } else if (g_str_equal (a, "RESOLUTION")) {
+ if (!int_from_string (v, &v, &stream->width))
+ GST_WARNING ("Error while reading RESOLUTION width");
+ if (!v || *v != 'x') {
+ GST_WARNING ("Missing height");
+ } else {
+ v = g_utf8_next_char (v);
+ if (!int_from_string (v, NULL, &stream->height))
+ GST_WARNING ("Error while reading RESOLUTION height");
+ }
+ } else if (stream->iframe && g_str_equal (a, "URI")) {
+ stream->uri = uri_join (base_uri, v);
+ if (stream->uri != NULL) {
+ stream->name = g_strdup (stream->uri);
+ gst_m3u8_set_uri (stream->m3u8, stream->uri, NULL, stream->name);
+ } else {
+ gst_hls_variant_stream_unref (stream);
+ }
+ } else if (g_str_equal (a, "AUDIO")) {
+ g_free (stream->media_groups[GST_HLS_MEDIA_TYPE_AUDIO]);
+ stream->media_groups[GST_HLS_MEDIA_TYPE_AUDIO] = gst_m3u8_unquote (v);
+ } else if (g_str_equal (a, "SUBTITLES")) {
+ g_free (stream->media_groups[GST_HLS_MEDIA_TYPE_SUBTITLES]);
+ stream->media_groups[GST_HLS_MEDIA_TYPE_SUBTITLES] =
+ gst_m3u8_unquote (v);
+ } else if (g_str_equal (a, "VIDEO")) {
+ g_free (stream->media_groups[GST_HLS_MEDIA_TYPE_VIDEO]);
+ stream->media_groups[GST_HLS_MEDIA_TYPE_VIDEO] = gst_m3u8_unquote (v);
+ } else if (g_str_equal (a, "CLOSED-CAPTIONS")) {
+ /* closed captions will be embedded inside the video stream, ignore */
+ }
+ }
+
+ if (stream->iframe) {
+ if (find_variant_stream_by_uri (playlist->iframe_variants, stream->uri)) {
+ GST_DEBUG ("Already have a list with this URI");
+ gst_hls_variant_stream_unref (stream);
+ } else {
+ playlist->iframe_variants =
+ g_list_append (playlist->iframe_variants, stream);
+ }
+ } else {
+ if (pending_stream != NULL) {
+ GST_WARNING ("variant stream without uri, dropping");
+ gst_hls_variant_stream_unref (pending_stream);
+ }
+ pending_stream = stream;
+ }
+ } else if (g_str_has_prefix (data, "#EXT-X-MEDIA:")) {
+ GstHLSMedia *media;
+ GList *list;
+
+ media = gst_m3u8_parse_media (data + strlen ("#EXT-X-MEDIA:"), base_uri);
+
+ if (media == NULL)
+ goto next_line;
+
+ if (media_groups[media->mtype] == NULL) {
+ media_groups[media->mtype] =
+ g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL);
+ }
+
+ list = g_hash_table_lookup (media_groups[media->mtype], media->group_id);
+
+ /* make sure there isn't already a media with the same name */
+ if (!g_list_find_custom (list, media->name, hls_media_name_compare_func)) {
+ g_hash_table_replace (media_groups[media->mtype],
+ g_strdup (media->group_id), g_list_append (list, media));
+ GST_INFO ("Added media %s to group %s", media->name, media->group_id);
+ } else {
+ GST_WARNING (" media with name '%s' already exists in group '%s'!",
+ media->name, media->group_id);
+ gst_hls_media_unref (media);
+ }
+ } else if (*data != '\0') {
+ GST_LOG ("Ignored line: %s", data);
+ }
+
+ next_line:
+ if (!end)
+ break;
+ data = g_utf8_next_char (end); /* skip \n */
+ }
+
+ if (pending_stream != NULL) {
+ GST_WARNING ("#EXT-X-STREAM-INF without uri, dropping");
+ gst_hls_variant_stream_unref (pending_stream);
+ }
+
+ g_free (free_data);
+
+ /* Add alternative renditions media to variant streams */
+ for (l = playlist->variants; l != NULL; l = l->next) {
+ GstHLSVariantStream *stream = l->data;
+ GList *mlist;
+
+ for (i = 0; i < GST_HLS_N_MEDIA_TYPES; ++i) {
+ if (stream->media_groups[i] != NULL && media_groups[i] != NULL) {
+ GST_INFO ("Adding %s group '%s' to stream '%s'",
+ GST_HLS_MEDIA_TYPE_NAME (i), stream->media_groups[i], stream->name);
+
+ mlist = g_hash_table_lookup (media_groups[i], stream->media_groups[i]);
+
+ if (mlist == NULL)
+ GST_WARNING ("Group '%s' does not exist!", stream->media_groups[i]);
+
+ while (mlist != NULL) {
+ GstHLSMedia *media = mlist->data;
+
+ GST_DEBUG (" %s media %s, uri: %s", GST_HLS_MEDIA_TYPE_NAME (i),
+ media->name, media->uri);
+
+ stream->media[i] =
+ g_list_append (stream->media[i], gst_hls_media_ref (media));
+ mlist = mlist->next;
+ }
+ }
+ }
+ }
+
+ /* clean up our temporary alternative rendition groups hash tables */
+ for (i = 0; i < GST_HLS_N_MEDIA_TYPES; ++i) {
+ if (media_groups[i] != NULL) {
+ GList *groups, *mlist;
+
+ groups = g_hash_table_get_keys (media_groups[i]);
+ for (l = groups; l != NULL; l = l->next) {
+ mlist = g_hash_table_lookup (media_groups[i], l->data);
+ g_list_free_full (mlist, (GDestroyNotify) gst_hls_media_unref);
+ }
+ g_list_free (groups);
+ g_hash_table_unref (media_groups[i]);
+ }
+ }
+
+ if (playlist->variants == NULL) {
+ GST_WARNING ("Master playlist without any media playlists!");
+ gst_hls_master_playlist_unref (playlist);
+ return NULL;
+ }
+
+ /* reorder variants by bitrate */
+ playlist->variants =
+ g_list_sort (playlist->variants,
+ (GCompareFunc) gst_hls_variant_stream_compare_by_bitrate);
+
+ playlist->iframe_variants =
+ g_list_sort (playlist->iframe_variants,
+ (GCompareFunc) gst_hls_variant_stream_compare_by_bitrate);
+
+ /* FIXME: restore old current_variant after master playlist update
+ * (move into code that does that update) */
+#if 0
+ {
+ gchar *top_variant_uri = NULL;
+ gboolean iframe = FALSE;
+
+ if (!self->current_variant) {
+ top_variant_uri = GST_M3U8 (self->lists->data)->uri;
+ } else {
+ top_variant_uri = GST_M3U8 (self->current_variant->data)->uri;
+ iframe = GST_M3U8 (self->current_variant->data)->iframe;
+ }
+
+ /* here we sorted the lists */
+
+ if (iframe)
+ playlist->current_variant =
+ find_variant_stream_by_uri (playlist->iframe_variants,
+ top_variant_uri);
+ else
+ playlist->current_variant =
+ find_variant_stream_by_uri (playlist->variants, top_variant_uri);
+ }
+#endif
+
+ GST_DEBUG ("parsed master playlist with %d streams and %d I-frame streams",
+ g_list_length (playlist->variants),
+ g_list_length (playlist->iframe_variants));
+
+
+ return playlist;
+}
+
+gboolean
+gst_hls_variant_stream_is_live (GstHLSVariantStream * variant)
+{
+ gboolean is_live;
+
+ g_return_val_if_fail (variant != NULL, FALSE);
+
+ is_live = gst_m3u8_is_live (variant->m3u8);
+
+ return is_live;
+}
+
+static gint
+compare_media (const GstHLSMedia * a, const GstHLSMedia * b)
+{
+ return strcmp (a->name, b->name);
+}
+
+GstHLSMedia *
+gst_hls_variant_find_matching_media (GstHLSVariantStream * stream,
+ GstHLSMedia * media)
+{
+ GList *mlist = stream->media[media->mtype];
+ GList *match;
+
+ if (mlist == NULL)
+ return NULL;
+
+ match = g_list_find_custom (mlist, media, (GCompareFunc) compare_media);
+ if (match == NULL)
+ return NULL;
+
+ return match->data;
+}
+
+GstHLSVariantStream *
+gst_hls_master_playlist_get_variant_for_bitrate (GstHLSMasterPlaylist *
+ playlist, GstHLSVariantStream * current_variant, guint bitrate)
+{
+ GstHLSVariantStream *variant = current_variant;
+ GList *l;
+
+ /* variant lists are sorted low to high, so iterate from highest to lowest */
+ if (current_variant == NULL || !current_variant->iframe)
+ l = g_list_last (playlist->variants);
+ else
+ l = g_list_last (playlist->iframe_variants);
+
+ while (l != NULL) {
+ variant = l->data;
+ if (variant->bandwidth <= bitrate)
+ break;
+ l = l->prev;
+ }
+
+ return variant;
+}
+
+GstHLSVariantStream *
+gst_hls_master_playlist_get_matching_variant (GstHLSMasterPlaylist * playlist,
+ GstHLSVariantStream * current_variant)
+{
+ if (current_variant->iframe) {
+ return find_variant_stream_by_uri (playlist->iframe_variants,
+ current_variant->uri);
+ }
+
+ return find_variant_stream_by_uri (playlist->variants, current_variant->uri);
}
diff --git a/ext/hls/m3u8.h b/ext/hls/m3u8.h
index 24eaaa1..3a5023b 100644
--- a/ext/hls/m3u8.h
+++ b/ext/hls/m3u8.h
@@ -1,6 +1,7 @@
/* GStreamer
* Copyright (C) 2010 Marc-Andre Lureau <marcandre.lureau@gmail.com>
* Copyright (C) 2010 Andoni Morales Alastruey <ylatuya@gmail.com>
+ * Copyright (C) 2015 Tim-Philipp Müller <tim@centricular.com>
*
* m3u8.h:
*
@@ -29,15 +30,18 @@
typedef struct _GstM3U8 GstM3U8;
typedef struct _GstM3U8MediaFile GstM3U8MediaFile;
+typedef struct _GstHLSMedia GstHLSMedia;
typedef struct _GstM3U8Client GstM3U8Client;
+typedef struct _GstHLSVariantStream GstHLSVariantStream;
+typedef struct _GstHLSMasterPlaylist GstHLSMasterPlaylist;
#define GST_M3U8(m) ((GstM3U8*)m)
#define GST_M3U8_MEDIA_FILE(f) ((GstM3U8MediaFile*)f)
-#define GST_M3U8_CLIENT_LOCK(c) g_mutex_lock (&c->lock);
-#define GST_M3U8_CLIENT_UNLOCK(c) g_mutex_unlock (&c->lock);
+#define GST_M3U8_LOCK(m) g_mutex_lock (&m->lock);
+#define GST_M3U8_UNLOCK(m) g_mutex_unlock (&m->lock);
-#define GST_M3U8_CLIENT_IS_LIVE(c) ((!(c)->current || (c)->current->endlist) ? FALSE : TRUE)
+#define GST_M3U8_IS_LIVE(m) ((m)->endlist == FALSE)
/* hlsdemux must not get closer to the end of a live stream than
GST_M3U8_LIVE_MIN_FRAGMENT_DISTANCE fragments. Section 6.3.3
@@ -53,26 +57,36 @@
gchar *name; /* This will be the "name" of the playlist, the original
* relative/absolute uri in a variant playlist */
+ /* parsed info */
gboolean endlist; /* if ENDLIST has been reached */
gint version; /* last EXT-X-VERSION */
GstClockTime targetduration; /* last EXT-X-TARGETDURATION */
gboolean allowcache; /* last EXT-X-ALLOWCACHE */
- gint bandwidth;
- gint program_id;
- gchar *codecs;
- gint width;
- gint height;
- gboolean iframe;
GList *files;
+ /* state */
+ GList *current_file;
+ GstClockTime current_file_duration; /* Duration of current fragment */
+ gint64 sequence; /* the next sequence for this client */
+ GstClockTime sequence_position; /* position of this sequence */
+ gint64 highest_sequence_number; /* largest seen sequence number */
+ GstClockTime first_file_start; /* timecode of the start of the first fragment in the current media playlist */
+ GstClockTime last_file_end; /* timecode of the end of the last fragment in the current media playlist */
+ GstClockTime duration; /* cached total duration */
+
/*< private > */
gchar *last_data;
- GList *lists; /* list of GstM3U8 from the main playlist */
- GList *iframe_lists; /* I-frame lists from the main playlist */
- GList *current_variant; /* Current variant playlist used */
+ GMutex lock;
+
+ gint ref_count; /* ATOMIC */
};
+GstM3U8 * gst_m3u8_ref (GstM3U8 * m3u8);
+
+void gst_m3u8_unref (GstM3U8 * m3u8);
+
+
struct _GstM3U8MediaFile
{
gchar *title;
@@ -83,73 +97,136 @@
gchar *key;
guint8 iv[16];
gint64 offset, size;
+ gint ref_count; /* ATOMIC */
};
-struct _GstM3U8Client
+GstM3U8MediaFile * gst_m3u8_media_file_ref (GstM3U8MediaFile * mfile);
+
+void gst_m3u8_media_file_unref (GstM3U8MediaFile * mfile);
+
+GstM3U8 * gst_m3u8_new (void);
+
+gboolean gst_m3u8_update (GstM3U8 * m3u8,
+ gchar * data);
+
+void gst_m3u8_set_uri (GstM3U8 * m3u8,
+ const gchar * uri,
+ const gchar * base_uri,
+ const gchar * name);
+
+GstM3U8MediaFile * gst_m3u8_get_next_fragment (GstM3U8 * m3u8,
+ gboolean forward,
+ GstClockTime * sequence_position,
+ gboolean * discont);
+
+gboolean gst_m3u8_has_next_fragment (GstM3U8 * m3u8,
+ gboolean forward);
+
+void gst_m3u8_advance_fragment (GstM3U8 * m3u8,
+ gboolean forward);
+
+GstClockTime gst_m3u8_get_duration (GstM3U8 * m3u8);
+
+GstClockTime gst_m3u8_get_target_duration (GstM3U8 * m3u8);
+
+gchar * gst_m3u8_get_uri (GstM3U8 * m3u8);
+
+gboolean gst_m3u8_is_live (GstM3U8 * m3u8);
+
+gboolean gst_m3u8_get_seek_range (GstM3U8 * m3u8,
+ gint64 * start,
+ gint64 * stop);
+
+typedef enum
{
- GstM3U8 *main; /* main playlist */
- GstM3U8 *current;
- GList *current_file;
- GstClockTime current_file_duration; /* Duration of current fragment */
- gint64 sequence; /* the next sequence for this client */
- GstClockTime sequence_position; /* position of this sequence */
- gint64 highest_sequence_number; /* largest seen sequence number */
- GstClockTime first_file_start; /* timecode of the start of the first fragment in the current media playlist */
- GstClockTime last_file_end; /* timecode of the end of the last fragment in the current media playlist */
- GstClockTime duration; /* cached total duration */
- GMutex lock;
+ GST_HLS_MEDIA_TYPE_INVALID = -1,
+ GST_HLS_MEDIA_TYPE_AUDIO,
+ GST_HLS_MEDIA_TYPE_VIDEO,
+ GST_HLS_MEDIA_TYPE_SUBTITLES,
+ GST_HLS_MEDIA_TYPE_CLOSED_CAPTIONS,
+ GST_HLS_N_MEDIA_TYPES
+} GstHLSMediaType;
+
+struct _GstHLSMedia {
+ GstHLSMediaType mtype;
+ gchar *group_id;
+ gchar *name;
+ gchar *lang;
+ gchar *uri;
+ gboolean is_default;
+ gboolean autoselect;
+ gboolean forced;
+
+ GstM3U8 *playlist; /* media playlist */
+
+ gint ref_count; /* ATOMIC */
};
+GstHLSMedia * gst_hls_media_ref (GstHLSMedia * media);
-GstM3U8Client * gst_m3u8_client_new (const gchar * uri, const gchar * base_uri);
+void gst_hls_media_unref (GstHLSMedia * media);
-void gst_m3u8_client_free (GstM3U8Client * client);
-gboolean gst_m3u8_client_update (GstM3U8Client * client, gchar * data);
+struct _GstHLSVariantStream {
+ gchar *name; /* This will be the "name" of the playlist, the original
+ * relative/absolute uri in a variant playlist */
+ gchar *uri;
+ gchar *codecs;
+ gint bandwidth;
+ gint program_id;
+ gint width;
+ gint height;
+ gboolean iframe;
-gboolean gst_m3u8_client_update_variant_playlist (GstM3U8Client * client,
- gchar * data,
- const gchar * uri,
- const gchar * base_uri);
+ gint refcount; /* ATOMIC */
-void gst_m3u8_client_set_current (GstM3U8Client * client,
- GstM3U8 * m3u8);
+ GstM3U8 *m3u8; /* media playlist */
-gboolean gst_m3u8_client_get_next_fragment (GstM3U8Client * client,
- gboolean * discontinuity,
- gchar ** uri,
- GstClockTime * duration,
- GstClockTime * timestamp,
- gint64 * range_start,
- gint64 * range_end,
- gchar ** key,
- guint8 ** iv,
- gboolean forward);
+ /* alternative renditions */
+ gchar *media_groups[GST_HLS_N_MEDIA_TYPES];
+ GList *media[GST_HLS_N_MEDIA_TYPES];
+};
-gboolean gst_m3u8_client_has_next_fragment (GstM3U8Client * client,
- gboolean forward);
+GstHLSVariantStream * gst_hls_variant_stream_ref (GstHLSVariantStream * stream);
-void gst_m3u8_client_advance_fragment (GstM3U8Client * client,
- gboolean forward);
+void gst_hls_variant_stream_unref (GstHLSVariantStream * stream);
-GstClockTime gst_m3u8_client_get_duration (GstM3U8Client * client);
+gboolean gst_hls_variant_stream_is_live (GstHLSVariantStream * stream);
-GstClockTime gst_m3u8_client_get_target_duration (GstM3U8Client * client);
+GstHLSMedia * gst_hls_variant_find_matching_media (GstHLSVariantStream * stream,
+ GstHLSMedia *media);
-gchar * gst_m3u8_client_get_uri (GstM3U8Client * client);
-gchar * gst_m3u8_client_get_current_uri (GstM3U8Client * client);
+struct _GstHLSMasterPlaylist
+{
+ /* Available variant streams, sorted by bitrate (low -> high) */
+ GList *variants;
+ GList *iframe_variants;
-gboolean gst_m3u8_client_has_variant_playlist (GstM3U8Client * client);
+ GstHLSVariantStream *default_variant; /* first in the list */
-gboolean gst_m3u8_client_is_live (GstM3U8Client * client);
+ gint version; /* EXT-X-VERSION */
-GList * gst_m3u8_client_get_playlist_for_bitrate (GstM3U8Client * client,
- guint bitrate);
+ gint refcount; /* ATOMIC */
-gboolean gst_m3u8_client_get_seek_range (GstM3U8Client * client,
- gint64 * start,
- gint64 * stop);
+ gboolean is_simple; /* TRUE if simple main media playlist,
+ * FALSE if variant playlist (either
+ * way the variants list will be set) */
+
+ /*< private > */
+ gchar *last_data;
+};
+
+GstHLSMasterPlaylist * gst_hls_master_playlist_new_from_data (gchar * data,
+ const gchar * base_uri);
+
+GstHLSVariantStream * gst_hls_master_playlist_get_variant_for_bitrate (GstHLSMasterPlaylist * playlist,
+ GstHLSVariantStream * current_variant,
+ guint bitrate);
+GstHLSVariantStream * gst_hls_master_playlist_get_matching_variant (GstHLSMasterPlaylist * playlist,
+ GstHLSVariantStream * current_variant);
+
+void gst_hls_master_playlist_unref (GstHLSMasterPlaylist * playlist);
G_END_DECLS
diff --git a/ext/kate/Makefile.in b/ext/kate/Makefile.in
index e4350bd..23c336a 100644
--- a/ext/kate/Makefile.in
+++ b/ext/kate/Makefile.in
@@ -331,6 +331,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -380,6 +382,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/ext/ladspa/Makefile.in b/ext/ladspa/Makefile.in
index 9c53aae..4501dd5 100644
--- a/ext/ladspa/Makefile.in
+++ b/ext/ladspa/Makefile.in
@@ -330,6 +330,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -379,6 +381,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/ext/libde265/Makefile.in b/ext/libde265/Makefile.in
index 0b6f596..0be80e0 100644
--- a/ext/libde265/Makefile.in
+++ b/ext/libde265/Makefile.in
@@ -327,6 +327,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -376,6 +378,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/ext/libmms/Makefile.in b/ext/libmms/Makefile.in
index 5b0fa4c..46c3c26 100644
--- a/ext/libmms/Makefile.in
+++ b/ext/libmms/Makefile.in
@@ -326,6 +326,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -375,6 +377,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/ext/libvisual/Makefile.in b/ext/libvisual/Makefile.in
index 15e9ec3..af32101 100644
--- a/ext/libvisual/Makefile.in
+++ b/ext/libvisual/Makefile.in
@@ -323,6 +323,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -372,6 +374,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/ext/lv2/Makefile.in b/ext/lv2/Makefile.in
index 644bc83..66791d3 100644
--- a/ext/lv2/Makefile.in
+++ b/ext/lv2/Makefile.in
@@ -165,7 +165,7 @@
am__DEPENDENCIES_1 =
libgstlv2_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \
$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
- $(am__DEPENDENCIES_1)
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
am_libgstlv2_la_OBJECTS = libgstlv2_la-gstlv2.lo \
libgstlv2_la-gstlv2utils.lo libgstlv2_la-gstlv2filter.lo \
libgstlv2_la-gstlv2source.lo
@@ -328,6 +328,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -377,6 +379,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/ext/lv2/README b/ext/lv2/README
index 289086d..10c6a8e 100644
--- a/ext/lv2/README
+++ b/ext/lv2/README
@@ -35,9 +35,36 @@
TODO
* make filters gap-aware
+* report latency
+ lilv_plugin_has_latency(), lilv_plugin_get_latency_port_index()
* support more host features
GST_DEBUG="lv2:4" GST_DEBUG_FILE=/tmp/gst.log gst-inspect lv2
grep -o "needs host feature: .*$" /tmp/gst.log | sort | uniq -c | sort -n
+* make source elements useful
+ Most source elements use Atom port where they accept midi events. Since it is
+ full fledged midi, we should only ever use channel-0 and instead use multiple
+ instances
+ 1) We could expose those as "audio/x-midi-event" sink pads, but then those are
+ not sources anymore.
+ 2) We could expose those as properties using a new type like GST_FOURCC. If we
+ ignore "System Exclusive" messages, all other midi messages are 1-3 bytes.
+ We stuff the bytes right to left. E.g: the lowest byte is the status byte
+ 3) We could use the GstBtNote enum + the toneconversion classes
+ https://www.midi.org/specifications/item/table-1-summary-of-midi-message
+ Open questions:
+ - with one property, we can't handle polyphony
+ - we can't query lv2 plugins for their polyphony :/
+
+ If lv2 gets a polyphony extension it would be a single non-negative integer:
+ 0: unbound, 1 monophonic, > 1 N-polyphonic
+ I've checked a few synths and they all have an upper limit. Still the way
+ voices work in trackers is not the same as they work in synths - e.g. in a
+ tracker one can play a note twice
+
+ Or we just play them monophonic and try to implement a polychildbin. The bin
+ takes a GstElement to be used as a voice. For each new voice it would create a
+ new instance and it uses a built-in mixer. Downside is that all properties
+ would be per voice.
* example sources:
http://svn.drobilla.net/lad/trunk/lilv/utils/lv2info.c
diff --git a/ext/lv2/gstlv2utils.c b/ext/lv2/gstlv2utils.c
index 017d449..fc30595 100644
--- a/ext/lv2/gstlv2utils.c
+++ b/ext/lv2/gstlv2utils.c
@@ -146,6 +146,26 @@
/* preset interface */
+static char *
+make_bundle_name (GstObject * obj, const gchar * name)
+{
+ GstElementFactory *factory;
+ gchar *basename, *s, *bundle;
+
+ factory = gst_element_get_factory ((GstElement *) obj);
+ basename = g_strdup (gst_element_factory_get_metadata (factory,
+ GST_ELEMENT_METADATA_LONGNAME));
+ s = basename;
+ while ((s = strchr (s, ' '))) {
+ *s = '_';
+ }
+ bundle = g_strjoin (NULL, basename, "_", name, ".preset.lv2", NULL);
+
+ g_free (basename);
+
+ return bundle;
+}
+
gchar **
gst_lv2_get_preset_names (GstLV2 * lv2, GstObject * obj)
{
@@ -267,24 +287,19 @@
gboolean
gst_lv2_save_preset (GstLV2 * lv2, GstObject * obj, const gchar * name)
{
- gchar *filename, *basename, *bundle, *dir, *tmp_dir, *s;
+ gchar *filename, *bundle, *dir, *tmp_dir;
gpointer user_data[] = { lv2->klass, obj };
- GstElementFactory *factory;
LilvState *state;
LilvNode *bundle_dir;
+ const LilvNode *state_uri;
LilvInstance *instance = lv2->instance;
gboolean res;
-
- factory = gst_element_get_factory ((GstElement *) obj);
- basename = g_strdup (gst_element_factory_get_metadata (factory,
- GST_ELEMENT_METADATA_LONGNAME));
- s = basename;
- while ((s = strchr (s, ' '))) {
- *s = '_';
- }
+#ifndef HAVE_LILV_0_22
+ gchar *filepath;
+#endif
filename = g_strjoin (NULL, name, ".ttl", NULL);
- bundle = g_strjoin (NULL, basename, "_", name, ".preset.lv2", NULL);
+ bundle = make_bundle_name (obj, name);
/* dir needs to end on a dir separator for the lilv_new_file_uri() to work */
dir =
g_build_filename (g_get_home_dir (), ".lv2", bundle, G_DIR_SEPARATOR_S,
@@ -313,9 +328,19 @@
lilv_world_load_bundle (world, bundle_dir);
lilv_node_free (bundle_dir);
- lilv_world_load_resource (world, lilv_state_get_uri (state));
+#ifdef HAVE_LILV_0_22
+ state_uri = lilv_state_get_uri (state);
+#else
+ filepath = g_build_filename (dir, filename, NULL);
+ state_uri = lilv_new_uri (world, filepath);
+ g_free (filepath);
+#endif
+ lilv_world_load_resource (world, state_uri);
g_hash_table_insert (lv2->presets, g_strdup (name),
- lilv_node_duplicate (lilv_state_get_uri (state)));
+ lilv_node_duplicate (state_uri));
+#ifndef HAVE_LILV_0_22
+ lilv_node_free ((LilvNode *) state_uri);
+#endif
lilv_state_free (state);
if (!lv2->instance) {
@@ -326,7 +351,6 @@
g_free (dir);
g_free (bundle);
g_free (filename);
- g_free (basename);
return res;
}
@@ -344,19 +368,19 @@
gboolean
gst_lv2_delete_preset (GstLV2 * lv2, GstObject * obj, const gchar * name)
{
+#ifdef HAVE_LILV_0_22
LilvNode *preset = g_hash_table_lookup (lv2->presets, name);
LilvState *state = lilv_state_new_from_world (world, &lv2_map, preset);
lilv_world_unload_resource (world, lilv_state_get_uri (state));
lilv_state_delete (world, state);
lilv_state_free (state);
-
+#endif
g_hash_table_remove (lv2->presets, name);
return FALSE;
}
-
/* api helpers */
void
@@ -757,12 +781,16 @@
}
val = lilv_plugin_get_author_name (lv2plugin);
if (val) {
+ // TODO: check lilv_plugin_get_author_email(lv2plugin);
author = g_strdup (lilv_node_as_string (val));
lilv_node_free (val);
} else {
author = g_strdup ("no author available");
}
+ // TODO: better description from:
+ // lilv_plugin_get_author_homepage() and lilv_plugin_get_project()
+
lv2plugin_class = lilv_plugin_get_class (lv2plugin);
cval = lilv_plugin_class_get_label (lv2plugin_class);
if (cval) {
diff --git a/ext/mimic/Makefile.in b/ext/mimic/Makefile.in
index be4d23a..76ceca7 100644
--- a/ext/mimic/Makefile.in
+++ b/ext/mimic/Makefile.in
@@ -326,6 +326,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -375,6 +377,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/ext/modplug/Makefile.in b/ext/modplug/Makefile.in
index a48b694..af558c3 100644
--- a/ext/modplug/Makefile.in
+++ b/ext/modplug/Makefile.in
@@ -325,6 +325,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -374,6 +376,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/ext/mpeg2enc/Makefile.in b/ext/mpeg2enc/Makefile.in
index ce444cc..15f0c3a 100644
--- a/ext/mpeg2enc/Makefile.in
+++ b/ext/mpeg2enc/Makefile.in
@@ -329,6 +329,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -378,6 +380,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/ext/mplex/Makefile.in b/ext/mplex/Makefile.in
index 2cd7f3c..e9314b6 100644
--- a/ext/mplex/Makefile.in
+++ b/ext/mplex/Makefile.in
@@ -329,6 +329,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -378,6 +380,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/ext/mplex/gstmplex.cc b/ext/mplex/gstmplex.cc
index 4089485..7f7b4ec 100644
--- a/ext/mplex/gstmplex.cc
+++ b/ext/mplex/gstmplex.cc
@@ -676,7 +676,8 @@
g_free (padname);
/* may now be up to us to get things going */
- gst_mplex_start_task (mplex);
+ if (GST_STATE (element) > GST_STATE_READY)
+ gst_mplex_start_task (mplex);
GST_MPLEX_MUTEX_UNLOCK (mplex);
}
}
diff --git a/ext/musepack/Makefile.in b/ext/musepack/Makefile.in
index 4ff8cf6..3ae8534 100644
--- a/ext/musepack/Makefile.in
+++ b/ext/musepack/Makefile.in
@@ -326,6 +326,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -375,6 +377,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/ext/musepack/gstmusepackdec.c b/ext/musepack/gstmusepackdec.c
index f8670ec..5b68200 100644
--- a/ext/musepack/gstmusepackdec.c
+++ b/ext/musepack/gstmusepackdec.c
@@ -222,7 +222,7 @@
GST_DEBUG_OBJECT (dec, "performing seek to sample %" G_GINT64_FORMAT,
segment.start);
- if (segment.start < 0 || segment.start >= segment.duration) {
+ if (segment.start >= segment.duration) {
GST_WARNING_OBJECT (dec, "seek out of bounds");
goto failed;
}
diff --git a/ext/nas/Makefile.in b/ext/nas/Makefile.in
index 1ac8f13..3e8f341 100644
--- a/ext/nas/Makefile.in
+++ b/ext/nas/Makefile.in
@@ -325,6 +325,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -374,6 +376,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/ext/neon/Makefile.in b/ext/neon/Makefile.in
index 9de8640..4f6db41 100644
--- a/ext/neon/Makefile.in
+++ b/ext/neon/Makefile.in
@@ -326,6 +326,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -375,6 +377,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/ext/ofa/Makefile.in b/ext/ofa/Makefile.in
index af6bdc9..76fccab 100644
--- a/ext/ofa/Makefile.in
+++ b/ext/ofa/Makefile.in
@@ -326,6 +326,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -375,6 +377,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/ext/openal/Makefile.in b/ext/openal/Makefile.in
index b676c8a..a32853d 100644
--- a/ext/openal/Makefile.in
+++ b/ext/openal/Makefile.in
@@ -330,6 +330,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -379,6 +381,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/ext/opencv/Makefile.in b/ext/opencv/Makefile.in
index 3c56b33..a5a6462 100644
--- a/ext/opencv/Makefile.in
+++ b/ext/opencv/Makefile.in
@@ -347,6 +347,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -396,6 +398,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/ext/openexr/Makefile.in b/ext/openexr/Makefile.in
index 5ff93fc..6413382 100644
--- a/ext/openexr/Makefile.in
+++ b/ext/openexr/Makefile.in
@@ -345,6 +345,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -394,6 +396,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/ext/openh264/Makefile.in b/ext/openh264/Makefile.in
index bc3844c..33cf4a7 100644
--- a/ext/openh264/Makefile.in
+++ b/ext/openh264/Makefile.in
@@ -345,6 +345,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -394,6 +396,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/ext/openh264/gstopenh264dec.cpp b/ext/openh264/gstopenh264dec.cpp
index 57d2fb5..8fad292 100644
--- a/ext/openh264/gstopenh264dec.cpp
+++ b/ext/openh264/gstopenh264dec.cpp
@@ -125,7 +125,9 @@
dec_param.uiTargetDqLayer = 255;
dec_param.eEcActiveIdc = ERROR_CON_FRAME_COPY;
+#if OPENH264_MAJOR == 1 && OPENH264_MINOR < 6
dec_param.eOutputColorFormat = videoFormatI420;
+#endif
dec_param.sVideoProperty.eVideoBsType = VIDEO_BITSTREAM_AVC;
ret = openh264dec->decoder->Initialize (&dec_param);
diff --git a/ext/openh264/gstopenh264enc.cpp b/ext/openh264/gstopenh264enc.cpp
index de4a70d..a5e488f 100644
--- a/ext/openh264/gstopenh264enc.cpp
+++ b/ext/openh264/gstopenh264enc.cpp
@@ -38,6 +38,8 @@
GST_DEBUG_CATEGORY_STATIC (gst_openh264enc_debug_category);
#define GST_CAT_DEFAULT gst_openh264enc_debug_category
+/* FIXME: we should not really directly use the enums from the openh264 API
+ * here, since it might change or be removed */
#define GST_TYPE_USAGE_TYPE (gst_openh264enc_usage_type_get_type ())
static GType
gst_openh264enc_usage_type_get_type (void)
@@ -105,14 +107,14 @@
gst_openh264enc_slice_mode_get_type (void)
{
static const GEnumValue types[] = {
- {SM_FIXEDSLCNUM_SLICE, "Fixed number of slices", "n-slices"},
- {SM_AUTO_SLICE, "Number of slices equal to number of threads", "auto"},
+ {GST_OPENH264_SLICE_MODE_N_SLICES, "Fixed number of slices", "n-slices"},
+ {GST_OPENH264_SLICE_MODE_AUTO, "Number of slices equal to number of threads", "auto"},
{0, NULL, NULL},
};
static gsize id = 0;
if (g_once_init_enter (&id)) {
- GType _id = g_enum_register_static ("GstOpenh264encSliceModes", types);
+ GType _id = g_enum_register_static ("GstOpenh264EncSliceModes", types);
g_once_init_leave (&id, _id);
}
@@ -175,7 +177,7 @@
#define DEFAULT_BACKGROUND_DETECTION TRUE
#define DEFAULT_ADAPTIVE_QUANTIZATION TRUE
#define DEFAULT_SCENE_CHANGE_DETECTION TRUE
-#define DEFAULT_SLICE_MODE SM_FIXEDSLCNUM_SLICE
+#define DEFAULT_SLICE_MODE GST_OPENH264_SLICE_MODE_N_SLICES
#define DEFAULT_NUM_SLICES 1
#define DEFAULT_COMPLEXITY MEDIUM_COMPLEXITY
@@ -476,7 +478,7 @@
break;
case PROP_SLICE_MODE:
- openh264enc->slice_mode = (SliceModeEnum) g_value_get_enum (value);
+ openh264enc->slice_mode = (GstOpenh264EncSliceMode) g_value_get_enum (value);
break;
case PROP_NUM_SLICES:
@@ -631,6 +633,8 @@
gchar *debug_caps;
guint width, height, fps_n, fps_d;
SEncParamExt enc_params;
+ SliceModeEnum slice_mode = SM_SINGLE_SLICE;
+ guint n_slices = 1;
gint ret;
GstCaps *outcaps;
GstVideoCodecState *output_state;
@@ -698,16 +702,33 @@
enc_params.sSpatialLayers[0].iSpatialBitrate = enc_params.iTargetBitrate;
enc_params.sSpatialLayers[0].iMaxSpatialBitrate = enc_params.iMaxBitrate;
- if (openh264enc->slice_mode == SM_FIXEDSLCNUM_SLICE) {
+ if (openh264enc->slice_mode == GST_OPENH264_SLICE_MODE_N_SLICES) {
if (openh264enc->num_slices == 1)
- enc_params.sSpatialLayers[0].sSliceCfg.uiSliceMode = SM_SINGLE_SLICE;
+ slice_mode = SM_SINGLE_SLICE;
else
- enc_params.sSpatialLayers[0].sSliceCfg.uiSliceMode = SM_FIXEDSLCNUM_SLICE;
- enc_params.sSpatialLayers[0].sSliceCfg.sSliceArgument.uiSliceNum = openh264enc->num_slices;
+ slice_mode = SM_FIXEDSLCNUM_SLICE;
+ n_slices = openh264enc->num_slices;
+ } else if (openh264enc->slice_mode == GST_OPENH264_SLICE_MODE_AUTO) {
+#if OPENH264_MAJOR == 1 && OPENH264_MINOR < 6
+ slice_mode = SM_AUTO_SLICE;
+#else
+ slice_mode = SM_FIXEDSLCNUM_SLICE;
+ n_slices = 0;
+#endif
} else {
- enc_params.sSpatialLayers[0].sSliceCfg.uiSliceMode = openh264enc->slice_mode;
+ GST_ERROR_OBJECT (openh264enc, "unexpected slice mode %d",
+ openh264enc->slice_mode);
+ slice_mode = SM_SINGLE_SLICE;
}
+#if OPENH264_MAJOR == 1 && OPENH264_MINOR < 6
+ enc_params.sSpatialLayers[0].sSliceCfg.uiSliceMode = slice_mode;
+ enc_params.sSpatialLayers[0].sSliceCfg.sSliceArgument.uiSliceNum = n_slices;
+#else
+ enc_params.sSpatialLayers[0].sSliceArgument.uiSliceMode = slice_mode;
+ enc_params.sSpatialLayers[0].sSliceArgument.uiSliceNum = n_slices;
+#endif
+
openh264enc->framerate = (1 + fps_n / fps_d);
ret = openh264enc->encoder->InitializeExt (&enc_params);
diff --git a/ext/openh264/gstopenh264enc.h b/ext/openh264/gstopenh264enc.h
index 4bd0eb7..f684191 100644
--- a/ext/openh264/gstopenh264enc.h
+++ b/ext/openh264/gstopenh264enc.h
@@ -47,6 +47,12 @@
GST_OPENH264_DEBLOCKING_NOT_SLICE_BOUNDARIES = 2
} GstOpenh264encDeblockingMode;
+typedef enum
+{
+ GST_OPENH264_SLICE_MODE_N_SLICES = 1, /* SM_FIXEDSLCNUM_SLICE */
+ GST_OPENH264_SLICE_MODE_AUTO = 5 /* former SM_AUTO_SLICE */
+} GstOpenh264EncSliceMode;
+
#define GST_TYPE_OPENH264ENC (gst_openh264enc_get_type())
#define GST_OPENH264ENC(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_OPENH264ENC,GstOpenh264Enc))
#define GST_OPENH264ENC_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_OPENH264ENC,GstOpenh264EncClass))
@@ -80,7 +86,7 @@
gboolean background_detection;
gboolean adaptive_quantization;
gboolean scene_change_detection;
- SliceModeEnum slice_mode;
+ GstOpenh264EncSliceMode slice_mode;
guint num_slices;
ECOMPLEXITY_MODE complexity;
};
diff --git a/ext/openjpeg/Makefile.in b/ext/openjpeg/Makefile.in
index 7afdf60..37a5238 100644
--- a/ext/openjpeg/Makefile.in
+++ b/ext/openjpeg/Makefile.in
@@ -328,6 +328,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -377,6 +379,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/ext/openjpeg/gstopenjpegenc.c b/ext/openjpeg/gstopenjpegenc.c
index 2d47779..7514a35 100644
--- a/ext/openjpeg/gstopenjpegenc.c
+++ b/ext/openjpeg/gstopenjpegenc.c
@@ -647,7 +647,7 @@
sampling = GST_JPEG2000_SAMPLING_YBRA4444_EXT;
break;
case GST_VIDEO_FORMAT_xRGB:
- sampling = GST_JPEG2000_COLORSPACE_RGB;
+ sampling = GST_JPEG2000_SAMPLING_RGB;
break;
case GST_VIDEO_FORMAT_Y444_10LE:
case GST_VIDEO_FORMAT_Y444_10BE:
diff --git a/ext/openni2/Makefile.in b/ext/openni2/Makefile.in
index db433b5..617c725 100644
--- a/ext/openni2/Makefile.in
+++ b/ext/openni2/Makefile.in
@@ -326,6 +326,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -375,6 +377,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/ext/opus/Makefile.in b/ext/opus/Makefile.in
index 56aefd9..e8ec31c 100644
--- a/ext/opus/Makefile.in
+++ b/ext/opus/Makefile.in
@@ -328,6 +328,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -377,6 +379,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/ext/qt/Makefile.am b/ext/qt/Makefile.am
index 5fdd90a..b8bd5d4 100644
--- a/ext/qt/Makefile.am
+++ b/ext/qt/Makefile.am
@@ -1,29 +1,37 @@
-plugin_LTLIBRARIES = libgstqtsink.la
+plugin_LTLIBRARIES = libgstqmlgl.la
noinst_HEADERS = \
gstqsgtexture.h \
+ gstqtglutility.h \
gstqtsink.h \
- qtitem.h
+ gstqtsrc.h \
+ qtitem.h \
+ qtwindow.h
moc_generated = \
moc_qtitem.cc \
+ moc_qtwindow.cc \
moc_gstqsgtexture.cc
#anything generated by the Qt tools...
BUILT_SOURCES = $(moc_generated)
CLEANFILES = $(moc_generated)
-nodist_libgstqtsink_la_SOURCES = $(BUILT_SOURCES)
+nodist_libgstqmlgl_la_SOURCES = $(BUILT_SOURCES)
-libgstqtsink_la_SOURCES = \
+libgstqmlgl_la_SOURCES = \
gstqsgtexture.cc \
+ gstqtglutility.cc \
qtitem.cc \
+ qtwindow.cc \
gstqtsink.cc \
gstqtsink.h \
+ gstqtsrc.cc \
+ gstqtsrc.h \
gstqtgl.h \
gstplugin.cc
-libgstqtsink_la_CXXFLAGS = \
+libgstqmlgl_la_CXXFLAGS = \
-I$(top_srcdir)/gst-libs \
-I$(top_builddir)/gst-libs \
$(GST_CXXFLAGS) \
@@ -32,15 +40,15 @@
$(QT_CFLAGS) \
$(GL_CFLAGS)
-libgstqtsink_la_LIBADD = \
+libgstqmlgl_la_LIBADD = \
$(GST_BASE_LIBS) \
$(GST_PLUGINS_BASE_LIBS) \
$(QT_LIBS) \
$(top_builddir)/gst-libs/gst/gl/libgstgl-$(GST_API_VERSION).la \
-lgstvideo-$(GST_API_VERSION)
-libgstqtsink_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
-libgstqtsink_la_LIBTOOLFLAGS = $(GST_PLUGIN_LIBTOOLFLAGS)
+libgstqmlgl_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
+libgstqmlgl_la_LIBTOOLFLAGS = $(GST_PLUGIN_LIBTOOLFLAGS)
$(moc_generated): moc_%.cc: %.h
diff --git a/ext/qt/Makefile.in b/ext/qt/Makefile.in
index 51dacc6..f72a489 100644
--- a/ext/qt/Makefile.in
+++ b/ext/qt/Makefile.in
@@ -163,26 +163,28 @@
am__installdirs = "$(DESTDIR)$(plugindir)"
LTLIBRARIES = $(plugin_LTLIBRARIES)
am__DEPENDENCIES_1 =
-libgstqtsink_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \
+libgstqmlgl_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \
$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
$(top_builddir)/gst-libs/gst/gl/libgstgl-$(GST_API_VERSION).la
-am_libgstqtsink_la_OBJECTS = libgstqtsink_la-gstqsgtexture.lo \
- libgstqtsink_la-qtitem.lo libgstqtsink_la-gstqtsink.lo \
- libgstqtsink_la-gstplugin.lo
-am__objects_1 = libgstqtsink_la-moc_qtitem.lo \
- libgstqtsink_la-moc_gstqsgtexture.lo
+am_libgstqmlgl_la_OBJECTS = libgstqmlgl_la-gstqsgtexture.lo \
+ libgstqmlgl_la-gstqtglutility.lo libgstqmlgl_la-qtitem.lo \
+ libgstqmlgl_la-qtwindow.lo libgstqmlgl_la-gstqtsink.lo \
+ libgstqmlgl_la-gstqtsrc.lo libgstqmlgl_la-gstplugin.lo
+am__objects_1 = libgstqmlgl_la-moc_qtitem.lo \
+ libgstqmlgl_la-moc_qtwindow.lo \
+ libgstqmlgl_la-moc_gstqsgtexture.lo
am__objects_2 = $(am__objects_1)
-nodist_libgstqtsink_la_OBJECTS = $(am__objects_2)
-libgstqtsink_la_OBJECTS = $(am_libgstqtsink_la_OBJECTS) \
- $(nodist_libgstqtsink_la_OBJECTS)
+nodist_libgstqmlgl_la_OBJECTS = $(am__objects_2)
+libgstqmlgl_la_OBJECTS = $(am_libgstqmlgl_la_OBJECTS) \
+ $(nodist_libgstqmlgl_la_OBJECTS)
AM_V_lt = $(am__v_lt_@AM_V@)
am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
am__v_lt_0 = --silent
am__v_lt_1 =
-libgstqtsink_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
- $(libgstqtsink_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link \
- $(CXXLD) $(libgstqtsink_la_CXXFLAGS) $(CXXFLAGS) \
- $(libgstqtsink_la_LDFLAGS) $(LDFLAGS) -o $@
+libgstqmlgl_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
+ $(libgstqmlgl_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link \
+ $(CXXLD) $(libgstqmlgl_la_CXXFLAGS) $(CXXFLAGS) \
+ $(libgstqmlgl_la_LDFLAGS) $(LDFLAGS) -o $@
AM_V_P = $(am__v_P_@AM_V@)
am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
am__v_P_0 = false
@@ -235,8 +237,8 @@
am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
am__v_CCLD_0 = @echo " CCLD " $@;
am__v_CCLD_1 =
-SOURCES = $(libgstqtsink_la_SOURCES) $(nodist_libgstqtsink_la_SOURCES)
-DIST_SOURCES = $(libgstqtsink_la_SOURCES)
+SOURCES = $(libgstqmlgl_la_SOURCES) $(nodist_libgstqmlgl_la_SOURCES)
+DIST_SOURCES = $(libgstqmlgl_la_SOURCES)
am__can_run_installinfo = \
case $$AM_UPDATE_INFO_DIR in \
n|no|NO) false;; \
@@ -351,6 +353,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -400,6 +404,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
@@ -807,30 +813,38 @@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
wayland_scanner = @wayland_scanner@
-plugin_LTLIBRARIES = libgstqtsink.la
+plugin_LTLIBRARIES = libgstqmlgl.la
noinst_HEADERS = \
gstqsgtexture.h \
+ gstqtglutility.h \
gstqtsink.h \
- qtitem.h
+ gstqtsrc.h \
+ qtitem.h \
+ qtwindow.h
moc_generated = \
moc_qtitem.cc \
+ moc_qtwindow.cc \
moc_gstqsgtexture.cc
#anything generated by the Qt tools...
BUILT_SOURCES = $(moc_generated)
CLEANFILES = $(moc_generated)
-nodist_libgstqtsink_la_SOURCES = $(BUILT_SOURCES)
-libgstqtsink_la_SOURCES = \
+nodist_libgstqmlgl_la_SOURCES = $(BUILT_SOURCES)
+libgstqmlgl_la_SOURCES = \
gstqsgtexture.cc \
+ gstqtglutility.cc \
qtitem.cc \
+ qtwindow.cc \
gstqtsink.cc \
gstqtsink.h \
+ gstqtsrc.cc \
+ gstqtsrc.h \
gstqtgl.h \
gstplugin.cc
-libgstqtsink_la_CXXFLAGS = \
+libgstqmlgl_la_CXXFLAGS = \
-I$(top_srcdir)/gst-libs \
-I$(top_builddir)/gst-libs \
$(GST_CXXFLAGS) \
@@ -839,15 +853,15 @@
$(QT_CFLAGS) \
$(GL_CFLAGS)
-libgstqtsink_la_LIBADD = \
+libgstqmlgl_la_LIBADD = \
$(GST_BASE_LIBS) \
$(GST_PLUGINS_BASE_LIBS) \
$(QT_LIBS) \
$(top_builddir)/gst-libs/gst/gl/libgstgl-$(GST_API_VERSION).la \
-lgstvideo-$(GST_API_VERSION)
-libgstqtsink_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
-libgstqtsink_la_LIBTOOLFLAGS = $(GST_PLUGIN_LIBTOOLFLAGS)
+libgstqmlgl_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
+libgstqmlgl_la_LIBTOOLFLAGS = $(GST_PLUGIN_LIBTOOLFLAGS)
all: $(BUILT_SOURCES)
$(MAKE) $(AM_MAKEFLAGS) all-am
@@ -918,8 +932,8 @@
rm -f $${locs}; \
}
-libgstqtsink.la: $(libgstqtsink_la_OBJECTS) $(libgstqtsink_la_DEPENDENCIES) $(EXTRA_libgstqtsink_la_DEPENDENCIES)
- $(AM_V_CXXLD)$(libgstqtsink_la_LINK) -rpath $(plugindir) $(libgstqtsink_la_OBJECTS) $(libgstqtsink_la_LIBADD) $(LIBS)
+libgstqmlgl.la: $(libgstqmlgl_la_OBJECTS) $(libgstqmlgl_la_DEPENDENCIES) $(EXTRA_libgstqmlgl_la_DEPENDENCIES)
+ $(AM_V_CXXLD)$(libgstqmlgl_la_LINK) -rpath $(plugindir) $(libgstqmlgl_la_OBJECTS) $(libgstqmlgl_la_LIBADD) $(LIBS)
mostlyclean-compile:
-rm -f *.$(OBJEXT)
@@ -927,12 +941,16 @@
distclean-compile:
-rm -f *.tab.c
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstqtsink_la-gstplugin.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstqtsink_la-gstqsgtexture.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstqtsink_la-gstqtsink.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstqtsink_la-moc_gstqsgtexture.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstqtsink_la-moc_qtitem.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstqtsink_la-qtitem.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstqmlgl_la-gstplugin.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstqmlgl_la-gstqsgtexture.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstqmlgl_la-gstqtglutility.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstqmlgl_la-gstqtsink.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstqmlgl_la-gstqtsrc.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstqmlgl_la-moc_gstqsgtexture.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstqmlgl_la-moc_qtitem.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstqmlgl_la-moc_qtwindow.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstqmlgl_la-qtitem.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstqmlgl_la-qtwindow.Plo@am__quote@
.cc.o:
@am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
@@ -958,47 +976,75 @@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LTCXXCOMPILE) -c -o $@ $<
-libgstqtsink_la-gstqsgtexture.lo: gstqsgtexture.cc
-@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(libgstqtsink_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstqtsink_la_CXXFLAGS) $(CXXFLAGS) -MT libgstqtsink_la-gstqsgtexture.lo -MD -MP -MF $(DEPDIR)/libgstqtsink_la-gstqsgtexture.Tpo -c -o libgstqtsink_la-gstqsgtexture.lo `test -f 'gstqsgtexture.cc' || echo '$(srcdir)/'`gstqsgtexture.cc
-@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstqtsink_la-gstqsgtexture.Tpo $(DEPDIR)/libgstqtsink_la-gstqsgtexture.Plo
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='gstqsgtexture.cc' object='libgstqtsink_la-gstqsgtexture.lo' libtool=yes @AMDEPBACKSLASH@
+libgstqmlgl_la-gstqsgtexture.lo: gstqsgtexture.cc
+@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(libgstqmlgl_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstqmlgl_la_CXXFLAGS) $(CXXFLAGS) -MT libgstqmlgl_la-gstqsgtexture.lo -MD -MP -MF $(DEPDIR)/libgstqmlgl_la-gstqsgtexture.Tpo -c -o libgstqmlgl_la-gstqsgtexture.lo `test -f 'gstqsgtexture.cc' || echo '$(srcdir)/'`gstqsgtexture.cc
+@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstqmlgl_la-gstqsgtexture.Tpo $(DEPDIR)/libgstqmlgl_la-gstqsgtexture.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='gstqsgtexture.cc' object='libgstqmlgl_la-gstqsgtexture.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(libgstqtsink_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstqtsink_la_CXXFLAGS) $(CXXFLAGS) -c -o libgstqtsink_la-gstqsgtexture.lo `test -f 'gstqsgtexture.cc' || echo '$(srcdir)/'`gstqsgtexture.cc
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(libgstqmlgl_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstqmlgl_la_CXXFLAGS) $(CXXFLAGS) -c -o libgstqmlgl_la-gstqsgtexture.lo `test -f 'gstqsgtexture.cc' || echo '$(srcdir)/'`gstqsgtexture.cc
-libgstqtsink_la-qtitem.lo: qtitem.cc
-@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(libgstqtsink_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstqtsink_la_CXXFLAGS) $(CXXFLAGS) -MT libgstqtsink_la-qtitem.lo -MD -MP -MF $(DEPDIR)/libgstqtsink_la-qtitem.Tpo -c -o libgstqtsink_la-qtitem.lo `test -f 'qtitem.cc' || echo '$(srcdir)/'`qtitem.cc
-@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstqtsink_la-qtitem.Tpo $(DEPDIR)/libgstqtsink_la-qtitem.Plo
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='qtitem.cc' object='libgstqtsink_la-qtitem.lo' libtool=yes @AMDEPBACKSLASH@
+libgstqmlgl_la-gstqtglutility.lo: gstqtglutility.cc
+@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(libgstqmlgl_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstqmlgl_la_CXXFLAGS) $(CXXFLAGS) -MT libgstqmlgl_la-gstqtglutility.lo -MD -MP -MF $(DEPDIR)/libgstqmlgl_la-gstqtglutility.Tpo -c -o libgstqmlgl_la-gstqtglutility.lo `test -f 'gstqtglutility.cc' || echo '$(srcdir)/'`gstqtglutility.cc
+@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstqmlgl_la-gstqtglutility.Tpo $(DEPDIR)/libgstqmlgl_la-gstqtglutility.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='gstqtglutility.cc' object='libgstqmlgl_la-gstqtglutility.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(libgstqtsink_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstqtsink_la_CXXFLAGS) $(CXXFLAGS) -c -o libgstqtsink_la-qtitem.lo `test -f 'qtitem.cc' || echo '$(srcdir)/'`qtitem.cc
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(libgstqmlgl_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstqmlgl_la_CXXFLAGS) $(CXXFLAGS) -c -o libgstqmlgl_la-gstqtglutility.lo `test -f 'gstqtglutility.cc' || echo '$(srcdir)/'`gstqtglutility.cc
-libgstqtsink_la-gstqtsink.lo: gstqtsink.cc
-@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(libgstqtsink_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstqtsink_la_CXXFLAGS) $(CXXFLAGS) -MT libgstqtsink_la-gstqtsink.lo -MD -MP -MF $(DEPDIR)/libgstqtsink_la-gstqtsink.Tpo -c -o libgstqtsink_la-gstqtsink.lo `test -f 'gstqtsink.cc' || echo '$(srcdir)/'`gstqtsink.cc
-@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstqtsink_la-gstqtsink.Tpo $(DEPDIR)/libgstqtsink_la-gstqtsink.Plo
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='gstqtsink.cc' object='libgstqtsink_la-gstqtsink.lo' libtool=yes @AMDEPBACKSLASH@
+libgstqmlgl_la-qtitem.lo: qtitem.cc
+@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(libgstqmlgl_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstqmlgl_la_CXXFLAGS) $(CXXFLAGS) -MT libgstqmlgl_la-qtitem.lo -MD -MP -MF $(DEPDIR)/libgstqmlgl_la-qtitem.Tpo -c -o libgstqmlgl_la-qtitem.lo `test -f 'qtitem.cc' || echo '$(srcdir)/'`qtitem.cc
+@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstqmlgl_la-qtitem.Tpo $(DEPDIR)/libgstqmlgl_la-qtitem.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='qtitem.cc' object='libgstqmlgl_la-qtitem.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(libgstqtsink_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstqtsink_la_CXXFLAGS) $(CXXFLAGS) -c -o libgstqtsink_la-gstqtsink.lo `test -f 'gstqtsink.cc' || echo '$(srcdir)/'`gstqtsink.cc
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(libgstqmlgl_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstqmlgl_la_CXXFLAGS) $(CXXFLAGS) -c -o libgstqmlgl_la-qtitem.lo `test -f 'qtitem.cc' || echo '$(srcdir)/'`qtitem.cc
-libgstqtsink_la-gstplugin.lo: gstplugin.cc
-@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(libgstqtsink_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstqtsink_la_CXXFLAGS) $(CXXFLAGS) -MT libgstqtsink_la-gstplugin.lo -MD -MP -MF $(DEPDIR)/libgstqtsink_la-gstplugin.Tpo -c -o libgstqtsink_la-gstplugin.lo `test -f 'gstplugin.cc' || echo '$(srcdir)/'`gstplugin.cc
-@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstqtsink_la-gstplugin.Tpo $(DEPDIR)/libgstqtsink_la-gstplugin.Plo
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='gstplugin.cc' object='libgstqtsink_la-gstplugin.lo' libtool=yes @AMDEPBACKSLASH@
+libgstqmlgl_la-qtwindow.lo: qtwindow.cc
+@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(libgstqmlgl_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstqmlgl_la_CXXFLAGS) $(CXXFLAGS) -MT libgstqmlgl_la-qtwindow.lo -MD -MP -MF $(DEPDIR)/libgstqmlgl_la-qtwindow.Tpo -c -o libgstqmlgl_la-qtwindow.lo `test -f 'qtwindow.cc' || echo '$(srcdir)/'`qtwindow.cc
+@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstqmlgl_la-qtwindow.Tpo $(DEPDIR)/libgstqmlgl_la-qtwindow.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='qtwindow.cc' object='libgstqmlgl_la-qtwindow.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(libgstqtsink_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstqtsink_la_CXXFLAGS) $(CXXFLAGS) -c -o libgstqtsink_la-gstplugin.lo `test -f 'gstplugin.cc' || echo '$(srcdir)/'`gstplugin.cc
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(libgstqmlgl_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstqmlgl_la_CXXFLAGS) $(CXXFLAGS) -c -o libgstqmlgl_la-qtwindow.lo `test -f 'qtwindow.cc' || echo '$(srcdir)/'`qtwindow.cc
-libgstqtsink_la-moc_qtitem.lo: moc_qtitem.cc
-@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(libgstqtsink_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstqtsink_la_CXXFLAGS) $(CXXFLAGS) -MT libgstqtsink_la-moc_qtitem.lo -MD -MP -MF $(DEPDIR)/libgstqtsink_la-moc_qtitem.Tpo -c -o libgstqtsink_la-moc_qtitem.lo `test -f 'moc_qtitem.cc' || echo '$(srcdir)/'`moc_qtitem.cc
-@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstqtsink_la-moc_qtitem.Tpo $(DEPDIR)/libgstqtsink_la-moc_qtitem.Plo
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='moc_qtitem.cc' object='libgstqtsink_la-moc_qtitem.lo' libtool=yes @AMDEPBACKSLASH@
+libgstqmlgl_la-gstqtsink.lo: gstqtsink.cc
+@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(libgstqmlgl_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstqmlgl_la_CXXFLAGS) $(CXXFLAGS) -MT libgstqmlgl_la-gstqtsink.lo -MD -MP -MF $(DEPDIR)/libgstqmlgl_la-gstqtsink.Tpo -c -o libgstqmlgl_la-gstqtsink.lo `test -f 'gstqtsink.cc' || echo '$(srcdir)/'`gstqtsink.cc
+@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstqmlgl_la-gstqtsink.Tpo $(DEPDIR)/libgstqmlgl_la-gstqtsink.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='gstqtsink.cc' object='libgstqmlgl_la-gstqtsink.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(libgstqtsink_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstqtsink_la_CXXFLAGS) $(CXXFLAGS) -c -o libgstqtsink_la-moc_qtitem.lo `test -f 'moc_qtitem.cc' || echo '$(srcdir)/'`moc_qtitem.cc
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(libgstqmlgl_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstqmlgl_la_CXXFLAGS) $(CXXFLAGS) -c -o libgstqmlgl_la-gstqtsink.lo `test -f 'gstqtsink.cc' || echo '$(srcdir)/'`gstqtsink.cc
-libgstqtsink_la-moc_gstqsgtexture.lo: moc_gstqsgtexture.cc
-@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(libgstqtsink_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstqtsink_la_CXXFLAGS) $(CXXFLAGS) -MT libgstqtsink_la-moc_gstqsgtexture.lo -MD -MP -MF $(DEPDIR)/libgstqtsink_la-moc_gstqsgtexture.Tpo -c -o libgstqtsink_la-moc_gstqsgtexture.lo `test -f 'moc_gstqsgtexture.cc' || echo '$(srcdir)/'`moc_gstqsgtexture.cc
-@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstqtsink_la-moc_gstqsgtexture.Tpo $(DEPDIR)/libgstqtsink_la-moc_gstqsgtexture.Plo
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='moc_gstqsgtexture.cc' object='libgstqtsink_la-moc_gstqsgtexture.lo' libtool=yes @AMDEPBACKSLASH@
+libgstqmlgl_la-gstqtsrc.lo: gstqtsrc.cc
+@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(libgstqmlgl_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstqmlgl_la_CXXFLAGS) $(CXXFLAGS) -MT libgstqmlgl_la-gstqtsrc.lo -MD -MP -MF $(DEPDIR)/libgstqmlgl_la-gstqtsrc.Tpo -c -o libgstqmlgl_la-gstqtsrc.lo `test -f 'gstqtsrc.cc' || echo '$(srcdir)/'`gstqtsrc.cc
+@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstqmlgl_la-gstqtsrc.Tpo $(DEPDIR)/libgstqmlgl_la-gstqtsrc.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='gstqtsrc.cc' object='libgstqmlgl_la-gstqtsrc.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(libgstqtsink_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstqtsink_la_CXXFLAGS) $(CXXFLAGS) -c -o libgstqtsink_la-moc_gstqsgtexture.lo `test -f 'moc_gstqsgtexture.cc' || echo '$(srcdir)/'`moc_gstqsgtexture.cc
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(libgstqmlgl_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstqmlgl_la_CXXFLAGS) $(CXXFLAGS) -c -o libgstqmlgl_la-gstqtsrc.lo `test -f 'gstqtsrc.cc' || echo '$(srcdir)/'`gstqtsrc.cc
+
+libgstqmlgl_la-gstplugin.lo: gstplugin.cc
+@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(libgstqmlgl_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstqmlgl_la_CXXFLAGS) $(CXXFLAGS) -MT libgstqmlgl_la-gstplugin.lo -MD -MP -MF $(DEPDIR)/libgstqmlgl_la-gstplugin.Tpo -c -o libgstqmlgl_la-gstplugin.lo `test -f 'gstplugin.cc' || echo '$(srcdir)/'`gstplugin.cc
+@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstqmlgl_la-gstplugin.Tpo $(DEPDIR)/libgstqmlgl_la-gstplugin.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='gstplugin.cc' object='libgstqmlgl_la-gstplugin.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(libgstqmlgl_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstqmlgl_la_CXXFLAGS) $(CXXFLAGS) -c -o libgstqmlgl_la-gstplugin.lo `test -f 'gstplugin.cc' || echo '$(srcdir)/'`gstplugin.cc
+
+libgstqmlgl_la-moc_qtitem.lo: moc_qtitem.cc
+@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(libgstqmlgl_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstqmlgl_la_CXXFLAGS) $(CXXFLAGS) -MT libgstqmlgl_la-moc_qtitem.lo -MD -MP -MF $(DEPDIR)/libgstqmlgl_la-moc_qtitem.Tpo -c -o libgstqmlgl_la-moc_qtitem.lo `test -f 'moc_qtitem.cc' || echo '$(srcdir)/'`moc_qtitem.cc
+@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstqmlgl_la-moc_qtitem.Tpo $(DEPDIR)/libgstqmlgl_la-moc_qtitem.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='moc_qtitem.cc' object='libgstqmlgl_la-moc_qtitem.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(libgstqmlgl_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstqmlgl_la_CXXFLAGS) $(CXXFLAGS) -c -o libgstqmlgl_la-moc_qtitem.lo `test -f 'moc_qtitem.cc' || echo '$(srcdir)/'`moc_qtitem.cc
+
+libgstqmlgl_la-moc_qtwindow.lo: moc_qtwindow.cc
+@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(libgstqmlgl_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstqmlgl_la_CXXFLAGS) $(CXXFLAGS) -MT libgstqmlgl_la-moc_qtwindow.lo -MD -MP -MF $(DEPDIR)/libgstqmlgl_la-moc_qtwindow.Tpo -c -o libgstqmlgl_la-moc_qtwindow.lo `test -f 'moc_qtwindow.cc' || echo '$(srcdir)/'`moc_qtwindow.cc
+@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstqmlgl_la-moc_qtwindow.Tpo $(DEPDIR)/libgstqmlgl_la-moc_qtwindow.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='moc_qtwindow.cc' object='libgstqmlgl_la-moc_qtwindow.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(libgstqmlgl_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstqmlgl_la_CXXFLAGS) $(CXXFLAGS) -c -o libgstqmlgl_la-moc_qtwindow.lo `test -f 'moc_qtwindow.cc' || echo '$(srcdir)/'`moc_qtwindow.cc
+
+libgstqmlgl_la-moc_gstqsgtexture.lo: moc_gstqsgtexture.cc
+@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(libgstqmlgl_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstqmlgl_la_CXXFLAGS) $(CXXFLAGS) -MT libgstqmlgl_la-moc_gstqsgtexture.lo -MD -MP -MF $(DEPDIR)/libgstqmlgl_la-moc_gstqsgtexture.Tpo -c -o libgstqmlgl_la-moc_gstqsgtexture.lo `test -f 'moc_gstqsgtexture.cc' || echo '$(srcdir)/'`moc_gstqsgtexture.cc
+@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstqmlgl_la-moc_gstqsgtexture.Tpo $(DEPDIR)/libgstqmlgl_la-moc_gstqsgtexture.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='moc_gstqsgtexture.cc' object='libgstqmlgl_la-moc_gstqsgtexture.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(libgstqmlgl_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstqmlgl_la_CXXFLAGS) $(CXXFLAGS) -c -o libgstqmlgl_la-moc_gstqsgtexture.lo `test -f 'moc_gstqsgtexture.cc' || echo '$(srcdir)/'`moc_gstqsgtexture.cc
mostlyclean-libtool:
-rm -f *.lo
diff --git a/ext/qt/gstplugin.cc b/ext/qt/gstplugin.cc
index 2fa10f5..01ca275 100644
--- a/ext/qt/gstplugin.cc
+++ b/ext/qt/gstplugin.cc
@@ -23,6 +23,7 @@
#endif
#include "gstqtsink.h"
+#include "gstqtsrc.h"
#include <QtQml/QQmlApplicationEngine>
static gboolean
@@ -32,6 +33,11 @@
GST_RANK_NONE, GST_TYPE_QT_SINK)) {
return FALSE;
}
+
+ if (!gst_element_register (plugin, "qmlglsrc",
+ GST_RANK_NONE, GST_TYPE_QT_SRC)) {
+ return FALSE;
+ }
/* this means the plugin must be loaded before the qml engine is loaded */
qmlRegisterType<QtGLVideoItem> ("org.freedesktop.gstreamer.GLVideoItem", 1, 0, "GstGLVideoItem");
@@ -41,6 +47,6 @@
GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
GST_VERSION_MINOR,
qt,
- "Qt sink",
+ "Qt gl plugin",
plugin_init, PACKAGE_VERSION, GST_LICENSE, GST_PACKAGE_NAME,
GST_PACKAGE_ORIGIN)
diff --git a/ext/qt/gstqtglutility.cc b/ext/qt/gstqtglutility.cc
new file mode 100644
index 0000000..4d6d318
--- /dev/null
+++ b/ext/qt/gstqtglutility.cc
@@ -0,0 +1,214 @@
+/*
+ * GStreamer
+ * Copyright (C) 2016 Freescale Semiconductor, Inc. All rights reserved.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "gstqtglutility.h"
+#include <QtGui/QGuiApplication>
+
+#if GST_GL_HAVE_WINDOW_X11 && GST_GL_HAVE_PLATFORM_GLX && defined (HAVE_QT_X11)
+#include <QX11Info>
+#include <gst/gl/x11/gstgldisplay_x11.h>
+#include <gst/gl/x11/gstglcontext_glx.h>
+#endif
+
+#if GST_GL_HAVE_WINDOW_WAYLAND && GST_GL_HAVE_PLATFORM_EGL && defined (HAVE_QT_WAYLAND)
+#include <qpa/qplatformnativeinterface.h>
+#include <gst/gl/wayland/gstgldisplay_wayland.h>
+#endif
+
+#if GST_GL_HAVE_PLATFORM_EGL && defined (HAVE_QT_EGLFS)
+#include <gst/gl/egl/gstgldisplay_egl.h>
+#include <gst/gl/egl/gstglcontext_egl.h>
+#endif
+
+#if GST_GL_HAVE_WINDOW_COCOA && GST_GL_HAVE_PLATFORM_COCOA && defined (HAVE_QT_MAC)
+#include <gst/gl/coaoa/gstgldisplay_cocoa.h>
+#endif
+
+#define GST_CAT_DEFAULT qt_gl_utils_debug
+GST_DEBUG_CATEGORY_STATIC (GST_CAT_DEFAULT);
+
+GstGLDisplay *
+gst_qt_get_gl_display ()
+{
+ GstGLDisplay *display = NULL;
+ QGuiApplication *app = static_cast<QGuiApplication *> (QCoreApplication::instance ());
+ static volatile gsize _debug;
+
+ g_assert (app != NULL);
+
+ if (g_once_init_enter (&_debug)) {
+ GST_DEBUG_CATEGORY_INIT (GST_CAT_DEFAULT, "qtglutility", 0,
+ "Qt gl utility functions");
+ g_once_init_leave (&_debug, 1);
+ }
+ GST_INFO ("QGuiApplication::instance()->platformName() %s", app->platformName().toUtf8().data());
+
+#if GST_GL_HAVE_WINDOW_X11 && defined (HAVE_QT_X11)
+ if (QString::fromUtf8 ("xcb") == app->platformName())
+ display = (GstGLDisplay *)
+ gst_gl_display_x11_new_with_display (QX11Info::display ());
+#endif
+#if GST_GL_HAVE_WINDOW_WAYLAND && GST_GL_HAVE_PLATFORM_EGL && defined (HAVE_QT_WAYLAND)
+ if (QString::fromUtf8 ("wayland") == app->platformName()
+ || QString::fromUtf8 ("wayland-egl") == app->platformName()){
+ struct wl_display * wayland_display;
+ QPlatformNativeInterface *native =
+ QGuiApplication::platformNativeInterface();
+ wayland_display = (struct wl_display *)
+ native->nativeResourceForWindow("display", NULL);
+ display = (GstGLDisplay *)
+ gst_gl_display_wayland_new_with_display (wayland_display);
+ }
+#endif
+#if GST_GL_HAVE_PLATFORM_EGL && GST_GL_HAVE_WINDOW_ANDROID
+ if (QString::fromUtf8 ("android") == app->platformName())
+ display = (GstGLDisplay *) gst_gl_display_egl_new ();
+#elif GST_GL_HAVE_PLATFORM_EGL && defined (HAVE_QT_EGLFS)
+ if (QString::fromUtf8("eglfs") == app->platformName())
+ display = (GstGLDisplay *) gst_gl_display_egl_new ();
+#endif
+
+#if GST_GL_HAVE_WINDOW_COCOA && GST_GL_HAVE_PLATFORM_COCOA && defined (HAVE_QT_MAC)
+ if (QString::fromUtf8 ("cocoa") == app->platformName())
+ display = (GstGLDisplay *) gst_gl_display_cocoa_new ();
+#endif
+#if GST_GL_HAVE_WINDOW_EAGL && GST_GL_HAVE_PLATFORM_EAGL && defined (HAVE_QT_IOS)
+ if (QString::fromUtf8 ("ios") == app->platformName())
+ display = gst_gl_display_new ();
+#endif
+#if GST_GL_HAVE_WINDOW_WIN32 && GST_GL_HAVE_PLATFORM_WGL && defined (HAVE_QT_WIN32)
+ if (QString::fromUtf8 ("windows") == app->platformName())
+ display = gst_gl_display_new ();
+#endif
+
+ if (!display)
+ display = gst_gl_display_new ();
+
+ return display;
+}
+
+gboolean
+gst_qt_get_gl_wrapcontext (GstGLDisplay * display,
+ GstGLContext **wrap_glcontext, GstGLContext **context)
+{
+ GstGLPlatform platform = (GstGLPlatform) 0;
+ GstGLAPI gl_api;
+ guintptr gl_handle;
+ GError *error = NULL;
+
+ g_return_val_if_fail (display != NULL && wrap_glcontext != NULL, FALSE);
+
+#if GST_GL_HAVE_WINDOW_X11 && defined (HAVE_QT_X11)
+ if (GST_IS_GL_DISPLAY_X11 (display)) {
+ platform = GST_GL_PLATFORM_GLX;
+ }
+#endif
+#if GST_GL_HAVE_WINDOW_WAYLAND && defined (HAVE_QT_WAYLAND)
+ if (GST_IS_GL_DISPLAY_WAYLAND (display)) {
+ platform = GST_GL_PLATFORM_EGL;
+ }
+#endif
+#if GST_GL_HAVE_PLATFORM_EGL && defined (HAVE_QT_EGLFS)
+ if (GST_IS_GL_DISPLAY_EGL (display)) {
+ platform = GST_GL_PLATFORM_EGL;
+ }
+#endif
+ if (platform == 0) {
+#if GST_GL_HAVE_WINDOW_COCOA && GST_GL_HAVE_PLATFORM_COCOA && defined (HAVE_QT_MAC)
+ platform = GST_GL_PLATFORM_CGL;
+#elif GST_GL_HAVE_WINDOW_EAGL && GST_GL_HAVE_PLATFORM_EAGL && defined (HAVE_QT_IOS)
+ platform = GST_GL_PLATFORM_EAGL;
+#elif GST_GL_HAVE_WINDOW_WIN32 && GST_GL_HAVE_PLATFORM_WGL && defined (HAVE_QT_WIN32)
+ platform = GST_GL_PLATFORM_WGL;
+#else
+ GST_ERROR ("Unknown platform");
+ return FALSE;
+#endif
+ }
+
+ gl_api = gst_gl_context_get_current_gl_api (platform, NULL, NULL);
+ gl_handle = gst_gl_context_get_current_gl_context (platform);
+ if (gl_handle)
+ *wrap_glcontext =
+ gst_gl_context_new_wrapped (display, gl_handle,
+ platform, gl_api);
+
+ if (!*wrap_glcontext) {
+ GST_ERROR ("cannot wrap qt OpenGL context");
+ return FALSE;
+ }
+
+ (void) platform;
+ (void) gl_api;
+ (void) gl_handle;
+
+ gst_gl_context_activate (*wrap_glcontext, TRUE);
+ if (!gst_gl_context_fill_info (*wrap_glcontext, &error)) {
+ GST_ERROR ("failed to retrieve qt context info: %s", error->message);
+ g_object_unref (*wrap_glcontext);
+ *wrap_glcontext = NULL;
+ return FALSE;
+ } else {
+ gst_gl_display_filter_gl_api (display, gst_gl_context_get_gl_api (*wrap_glcontext));
+#if GST_GL_HAVE_WINDOW_WIN32 && GST_GL_HAVE_PLATFORM_WGL && defined (HAVE_QT_WIN32)
+ g_return_val_if_fail (context != NULL, FALSE);
+
+ G_STMT_START {
+ GstGLWindow *window;
+ HDC device;
+
+ /* If there's no wglCreateContextAttribsARB() support, then we would fallback to
+ * wglShareLists() which will fail with ERROR_BUSY (0xaa) if either of the GL
+ * contexts are current in any other thread.
+ *
+ * The workaround here is to temporarily disable Qt's GL context while we
+ * set up our own.
+ *
+ * Sometimes wglCreateContextAttribsARB()
+ * exists, but isn't functional (some Intel drivers), so it's easiest to do this
+ * unconditionally.
+ */
+ *context = gst_gl_context_new (display);
+ window = gst_gl_context_get_window (*context);
+ device = (HDC) gst_gl_window_get_display (window);
+
+ wglMakeCurrent (device, 0);
+ gst_object_unref (window);
+ if (!gst_gl_context_create (*context, *wrap_glcontext, &error)) {
+ GST_ERROR ("%p failed to create shared GL context: %s", this, error->message);
+ g_object_unref (*context);
+ *context = NULL;
+ g_object_unref (*wrap_glcontext);
+ *wrap_glcontext = NULL;
+ wglMakeCurrent (device, (HGLRC) gl_handle);
+ return FALSE;
+ }
+ wglMakeCurrent (device, (HGLRC) gl_handle);
+ }
+#endif
+ gst_gl_context_activate (*wrap_glcontext, FALSE);
+ } G_STMT_END;
+
+ return TRUE;
+}
diff --git a/sys/applemedia-nonpublic/bufferfactory.h b/ext/qt/gstqtglutility.h
similarity index 66%
copy from sys/applemedia-nonpublic/bufferfactory.h
copy to ext/qt/gstqtglutility.h
index 132b953..ca90237 100644
--- a/sys/applemedia-nonpublic/bufferfactory.h
+++ b/ext/qt/gstqtglutility.h
@@ -1,5 +1,6 @@
/*
- * Copyright (C) 2010 Ole André Vadla Ravnås <oleavr@soundrop.com>
+ * GStreamer
+ * Copyright (C) 2016 Freescale Semiconductor, Inc. All rights reserved.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
@@ -17,18 +18,17 @@
* Boston, MA 02110-1301, USA.
*/
-#import <Foundation/Foundation.h>
+#ifndef __QT_GL_UTILS_H__
+#define __QT_GL_UTILS_H__
#include <gst/gst.h>
+#include <gst/gl/gl.h>
-@interface GstAMBufferFactory : NSObject {
- gpointer coreMediaCtx;
-}
+G_BEGIN_DECLS
-- (id)initWithError:(GError **)error;
-- (void)finalize;
+GstGLDisplay * gst_qt_get_gl_display ();
+gboolean gst_qt_get_gl_wrapcontext (GstGLDisplay * display,
+ GstGLContext **wrap_glcontext, GstGLContext **context);
-- (GstBuffer *)createGstBufferForCoreVideoBuffer:(CFTypeRef)cvbuf;
-- (GstBuffer *)createGstBufferForSampleBuffer:(CFTypeRef)sbuf;
-
-@end
+G_END_DECLS
+#endif /* __QT_GL_UTILS_H__ */
diff --git a/ext/qt/gstqtsrc.cc b/ext/qt/gstqtsrc.cc
new file mode 100644
index 0000000..3cfc709
--- /dev/null
+++ b/ext/qt/gstqtsrc.cc
@@ -0,0 +1,606 @@
+/*
+ * GStreamer
+ * Copyright (C) 2016 Freescale Semiconductor, Inc. All rights reserved.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+/**
+ * SECTION:qmlglsrc
+ *
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "gstqtsrc.h"
+#include <QtGui/QGuiApplication>
+
+#define GST_CAT_DEFAULT gst_debug_qt_gl_src
+GST_DEBUG_CATEGORY (GST_CAT_DEFAULT);
+
+#define DEFAULT_IS_LIVE TRUE
+
+static void gst_qt_src_set_property (GObject * object, guint prop_id,
+ const GValue * value, GParamSpec * pspec);
+static void gst_qt_src_get_property (GObject * object, guint prop_id,
+ GValue * value, GParamSpec * pspec);
+
+static void gst_qt_src_finalize (GObject * object);
+
+static gboolean gst_qt_src_setcaps (GstBaseSrc * bsrc, GstCaps * caps);
+static GstCaps *gst_qt_src_get_caps (GstBaseSrc * bsrc, GstCaps * filter);
+static gboolean gst_qt_src_query (GstBaseSrc * bsrc, GstQuery * query);
+
+static gboolean gst_qt_src_decide_allocation (GstBaseSrc * bsrc,
+ GstQuery * query);
+static GstFlowReturn gst_qt_src_fill (GstPushSrc * psrc, GstBuffer * buffer);
+static GstStateChangeReturn gst_qt_src_change_state (GstElement * element,
+ GstStateChange transition);
+static gboolean gst_qt_src_start (GstBaseSrc * basesrc);
+static gboolean gst_qt_src_stop (GstBaseSrc * basesrc);
+
+static GstStaticPadTemplate gst_qt_src_template =
+GST_STATIC_PAD_TEMPLATE ("src",
+ GST_PAD_SRC,
+ GST_PAD_ALWAYS,
+ GST_STATIC_CAPS ("video/x-raw(" GST_CAPS_FEATURE_MEMORY_GL_MEMORY "), "
+ "format = (string) RGBA, "
+ "width = " GST_VIDEO_SIZE_RANGE ", "
+ "height = " GST_VIDEO_SIZE_RANGE ", "
+ "framerate = " GST_VIDEO_FPS_RANGE ", "
+ "texture-target = (string) 2D"));
+
+enum
+{
+ ARG_0,
+ PROP_WINDOW,
+ PROP_DEFAULT_FBO
+};
+
+#define gst_qt_src_parent_class parent_class
+G_DEFINE_TYPE_WITH_CODE (GstQtSrc, gst_qt_src,
+ GST_TYPE_PUSH_SRC, GST_DEBUG_CATEGORY_INIT (GST_CAT_DEFAULT,
+ "qtsrc", 0, "Qt Video Src"));
+
+static const gfloat vertical_flip_matrix[] = {
+ 1.0f, 0.0f, 0.0f, 0.0f,
+ 0.0f, -1.0f, 0.0f, 1.0f,
+ 0.0f, 0.0f, 1.0f, 0.0f,
+ 0.0f, 0.0f, 0.0f, 1.0f,
+};
+
+static void
+gst_qt_src_class_init (GstQtSrcClass * klass)
+{
+ GObjectClass *gobject_class = (GObjectClass *) klass;
+ GstElementClass *gstelement_class = (GstElementClass *) klass;
+ GstBaseSrcClass *gstbasesrc_class = (GstBaseSrcClass *) klass;
+ GstPushSrcClass *gstpushsrc_class = (GstPushSrcClass *) klass;
+
+ gobject_class->set_property = gst_qt_src_set_property;
+ gobject_class->get_property = gst_qt_src_get_property;
+ gobject_class->finalize = gst_qt_src_finalize;
+
+ gst_element_class_set_metadata (gstelement_class, "Qt Video Source",
+ "Source/Video", "A video src the grab window from a qml view",
+ "Multimedia Team <shmmmw@freescale.com>");
+
+ g_object_class_install_property (gobject_class, PROP_WINDOW,
+ g_param_spec_pointer ("window", "QQuickWindow",
+ "The QQuickWindow to place in the object heirachy",
+ (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));
+
+ g_object_class_install_property (gobject_class, PROP_DEFAULT_FBO,
+ g_param_spec_boolean ("use-default-fbo",
+ "If use default fbo",
+ "When set TRUE, it will not create new fbo for qml render thread",
+ FALSE, (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));
+
+ gst_element_class_add_pad_template (gstelement_class,
+ gst_static_pad_template_get (&gst_qt_src_template));
+
+ gstelement_class->change_state = gst_qt_src_change_state;
+ gstbasesrc_class->set_caps = gst_qt_src_setcaps;
+ gstbasesrc_class->get_caps = gst_qt_src_get_caps;
+ gstbasesrc_class->query = gst_qt_src_query;
+ gstbasesrc_class->start = gst_qt_src_start;
+ gstbasesrc_class->stop = gst_qt_src_stop;
+ gstbasesrc_class->decide_allocation = gst_qt_src_decide_allocation;
+
+ gstpushsrc_class->fill = gst_qt_src_fill;
+}
+
+static void
+gst_qt_src_init (GstQtSrc * src)
+{
+ gst_base_src_set_format (GST_BASE_SRC (src), GST_FORMAT_TIME);
+ gst_base_src_set_live (GST_BASE_SRC (src), DEFAULT_IS_LIVE);
+ src->default_fbo = FALSE;
+ src->pending_image_orientation = TRUE;
+}
+
+static void
+gst_qt_src_set_property (GObject * object, guint prop_id,
+ const GValue * value, GParamSpec * pspec)
+{
+ GstQtSrc *qt_src = GST_QT_SRC (object);
+
+ switch (prop_id) {
+ case PROP_WINDOW:{
+ qt_src->qwindow =
+ static_cast < QQuickWindow * >(g_value_get_pointer (value));
+
+ if (qt_src->window)
+ delete qt_src->window;
+ if (qt_src->qwindow)
+ qt_src->window = new QtGLWindow (NULL, qt_src->qwindow);
+
+ break;
+ }
+ case PROP_DEFAULT_FBO:
+ qt_src->default_fbo = g_value_get_boolean (value);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+gst_qt_src_get_property (GObject * object, guint prop_id,
+ GValue * value, GParamSpec * pspec)
+{
+ GstQtSrc *qt_src = GST_QT_SRC (object);
+
+ switch (prop_id) {
+ case PROP_WINDOW:
+ g_value_set_pointer (value, qt_src->qwindow);
+ break;
+ case PROP_DEFAULT_FBO:
+ g_value_set_boolean (value, qt_src->default_fbo);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+gst_qt_src_finalize (GObject * object)
+{
+ GstQtSrc *qt_src = GST_QT_SRC (object);
+
+ GST_DEBUG ("qmlglsrc finalize");
+ if (qt_src->context)
+ gst_object_unref (qt_src->context);
+ qt_src->context = NULL;
+
+ if (qt_src->qt_context)
+ gst_object_unref (qt_src->qt_context);
+ qt_src->qt_context = NULL;
+
+ if (qt_src->display)
+ gst_object_unref (qt_src->display);
+ qt_src->display = NULL;
+
+ if (qt_src->window)
+ delete qt_src->window;
+
+ G_OBJECT_CLASS (parent_class)->finalize (object);
+}
+
+static gboolean
+gst_qt_src_setcaps (GstBaseSrc * bsrc, GstCaps * caps)
+{
+ GstQtSrc *qt_src = GST_QT_SRC (bsrc);
+
+ GST_DEBUG ("set caps with %" GST_PTR_FORMAT, caps);
+
+ if (!gst_video_info_from_caps (&qt_src->v_info, caps))
+ return FALSE;
+
+ if (!qt_window_set_caps (qt_src->window, caps))
+ return FALSE;
+
+ return TRUE;
+}
+
+static GstCaps *
+gst_qt_src_get_caps (GstBaseSrc * bsrc, GstCaps * filter)
+{
+ GstCaps *caps = NULL, *temp = NULL;
+ GstPadTemplate *pad_template;
+ GstBaseSrcClass *bclass = GST_BASE_SRC_GET_CLASS (bsrc);
+ GstQtSrc *qt_src = GST_QT_SRC (bsrc);
+ guint i;
+ gint width, height;
+
+ if (qt_src->window) {
+ qt_src->window->getGeometry (&width, &height);
+ }
+
+ pad_template =
+ gst_element_class_get_pad_template (GST_ELEMENT_CLASS (bclass), "src");
+ if (pad_template != NULL)
+ caps = gst_pad_template_get_caps (pad_template);
+
+ if (qt_src->window) {
+ temp = gst_caps_copy (caps);
+ guint n_caps = gst_caps_get_size (caps);
+
+ for (i = 0; i < n_caps; i++) {
+ GstStructure *s = gst_caps_get_structure (temp, i);
+ gst_structure_set (s, "width", G_TYPE_INT, width, NULL);
+ gst_structure_set (s, "height", G_TYPE_INT, height, NULL);
+ /* because the framerate is unknown */
+ gst_structure_set (s, "framerate", GST_TYPE_FRACTION, 0, 1, NULL);
+ gst_structure_set (s, "pixel-aspect-ratio",
+ GST_TYPE_FRACTION, 1, 1, NULL);
+ }
+
+ gst_caps_unref (caps);
+ caps = temp;
+ }
+
+ if (filter) {
+ GstCaps *intersection;
+
+ intersection =
+ gst_caps_intersect_full (filter, caps, GST_CAPS_INTERSECT_FIRST);
+ gst_caps_unref (caps);
+ caps = intersection;
+ }
+
+ return caps;
+}
+
+static gboolean
+gst_qt_src_query (GstBaseSrc * bsrc, GstQuery * query)
+{
+ GstQtSrc *qt_src = GST_QT_SRC (bsrc);
+ gboolean res = FALSE;
+
+ switch (GST_QUERY_TYPE (query)) {
+ case GST_QUERY_CONTEXT:
+ {
+ const gchar *context_type;
+ GstContext *context, *old_context;
+ gboolean ret;
+
+ if (!qt_window_is_scenegraph_initialized (qt_src->window))
+ return FALSE;
+
+ if (!qt_src->display && !qt_src->qt_context) {
+ qt_src->display = qt_window_get_display (qt_src->window);
+ qt_src->qt_context = qt_window_get_qt_context (qt_src->window);
+ }
+
+ ret = gst_gl_handle_context_query ((GstElement *) qt_src, query,
+ &qt_src->display, &qt_src->qt_context);
+
+ if (qt_src->display)
+ gst_gl_display_filter_gl_api (qt_src->display,
+ gst_gl_context_get_gl_api (qt_src->qt_context));
+
+ gst_query_parse_context_type (query, &context_type);
+
+ if (g_strcmp0 (context_type, "gst.gl.app_context") == 0) {
+ GstStructure *s;
+
+ gst_query_parse_context (query, &old_context);
+
+ if (old_context)
+ context = gst_context_copy (old_context);
+ else
+ context = gst_context_new ("gst.gl.app_context", FALSE);
+
+ s = gst_context_writable_structure (context);
+ gst_structure_set (s, "context", GST_GL_TYPE_CONTEXT,
+ qt_src->qt_context, NULL);
+ gst_query_set_context (query, context);
+ gst_context_unref (context);
+
+ ret = qt_src->qt_context != NULL;
+ }
+ GST_LOG_OBJECT (qt_src, "context query of type %s %i", context_type, ret);
+
+ if (ret)
+ return ret;
+
+ /* fallthrough */
+ }
+ default:
+ res = GST_BASE_SRC_CLASS (parent_class)->query (bsrc, query);
+ break;
+ }
+
+ return res;
+}
+
+static gboolean
+_find_local_gl_context (GstQtSrc * qt_src)
+{
+ GstQuery *query;
+ GstContext *context;
+ const GstStructure *s;
+
+ if (qt_src->context)
+ return TRUE;
+
+ query = gst_query_new_context ("gst.gl.local_context");
+ if (!qt_src->context
+ && gst_gl_run_query (GST_ELEMENT (qt_src), query, GST_PAD_SRC)) {
+ gst_query_parse_context (query, &context);
+ if (context) {
+ s = gst_context_get_structure (context);
+ gst_structure_get (s, "context", GST_GL_TYPE_CONTEXT, &qt_src->context,
+ NULL);
+ }
+ }
+
+ GST_DEBUG_OBJECT (qt_src, "found local context %p", qt_src->context);
+
+ gst_query_unref (query);
+
+ if (qt_src->context)
+ return TRUE;
+
+ return FALSE;
+}
+
+static gboolean
+gst_qt_src_decide_allocation (GstBaseSrc * bsrc, GstQuery * query)
+{
+ GstBufferPool *pool = NULL;
+ GstStructure *config;
+ GstCaps *caps;
+ guint min, max, size, n, i;
+ gboolean update_pool, update_allocator;
+ GstAllocator *allocator;
+ GstAllocationParams params;
+ GstGLVideoAllocationParams *glparams;
+ GstVideoInfo vinfo;
+ GstQtSrc *qt_src = GST_QT_SRC (bsrc);
+
+ if (gst_query_find_allocation_meta (query,
+ GST_VIDEO_AFFINE_TRANSFORMATION_META_API_TYPE, NULL)) {
+ qt_src->downstream_supports_affine_meta = TRUE;
+ } else {
+ qt_src->downstream_supports_affine_meta = FALSE;
+ }
+
+ gst_query_parse_allocation (query, &caps, NULL);
+ if (!caps)
+ return FALSE;
+
+ gst_video_info_from_caps (&vinfo, caps);
+
+ n = gst_query_get_n_allocation_pools (query);
+ if (n > 0) {
+ update_pool = TRUE;
+ for (i = 0; i < n; i++) {
+ gst_query_parse_nth_allocation_pool (query, i, &pool, &size, &min, &max);
+
+ if (!pool || !GST_IS_GL_BUFFER_POOL (pool)) {
+ if (pool)
+ gst_object_unref (pool);
+ pool = NULL;
+ }
+ }
+ }
+
+ if (!pool) {
+ size = vinfo.size;
+ min = max = 0;
+ update_pool = FALSE;
+ }
+
+ if (!qt_src->context && !_find_local_gl_context (qt_src))
+ return FALSE;
+
+ if (!pool) {
+ if (!qt_src->context || !GST_IS_GL_CONTEXT (qt_src->context))
+ return FALSE;
+
+ pool = gst_gl_buffer_pool_new (qt_src->context);
+ GST_INFO_OBJECT (qt_src, "No pool, create one ourself %p", pool);
+ }
+
+ config = gst_buffer_pool_get_config (pool);
+
+ gst_buffer_pool_config_set_params (config, caps, size, min, max);
+ gst_buffer_pool_config_add_option (config, GST_BUFFER_POOL_OPTION_VIDEO_META);
+ if (gst_query_find_allocation_meta (query, GST_GL_SYNC_META_API_TYPE, NULL))
+ gst_buffer_pool_config_add_option (config,
+ GST_BUFFER_POOL_OPTION_GL_SYNC_META);
+
+ if (gst_query_get_n_allocation_params (query) > 0) {
+ gst_query_parse_nth_allocation_param (query, 0, &allocator, ¶ms);
+ gst_buffer_pool_config_set_allocator (config, allocator, ¶ms);
+ GST_INFO_OBJECT (qt_src, "got allocator %p", allocator);
+ update_allocator = TRUE;
+ } else {
+ allocator = NULL;
+ gst_allocation_params_init (¶ms);
+ update_allocator = FALSE;
+ }
+
+ glparams =
+ gst_gl_video_allocation_params_new (qt_src->context, ¶ms, &vinfo, 0,
+ NULL, GST_GL_TEXTURE_TARGET_2D, GST_VIDEO_GL_TEXTURE_TYPE_RGBA);
+ gst_buffer_pool_config_set_gl_allocation_params (config,
+ (GstGLAllocationParams *) glparams);
+ gst_gl_allocation_params_free ((GstGLAllocationParams *) glparams);
+
+ if (!gst_buffer_pool_set_config (pool, config))
+ GST_WARNING_OBJECT (qt_src, "Failed to set buffer pool config");
+
+ if (update_allocator)
+ gst_query_set_nth_allocation_param (query, 0, allocator, ¶ms);
+ else
+ gst_query_add_allocation_param (query, allocator, ¶ms);
+ if (allocator)
+ gst_object_unref (allocator);
+
+ if (update_pool)
+ gst_query_set_nth_allocation_pool (query, 0, pool, size, min, max);
+ else
+ gst_query_add_allocation_pool (query, pool, size, min, max);
+ gst_object_unref (pool);
+
+ GST_INFO_OBJECT (qt_src, "successfully decide_allocation");
+ return TRUE;
+}
+
+static GstFlowReturn
+gst_qt_src_fill (GstPushSrc * psrc, GstBuffer * buffer)
+{
+ GstQtSrc *qt_src = GST_QT_SRC (psrc);
+
+ GST_DEBUG_OBJECT (qt_src, "setting buffer %p", buffer);
+
+ if (!qt_window_set_buffer (qt_src->window, buffer)) {
+ GST_ERROR_OBJECT (qt_src, "failed to fill buffer %p", buffer);
+ return GST_FLOW_ERROR;
+ }
+
+ if (!qt_src->downstream_supports_affine_meta) {
+ if (qt_src->pending_image_orientation) {
+ /* let downstream know the image orientation is vertical filp */
+ GstTagList *image_orientation_tag =
+ gst_tag_list_new (GST_TAG_IMAGE_ORIENTATION, "flip-rotate-180", NULL);
+
+ gst_pad_push_event (GST_BASE_SRC_PAD (psrc),
+ gst_event_new_tag (image_orientation_tag));
+
+ qt_src->pending_image_orientation = FALSE;
+ }
+ } else {
+ GstVideoAffineTransformationMeta *trans_meta;
+ trans_meta = gst_buffer_add_video_affine_transformation_meta (buffer);
+ gst_video_affine_transformation_meta_apply_matrix (trans_meta,
+ vertical_flip_matrix);
+ }
+
+ GST_DEBUG_OBJECT (qt_src, "buffer fill done %p", buffer);
+
+ return GST_FLOW_OK;
+}
+
+static GstStateChangeReturn
+gst_qt_src_change_state (GstElement * element, GstStateChange transition)
+{
+ GstQtSrc *qt_src = GST_QT_SRC (element);
+ GstStateChangeReturn ret = GST_STATE_CHANGE_SUCCESS;
+ QGuiApplication *app;
+ guint64 frames_rendered = 0;
+
+ GST_DEBUG ("changing state: %s => %s",
+ gst_element_state_get_name (GST_STATE_TRANSITION_CURRENT (transition)),
+ gst_element_state_get_name (GST_STATE_TRANSITION_NEXT (transition)));
+
+ switch (transition) {
+ case GST_STATE_CHANGE_NULL_TO_READY:
+ app = static_cast < QGuiApplication * >(QCoreApplication::instance ());
+ if (!app) {
+ GST_ELEMENT_ERROR (element, RESOURCE, NOT_FOUND,
+ ("%s", "Failed to connect to Qt"),
+ ("%s", "Could not retrieve QGuiApplication instance"));
+ return GST_STATE_CHANGE_FAILURE;
+ }
+
+ if (!qt_src->window) {
+ GST_ELEMENT_ERROR (element, RESOURCE, NOT_FOUND,
+ ("%s", "Required property \'window\' not set"), (NULL));
+ return GST_STATE_CHANGE_FAILURE;
+ }
+
+ if (!qt_window_is_scenegraph_initialized (qt_src->window)) {
+ GST_ELEMENT_ERROR (element, RESOURCE, NOT_FOUND,
+ ("%s", "Could not initialize window system"), (NULL));
+ return GST_STATE_CHANGE_FAILURE;
+ }
+
+ qt_window_use_default_fbo (qt_src->window, qt_src->default_fbo);
+
+ break;
+ case GST_STATE_CHANGE_READY_TO_PAUSED:
+ break;
+ case GST_STATE_CHANGE_PAUSED_TO_PLAYING:
+ break;
+ default:
+ break;
+ }
+
+ ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition);
+ if (ret == GST_STATE_CHANGE_FAILURE)
+ return ret;
+
+ switch (transition) {
+ case GST_STATE_CHANGE_PLAYING_TO_PAUSED:
+ qt_src->run_time = gst_element_get_start_time (GST_ELEMENT (qt_src));
+ break;
+ case GST_STATE_CHANGE_PAUSED_TO_READY:
+ break;
+ case GST_STATE_CHANGE_READY_TO_NULL:
+ qt_window_get_total_frames (qt_src->window, &frames_rendered);
+ if (qt_src->run_time > 0) {
+ GST_DEBUG ("qmlglsrc Total refresh frames (%ld), playing for (%"
+ GST_TIME_FORMAT "), fps (%.3f).\n", frames_rendered,
+ GST_TIME_ARGS (qt_src->run_time),
+ (gfloat) GST_SECOND * frames_rendered / qt_src->run_time);
+ }
+ break;
+ default:
+ break;
+ }
+
+ return ret;
+}
+
+static gboolean
+gst_qt_src_start (GstBaseSrc * basesrc)
+{
+ GstQtSrc *qt_src = GST_QT_SRC (basesrc);
+
+ /* already has get OpenGL configuration from qt */
+ if (qt_src->display && qt_src->qt_context)
+ return TRUE;
+
+ if (!qt_window_is_scenegraph_initialized (qt_src->window))
+ return FALSE;
+
+ qt_src->display = qt_window_get_display (qt_src->window);
+ qt_src->qt_context = qt_window_get_qt_context (qt_src->window);
+
+ if (!qt_src->display || !qt_src->qt_context) {
+ GST_ERROR_OBJECT (qt_src,
+ "Could not retrieve window system OpenGL configuration");
+ return FALSE;
+ }
+
+ GST_DEBUG_OBJECT (qt_src, "Got qt display %p and qt gl context %p",
+ qt_src->display, qt_src->qt_context);
+ return TRUE;
+}
+
+static gboolean
+gst_qt_src_stop (GstBaseSrc * basesrc)
+{
+ return TRUE;
+}
diff --git a/ext/qt/gstqtsrc.h b/ext/qt/gstqtsrc.h
new file mode 100644
index 0000000..8bbf4e2
--- /dev/null
+++ b/ext/qt/gstqtsrc.h
@@ -0,0 +1,82 @@
+/*
+ * GStreamer
+ * Copyright (C) 2016 Freescale Semiconductor, Inc. All rights reserved.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GST_QT_SRC_H__
+#define __GST_QT_SRC_H__
+
+#include <gst/gst.h>
+#include <gst/base/gstpushsrc.h>
+#include <gst/video/video.h>
+#include <gst/gl/gl.h>
+#include "qtwindow.h"
+
+typedef struct _GstQtSrc GstQtSrc;
+typedef struct _GstQtSrcClass GstQtSrcClass;
+
+G_BEGIN_DECLS
+
+GType gst_qt_src_get_type (void);
+#define GST_TYPE_QT_SRC (gst_qt_src_get_type())
+#define GST_QT_SRC(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_QT_SRC,GstQtSrc))
+#define GST_QT_SRC_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_QT_SRC,GstQtSrcClass))
+#define GST_IS_QT_SRC(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_QT_SRC))
+#define GST_IS_QT_SRC_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_QT_SRC))
+#define GST_QT_SRC_CAST(obj) ((GstQtSrc*)(obj))
+
+/**
+ * GstQtSrc:
+ *
+ * Opaque #GstQtSrc object
+ */
+struct _GstQtSrc
+{
+ /* <private> */
+ GstPushSrc parent;
+
+ QQuickWindow *qwindow;
+ QtGLWindow *window;
+
+ GstVideoInfo v_info;
+
+ GstGLDisplay *display;
+ GstGLContext *context;
+ GstGLContext *qt_context;
+
+ gboolean default_fbo;
+ gboolean downstream_supports_affine_meta;
+ gboolean pending_image_orientation;
+ /* fps print support */
+ GstClockTime run_time;
+};
+
+/**
+ * GstQtSrcClass:
+ *
+ * The #GstQtSrcClass struct only contains private data
+ */
+struct _GstQtSrcClass
+{
+ /* <private> */
+ GstPushSrcClass object_class;
+};
+
+G_END_DECLS
+
+#endif /* __GST_QT_SRC_H__ */
diff --git a/ext/qt/qtitem.cc b/ext/qt/qtitem.cc
index c306c6d..f088c76 100644
--- a/ext/qt/qtitem.cc
+++ b/ext/qt/qtitem.cc
@@ -27,32 +27,13 @@
#include <gst/video/video.h>
#include "qtitem.h"
#include "gstqsgtexture.h"
+#include "gstqtglutility.h"
#include <QtCore/QRunnable>
#include <QtGui/QGuiApplication>
#include <QtQuick/QQuickWindow>
#include <QtQuick/QSGSimpleTextureNode>
-#if GST_GL_HAVE_WINDOW_X11 && GST_GL_HAVE_PLATFORM_GLX && defined (HAVE_QT_X11)
-#include <QX11Info>
-#include <gst/gl/x11/gstgldisplay_x11.h>
-#include <gst/gl/x11/gstglcontext_glx.h>
-#endif
-
-#if GST_GL_HAVE_WINDOW_WAYLAND && GST_GL_HAVE_PLATFORM_EGL && defined (HAVE_QT_WAYLAND)
-#include <qpa/qplatformnativeinterface.h>
-#include <gst/gl/wayland/gstgldisplay_wayland.h>
-#endif
-
-#if GST_GL_HAVE_PLATFORM_EGL && defined (HAVE_QT_EGLFS)
-#include <gst/gl/egl/gstgldisplay_egl.h>
-#include <gst/gl/egl/gstglcontext_egl.h>
-#endif
-
-#if GST_GL_HAVE_WINDOW_COCOA && GST_GL_HAVE_PLATFORM_COCOA && defined (HAVE_QT_MAC)
-#include <gst/gl/coaoa/gstgldisplay_cocoa.h>
-#endif
-
/**
* SECTION:gtkgstglwidget
* @short_description: a #GtkGLArea that renders GStreamer video #GstBuffers
@@ -123,11 +104,8 @@
QtGLVideoItem::QtGLVideoItem()
{
- QGuiApplication *app = static_cast<QGuiApplication *> (QCoreApplication::instance ());
static volatile gsize _debug;
- g_assert (app != NULL);
-
if (g_once_init_enter (&_debug)) {
GST_DEBUG_CATEGORY_INIT (GST_CAT_DEFAULT, "qtglwidget", 0, "Qt GL Widget");
g_once_init_leave (&_debug, 1);
@@ -143,48 +121,7 @@
g_mutex_init (&this->priv->lock);
- GST_INFO ("QGuiApplication::instance()->platformName() %s", app->platformName().toUtf8().data());
-
-#if GST_GL_HAVE_WINDOW_X11 && defined (HAVE_QT_X11)
- if (QString::fromUtf8 ("xcb") == app->platformName())
- this->priv->display = (GstGLDisplay *)
- gst_gl_display_x11_new_with_display (QX11Info::display ());
-#endif
-#if GST_GL_HAVE_WINDOW_WAYLAND && GST_GL_HAVE_PLATFORM_EGL && defined (HAVE_QT_WAYLAND)
- if (QString::fromUtf8 ("wayland") == app->platformName()
- || QString::fromUtf8 ("wayland-egl") == app->platformName()){
- struct wl_display * wayland_display;
- QPlatformNativeInterface *native =
- QGuiApplication::platformNativeInterface();
- wayland_display = (struct wl_display *)
- native->nativeResourceForWindow("display", NULL);
- this->priv->display = (GstGLDisplay *)
- gst_gl_display_wayland_new_with_display (wayland_display);
- }
-#endif
-#if GST_GL_HAVE_PLATFORM_EGL && GST_GL_HAVE_WINDOW_ANDROID
- if (QString::fromUtf8 ("android") == app->platformName())
- this->priv->display = (GstGLDisplay *) gst_gl_display_egl_new ();
-#elif GST_GL_HAVE_PLATFORM_EGL && defined (HAVE_QT_EGLFS)
- if (QString::fromUtf8("eglfs") == app->platformName())
- this->priv->display = (GstGLDisplay *) gst_gl_display_egl_new ();
-#endif
-
-#if GST_GL_HAVE_WINDOW_COCOA && GST_GL_HAVE_PLATFORM_COCOA && defined (HAVE_QT_MAC)
- if (QString::fromUtf8 ("cocoa") == app->platformName())
- this->priv->display = (GstGLDisplay *) gst_gl_display_cocoa_new ();
-#endif
-#if GST_GL_HAVE_WINDOW_EAGL && GST_GL_HAVE_PLATFORM_EAGL && defined (HAVE_QT_IOS)
- if (QString::fromUtf8 ("ios") == app->platformName())
- this->priv->display = gst_gl_display_new ();
-#endif
-#if GST_GL_HAVE_WINDOW_WIN32 && GST_GL_HAVE_PLATFORM_WGL && defined (HAVE_QT_WIN32)
- if (QString::fromUtf8 ("windows") == app->platformName())
- this->priv->display = gst_gl_display_new ();
-#endif
-
- if (!this->priv->display)
- this->priv->display = gst_gl_display_new ();
+ this->priv->display = gst_qt_get_gl_display();
connect(this, SIGNAL(windowChanged(QQuickWindow*)), this,
SLOT(handleWindowChanged(QQuickWindow*)));
@@ -318,10 +255,6 @@
void
QtGLVideoItem::onSceneGraphInitialized ()
{
- GstGLPlatform platform = (GstGLPlatform) 0;
- GstGLAPI gl_api;
- guintptr gl_handle;
-
GST_DEBUG ("scene graph initialization with Qt GL context %p",
this->window()->openglContext ());
@@ -334,89 +267,8 @@
return;
}
-#if GST_GL_HAVE_WINDOW_X11 && defined (HAVE_QT_X11)
- if (GST_IS_GL_DISPLAY_X11 (this->priv->display)) {
- platform = GST_GL_PLATFORM_GLX;
- }
-#endif
-#if GST_GL_HAVE_WINDOW_WAYLAND && defined (HAVE_QT_WAYLAND)
- if (GST_IS_GL_DISPLAY_WAYLAND (this->priv->display)) {
- platform = GST_GL_PLATFORM_EGL;
- }
-#endif
-#if GST_GL_HAVE_PLATFORM_EGL && defined (HAVE_QT_EGLFS)
- if (GST_IS_GL_DISPLAY_EGL (this->priv->display)) {
- platform = GST_GL_PLATFORM_EGL;
- }
-#endif
- if (platform == 0 && this->priv->display) {
-#if GST_GL_HAVE_WINDOW_COCOA && GST_GL_HAVE_PLATFORM_COCOA && defined (HAVE_QT_MAC)
- platform = GST_GL_PLATFORM_CGL;
-#elif GST_GL_HAVE_WINDOW_EAGL && GST_GL_HAVE_PLATFORM_EAGL && defined (HAVE_QT_IOS)
- platform = GST_GL_PLATFORM_EAGL;
-#elif GST_GL_HAVE_WINDOW_WIN32 && GST_GL_HAVE_PLATFORM_WGL && defined (HAVE_QT_WIN32)
- platform = GST_GL_PLATFORM_WGL;
-#else
- GST_ERROR ("Unknown platform");
- return;
-#endif
- }
-
- gl_api = gst_gl_context_get_current_gl_api (platform, NULL, NULL);
- gl_handle = gst_gl_context_get_current_gl_context (platform);
- if (gl_handle)
- this->priv->other_context =
- gst_gl_context_new_wrapped (this->priv->display, gl_handle,
- platform, gl_api);
-
- (void) platform;
- (void) gl_api;
- (void) gl_handle;
-
- if (this->priv->other_context) {
- GError *error = NULL;
-
- gst_gl_context_activate (this->priv->other_context, TRUE);
- if (!gst_gl_context_fill_info (this->priv->other_context, &error)) {
- GST_ERROR ("%p failed to retrieve qt context info: %s", this, error->message);
- g_object_unref (this->priv->other_context);
- this->priv->other_context = NULL;
- } else {
- gst_gl_display_filter_gl_api (this->priv->display, gst_gl_context_get_gl_api (this->priv->other_context));
-#if GST_GL_HAVE_WINDOW_WIN32 && GST_GL_HAVE_PLATFORM_WGL && defined (HAVE_QT_WIN32)
- if (!wglGetProcAddress ("wglCreateContextAttribsARB")) {
- GstGLWindow *window;
- HDC device;
-
- /* If there's no wglCreateContextAttribsARB() support, then we would fallback to
- * wglShareLists() which will fail with ERROR_BUSY (0xaa) if either of the GL
- * contexts are current in any other thread.
- *
- * The workaround here is to temporarily disable Qt's GL context while we
- * set up our own.
- */
- this->priv->context = gst_gl_context_new (this->priv->display);
- window = gst_gl_context_get_window (this->priv->context);
- device = (HDC) gst_gl_window_get_display (window);
-
- wglMakeCurrent (device, 0);
- gst_object_unref (window);
- if (!gst_gl_context_create (this->priv->context, this->priv->other_context, &error)) {
- GST_ERROR ("%p failed to create shared GL context: %s", this, error->message);
- g_object_unref (this->priv->context);
- this->priv->context = NULL;
- g_object_unref (this->priv->other_context);
- this->priv->other_context = NULL;
- wglMakeCurrent (device, (HGLRC) gl_handle);
- return;
- }
- wglMakeCurrent (device, (HGLRC) gl_handle);
- }
-#endif
- gst_gl_context_activate (this->priv->other_context, FALSE);
- m_openGlContextInitialized = true;
- }
- }
+ m_openGlContextInitialized = gst_qt_get_gl_wrapcontext (this->priv->display,
+ &this->priv->other_context, &this->priv->context);
GST_DEBUG ("%p created wrapped GL context %" GST_PTR_FORMAT, this,
this->priv->other_context);
diff --git a/ext/qt/qtwindow.cc b/ext/qt/qtwindow.cc
new file mode 100644
index 0000000..4702891
--- /dev/null
+++ b/ext/qt/qtwindow.cc
@@ -0,0 +1,371 @@
+/*
+ * GStreamer
+ * Copyright (C) 2016 Freescale Semiconductor, Inc. All rights reserved.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <stdio.h>
+
+#include <gst/video/video.h>
+#include "qtwindow.h"
+#include "gstqsgtexture.h"
+#include "gstqtglutility.h"
+
+#include <QtCore/QRunnable>
+#include <QtGui/QGuiApplication>
+#include <QtQuick/QQuickWindow>
+#include <QOpenGLFramebufferObject>
+
+/**
+ * SECTION:
+ *
+ * #QtGLWindow is an #QQuickWindow that grab QtQuick view to GStreamer OpenGL video buffers.
+ */
+
+GST_DEBUG_CATEGORY_STATIC (qt_window_debug);
+#define GST_CAT_DEFAULT qt_window_debug
+
+struct _QtGLWindowPrivate
+{
+ GMutex lock;
+ GCond update_cond;
+
+ GstBuffer *buffer;
+ GstCaps *caps;
+ GstVideoInfo v_info;
+
+ gboolean initted;
+ gboolean updated;
+ gboolean quit;
+ gboolean result;
+ gboolean useDefaultFbo;
+
+ GstGLDisplay *display;
+ GstGLContext *other_context;
+
+ /* frames that qmlview rendered in its gl thread */
+ guint64 frames_rendered;
+};
+
+class InitQtGLContext : public QRunnable
+{
+public:
+ InitQtGLContext(QtGLWindow *window);
+ void run();
+
+private:
+ QtGLWindow *window_;
+};
+
+InitQtGLContext::InitQtGLContext(QtGLWindow *window) :
+ window_(window)
+{
+}
+
+void InitQtGLContext::run()
+{
+ window_->onSceneGraphInitialized();
+}
+
+QtGLWindow::QtGLWindow ( QWindow * parent, QQuickWindow *src ) :
+ QQuickWindow( parent ), source (src)
+{
+ QGuiApplication *app = static_cast<QGuiApplication *> (QCoreApplication::instance ());
+ static volatile gsize _debug;
+
+ g_assert (app != NULL);
+
+ if (g_once_init_enter (&_debug)) {
+ GST_DEBUG_CATEGORY_INIT (GST_CAT_DEFAULT, "qtglwindow", 0, "Qt GL QuickWindow");
+ g_once_init_leave (&_debug, 1);
+ }
+
+ this->priv = g_new0 (QtGLWindowPrivate, 1);
+
+ g_mutex_init (&this->priv->lock);
+ g_cond_init (&this->priv->update_cond);
+
+ this->priv->display = gst_qt_get_gl_display();
+
+ connect (source, SIGNAL(beforeRendering()), this, SLOT(beforeRendering()), Qt::DirectConnection);
+ connect (source, SIGNAL(afterRendering()), this, SLOT(afterRendering()), Qt::DirectConnection);
+ connect (app, SIGNAL(aboutToQuit()), this, SLOT(aboutToQuit()), Qt::DirectConnection);
+ if (source->isSceneGraphInitialized())
+ source->scheduleRenderJob(new InitQtGLContext(this), QQuickWindow::BeforeSynchronizingStage);
+ else
+ connect (source, SIGNAL(sceneGraphInitialized()), this, SLOT(onSceneGraphInitialized()), Qt::DirectConnection);
+
+ GST_DEBUG ("%p init Qt Window", this->priv->display);
+}
+
+QtGLWindow::~QtGLWindow()
+{
+ GST_DEBUG ("deinit Qt Window");
+ g_mutex_clear (&this->priv->lock);
+ g_cond_clear (&this->priv->update_cond);
+ if (this->priv->other_context)
+ gst_object_unref(this->priv->other_context);
+ if (this->priv->display)
+ gst_object_unref(this->priv->display);
+ g_free (this->priv);
+ this->priv = NULL;
+}
+
+void
+QtGLWindow::beforeRendering()
+{
+ unsigned int width, height;
+
+ g_mutex_lock (&this->priv->lock);
+
+ if (!fbo && !this->priv->useDefaultFbo) {
+
+ width = source->width();
+ height = source->height();
+
+ GST_DEBUG ("create new framebuffer object %dX%d", width, height);
+
+ fbo.reset(new QOpenGLFramebufferObject (width, height,
+ QOpenGLFramebufferObject::NoAttachment, GL_TEXTURE_2D, GL_RGBA));
+
+ source->setRenderTarget(fbo.data());
+ }
+
+ g_mutex_unlock (&this->priv->lock);
+}
+
+
+void
+QtGLWindow::afterRendering()
+{
+ GstVideoFrame gl_frame;
+ GstVideoInfo *info;
+ GstGLContext *context;
+ gboolean ret;
+ guint width, height;
+ const GstGLFuncs *gl;
+ GLuint dst_tex;
+
+ g_mutex_lock (&this->priv->lock);
+
+ this->priv->frames_rendered++;
+
+ if(!this->priv->buffer || this->priv->updated == TRUE) {
+ GST_DEBUG ("skip this frame");
+ g_mutex_unlock (&this->priv->lock);
+ return;
+ }
+
+ GST_DEBUG ("copy buffer %p",this->priv->buffer);
+
+ width = GST_VIDEO_INFO_WIDTH (&this->priv->v_info);
+ height = GST_VIDEO_INFO_HEIGHT (&this->priv->v_info);
+ info = &this->priv->v_info;
+ context = this->priv->other_context;
+
+ gst_gl_context_activate (context, TRUE);
+ gl = context->gl_vtable;
+
+ ret = gst_video_frame_map (&gl_frame, info, this->priv->buffer,
+ (GstMapFlags) (GST_MAP_WRITE | GST_MAP_GL));
+
+ if (!ret) {
+ this->priv->buffer = NULL;
+ GST_ERROR ("Failed to map video frame");
+ goto errors;
+ }
+
+ gl->BindFramebuffer (GL_READ_FRAMEBUFFER, this->source->renderTargetId());
+
+ ret = gst_gl_context_check_framebuffer_status (context);
+ if (!ret) {
+ GST_ERROR ("FBO errors");
+ goto errors;
+ }
+
+ dst_tex = *(guint *) gl_frame.data[0];
+ GST_DEBUG ("qml render target id %d, render to tex %d %dX%d",
+ this->source->renderTargetId(), dst_tex, width,height);
+
+ gl->BindTexture (GL_TEXTURE_2D, dst_tex);
+ gl->CopyTexImage2D (GL_TEXTURE_2D, 0, GL_RGBA, 0, 0, width, height, 0);
+
+ GST_DEBUG ("rendering finished");
+
+errors:
+ gl->BindFramebuffer (GL_FRAMEBUFFER, 0);
+ gst_video_frame_unmap (&gl_frame);
+
+ gst_gl_context_activate (context, FALSE);
+
+ this->priv->result = ret;
+ this->priv->updated = TRUE;
+ g_cond_signal (&this->priv->update_cond);
+ g_mutex_unlock (&this->priv->lock);
+}
+
+void
+QtGLWindow::aboutToQuit()
+{
+ g_mutex_lock (&this->priv->lock);
+
+ this->priv->updated = TRUE;
+ this->priv->quit = TRUE;
+ g_cond_signal (&this->priv->update_cond);
+
+ g_mutex_unlock (&this->priv->lock);
+
+ GST_DEBUG("about to quit");
+}
+
+void
+QtGLWindow::onSceneGraphInitialized()
+{
+ GST_DEBUG ("scene graph initialization with Qt GL context %p",
+ this->source->openglContext ());
+
+ this->priv->initted = gst_qt_get_gl_wrapcontext (this->priv->display,
+ &this->priv->other_context, NULL);
+
+ GST_DEBUG ("%p created wrapped GL context %" GST_PTR_FORMAT, this,
+ this->priv->other_context);
+}
+
+bool
+QtGLWindow::getGeometry(int * width, int * height)
+{
+ if (width == NULL || height == NULL)
+ return FALSE;
+
+ *width = this->source->width();
+ *height = this->source->height();
+
+ return TRUE;
+}
+
+GstGLContext *
+qt_window_get_qt_context (QtGLWindow * qt_window)
+{
+ g_return_val_if_fail (qt_window != NULL, NULL);
+
+ if (!qt_window->priv->other_context)
+ return NULL;
+
+ return (GstGLContext *) gst_object_ref (qt_window->priv->other_context);
+}
+
+GstGLDisplay *
+qt_window_get_display (QtGLWindow * qt_window)
+{
+ g_return_val_if_fail (qt_window != NULL, NULL);
+
+ if (!qt_window->priv->display)
+ return NULL;
+
+ return (GstGLDisplay *) gst_object_ref (qt_window->priv->display);
+}
+
+gboolean
+qt_window_is_scenegraph_initialized (QtGLWindow * qt_window)
+{
+ g_return_val_if_fail (qt_window != NULL, FALSE);
+
+ return qt_window->priv->initted;
+}
+
+gboolean
+qt_window_set_caps (QtGLWindow * qt_window, GstCaps * caps)
+{
+ GstVideoInfo v_info;
+
+ g_return_val_if_fail (qt_window != NULL, FALSE);
+ g_return_val_if_fail (GST_IS_CAPS (caps), FALSE);
+ g_return_val_if_fail (gst_caps_is_fixed (caps), FALSE);
+
+ if (qt_window->priv->caps && gst_caps_is_equal_fixed (qt_window->priv->caps, caps))
+ return TRUE;
+
+ if (!gst_video_info_from_caps (&v_info, caps))
+ return FALSE;
+
+ g_mutex_lock (&qt_window->priv->lock);
+
+ gst_caps_replace (&qt_window->priv->caps, caps);
+
+ qt_window->priv->v_info = v_info;
+
+ g_mutex_unlock (&qt_window->priv->lock);
+
+ return TRUE;
+}
+
+gboolean
+qt_window_set_buffer (QtGLWindow * qt_window, GstBuffer * buffer)
+{
+ g_return_val_if_fail (qt_window != NULL, FALSE);
+ g_return_val_if_fail (qt_window->priv->initted, FALSE);
+ gboolean ret;
+
+ g_mutex_lock (&qt_window->priv->lock);
+
+ if (qt_window->priv->quit){
+ GST_DEBUG("about to quit, drop this buffer");
+ g_mutex_unlock (&qt_window->priv->lock);
+ return TRUE;
+ }
+
+ qt_window->priv->updated = FALSE;
+ qt_window->priv->buffer = buffer;
+
+ while (!qt_window->priv->updated)
+ g_cond_wait (&qt_window->priv->update_cond, &qt_window->priv->lock);
+
+ ret = qt_window->priv->result;
+
+ g_mutex_unlock (&qt_window->priv->lock);
+
+ return ret;
+}
+
+void
+qt_window_use_default_fbo (QtGLWindow * qt_window, gboolean useDefaultFbo)
+{
+ g_return_if_fail (qt_window != NULL);
+
+ g_mutex_lock (&qt_window->priv->lock);
+
+ GST_DEBUG ("set to use default fbo %d", useDefaultFbo);
+ qt_window->priv->useDefaultFbo = useDefaultFbo;
+
+ g_mutex_unlock (&qt_window->priv->lock);
+}
+
+void
+qt_window_get_total_frames (QtGLWindow * qt_window, guint64 *frames)
+{
+ g_return_if_fail (qt_window != NULL);
+
+ g_mutex_lock (&qt_window->priv->lock);
+
+ *frames = qt_window->priv->frames_rendered;
+
+ g_mutex_unlock (&qt_window->priv->lock);
+}
diff --git a/ext/qt/qtwindow.h b/ext/qt/qtwindow.h
new file mode 100644
index 0000000..5820e77
--- /dev/null
+++ b/ext/qt/qtwindow.h
@@ -0,0 +1,70 @@
+/*
+ * GStreamer
+ * Copyright (C) 2016 Freescale Semiconductor, Inc. All rights reserved.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __QT_WINDOW_H__
+#define __QT_WINDOW_H__
+
+#include <gst/gst.h>
+#include <gst/gl/gl.h>
+
+#include "gstqtgl.h"
+#include <QtQuick/QQuickWindow>
+#include <QtGui/QOpenGLContext>
+#include <QtGui/QOpenGLFunctions>
+
+typedef struct _QtGLWindowPrivate QtGLWindowPrivate;
+
+class InitQtGLContext;
+
+class QtGLWindow : public QQuickWindow, protected QOpenGLFunctions
+{
+ Q_OBJECT
+public:
+ QtGLWindow (QWindow * parent = NULL, QQuickWindow *source = NULL);
+ ~QtGLWindow ();
+ bool getGeometry (int * width, int * height);
+
+ /* private for C interface ... */
+ QtGLWindowPrivate *priv;
+
+private Q_SLOTS:
+ void beforeRendering ();
+ void afterRendering ();
+ void onSceneGraphInitialized ();
+ void aboutToQuit();
+
+private:
+ friend class InitQtGLContext;
+ QQuickWindow * source;
+ QScopedPointer<QOpenGLFramebufferObject> fbo;
+};
+
+extern "C"
+{
+gboolean qt_window_set_buffer (QtGLWindow * qt_window, GstBuffer * buffer);
+gboolean qt_window_set_caps (QtGLWindow * qt_window, GstCaps * caps);
+GstGLContext * qt_window_get_qt_context (QtGLWindow * qt_window);
+GstGLDisplay * qt_window_get_display (QtGLWindow * qt_window);
+gboolean qt_window_is_scenegraph_initialized (QtGLWindow * qt_window);
+void qt_window_use_default_fbo (QtGLWindow * qt_window, gboolean useDefaultFbo);
+void qt_window_get_total_frames (QtGLWindow * qt_window, guint64 *frames);
+}
+
+#endif /* __QT_WINDOW_H__ */
diff --git a/ext/resindvd/Makefile.in b/ext/resindvd/Makefile.in
index cf8d7f7..e6ace0f 100644
--- a/ext/resindvd/Makefile.in
+++ b/ext/resindvd/Makefile.in
@@ -335,6 +335,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -384,6 +386,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/ext/resindvd/resindvdsrc.h b/ext/resindvd/resindvdsrc.h
index cc2bb04..b5d8e36 100644
--- a/ext/resindvd/resindvdsrc.h
+++ b/ext/resindvd/resindvdsrc.h
@@ -23,7 +23,9 @@
#include <gst/base/gstbasesrc.h>
-#include "_stdint.h"
+#ifdef HAVE_STDINT_H
+#include <stdint.h>
+#endif
#include <dvdnav/dvdnav.h>
#include <dvdread/ifo_read.h>
diff --git a/ext/rsvg/Makefile.in b/ext/rsvg/Makefile.in
index b1f55d7..f78c220 100644
--- a/ext/rsvg/Makefile.in
+++ b/ext/rsvg/Makefile.in
@@ -327,6 +327,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -376,6 +378,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/ext/rtmp/Makefile.in b/ext/rtmp/Makefile.in
index 979cdb4..cc555d6 100644
--- a/ext/rtmp/Makefile.in
+++ b/ext/rtmp/Makefile.in
@@ -327,6 +327,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -376,6 +378,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/ext/sbc/Makefile.in b/ext/sbc/Makefile.in
index e33c2b1..69f7442 100644
--- a/ext/sbc/Makefile.in
+++ b/ext/sbc/Makefile.in
@@ -327,6 +327,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -376,6 +378,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/ext/schroedinger/Makefile.in b/ext/schroedinger/Makefile.in
index 87d2751..2d3cad8 100644
--- a/ext/schroedinger/Makefile.in
+++ b/ext/schroedinger/Makefile.in
@@ -328,6 +328,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -377,6 +379,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/ext/sdl/Makefile.in b/ext/sdl/Makefile.in
index ecf052d..ef29cfb 100644
--- a/ext/sdl/Makefile.in
+++ b/ext/sdl/Makefile.in
@@ -326,6 +326,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -375,6 +377,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/ext/smoothstreaming/Makefile.in b/ext/smoothstreaming/Makefile.in
index 57a4b40..94fb8e8 100644
--- a/ext/smoothstreaming/Makefile.in
+++ b/ext/smoothstreaming/Makefile.in
@@ -331,6 +331,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -380,6 +382,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/ext/smoothstreaming/gstmssdemux.c b/ext/smoothstreaming/gstmssdemux.c
index 27725ca..9d0aece 100644
--- a/ext/smoothstreaming/gstmssdemux.c
+++ b/ext/smoothstreaming/gstmssdemux.c
@@ -543,7 +543,8 @@
GST_DEBUG_OBJECT (stream->pad,
"Using stream download bitrate %" G_GUINT64_FORMAT, bitrate);
- if (gst_mss_stream_select_bitrate (mssstream->manifest_stream, bitrate)) {
+ if (gst_mss_stream_select_bitrate (mssstream->manifest_stream,
+ bitrate / MAX (1.0, ABS (stream->demux->segment.rate)))) {
GstCaps *caps;
GstCaps *msscaps;
GstMssDemux *mssdemux = GST_MSS_DEMUX_CAST (stream->demux);
diff --git a/ext/sndfile/Makefile.in b/ext/sndfile/Makefile.in
index 252a5e0..8f5dc13 100644
--- a/ext/sndfile/Makefile.in
+++ b/ext/sndfile/Makefile.in
@@ -327,6 +327,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -376,6 +378,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/ext/sndio/Makefile.in b/ext/sndio/Makefile.in
index 75982bd..2d2ea8f 100644
--- a/ext/sndio/Makefile.in
+++ b/ext/sndio/Makefile.in
@@ -326,6 +326,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -375,6 +377,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/ext/soundtouch/Makefile.in b/ext/soundtouch/Makefile.in
index eedfe4c..82241e6 100644
--- a/ext/soundtouch/Makefile.in
+++ b/ext/soundtouch/Makefile.in
@@ -346,6 +346,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -395,6 +397,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/ext/spandsp/Makefile.in b/ext/spandsp/Makefile.in
index 771d592..b36a563 100644
--- a/ext/spandsp/Makefile.in
+++ b/ext/spandsp/Makefile.in
@@ -329,6 +329,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -378,6 +380,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/ext/spc/Makefile.in b/ext/spc/Makefile.in
index c47a0cf..b2bb741 100644
--- a/ext/spc/Makefile.in
+++ b/ext/spc/Makefile.in
@@ -325,6 +325,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -374,6 +376,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/ext/srtp/Makefile.in b/ext/srtp/Makefile.in
index 6acddc5..29a2e76 100644
--- a/ext/srtp/Makefile.in
+++ b/ext/srtp/Makefile.in
@@ -335,6 +335,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -384,6 +386,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/ext/teletextdec/Makefile.in b/ext/teletextdec/Makefile.in
index 6554ff7..6f51c8d 100644
--- a/ext/teletextdec/Makefile.in
+++ b/ext/teletextdec/Makefile.in
@@ -326,6 +326,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -375,6 +377,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/ext/teletextdec/gstteletextdec.c b/ext/teletextdec/gstteletextdec.c
index 5909a76..7f8a8a6 100644
--- a/ext/teletextdec/gstteletextdec.c
+++ b/ext/teletextdec/gstteletextdec.c
@@ -743,9 +743,7 @@
{
if (ret != GST_FLOW_OK && ret != GST_FLOW_NOT_LINKED
&& ret != GST_FLOW_FLUSHING) {
- GST_ELEMENT_ERROR (teletext, STREAM, FAILED,
- ("Internal data stream error."), ("stream stopped, reason %s",
- gst_flow_get_name (ret)));
+ GST_ELEMENT_FLOW_ERROR (teletext, ret);
return GST_FLOW_ERROR;
}
return ret;
diff --git a/ext/timidity/Makefile.in b/ext/timidity/Makefile.in
index 3bb93aa..177dd58 100644
--- a/ext/timidity/Makefile.in
+++ b/ext/timidity/Makefile.in
@@ -344,6 +344,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -393,6 +395,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/ext/timidity/gsttimidity.c b/ext/timidity/gsttimidity.c
index f7af843..2078694 100644
--- a/ext/timidity/gsttimidity.c
+++ b/ext/timidity/gsttimidity.c
@@ -743,9 +743,7 @@
}
error:
{
- GST_ELEMENT_ERROR (timidity, STREAM, FAILED,
- ("Internal data stream error"),
- ("Streaming stopped, reason %s", gst_flow_get_name (ret)));
+ GST_ELEMENT_FLOW_ERROR (timidity, ret);
gst_pad_push_event (timidity->srcpad, gst_event_new_eos ());
goto paused;
}
diff --git a/ext/timidity/gstwildmidi.c b/ext/timidity/gstwildmidi.c
index 3e82ca2..7f380d6 100644
--- a/ext/timidity/gstwildmidi.c
+++ b/ext/timidity/gstwildmidi.c
@@ -672,7 +672,7 @@
gst_buffer_map (buffer, &info, GST_MAP_READWRITE);
GST_OBJECT_LOCK (wildmidi);
- size = WildMidi_GetOutput (wildmidi->song, (char *) info.data,
+ size = WildMidi_GetOutput (wildmidi->song, (gpointer) info.data,
(unsigned long int) info.size);
GST_OBJECT_UNLOCK (wildmidi);
@@ -898,9 +898,7 @@
event = gst_event_new_eos ();
/* for fatal errors we post an error message, post the error
* first so the app knows about the error first. */
- GST_ELEMENT_ERROR (wildmidi, STREAM, FAILED,
- ("Internal data flow error."),
- ("streaming task paused, reason %s (%d)", reason, ret));
+ GST_ELEMENT_FLOW_ERROR (wildmidi, ret);
gst_pad_push_event (wildmidi->srcpad, event);
}
}
diff --git a/ext/voaacenc/Makefile.in b/ext/voaacenc/Makefile.in
index 8c2d679..0339a41 100644
--- a/ext/voaacenc/Makefile.in
+++ b/ext/voaacenc/Makefile.in
@@ -327,6 +327,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -376,6 +378,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/ext/voamrwbenc/Makefile.in b/ext/voamrwbenc/Makefile.in
index 45801d3..19fd71b 100644
--- a/ext/voamrwbenc/Makefile.in
+++ b/ext/voamrwbenc/Makefile.in
@@ -328,6 +328,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -377,6 +379,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/ext/vulkan/Makefile.in b/ext/vulkan/Makefile.in
index 7478972..87bf6c3 100644
--- a/ext/vulkan/Makefile.in
+++ b/ext/vulkan/Makefile.in
@@ -379,6 +379,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -428,6 +430,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/ext/vulkan/wayland/Makefile.in b/ext/vulkan/wayland/Makefile.in
index a08f213..3a341ca 100644
--- a/ext/vulkan/wayland/Makefile.in
+++ b/ext/vulkan/wayland/Makefile.in
@@ -300,6 +300,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -349,6 +351,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/ext/vulkan/xcb/Makefile.in b/ext/vulkan/xcb/Makefile.in
index 0d12c0e..50b4de2 100644
--- a/ext/vulkan/xcb/Makefile.in
+++ b/ext/vulkan/xcb/Makefile.in
@@ -298,6 +298,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -347,6 +349,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/ext/wayland/Makefile.in b/ext/wayland/Makefile.in
index 1b2f9ab..5184585 100644
--- a/ext/wayland/Makefile.in
+++ b/ext/wayland/Makefile.in
@@ -333,6 +333,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -382,6 +384,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/ext/webp/Makefile.in b/ext/webp/Makefile.in
index 9e6bf0c..f233b26 100644
--- a/ext/webp/Makefile.in
+++ b/ext/webp/Makefile.in
@@ -327,6 +327,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -376,6 +378,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/ext/webrtcdsp/Makefile.in b/ext/webrtcdsp/Makefile.in
index d027023..d815d38 100644
--- a/ext/webrtcdsp/Makefile.in
+++ b/ext/webrtcdsp/Makefile.in
@@ -327,6 +327,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -376,6 +378,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/ext/webrtcdsp/gstwebrtcdsp.cpp b/ext/webrtcdsp/gstwebrtcdsp.cpp
index f64b623..b6b8660 100644
--- a/ext/webrtcdsp/gstwebrtcdsp.cpp
+++ b/ext/webrtcdsp/gstwebrtcdsp.cpp
@@ -156,7 +156,8 @@
PROP_NOISE_SUPPRESSION_LEVEL,
PROP_GAIN_CONTROL,
PROP_EXPERIMENTAL_AGC,
- PROP_EXTENDED_FILTER
+ PROP_EXTENDED_FILTER,
+ PROP_DELAY_AGNOSTIC
};
/**
@@ -189,6 +190,7 @@
gboolean gain_control;
gboolean experimental_agc;
gboolean extended_filter;
+ gboolean delay_agnostic;
};
G_DEFINE_TYPE (GstWebrtcDsp, gst_webrtc_dsp, GST_TYPE_AUDIO_FILTER);
@@ -290,8 +292,11 @@
apm = self->apm;
- delay = gst_webrtc_echo_probe_read (probe, rec_time, (gpointer) &frame);
+ if (self->delay_agnostic)
+ rec_time = GST_CLOCK_TIME_NONE;
+again:
+ delay = gst_webrtc_echo_probe_read (probe, rec_time, (gpointer) &frame);
apm->set_stream_delay_ms (delay);
if (delay < 0)
@@ -310,13 +315,16 @@
GST_WARNING_OBJECT (self, "Reverse stream analyses failed: %s.",
webrtc_error_to_string (err));
+ if (self->delay_agnostic)
+ goto again;
+
done:
gst_object_unref (probe);
return ret;
}
-static GstFlowReturn
+static GstFlowReturn
gst_webrtc_dsp_process_stream (GstWebrtcDsp * self,
GstBuffer * buffer)
{
@@ -401,6 +409,8 @@
(new webrtc::ExtendedFilter (self->extended_filter));
config.Set < webrtc::ExperimentalAgc >
(new webrtc::ExperimentalAgc (self->experimental_agc));
+ config.Set < webrtc::DelayAgnostic >
+ (new webrtc::DelayAgnostic (self->delay_agnostic));
/* TODO Intelligibility enhancer, Beamforming, etc. */
@@ -590,6 +600,9 @@
case PROP_EXTENDED_FILTER:
self->extended_filter = g_value_get_boolean (value);
break;
+ case PROP_DELAY_AGNOSTIC:
+ self->delay_agnostic = g_value_get_boolean (value);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
@@ -632,6 +645,9 @@
case PROP_EXTENDED_FILTER:
g_value_set_boolean (value, self->extended_filter);
break;
+ case PROP_DELAY_AGNOSTIC:
+ g_value_set_boolean (value, self->delay_agnostic);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
@@ -761,6 +777,13 @@
"Enable or disable the extended filter.",
TRUE, (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS |
G_PARAM_CONSTRUCT)));
+
+ g_object_class_install_property (gobject_class,
+ PROP_DELAY_AGNOSTIC,
+ g_param_spec_boolean ("delay-agnostic", "Delay Agnostic",
+ "Enable or disable the delay agnostic mode.",
+ FALSE, (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS |
+ G_PARAM_CONSTRUCT)));
}
static gboolean
diff --git a/ext/webrtcdsp/gstwebrtcechoprobe.cpp b/ext/webrtcdsp/gstwebrtcechoprobe.cpp
index ebc35c1..5b811b6 100644
--- a/ext/webrtcdsp/gstwebrtcechoprobe.cpp
+++ b/ext/webrtcdsp/gstwebrtcechoprobe.cpp
@@ -280,6 +280,20 @@
if (!GST_CLOCK_TIME_IS_VALID (self->latency))
goto done;
+ /* In delay agnostic mode, just return 10ms of data */
+ if (!GST_CLOCK_TIME_IS_VALID (rec_time)) {
+ avail = gst_adapter_available (self->adapter);
+
+ if (avail < self->period_size)
+ goto done;
+
+ size = self->period_size;
+ skip = 0;
+ offset = 0;
+
+ goto copy;
+ }
+
if (gst_adapter_available (self->adapter) == 0) {
diff = G_MAXINT64;
} else {
@@ -317,6 +331,7 @@
if (size < self->period_size)
memset (frame->data_, 0, self->period_size);
+copy:
if (size) {
gst_adapter_copy (self->adapter, (guint8 *) frame->data_ + skip,
offset, size);
diff --git a/ext/x265/Makefile.in b/ext/x265/Makefile.in
index 21806e9..def658f 100644
--- a/ext/x265/Makefile.in
+++ b/ext/x265/Makefile.in
@@ -325,6 +325,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -374,6 +376,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/ext/x265/gstx265enc.c b/ext/x265/gstx265enc.c
index d0e0c08..a2baf56 100644
--- a/ext/x265/gstx265enc.c
+++ b/ext/x265/gstx265enc.c
@@ -659,6 +659,7 @@
encoder->x265param.sourceWidth = info->width;
encoder->x265param.sourceHeight = info->height;
if (info->par_d > 0) {
+ encoder->x265param.vui.aspectRatioIdc = X265_EXTENDED_SAR;
encoder->x265param.vui.sarWidth = info->par_n;
encoder->x265param.vui.sarHeight = info->par_d;
}
diff --git a/ext/xvid/Makefile.in b/ext/xvid/Makefile.in
index 837a093..d60dc56 100644
--- a/ext/xvid/Makefile.in
+++ b/ext/xvid/Makefile.in
@@ -326,6 +326,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -375,6 +377,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/ext/zbar/Makefile.in b/ext/zbar/Makefile.in
index a413202..43f9f32 100644
--- a/ext/zbar/Makefile.in
+++ b/ext/zbar/Makefile.in
@@ -326,6 +326,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -375,6 +377,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/gst-libs/Makefile.in b/gst-libs/Makefile.in
index 24b60e2..ba4525a 100644
--- a/gst-libs/Makefile.in
+++ b/gst-libs/Makefile.in
@@ -299,6 +299,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -348,6 +350,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/gst-libs/gst/Makefile.in b/gst-libs/gst/Makefile.in
index e81a7d1..ea419f6 100644
--- a/gst-libs/gst/Makefile.in
+++ b/gst-libs/gst/Makefile.in
@@ -301,6 +301,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -350,6 +352,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/gst-libs/gst/adaptivedemux/Makefile.in b/gst-libs/gst/adaptivedemux/Makefile.in
index aab6883..f81f5f0 100644
--- a/gst-libs/gst/adaptivedemux/Makefile.in
+++ b/gst-libs/gst/adaptivedemux/Makefile.in
@@ -329,6 +329,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -378,6 +380,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/gst-libs/gst/adaptivedemux/gstadaptivedemux.c b/gst-libs/gst/adaptivedemux/gstadaptivedemux.c
index 5e967bf..c465226 100644
--- a/gst-libs/gst/adaptivedemux/gstadaptivedemux.c
+++ b/gst-libs/gst/adaptivedemux/gstadaptivedemux.c
@@ -138,8 +138,16 @@
#define NUM_LOOKBACK_FRAGMENTS 3
#define GST_MANIFEST_GET_LOCK(d) (&(GST_ADAPTIVE_DEMUX_CAST(d)->priv->manifest_lock))
-#define GST_MANIFEST_LOCK(d) g_rec_mutex_lock (GST_MANIFEST_GET_LOCK (d));
-#define GST_MANIFEST_UNLOCK(d) g_rec_mutex_unlock (GST_MANIFEST_GET_LOCK (d));
+#define GST_MANIFEST_LOCK(d) G_STMT_START { \
+ GST_TRACE("Locking from thread %p", g_thread_self()); \
+ g_rec_mutex_lock (GST_MANIFEST_GET_LOCK (d)); \
+ GST_TRACE("Locked from thread %p", g_thread_self()); \
+ } G_STMT_END
+
+#define GST_MANIFEST_UNLOCK(d) G_STMT_START { \
+ GST_TRACE("Unlocking from thread %p", g_thread_self()); \
+ g_rec_mutex_unlock (GST_MANIFEST_GET_LOCK (d)); \
+ } G_STMT_END
#define GST_API_GET_LOCK(d) (&(GST_ADAPTIVE_DEMUX_CAST(d)->priv->api_lock))
#define GST_API_LOCK(d) g_mutex_lock (GST_API_GET_LOCK (d));
@@ -523,9 +531,16 @@
switch (transition) {
case GST_STATE_CHANGE_PAUSED_TO_READY:
GST_MANIFEST_LOCK (demux);
+ demux->running = FALSE;
gst_adaptive_demux_reset (demux);
GST_MANIFEST_UNLOCK (demux);
break;
+ case GST_STATE_CHANGE_READY_TO_PAUSED:
+ GST_MANIFEST_LOCK (demux);
+ gst_adaptive_demux_reset (demux);
+ demux->running = TRUE;
+ GST_MANIFEST_UNLOCK (demux);
+ break;
default:
break;
}
@@ -664,6 +679,9 @@
gst_adaptive_demux_is_live (demux));
gst_adaptive_demux_start_tasks (demux);
if (gst_adaptive_demux_is_live (demux)) {
+ g_mutex_lock (&demux->priv->updates_timed_lock);
+ demux->priv->stop_updates_task = FALSE;
+ g_mutex_unlock (&demux->priv->updates_timed_lock);
/* Task to periodically update the manifest */
gst_task_start (demux->priv->updates_task);
}
@@ -779,6 +797,7 @@
GError *err = NULL;
gchar *debug = NULL;
gchar *new_error = NULL;
+ const GstStructure *details = NULL;
GST_MANIFEST_LOCK (demux);
@@ -799,6 +818,12 @@
err->message = new_error;
}
+ gst_message_parse_error_details (msg, &details);
+ if (details) {
+ gst_structure_get_uint (details, "http-status-code",
+ &stream->last_status_code);
+ }
+
/* error, but ask to retry */
gst_adaptive_demux_stream_fragment_download_finish (stream,
GST_FLOW_CUSTOM_ERROR, err);
@@ -839,6 +864,7 @@
gst_adaptive_demux_expose_stream (GstAdaptiveDemux * demux,
GstAdaptiveDemuxStream * stream)
{
+ gboolean ret;
GstPad *pad = stream->pad;
gchar *name = gst_pad_get_name (pad);
GstEvent *event;
@@ -883,7 +909,12 @@
gst_object_ref (pad);
- return gst_element_add_pad (GST_ELEMENT_CAST (demux), pad);
+ /* Don't hold the manifest lock while exposing a pad */
+ GST_MANIFEST_UNLOCK (demux);
+ ret = gst_element_add_pad (GST_ELEMENT_CAST (demux), pad);
+ GST_MANIFEST_LOCK (demux);
+
+ return ret;
}
/* must be called with manifest_lock taken */
@@ -930,6 +961,11 @@
demux->streams = demux->next_streams;
demux->next_streams = NULL;
+ if (!demux->running) {
+ GST_DEBUG_OBJECT (demux, "Not exposing pads due to shutdown");
+ return TRUE;
+ }
+
for (iter = demux->streams; iter; iter = g_list_next (iter)) {
GstAdaptiveDemuxStream *stream = iter->data;
@@ -1040,7 +1076,9 @@
gst_event_set_seqnum (stream->pending_segment, demux->priv->segment_seqnum);
}
+ GST_MANIFEST_UNLOCK (demux);
gst_element_no_more_pads (GST_ELEMENT_CAST (demux));
+ GST_MANIFEST_LOCK (demux);
if (old_streams) {
GstEvent *eos = gst_event_new_eos ();
@@ -1053,9 +1091,12 @@
GstAdaptiveDemuxStream *stream = iter->data;
GST_LOG_OBJECT (stream->pad, "Removing stream");
+ GST_MANIFEST_UNLOCK (demux);
+
gst_pad_push_event (stream->pad, gst_event_ref (eos));
gst_pad_set_active (stream->pad, FALSE);
gst_element_remove_pad (GST_ELEMENT (demux), stream->pad);
+ GST_MANIFEST_LOCK (demux);
/* ask the download task to stop.
* We will not join it now, because our thread can be one of these tasks.
@@ -1069,6 +1110,7 @@
* Even if it doesn't do that, we will change its state later in
* gst_adaptive_demux_stop_tasks.
*/
+ GST_LOG_OBJECT (stream, "Marking stream as cancelled");
gst_task_stop (stream->download_task);
g_mutex_lock (&stream->fragment_download_lock);
stream->cancelled = TRUE;
@@ -1132,6 +1174,7 @@
return stream;
}
}
+
return NULL;
}
@@ -1200,9 +1243,15 @@
}
if (stream->src) {
- gst_element_set_state (stream->src, GST_STATE_NULL);
- gst_bin_remove (GST_BIN_CAST (demux), stream->src);
+ GstElement *src = stream->src;
+
stream->src = NULL;
+
+ GST_MANIFEST_UNLOCK (demux);
+ gst_element_set_locked_state (src, TRUE);
+ gst_element_set_state (src, GST_STATE_NULL);
+ gst_bin_remove (GST_BIN_CAST (demux), src);
+ GST_MANIFEST_LOCK (demux);
}
g_cond_clear (&stream->fragment_download_cond);
@@ -1249,9 +1298,11 @@
return klass->seek != NULL;
}
-#define IS_SNAP_SEEK(f) (f & (GST_SEEK_FLAG_SNAP_BEFORE | \
- GST_SEEK_FLAG_SNAP_AFTER | \
- GST_SEEK_FLAG_SNAP_NEAREST))
+#define IS_SNAP_SEEK(f) (f & (GST_SEEK_FLAG_SNAP_BEFORE | \
+ GST_SEEK_FLAG_SNAP_AFTER | \
+ GST_SEEK_FLAG_SNAP_NEAREST | \
+ GST_SEEK_FLAG_TRICKMODE_KEY_UNITS | \
+ GST_SEEK_FLAG_KEY_UNIT))
#define REMOVE_SNAP_FLAGS(f) (f & ~(GST_SEEK_FLAG_SNAP_BEFORE | \
GST_SEEK_FLAG_SNAP_AFTER | \
GST_SEEK_FLAG_SNAP_NEAREST))
@@ -1303,6 +1354,23 @@
gst_event_unref (event);
return FALSE;
}
+
+ if (!(flags & GST_SEEK_FLAG_ACCURATE)) {
+ /* If the accurate flag is not set, we allow seeking before the start
+ * to map to the start for live cases, since those can return a "moving
+ * target" based on wall time.
+ */
+ if (start < range_start) {
+ guint64 dt = range_start - start;
+ GST_DEBUG_OBJECT (demux,
+ "Non accurate seek before live stream start, offsetting by %"
+ GST_TIME_FORMAT, GST_TIME_ARGS (dt));
+ start = range_start;
+ if (stop != GST_CLOCK_TIME_NONE)
+ stop += dt;
+ }
+ }
+
if (start < range_start || start >= range_stop) {
GST_MANIFEST_UNLOCK (demux);
GST_API_UNLOCK (demux);
@@ -1372,7 +1440,9 @@
}
}
- demux_class->stream_seek (stream, rate >= 0, stream_seek_flags, ts, &ts);
+ if (stream) {
+ demux_class->stream_seek (stream, rate >= 0, stream_seek_flags, ts, &ts);
+ }
/* replace event with a new one without snaping to seek on all streams */
gst_event_unref (event);
@@ -1486,7 +1556,8 @@
stream = gst_adaptive_demux_find_stream_for_pad (demux, pad);
if (stream) {
- if (stream->last_ret == GST_FLOW_NOT_LINKED) {
+ if (!stream->cancelled && demux->running &&
+ stream->last_ret == GST_FLOW_NOT_LINKED) {
stream->last_ret = GST_FLOW_OK;
stream->restart_download = TRUE;
stream->need_header = TRUE;
@@ -1633,6 +1704,11 @@
{
GList *iter;
+ if (!demux->running) {
+ GST_DEBUG_OBJECT (demux, "Not starting tasks due to shutdown");
+ return;
+ }
+
GST_INFO_OBJECT (demux, "Starting streams' tasks");
for (iter = demux->streams; iter; iter = g_list_next (iter)) {
GstAdaptiveDemuxStream *stream = iter->data;
@@ -1666,6 +1742,8 @@
gst_uri_downloader_cancel (demux->downloader);
+ GST_LOG_OBJECT (demux, "Stopping tasks");
+
for (iter = demux->streams; iter; iter = g_list_next (iter)) {
GstAdaptiveDemuxStream *stream = iter->data;
@@ -1692,6 +1770,7 @@
GST_MANIFEST_UNLOCK (demux);
if (src) {
+ gst_element_set_locked_state (src, TRUE);
gst_element_set_state (src, GST_STATE_READY);
}
@@ -1820,6 +1899,19 @@
GST_DEBUG_OBJECT (demux, "Bitrate after bitrate limit (%0.2f): %"
G_GUINT64_FORMAT, demux->bitrate_limit,
stream->current_download_rate * 8);
+
+#if 0
+ /* Debugging code, modulate the bitrate every few fragments */
+ {
+ static guint ctr = 0;
+ if (ctr % 3 == 0) {
+ GST_INFO_OBJECT (demux, "Halving reported bitrate for debugging");
+ stream->current_download_rate /= 2;
+ }
+ ctr++;
+ }
+#endif
+
return stream->current_download_rate;
}
@@ -1983,6 +2075,7 @@
g_mutex_lock (&stream->fragment_download_lock);
if (G_UNLIKELY (stream->cancelled)) {
+ GST_LOG_OBJECT (stream, "Stream was cancelled");
ret = stream->last_ret = GST_FLOW_FLUSHING;
g_mutex_unlock (&stream->fragment_download_lock);
return ret;
@@ -2137,8 +2230,7 @@
gboolean finished = FALSE;
if (ret < GST_FLOW_EOS) {
- GST_ELEMENT_ERROR (demux, STREAM, FAILED, (NULL),
- ("stream stopped, reason %s", gst_flow_get_name (ret)));
+ GST_ELEMENT_FLOW_ERROR (demux, ret);
/* TODO push this on all pads */
gst_pad_push_event (stream->pad, gst_event_new_eos ());
@@ -2151,6 +2243,7 @@
ret = GST_FLOW_EOS; /* return EOS to make the source stop */
} else if (ret == GST_ADAPTIVE_DEMUX_FLOW_END_OF_FRAGMENT) {
/* Behaves like an EOS event from upstream */
+ stream->fragment.finished = TRUE;
ret = klass->finish_fragment (demux, stream);
if (ret == (GstFlowReturn) GST_ADAPTIVE_DEMUX_FLOW_SWITCH) {
ret = GST_FLOW_EOS; /* return EOS to make the source stop */
@@ -2195,6 +2288,23 @@
g_mutex_unlock (&stream->fragment_download_lock);
}
+static GstFlowReturn
+gst_adaptive_demux_eos_handling (GstAdaptiveDemuxStream * stream)
+{
+ GstFlowReturn ret = GST_FLOW_OK;
+ GstAdaptiveDemuxClass *klass = GST_ADAPTIVE_DEMUX_GET_CLASS (stream->demux);
+
+ if (!klass->need_another_chunk || stream->fragment.chunk_size == -1
+ || !klass->need_another_chunk (stream)
+ || stream->fragment.chunk_size == 0) {
+ stream->fragment.finished = TRUE;
+ ret = klass->finish_fragment (stream->demux, stream);
+ }
+ gst_adaptive_demux_stream_fragment_download_finish (stream, ret, NULL);
+
+ return ret;
+}
+
static gboolean
_src_event (GstPad * pad, GstObject * parent, GstEvent * event)
{
@@ -2203,14 +2313,14 @@
switch (GST_EVENT_TYPE (event)) {
case GST_EVENT_EOS:{
- GstAdaptiveDemuxClass *klass;
- GstFlowReturn ret;
-
GST_MANIFEST_LOCK (demux);
- klass = GST_ADAPTIVE_DEMUX_GET_CLASS (demux);
- ret = klass->finish_fragment (demux, stream);
- gst_adaptive_demux_stream_fragment_download_finish (stream, ret, NULL);
+ gst_adaptive_demux_eos_handling (stream);
+
+ g_mutex_lock (&stream->fragment_download_lock);
+ stream->download_finished = TRUE;
+ g_cond_signal (&stream->fragment_download_cond);
+ g_mutex_unlock (&stream->fragment_download_lock);
GST_MANIFEST_UNLOCK (demux);
break;
@@ -2322,11 +2432,16 @@
new_protocol = gst_uri_get_protocol (uri);
if (!g_str_equal (old_protocol, new_protocol)) {
- gst_object_unref (stream->src_srcpad);
- gst_element_set_state (stream->src, GST_STATE_NULL);
- gst_bin_remove (GST_BIN_CAST (demux), stream->src);
+ GstElement *src = stream->src;
+
stream->src = NULL;
+ gst_object_unref (stream->src_srcpad);
stream->src_srcpad = NULL;
+ GST_MANIFEST_UNLOCK (demux);
+ gst_element_set_locked_state (src, TRUE);
+ gst_element_set_state (src, GST_STATE_NULL);
+ gst_bin_remove (GST_BIN_CAST (demux), src);
+ GST_MANIFEST_LOCK (demux);
GST_DEBUG_OBJECT (demux, "Can't re-use old source element");
} else {
GError *err = NULL;
@@ -2334,14 +2449,19 @@
GST_DEBUG_OBJECT (demux, "Re-using old source element");
if (!gst_uri_handler_set_uri (GST_URI_HANDLER (stream->uri_handler), uri,
&err)) {
+ GstElement *src = stream->src;
+
+ stream->src = NULL;
GST_DEBUG_OBJECT (demux, "Failed to re-use old source element: %s",
err->message);
g_clear_error (&err);
gst_object_unref (stream->src_srcpad);
- gst_element_set_state (stream->src, GST_STATE_NULL);
- gst_bin_remove (GST_BIN_CAST (demux), stream->src);
- stream->src = NULL;
stream->src_srcpad = NULL;
+ GST_MANIFEST_UNLOCK (demux);
+ gst_element_set_locked_state (src, TRUE);
+ gst_element_set_state (src, GST_STATE_NULL);
+ gst_bin_remove (GST_BIN_CAST (demux), src);
+ GST_MANIFEST_LOCK (demux);
}
}
g_free (old_uri);
@@ -2474,27 +2594,63 @@
stream->uri_handler = uri_handler;
stream->queue = queue;
+
+ stream->last_status_code = 200; /* default to OK */
}
return TRUE;
}
+static GstPadProbeReturn
+gst_ad_stream_src_to_ready_cb (GstPad * pad, GstPadProbeInfo * info,
+ gpointer user_data)
+{
+ GstAdaptiveDemuxStream *stream = user_data;
+
+ /* The source's src pad is IDLE so now set the state to READY */
+ g_mutex_lock (&stream->fragment_download_lock);
+ stream->src_at_ready = TRUE;
+ g_cond_signal (&stream->fragment_download_cond);
+ g_mutex_unlock (&stream->fragment_download_lock);
+
+ return GST_PAD_PROBE_OK;
+}
+
+#ifndef GST_DISABLE_GST_DEBUG
+static const char *
+uritype (GstAdaptiveDemuxStream * s)
+{
+ if (s->downloading_header)
+ return "header";
+ if (s->downloading_index)
+ return "index";
+ return "fragment";
+}
+#endif
+
/* must be called with manifest_lock taken.
* Can temporarily release manifest_lock
*/
static GstFlowReturn
gst_adaptive_demux_stream_download_uri (GstAdaptiveDemux * demux,
GstAdaptiveDemuxStream * stream, const gchar * uri, gint64 start,
- gint64 end)
+ gint64 end, guint * http_status)
{
GstFlowReturn ret = GST_FLOW_OK;
- GST_DEBUG_OBJECT (stream->pad, "Downloading uri: %s, range:%" G_GINT64_FORMAT
- " - %" G_GINT64_FORMAT, uri, start, end);
+ GST_DEBUG_OBJECT (stream->pad,
+ "Downloading %s uri: %s, range:%" G_GINT64_FORMAT " - %" G_GINT64_FORMAT,
+ uritype (stream), uri, start, end);
+
+ if (http_status)
+ *http_status = 200; /* default to ok if no further information */
if (!gst_adaptive_demux_stream_update_source (stream, uri, NULL, FALSE, TRUE)) {
ret = stream->last_ret = GST_FLOW_ERROR;
return ret;
}
+ gst_element_set_locked_state (stream->src, TRUE);
+
+ GST_MANIFEST_UNLOCK (demux);
if (gst_element_set_state (stream->src,
GST_STATE_READY) != GST_STATE_CHANGE_FAILURE) {
if (start != 0 || end != -1) {
@@ -2508,13 +2664,18 @@
GST_FORMAT_BYTES, (GstSeekFlags) GST_SEEK_FLAG_FLUSH,
GST_SEEK_TYPE_SET, start, GST_SEEK_TYPE_SET, end))) {
+ GST_MANIFEST_LOCK (demux);
/* looks like the source can't handle seeks in READY */
g_clear_error (&stream->last_error);
stream->last_error = g_error_new (GST_CORE_ERROR,
GST_CORE_ERROR_NOT_IMPLEMENTED,
"Source element can't handle range requests");
stream->last_ret = GST_FLOW_ERROR;
+ } else {
+ GST_MANIFEST_LOCK (demux);
}
+ } else {
+ GST_MANIFEST_LOCK (demux);
}
if (G_LIKELY (stream->last_ret == GST_FLOW_OK)) {
@@ -2541,9 +2702,10 @@
/* wait for the fragment to be completely downloaded */
GST_DEBUG_OBJECT (stream->pad,
- "Waiting for fragment download to finish: %s", uri);
+ "Waiting for %s download to finish: %s", uritype (stream), uri);
g_mutex_lock (&stream->fragment_download_lock);
+ stream->src_at_ready = FALSE;
if (G_UNLIKELY (stream->cancelled)) {
g_mutex_unlock (&stream->fragment_download_lock);
GST_MANIFEST_LOCK (demux);
@@ -2567,10 +2729,15 @@
ret = stream->last_ret;
- GST_DEBUG_OBJECT (stream->pad, "Fragment download finished: %s %d %s",
- uri, stream->last_ret, gst_flow_get_name (stream->last_ret));
+ GST_DEBUG_OBJECT (stream->pad, "%s download finished: %s %d %s",
+ uritype (stream), uri, stream->last_ret,
+ gst_flow_get_name (stream->last_ret));
+ if (stream->last_ret != GST_FLOW_OK && http_status) {
+ *http_status = stream->last_status_code;
+ }
}
} else {
+ GST_MANIFEST_UNLOCK (demux);
if (stream->last_ret == GST_FLOW_OK)
stream->last_ret = GST_FLOW_CUSTOM_ERROR;
ret = GST_FLOW_CUSTOM_ERROR;
@@ -2581,8 +2748,22 @@
*/
GST_MANIFEST_UNLOCK (demux);
+ stream->src_at_ready = FALSE;
+
+ gst_element_set_locked_state (stream->src, TRUE);
+ gst_pad_add_probe (stream->src_srcpad, GST_PAD_PROBE_TYPE_IDLE,
+ gst_ad_stream_src_to_ready_cb, stream, NULL);
+
+ g_mutex_lock (&stream->fragment_download_lock);
+ while (!stream->src_at_ready) {
+ g_cond_wait (&stream->fragment_download_cond,
+ &stream->fragment_download_lock);
+ }
+ g_mutex_unlock (&stream->fragment_download_lock);
+
gst_element_set_state (stream->src, GST_STATE_READY);
+ /* Need to drop the fragment_download_lock to get the MANIFEST lock */
GST_MANIFEST_LOCK (demux);
g_mutex_lock (&stream->fragment_download_lock);
if (G_UNLIKELY (stream->cancelled)) {
@@ -2618,7 +2799,7 @@
stream->downloading_header = TRUE;
ret = gst_adaptive_demux_stream_download_uri (demux, stream,
stream->fragment.header_uri, stream->fragment.header_range_start,
- stream->fragment.header_range_end);
+ stream->fragment.header_range_end, NULL);
stream->downloading_header = FALSE;
}
@@ -2633,7 +2814,7 @@
stream->downloading_index = TRUE;
ret = gst_adaptive_demux_stream_download_uri (demux, stream,
stream->fragment.index_uri, stream->fragment.index_range_start,
- stream->fragment.index_range_end);
+ stream->fragment.index_range_end, NULL);
stream->downloading_index = FALSE;
}
}
@@ -2648,8 +2829,12 @@
gst_adaptive_demux_stream_download_fragment (GstAdaptiveDemuxStream * stream)
{
GstAdaptiveDemux *demux = stream->demux;
+ GstAdaptiveDemuxClass *klass = GST_ADAPTIVE_DEMUX_GET_CLASS (demux);
gchar *url = NULL;
- GstFlowReturn ret = GST_FLOW_OK;
+ GstFlowReturn ret;
+ gboolean retried_once = FALSE, live;
+ guint http_status;
+ guint last_status_code;
stream->starting_fragment = TRUE;
stream->last_ret = GST_FLOW_OK;
@@ -2667,43 +2852,199 @@
stream->need_header = FALSE;
}
+again:
+ ret = GST_FLOW_OK;
url = stream->fragment.uri;
GST_DEBUG_OBJECT (stream->pad, "Got url '%s' for stream %p", url, stream);
- if (url) {
+ if (!url)
+ return ret;
+
+ stream->last_ret = GST_FLOW_OK;
+ http_status = 200;
+
+ if (klass->need_another_chunk && klass->need_another_chunk (stream)
+ && stream->fragment.chunk_size != 0) {
+ gint64 range_start, range_end, chunk_start, chunk_end;
+ guint64 download_total_bytes;
+ gint chunk_size = stream->fragment.chunk_size;
+
+ range_start = chunk_start = stream->fragment.range_start;
+ range_end = stream->fragment.range_end;
+ /* HTTP ranges are inclusive for the end */
+ if (chunk_size != -1)
+ chunk_end = range_start + chunk_size - 1;
+ else
+ chunk_end = range_end;
+
+ if (range_end != -1)
+ chunk_end = MIN (chunk_end, range_end);
+
+ while (!stream->fragment.finished && (chunk_start <= range_end
+ || range_end == -1)) {
+ download_total_bytes = stream->download_total_bytes;
+
+ ret =
+ gst_adaptive_demux_stream_download_uri (demux, stream, url,
+ chunk_start, chunk_end, &http_status);
+
+ GST_DEBUG_OBJECT (stream->pad,
+ "Fragment chunk download result: %d (%d) %s", stream->last_ret,
+ http_status, gst_flow_get_name (stream->last_ret));
+
+ /* Don't retry for any chunks except the first. We would have sent
+ * data downstream already otherwise and it's difficult to recover
+ * from that in a meaningful way */
+ if (chunk_start > range_start)
+ retried_once = TRUE;
+
+ /* FIXME: Check for 416 Range Not Satisfiable here and fall back to
+ * downloading up to -1. We don't know the full duration.
+ * Needs https://bugzilla.gnome.org/show_bug.cgi?id=756806 */
+ if (ret != GST_FLOW_OK && chunk_end == -1) {
+ break;
+ } else if (ret != GST_FLOW_OK) {
+ chunk_end = -1;
+ stream->last_ret = GST_FLOW_OK;
+ continue;
+ }
+
+ if (chunk_end == -1)
+ break;
+
+ /* Short read, we're at the end now */
+ if (stream->download_total_bytes - download_total_bytes <
+ chunk_end + 1 - chunk_start)
+ break;
+
+ if (!klass->need_another_chunk (stream))
+ break;
+
+ /* HTTP ranges are inclusive for the end */
+ chunk_start += chunk_size;
+ chunk_size = stream->fragment.chunk_size;
+ if (chunk_size != -1)
+ chunk_end = chunk_start + chunk_size - 1;
+ else
+ chunk_end = range_end;
+
+ if (range_end != -1)
+ chunk_end = MIN (chunk_end, range_end);
+ }
+ } else {
ret =
gst_adaptive_demux_stream_download_uri (demux, stream, url,
- stream->fragment.range_start, stream->fragment.range_end);
- GST_DEBUG_OBJECT (stream->pad, "Fragment download result: %d %s",
- stream->last_ret, gst_flow_get_name (stream->last_ret));
- if (ret != GST_FLOW_OK) {
- g_mutex_lock (&stream->fragment_download_lock);
- if (G_UNLIKELY (stream->cancelled)) {
- g_mutex_unlock (&stream->fragment_download_lock);
- return ret;
- }
- g_mutex_unlock (&stream->fragment_download_lock);
+ stream->fragment.range_start, stream->fragment.range_end, &http_status);
+ GST_DEBUG_OBJECT (stream->pad, "Fragment download result: %d (%d) %s",
+ stream->last_ret, http_status, gst_flow_get_name (stream->last_ret));
+ }
+ if (ret == GST_FLOW_OK)
+ goto beach;
- /* TODO check if we are truly stopping */
- if (ret == GST_FLOW_CUSTOM_ERROR && gst_adaptive_demux_is_live (demux)) {
- if (++stream->download_error_count <= MAX_DOWNLOAD_ERROR_COUNT) {
- /* looks like there is no way of knowing when a live stream has ended
- * Have to assume we are falling behind and cause a manifest reload */
- GST_DEBUG_OBJECT (stream->pad,
- "Converting error of live stream to EOS");
- return GST_FLOW_EOS;
+ g_mutex_lock (&stream->fragment_download_lock);
+ if (G_UNLIKELY (stream->cancelled)) {
+ g_mutex_unlock (&stream->fragment_download_lock);
+ return ret;
+ }
+ g_mutex_unlock (&stream->fragment_download_lock);
+
+ /* TODO check if we are truly stopping */
+ if (ret != GST_FLOW_CUSTOM_ERROR)
+ goto beach;
+
+ last_status_code = stream->last_status_code;
+ GST_WARNING_OBJECT (stream->pad, "Got custom error, status %u, dc %d",
+ last_status_code, stream->download_error_count);
+
+ live = gst_adaptive_demux_is_live (demux);
+ if (!retried_once && ((last_status_code / 100 == 4 && live) || last_status_code / 100 == 5)) { /* 4xx/5xx */
+ /* if current position is before available start, switch to next */
+ if (!gst_adaptive_demux_stream_has_next_fragment (demux, stream))
+ goto flushing;
+
+ if (live) {
+ gint64 range_start, range_stop;
+
+ if (!gst_adaptive_demux_get_live_seek_range (demux, &range_start,
+ &range_stop))
+ goto flushing;
+
+ if (demux->segment.position < range_start) {
+ GST_DEBUG_OBJECT (stream->pad, "Retrying once with next segment");
+ stream->last_ret = GST_FLOW_OK;
+ ret = gst_adaptive_demux_eos_handling (stream);
+ GST_DEBUG_OBJECT (stream->pad, "finish_fragment: %s",
+ gst_flow_get_name (ret));
+ ret = gst_adaptive_demux_stream_update_fragment_info (demux, stream);
+ GST_DEBUG_OBJECT (stream->pad, "finish_fragment: %s",
+ gst_flow_get_name (ret));
+ if (ret == GST_FLOW_OK) {
+ retried_once = TRUE;
+ goto again;
}
- } else if (ret == GST_FLOW_CUSTOM_ERROR
- && !gst_adaptive_demux_stream_has_next_fragment (demux, stream)) {
- /* If this is the last fragment, consider failures EOS and not actual
- * errors. Due to rounding errors in the durations, the last fragment
- * might not actually exist */
- GST_DEBUG_OBJECT (stream->pad,
- "Converting error for last fragment to EOS");
- return GST_FLOW_EOS;
+ } else if (demux->segment.position > range_stop) {
+ /* wait a bit to be in range, we don't have any locks at that point */
+ gint64 wait_time =
+ gst_adaptive_demux_stream_get_fragment_waiting_time (demux, stream);
+ if (wait_time > 0) {
+ gint64 end_time = g_get_monotonic_time () + wait_time / GST_USECOND;
+
+ GST_DEBUG_OBJECT (stream->pad,
+ "Download waiting for %" GST_TIME_FORMAT,
+ GST_TIME_ARGS (wait_time));
+
+ GST_MANIFEST_UNLOCK (demux);
+ g_mutex_lock (&stream->fragment_download_lock);
+ if (G_UNLIKELY (stream->cancelled)) {
+ g_mutex_unlock (&stream->fragment_download_lock);
+ GST_MANIFEST_LOCK (demux);
+ stream->last_ret = GST_FLOW_FLUSHING;
+ goto flushing;
+ }
+ do {
+ g_cond_wait_until (&stream->fragment_download_cond,
+ &stream->fragment_download_lock, end_time);
+ if (G_UNLIKELY (stream->cancelled)) {
+ g_mutex_unlock (&stream->fragment_download_lock);
+ GST_MANIFEST_LOCK (demux);
+ stream->last_ret = GST_FLOW_FLUSHING;
+ goto flushing;
+ }
+ } while (!stream->download_finished);
+ g_mutex_unlock (&stream->fragment_download_lock);
+
+ GST_MANIFEST_LOCK (demux);
+ }
}
}
+
+ flushing:
+ if (++stream->download_error_count <= MAX_DOWNLOAD_ERROR_COUNT) {
+ /* looks like there is no way of knowing when a live stream has ended
+ * Have to assume we are falling behind and cause a manifest reload */
+ GST_DEBUG_OBJECT (stream->pad, "Converting error of live stream to EOS");
+ return GST_FLOW_EOS;
+ }
}
+ else if (!gst_adaptive_demux_stream_has_next_fragment (demux, stream)) {
+ /* If this is the last fragment, consider failures EOS and not actual
+ * errors. Due to rounding errors in the durations, the last fragment
+ * might not actually exist */
+ GST_DEBUG_OBJECT (stream->pad, "Converting error for last fragment to EOS");
+ return GST_FLOW_EOS;
+ } else {
+ /* retry once (same segment) for 5xx (server errors) */
+ if (!retried_once) {
+ retried_once = TRUE;
+ /* wait a short time in case the server needs a bit to recover, we don't
+ * care if we get woken up before end time. We can use sleep here since
+ * we're already blocking and just want to wait some time. */
+ g_usleep (100000); /* a tenth of a second */
+ goto again;
+ }
+ }
+
+beach:
return ret;
no_url_error:
@@ -2943,13 +3284,15 @@
break;
case GST_FLOW_NOT_LINKED:
+ {
+ GstFlowReturn ret;
gst_task_stop (stream->download_task);
- if (gst_adaptive_demux_combine_flows (demux)
- == GST_FLOW_NOT_LINKED) {
- GST_ELEMENT_ERROR (demux, STREAM, FAILED,
- (_("Internal data stream error.")), ("stream stopped, reason %s",
- gst_flow_get_name (GST_FLOW_NOT_LINKED)));
+
+ ret = gst_adaptive_demux_combine_flows (demux);
+ if (ret == GST_FLOW_NOT_LINKED) {
+ GST_ELEMENT_FLOW_ERROR (demux, ret);
}
+ }
break;
case GST_FLOW_FLUSHING:{
@@ -3069,9 +3412,14 @@
gst_task_stop (stream->download_task);
if (stream->src) {
- gst_element_set_state (stream->src, GST_STATE_NULL);
- gst_bin_remove (GST_BIN_CAST (demux), stream->src);
+ GstElement *src = stream->src;
+
stream->src = NULL;
+ GST_MANIFEST_UNLOCK (demux);
+ gst_element_set_locked_state (src, TRUE);
+ gst_element_set_state (src, GST_STATE_NULL);
+ gst_bin_remove (GST_BIN_CAST (demux), src);
+ GST_MANIFEST_LOCK (demux);
}
gst_element_post_message (GST_ELEMENT_CAST (demux), msg);
@@ -3180,13 +3528,27 @@
GstEvent * event)
{
gboolean ret;
+ GstPad *pad;
+ GstAdaptiveDemux *demux = stream->demux;
if (GST_EVENT_TYPE (event) == GST_EVENT_EOS) {
stream->eos = TRUE;
}
+
+ pad = gst_object_ref (GST_ADAPTIVE_DEMUX_STREAM_PAD (stream));
+
+ /* Can't push events holding the manifest lock */
+ GST_MANIFEST_UNLOCK (demux);
+
GST_DEBUG_OBJECT (GST_ADAPTIVE_DEMUX_STREAM_PAD (stream),
"Pushing event %" GST_PTR_FORMAT, event);
- ret = gst_pad_push_event (GST_ADAPTIVE_DEMUX_STREAM_PAD (stream), event);
+
+ ret = gst_pad_push_event (pad, event);
+
+ gst_object_unref (pad);
+
+ GST_MANIFEST_LOCK (demux);
+
return ret;
}
@@ -3310,13 +3672,32 @@
/* the subclass might want to switch pads */
if (G_UNLIKELY (demux->next_streams)) {
+ GList *iter;
+ gboolean can_expose = TRUE;
+
gst_task_stop (stream->download_task);
- /* TODO only allow switching streams if other downloads are not ongoing */
- GST_DEBUG_OBJECT (demux, "Subclass wants new pads "
- "to do bitrate switching");
- gst_adaptive_demux_expose_streams (demux, FALSE);
- gst_adaptive_demux_start_tasks (demux);
+
ret = GST_FLOW_EOS;
+
+ for (iter = demux->streams; iter; iter = g_list_next (iter)) {
+ /* Only expose if all streams are now cancelled or finished downloading */
+ GstAdaptiveDemuxStream *other = iter->data;
+ if (other != stream) {
+ g_mutex_lock (&other->fragment_download_lock);
+ can_expose &= (other->cancelled == TRUE
+ || other->download_finished == TRUE);
+ g_mutex_unlock (&other->fragment_download_lock);
+ }
+ }
+
+ if (can_expose) {
+ GST_DEBUG_OBJECT (demux, "Subclass wants new pads "
+ "to do bitrate switching");
+ gst_adaptive_demux_expose_streams (demux, FALSE);
+ gst_adaptive_demux_start_tasks (demux);
+ } else {
+ GST_LOG_OBJECT (demux, "Not switching yet - ongoing downloads");
+ }
}
}
@@ -3330,12 +3711,6 @@
{
GstAdaptiveDemuxClass *klass = GST_ADAPTIVE_DEMUX_GET_CLASS (demux);
- /* FIXME: Currently several issues have be found when letting bitrate adaptation
- * happen using trick modes (such as 'All streams finished without buffers') and
- * the adaptive algorithm does not properly behave. */
- if (demux->segment.rate != 1.0)
- return FALSE;
-
if (klass->stream_select_bitrate)
return klass->stream_select_bitrate (stream, bitrate);
return FALSE;
@@ -3354,6 +3729,7 @@
/* Make sure the sub-class will update bitrate, or else
* we will later */
stream->fragment.bitrate = 0;
+ stream->fragment.finished = FALSE;
return klass->stream_update_fragment_info (stream);
}
@@ -3450,6 +3826,8 @@
f->index_uri = NULL;
f->index_range_start = 0;
f->index_range_end = -1;
+
+ f->finished = FALSE;
}
/* must be called with manifest_lock taken */
diff --git a/gst-libs/gst/adaptivedemux/gstadaptivedemux.h b/gst-libs/gst/adaptivedemux/gstadaptivedemux.h
index c75309f..e876600 100644
--- a/gst-libs/gst/adaptivedemux/gstadaptivedemux.h
+++ b/gst-libs/gst/adaptivedemux/gstadaptivedemux.h
@@ -98,6 +98,9 @@
gint64 range_start;
gint64 range_end;
+ /* when chunked downloading is used, may be be updated need_another_chunk() */
+ guint chunk_size;
+
/* when headers are needed */
gchar *header_uri;
gint64 header_range_start;
@@ -111,6 +114,8 @@
/* Nominal bitrate as provided by
* sub-class or calculated by base-class */
guint bitrate;
+
+ gboolean finished;
};
struct _GstAdaptiveDemuxStream
@@ -145,6 +150,7 @@
/* download tooling */
GstElement *src;
+ guint last_status_code;
GstPad *src_srcpad;
GstElement *uri_handler;
GstElement *queue;
@@ -152,6 +158,7 @@
GCond fragment_download_cond;
gboolean download_finished; /* protected by fragment_download_lock */
gboolean cancelled; /* protected by fragment_download_lock */
+ gboolean src_at_ready; /* protected by fragment_download_lock */
gboolean starting_fragment;
gboolean first_fragment_buffer;
gint64 download_start_time;
@@ -183,6 +190,8 @@
/*< private >*/
GstBin bin;
+ gboolean running;
+
gsize stream_struct_size;
/*< protected >*/
@@ -322,6 +331,17 @@
GstFlowReturn (*stream_seek) (GstAdaptiveDemuxStream * stream, gboolean forward, GstSeekFlags flags, GstClockTime target_ts, GstClockTime * final_ts);
gboolean (*stream_has_next_fragment) (GstAdaptiveDemuxStream * stream);
GstFlowReturn (*stream_advance_fragment) (GstAdaptiveDemuxStream * stream);
+
+ /**
+ * need_another_chunk:
+ * @stream: #GstAdaptiveDemuxStream
+ *
+ * If chunked downloading is used (chunk_size != 0) this is called once as
+ * chunk is finished to decide whether more has to be downloaded or not.
+ * May update chunk_size to a different value
+ */
+ gboolean (*need_another_chunk) (GstAdaptiveDemuxStream * stream);
+
/**
* stream_update_fragment_info:
* @stream: #GstAdaptiveDemuxStream
diff --git a/gst-libs/gst/audio/Makefile.in b/gst-libs/gst/audio/Makefile.in
index e23e3bd..a2eb92a 100644
--- a/gst-libs/gst/audio/Makefile.in
+++ b/gst-libs/gst/audio/Makefile.in
@@ -317,6 +317,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -366,6 +368,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/gst-libs/gst/base/Makefile.in b/gst-libs/gst/base/Makefile.in
index 070417b..e06d16a 100644
--- a/gst-libs/gst/base/Makefile.in
+++ b/gst-libs/gst/base/Makefile.in
@@ -311,6 +311,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -360,6 +362,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/gst-libs/gst/basecamerabinsrc/Makefile.in b/gst-libs/gst/basecamerabinsrc/Makefile.in
index 2c592de..c6846f8 100644
--- a/gst-libs/gst/basecamerabinsrc/Makefile.in
+++ b/gst-libs/gst/basecamerabinsrc/Makefile.in
@@ -316,6 +316,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -365,6 +367,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/gst-libs/gst/basecamerabinsrc/gstcamerabinpreview.c b/gst-libs/gst/basecamerabinsrc/gstcamerabinpreview.c
index cfdc074..48ec2fe 100644
--- a/gst-libs/gst/basecamerabinsrc/gstcamerabinpreview.c
+++ b/gst-libs/gst/basecamerabinsrc/gstcamerabinpreview.c
@@ -235,7 +235,14 @@
g_cond_clear (&preview->processing_cond);
if (preview->pipeline) {
+ GstBus *bus;
+
gst_element_set_state (preview->pipeline, GST_STATE_NULL);
+
+ bus = gst_pipeline_get_bus (GST_PIPELINE (preview->pipeline));
+ gst_bus_remove_watch (bus);
+ gst_object_unref (bus);
+
gst_object_unref (preview->pipeline);
}
g_free (preview);
diff --git a/gst-libs/gst/codecparsers/Makefile.in b/gst-libs/gst/codecparsers/Makefile.in
index ab7d6e3..5971a4a 100644
--- a/gst-libs/gst/codecparsers/Makefile.in
+++ b/gst-libs/gst/codecparsers/Makefile.in
@@ -347,6 +347,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -396,6 +398,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/gst-libs/gst/codecparsers/nalutils.c b/gst-libs/gst/codecparsers/nalutils.c
index b949acb..045b91b 100644
--- a/gst-libs/gst/codecparsers/nalutils.c
+++ b/gst-libs/gst/codecparsers/nalutils.c
@@ -77,7 +77,7 @@
nr->cache = 0xff;
}
-inline gboolean
+extern inline gboolean
nal_reader_read (NalReader * nr, guint nbits)
{
if (G_UNLIKELY (nr->byte * 8 + (nbits - nr->bits_in_cache) > nr->size * 8)) {
@@ -115,7 +115,7 @@
/* Skips the specified amount of bits. This is only suitable to a
cacheable number of bits */
-inline gboolean
+extern inline gboolean
nal_reader_skip (NalReader * nr, guint nbits)
{
g_assert (nbits <= 8 * sizeof (nr->cache));
@@ -146,19 +146,19 @@
return TRUE;
}
-inline guint
+extern inline guint
nal_reader_get_pos (const NalReader * nr)
{
return nr->byte * 8 - nr->bits_in_cache;
}
-inline guint
+extern inline guint
nal_reader_get_remaining (const NalReader * nr)
{
return (nr->size - nr->byte) * 8 + nr->bits_in_cache;
}
-inline guint
+extern inline guint
nal_reader_get_epb_count (const NalReader * nr)
{
return nr->n_epb;
@@ -230,7 +230,7 @@
return TRUE;
}
-inline gboolean
+extern inline gboolean
nal_reader_get_se (NalReader * nr, gint32 * val)
{
guint32 value;
@@ -297,7 +297,7 @@
/*********** end of nal parser ***************/
-inline gint
+extern inline gint
scan_for_start_codes (const guint8 * data, guint size)
{
GstByteReader br;
diff --git a/gst-libs/gst/gl/Makefile.am b/gst-libs/gst/gl/Makefile.am
index 3f04a51..a54ea3f 100644
--- a/gst-libs/gst/gl/Makefile.am
+++ b/gst-libs/gst/gl/Makefile.am
@@ -14,6 +14,7 @@
gstglbuffer.c \
gstglmemory.c \
gstglmemorypbo.c \
+ gstglrenderbuffer.c \
gstglbufferpool.c \
gstglfilter.c \
gstglformat.c \
@@ -45,6 +46,7 @@
gstglbuffer.h \
gstglmemory.h \
gstglmemorypbo.h \
+ gstglrenderbuffer.h \
gstglbufferpool.h \
gstglfilter.h \
gstglformat.h \
diff --git a/gst-libs/gst/gl/Makefile.in b/gst-libs/gst/gl/Makefile.in
index 998609b..dc7d55b 100644
--- a/gst-libs/gst/gl/Makefile.in
+++ b/gst-libs/gst/gl/Makefile.in
@@ -200,6 +200,7 @@
libgstgl_@GST_API_VERSION@_la-gstglbuffer.lo \
libgstgl_@GST_API_VERSION@_la-gstglmemory.lo \
libgstgl_@GST_API_VERSION@_la-gstglmemorypbo.lo \
+ libgstgl_@GST_API_VERSION@_la-gstglrenderbuffer.lo \
libgstgl_@GST_API_VERSION@_la-gstglbufferpool.lo \
libgstgl_@GST_API_VERSION@_la-gstglfilter.lo \
libgstgl_@GST_API_VERSION@_la-gstglformat.lo \
@@ -423,6 +424,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -472,6 +475,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
@@ -893,6 +898,7 @@
gstglbuffer.c \
gstglmemory.c \
gstglmemorypbo.c \
+ gstglrenderbuffer.c \
gstglbufferpool.c \
gstglfilter.c \
gstglformat.c \
@@ -924,6 +930,7 @@
gstglbuffer.h \
gstglmemory.h \
gstglmemorypbo.h \
+ gstglrenderbuffer.h \
gstglbufferpool.h \
gstglfilter.h \
gstglformat.h \
@@ -1084,6 +1091,7 @@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstgl_@GST_API_VERSION@_la-gstglmemorypbo.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstgl_@GST_API_VERSION@_la-gstgloverlaycompositor.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstgl_@GST_API_VERSION@_la-gstglquery.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstgl_@GST_API_VERSION@_la-gstglrenderbuffer.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstgl_@GST_API_VERSION@_la-gstglshader.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstgl_@GST_API_VERSION@_la-gstglshaderstrings.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstgl_@GST_API_VERSION@_la-gstglsl.Plo@am__quote@
@@ -1167,6 +1175,13 @@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgl_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -c -o libgstgl_@GST_API_VERSION@_la-gstglmemorypbo.lo `test -f 'gstglmemorypbo.c' || echo '$(srcdir)/'`gstglmemorypbo.c
+libgstgl_@GST_API_VERSION@_la-gstglrenderbuffer.lo: gstglrenderbuffer.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgl_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -MT libgstgl_@GST_API_VERSION@_la-gstglrenderbuffer.lo -MD -MP -MF $(DEPDIR)/libgstgl_@GST_API_VERSION@_la-gstglrenderbuffer.Tpo -c -o libgstgl_@GST_API_VERSION@_la-gstglrenderbuffer.lo `test -f 'gstglrenderbuffer.c' || echo '$(srcdir)/'`gstglrenderbuffer.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstgl_@GST_API_VERSION@_la-gstglrenderbuffer.Tpo $(DEPDIR)/libgstgl_@GST_API_VERSION@_la-gstglrenderbuffer.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstglrenderbuffer.c' object='libgstgl_@GST_API_VERSION@_la-gstglrenderbuffer.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgl_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -c -o libgstgl_@GST_API_VERSION@_la-gstglrenderbuffer.lo `test -f 'gstglrenderbuffer.c' || echo '$(srcdir)/'`gstglrenderbuffer.c
+
libgstgl_@GST_API_VERSION@_la-gstglbufferpool.lo: gstglbufferpool.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgl_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -MT libgstgl_@GST_API_VERSION@_la-gstglbufferpool.lo -MD -MP -MF $(DEPDIR)/libgstgl_@GST_API_VERSION@_la-gstglbufferpool.Tpo -c -o libgstgl_@GST_API_VERSION@_la-gstglbufferpool.lo `test -f 'gstglbufferpool.c' || echo '$(srcdir)/'`gstglbufferpool.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstgl_@GST_API_VERSION@_la-gstglbufferpool.Tpo $(DEPDIR)/libgstgl_@GST_API_VERSION@_la-gstglbufferpool.Plo
diff --git a/gst-libs/gst/gl/android/Makefile.in b/gst-libs/gst/gl/android/Makefile.in
index 0ae23fd..449d69f 100644
--- a/gst-libs/gst/gl/android/Makefile.in
+++ b/gst-libs/gst/gl/android/Makefile.in
@@ -324,6 +324,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -373,6 +375,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/gst-libs/gst/gl/cocoa/Makefile.in b/gst-libs/gst/gl/cocoa/Makefile.in
index 1c30624..004afb3 100644
--- a/gst-libs/gst/gl/cocoa/Makefile.in
+++ b/gst-libs/gst/gl/cocoa/Makefile.in
@@ -326,6 +326,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -375,6 +377,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/gst-libs/gst/gl/dispmanx/Makefile.in b/gst-libs/gst/gl/dispmanx/Makefile.in
index da481c8..2c39ca6 100644
--- a/gst-libs/gst/gl/dispmanx/Makefile.in
+++ b/gst-libs/gst/gl/dispmanx/Makefile.in
@@ -296,6 +296,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -345,6 +347,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/gst-libs/gst/gl/eagl/Makefile.in b/gst-libs/gst/gl/eagl/Makefile.in
index 9b60f3d..070966f 100644
--- a/gst-libs/gst/gl/eagl/Makefile.in
+++ b/gst-libs/gst/gl/eagl/Makefile.in
@@ -296,6 +296,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -345,6 +347,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/gst-libs/gst/gl/egl/Makefile.in b/gst-libs/gst/gl/egl/Makefile.in
index a85730d..f6f49a4 100644
--- a/gst-libs/gst/gl/egl/Makefile.in
+++ b/gst-libs/gst/gl/egl/Makefile.in
@@ -326,6 +326,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -375,6 +377,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/gst-libs/gst/gl/egl/gstegl.h b/gst-libs/gst/gl/egl/gstegl.h
index 82d4953..2a31f82 100644
--- a/gst-libs/gst/gl/egl/gstegl.h
+++ b/gst-libs/gst/gl/egl/gstegl.h
@@ -46,4 +46,9 @@
#pragma GCC diagnostic pop
#endif
+/* compatibility definitions... */
+#if !GST_GL_HAVE_EGLATTRIB
+typedef gintptr EGLAttrib;
+#endif
+
#endif /* _GST_EGL_H_ */
diff --git a/gst-libs/gst/gl/egl/gsteglimage.c b/gst-libs/gst/gl/egl/gsteglimage.c
index 569ed22..5d2a0a0 100644
--- a/gst-libs/gst/gl/egl/gsteglimage.c
+++ b/gst-libs/gst/gl/egl/gsteglimage.c
@@ -244,6 +244,9 @@
gint fourcc;
gint atti = 0;
EGLint attribs[13];
+#ifdef EGL_VERSION_1_5
+ EGLAttrib attribs_1_5[13];
+#endif
EGLImageKHR img = EGL_NO_IMAGE_KHR;
GstVideoGLTextureType type;
@@ -257,32 +260,55 @@
GST_VIDEO_INFO_COMP_WIDTH (in_info, plane),
GST_VIDEO_INFO_COMP_HEIGHT (in_info, plane));
- attribs[atti++] = EGL_WIDTH;
- attribs[atti++] = GST_VIDEO_INFO_COMP_WIDTH (in_info, plane);
- attribs[atti++] = EGL_HEIGHT;
- attribs[atti++] = GST_VIDEO_INFO_COMP_HEIGHT (in_info, plane);
+#ifdef EGL_VERSION_1_5
+ if (GST_GL_CHECK_GL_VERSION (ctx_egl->egl_major, ctx_egl->egl_minor, 1, 5)) {
+ attribs_1_5[atti++] = EGL_WIDTH;
+ attribs_1_5[atti++] = GST_VIDEO_INFO_COMP_WIDTH (in_info, plane);
+ attribs_1_5[atti++] = EGL_HEIGHT;
+ attribs_1_5[atti++] = GST_VIDEO_INFO_COMP_HEIGHT (in_info, plane);
+ attribs_1_5[atti++] = EGL_LINUX_DRM_FOURCC_EXT;
+ attribs_1_5[atti++] = fourcc;
+ attribs_1_5[atti++] = EGL_DMA_BUF_PLANE0_FD_EXT;
+ attribs_1_5[atti++] = dmabuf;
+ attribs_1_5[atti++] = EGL_DMA_BUF_PLANE0_OFFSET_EXT;
+ attribs_1_5[atti++] = offset;
+ attribs_1_5[atti++] = EGL_DMA_BUF_PLANE0_PITCH_EXT;
+ attribs_1_5[atti++] = GST_VIDEO_INFO_PLANE_STRIDE (in_info, plane);
+ attribs_1_5[atti] = EGL_NONE;
- attribs[atti++] = EGL_LINUX_DRM_FOURCC_EXT;
- attribs[atti++] = fourcc;
+ for (int i = 0; i < atti; i++)
+ GST_LOG ("attr %i: %" G_GINTPTR_FORMAT, i, attribs_1_5[i]);
- attribs[atti++] = EGL_DMA_BUF_PLANE0_FD_EXT;
- attribs[atti++] = dmabuf;
+ g_assert (atti == 12);
- attribs[atti++] = EGL_DMA_BUF_PLANE0_OFFSET_EXT;
- attribs[atti++] = offset;
- attribs[atti++] = EGL_DMA_BUF_PLANE0_PITCH_EXT;
- attribs[atti++] = GST_VIDEO_INFO_PLANE_STRIDE (in_info, plane);
+ img = ctx_egl->eglCreateImage (ctx_egl->egl_display, EGL_NO_CONTEXT,
+ EGL_LINUX_DMA_BUF_EXT, NULL, attribs_1_5);
- attribs[atti] = EGL_NONE;
+ } else
+#endif
+ {
+ attribs[atti++] = EGL_WIDTH;
+ attribs[atti++] = GST_VIDEO_INFO_COMP_WIDTH (in_info, plane);
+ attribs[atti++] = EGL_HEIGHT;
+ attribs[atti++] = GST_VIDEO_INFO_COMP_HEIGHT (in_info, plane);
+ attribs[atti++] = EGL_LINUX_DRM_FOURCC_EXT;
+ attribs[atti++] = fourcc;
+ attribs[atti++] = EGL_DMA_BUF_PLANE0_FD_EXT;
+ attribs[atti++] = dmabuf;
+ attribs[atti++] = EGL_DMA_BUF_PLANE0_OFFSET_EXT;
+ attribs[atti++] = offset;
+ attribs[atti++] = EGL_DMA_BUF_PLANE0_PITCH_EXT;
+ attribs[atti++] = GST_VIDEO_INFO_PLANE_STRIDE (in_info, plane);
+ attribs[atti] = EGL_NONE;
- for (int i = 0; i < atti; i++)
- GST_LOG ("attr %i: %08X", i, attribs[i]);
+ for (int i = 0; i < atti; i++)
+ GST_LOG ("attr %i: %08X", i, attribs[i]);
- g_assert (atti == 12);
+ g_assert (atti == 12);
- img = ctx_egl->eglCreateImage (ctx_egl->egl_display, EGL_NO_CONTEXT,
- EGL_LINUX_DMA_BUF_EXT, NULL, attribs);
-
+ img = ctx_egl->eglCreateImageKHR (ctx_egl->egl_display, EGL_NO_CONTEXT,
+ EGL_LINUX_DMA_BUF_EXT, NULL, attribs);
+ }
if (!img) {
GST_WARNING ("eglCreateImage failed: %s",
gst_gl_context_egl_get_error_string (eglGetError ()));
diff --git a/gst-libs/gst/gl/egl/gstglcontext_egl.c b/gst-libs/gst/gl/egl/gstglcontext_egl.c
index ceafdf3..057c6a9 100644
--- a/gst-libs/gst/gl/egl/gstglcontext_egl.c
+++ b/gst-libs/gst/gl/egl/gstglcontext_egl.c
@@ -309,8 +309,8 @@
GstGLContextEGL *egl;
GstGLWindow *window = NULL;
EGLNativeWindowType window_handle = (EGLNativeWindowType) 0;
- EGLint majorVersion;
- EGLint minorVersion;
+ EGLint egl_major;
+ EGLint egl_minor;
gboolean need_surface = TRUE;
guintptr external_gl_context = 0;
GstGLDisplay *display;
@@ -363,8 +363,8 @@
}
gst_object_unref (display);
- if (eglInitialize (egl->egl_display, &majorVersion, &minorVersion)) {
- GST_INFO ("egl initialized, version: %d.%d", majorVersion, minorVersion);
+ if (eglInitialize (egl->egl_display, &egl_major, &egl_minor)) {
+ GST_INFO ("egl initialized, version: %d.%d", egl_major, egl_minor);
} else {
g_set_error (error, GST_GL_CONTEXT_ERROR,
GST_GL_CONTEXT_ERROR_RESOURCE_UNAVAILABLE,
@@ -380,16 +380,16 @@
gint i;
/* egl + opengl only available with EGL 1.4+ */
- if (majorVersion == 1 && minorVersion <= 3) {
+ if (egl_major == 1 && egl_minor <= 3) {
if ((gl_api & ~GST_GL_API_OPENGL) == GST_GL_API_NONE) {
g_set_error (error, GST_GL_CONTEXT_ERROR, GST_GL_CONTEXT_ERROR_OLD_LIBS,
"EGL version (%i.%i) too old for OpenGL support, (needed at least 1.4)",
- majorVersion, minorVersion);
+ egl_major, egl_minor);
goto failure;
} else {
GST_WARNING
("EGL version (%i.%i) too old for OpenGL support, (needed at least 1.4)",
- majorVersion, minorVersion);
+ egl_major, egl_minor);
if (gl_api & GST_GL_API_GLES2) {
goto try_gles2;
} else {
@@ -599,22 +599,28 @@
}
/* EGLImage functions */
- if (GST_GL_CHECK_GL_VERSION (majorVersion, minorVersion, 1, 5)) {
+ if (GST_GL_CHECK_GL_VERSION (egl_major, egl_minor, 1, 5)) {
egl->eglCreateImage = gst_gl_context_get_proc_address (context,
"eglCreateImage");
egl->eglDestroyImage = gst_gl_context_get_proc_address (context,
"eglDestroyImage");
+ if (egl->eglCreateImage == NULL || egl->eglDestroyImage == NULL) {
+ egl->eglCreateImage = NULL;
+ egl->eglDestroyImage = NULL;
+ }
} else if (gst_gl_check_extension ("EGL_KHR_image_base", egl->egl_exts)) {
- egl->eglCreateImage = gst_gl_context_get_proc_address (context,
+ egl->eglCreateImageKHR = gst_gl_context_get_proc_address (context,
"eglCreateImageKHR");
egl->eglDestroyImage = gst_gl_context_get_proc_address (context,
"eglDestroyImageKHR");
+ if (egl->eglCreateImageKHR == NULL || egl->eglDestroyImage == NULL) {
+ egl->eglCreateImageKHR = NULL;
+ egl->eglDestroyImage = NULL;
+ }
}
- if (egl->eglCreateImage == NULL || egl->eglDestroyImage == NULL) {
- egl->eglCreateImage = NULL;
- egl->eglDestroyImage = NULL;
- }
-
+ egl->egl_major = egl_major;
+ egl->egl_minor = egl_minor;
+
if (window)
gst_object_unref (window);
@@ -817,7 +823,11 @@
GstGLContextEGL *context_egl = GST_GL_CONTEXT_EGL (context);
if (g_strcmp0 (feature, "EGL_KHR_image_base") == 0) {
- return context_egl->eglCreateImage != NULL &&
+ if (GST_GL_CHECK_GL_VERSION (context_egl->egl_major, context_egl->egl_minor, 1, 5))
+ return context_egl->eglCreateImage != NULL &&
+ context_egl->eglDestroyImage != NULL;
+ else
+ return context_egl->eglCreateImageKHR != NULL &&
context_egl->eglDestroyImage != NULL;
}
diff --git a/gst-libs/gst/gl/egl/gstglcontext_egl.h b/gst-libs/gst/gl/egl/gstglcontext_egl.h
index 90abb03..c73cd02 100644
--- a/gst-libs/gst/gl/egl/gstglcontext_egl.h
+++ b/gst-libs/gst/gl/egl/gstglcontext_egl.h
@@ -46,12 +46,17 @@
EGLSurface egl_surface;
EGLConfig egl_config;
+ gint egl_major;
+ gint egl_minor;
+
GstGLAPI gl_api;
const gchar *egl_exts;
- EGLImageKHR (*eglCreateImage) (EGLDisplay dpy, EGLContext ctx, EGLenum target,
+ EGLImageKHR (*eglCreateImageKHR) (EGLDisplay dpy, EGLContext ctx, EGLenum target,
EGLClientBuffer buffer, const EGLint *attrib_list);
+ EGLImageKHR (*eglCreateImage) (EGLDisplay dpy, EGLContext ctx, EGLenum target,
+ EGLClientBuffer buffer, const EGLAttrib *attrib_list);
EGLBoolean (*eglDestroyImage) (EGLDisplay dpy, EGLImageKHR image);
/* Cached handle */
diff --git a/gst-libs/gst/gl/egl/gstglmemoryegl.c b/gst-libs/gst/gl/egl/gstglmemoryegl.c
index 0094c34..cde47ca 100644
--- a/gst-libs/gst/gl/egl/gstglmemoryegl.c
+++ b/gst-libs/gst/gl/egl/gstglmemoryegl.c
@@ -159,7 +159,7 @@
return FALSE;
if (gl_mem->image == NULL) {
- EGLImageKHR image = ctx_egl->eglCreateImage (ctx_egl->egl_display,
+ EGLImageKHR image = ctx_egl->eglCreateImageKHR (ctx_egl->egl_display,
ctx_egl->egl_context, EGL_GL_TEXTURE_2D_KHR,
(EGLClientBuffer) (guintptr) gl_mem->mem.tex_id, NULL);
diff --git a/gst-libs/gst/gl/gl.h b/gst-libs/gst/gl/gl.h
index b17a4c6..9547386 100644
--- a/gst-libs/gst/gl/gl.h
+++ b/gst-libs/gst/gl/gl.h
@@ -45,6 +45,7 @@
#include <gst/gl/gstglbuffer.h>
#include <gst/gl/gstglmemory.h>
#include <gst/gl/gstglmemorypbo.h>
+#include <gst/gl/gstglrenderbuffer.h>
#include <gst/gl/gstglbufferpool.h>
#include <gst/gl/gstglframebuffer.h>
#include <gst/gl/gstglbasefilter.h>
diff --git a/gst-libs/gst/gl/glprototypes/Makefile.in b/gst-libs/gst/gl/glprototypes/Makefile.in
index c3d8253..3e1b479 100644
--- a/gst-libs/gst/gl/glprototypes/Makefile.in
+++ b/gst-libs/gst/gl/glprototypes/Makefile.in
@@ -288,6 +288,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -337,6 +339,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/gst-libs/gst/gl/gstgl_fwd.h b/gst-libs/gst/gl/gstgl_fwd.h
index 73e17bd..465e284 100644
--- a/gst-libs/gst/gl/gstgl_fwd.h
+++ b/gst-libs/gst/gl/gstgl_fwd.h
@@ -59,6 +59,14 @@
typedef struct _GstGLMemoryEGLAllocator GstGLMemoryEGLAllocator;
typedef struct _GstGLMemoryEGLAllocatorClass GstGLMemoryEGLAllocatorClass;
+typedef struct _GstGLRenderbuffer GstGLRenderbuffer;
+typedef struct _GstGLRenderbufferAllocator GstGLRenderbufferAllocator;
+typedef struct _GstGLRenderbufferAllocatorClass GstGLRenderbufferAllocatorClass;
+
+typedef struct _GstGLFramebuffer GstGLFramebuffer;
+typedef struct _GstGLFramebufferAllocator GstGLFramebufferAllocator;
+typedef struct _GstGLFramebufferAllocatorClass GstGLFramebufferAllocatorClass;
+
typedef struct _GstGLSLStage GstGLSLStage;
typedef struct _GstGLSLStagePrivate GstGLSLStagePrivate;
typedef struct _GstGLSLStageClass GstGLSLStageClass;
diff --git a/gst-libs/gst/gl/gstglbasememory.c b/gst-libs/gst/gl/gstglbasememory.c
index 915e19e..2d4c8c3 100644
--- a/gst-libs/gst/gl/gstglbasememory.c
+++ b/gst-libs/gst/gl/gstglbasememory.c
@@ -732,6 +732,8 @@
{
GstGLBaseMemoryAllocatorClass *alloc_class;
+ g_return_val_if_fail (GST_IS_GL_BASE_MEMORY_ALLOCATOR (allocator), NULL);
+
alloc_class = GST_GL_BASE_MEMORY_ALLOCATOR_GET_CLASS (allocator);
g_return_val_if_fail (alloc_class != NULL, NULL);
diff --git a/gst-libs/gst/gl/gstglbasememory.h b/gst-libs/gst/gl/gstglbasememory.h
index 642684a..bee2844 100644
--- a/gst-libs/gst/gl/gstglbasememory.h
+++ b/gst-libs/gst/gl/gstglbasememory.h
@@ -32,7 +32,7 @@
#define GST_TYPE_GL_BASE_MEMORY_ALLOCATOR (gst_gl_base_memory_allocator_get_type())
GType gst_gl_base_memory_allocator_get_type(void);
-#define GST_IS_GL_BASE_MEMORY_ALLOCATOR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_GL_ALLOCATOR))
+#define GST_IS_GL_BASE_MEMORY_ALLOCATOR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_GL_BASE_MEMORY_ALLOCATOR))
#define GST_IS_GL_BASE_MEMORY_ALLOCATOR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_GL_BASE_MEMORY_ALLOCATOR))
#define GST_GL_BASE_MEMORY_ALLOCATOR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GST_TYPE_GL_BASE_MEMORY_ALLOCATOR, GstGLBaseMemoryAllocatorClass))
#define GST_GL_BASE_MEMORY_ALLOCATOR(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_GL_BASE_MEMORY_ALLOCATOR, GstGLBaseMemoryAllocator))
diff --git a/gst-libs/gst/gl/gstglcolorconvert.c b/gst-libs/gst/gl/gstglcolorconvert.c
index ebddb2d..e9eb88a 100644
--- a/gst-libs/gst/gl/gstglcolorconvert.c
+++ b/gst-libs/gst/gl/gstglcolorconvert.c
@@ -549,11 +549,9 @@
{
guint i;
- if (convert->fbo || convert->depth_buffer) {
- gst_gl_context_del_fbo (convert->context, convert->fbo,
- convert->depth_buffer);
- convert->fbo = 0;
- convert->depth_buffer = 0;
+ if (convert->fbo) {
+ gst_object_unref (convert->fbo);
+ convert->fbo = NULL;
}
for (i = 0; i < convert->priv->convert_info.out_n_textures; i++) {
@@ -1360,6 +1358,8 @@
case GST_VIDEO_FORMAT_GRAY16_BE:
case GST_VIDEO_FORMAT_YUY2:
case GST_VIDEO_FORMAT_UYVY:
+ case GST_VIDEO_FORMAT_RGB16:
+ case GST_VIDEO_FORMAT_BGR16:
return 1;
case GST_VIDEO_FORMAT_NV12:
case GST_VIDEO_FORMAT_NV21:
@@ -1924,8 +1924,8 @@
gst_video_format_to_string (GST_VIDEO_INFO_FORMAT (&convert->out_info)));
if (!gl->CreateProgramObject && !gl->CreateProgram) {
- gst_gl_context_set_error (convert->context,
- "Cannot perform color conversion without OpenGL shaders");
+ GST_ERROR_OBJECT (convert, "Cannot perform color conversion without "
+ "OpenGL shaders");
goto error;
}
@@ -2027,7 +2027,7 @@
gst_gl_context_clear_shader (convert->context);
- if (convert->fbo == 0 && !_init_convert_fbo (convert)) {
+ if (convert->fbo == NULL && !_init_convert_fbo (convert)) {
goto error;
}
@@ -2063,8 +2063,7 @@
return TRUE;
unhandled_format:
- gst_gl_context_set_error (convert->context,
- "Don't know how to convert from %s to %s",
+ GST_ERROR_OBJECT (convert, "Don't know how to convert from %s to %s",
gst_video_format_to_string (GST_VIDEO_INFO_FORMAT (&convert->in_info)),
gst_video_format_to_string (GST_VIDEO_INFO_FORMAT (&convert->out_info)));
@@ -2073,8 +2072,7 @@
incompatible_api:
{
- gst_gl_context_set_error (convert->context,
- "Converting from %s to %s requires "
+ GST_ERROR_OBJECT (convert, "Converting from %s to %s requires "
"functionality that the current OpenGL setup does not support",
gst_video_format_to_string (GST_VIDEO_INFO_FORMAT (&convert->in_info)),
gst_video_format_to_string (GST_VIDEO_INFO_FORMAT
@@ -2083,87 +2081,20 @@
}
}
-
/* called by _init_convert (in the gl thread) */
static gboolean
_init_convert_fbo (GstGLColorConvert * convert)
{
- GstGLFuncs *gl;
guint out_width, out_height;
- GLuint fake_texture = 0; /* a FBO must hava texture to init */
- GLenum internal_format;
-
- gl = convert->context->gl_vtable;
out_width = GST_VIDEO_INFO_WIDTH (&convert->out_info);
out_height = GST_VIDEO_INFO_HEIGHT (&convert->out_info);
- if (!gl->GenFramebuffers) {
- /* turn off the pipeline because Frame buffer object is a not present */
- gst_gl_context_set_error (convert->context,
- "Context, EXT_framebuffer_object supported: no");
- return FALSE;
- }
+ convert->fbo =
+ gst_gl_framebuffer_new_with_default_depth (convert->context, out_width,
+ out_height);
- GST_INFO ("Context, EXT_framebuffer_object supported: yes");
-
- /* setup FBO */
- gl->GenFramebuffers (1, &convert->fbo);
- gl->BindFramebuffer (GL_FRAMEBUFFER, convert->fbo);
-
- /* setup the render buffer for depth */
- gl->GenRenderbuffers (1, &convert->depth_buffer);
- gl->BindRenderbuffer (GL_RENDERBUFFER, convert->depth_buffer);
- if (USING_OPENGL (convert->context) || USING_OPENGL3 (convert->context)) {
- gl->RenderbufferStorage (GL_RENDERBUFFER, GL_DEPTH24_STENCIL8,
- out_width, out_height);
- }
- if (USING_GLES2 (convert->context)) {
- gl->RenderbufferStorage (GL_RENDERBUFFER, GL_DEPTH_COMPONENT16,
- out_width, out_height);
- }
-
- /* a fake texture is attached to the convert FBO (cannot init without it) */
- gl->GenTextures (1, &fake_texture);
- gl->BindTexture (GL_TEXTURE_2D, fake_texture);
- internal_format =
- gst_gl_sized_gl_format_from_gl_format_type (convert->context, GL_RGBA,
- GL_UNSIGNED_BYTE);
- gl->TexImage2D (GL_TEXTURE_2D, 0, internal_format, out_width, out_height, 0,
- GL_RGBA, GL_UNSIGNED_BYTE, NULL);
- gl->TexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
- gl->TexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
- gl->TexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
- gl->TexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
-
- /* attach the texture to the FBO to renderer to */
- gl->FramebufferTexture2D (GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0,
- GL_TEXTURE_2D, fake_texture, 0);
-
- /* attach the depth render buffer to the FBO */
- gl->FramebufferRenderbuffer (GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT,
- GL_RENDERBUFFER, convert->depth_buffer);
-
- if (USING_OPENGL (convert->context)) {
- gl->FramebufferRenderbuffer (GL_FRAMEBUFFER, GL_STENCIL_ATTACHMENT,
- GL_RENDERBUFFER, convert->depth_buffer);
- }
-
- if (!gst_gl_context_check_framebuffer_status (convert->context)) {
- gst_gl_context_set_error (convert->context,
- "GL framebuffer status incomplete");
-
- gl->DeleteTextures (1, &fake_texture);
-
- return FALSE;
- }
-
- /* unbind the FBO */
- gl->BindFramebuffer (GL_FRAMEBUFFER, 0);
-
- gl->DeleteTextures (1, &fake_texture);
-
- return TRUE;
+ return convert->fbo != NULL;
}
static gboolean
@@ -2286,15 +2217,13 @@
if (!gst_memory_map ((GstMemory *) convert->priv->out_tex[j], &from_info,
GST_MAP_READ | GST_MAP_GL)) {
- gst_gl_context_set_error (convert->context, "Failed to map "
- "intermediate memory");
+ GST_ERROR_OBJECT (convert, "Failed to map intermediate memory");
res = FALSE;
continue;
}
if (!gst_memory_map ((GstMemory *) out_tex, &to_info,
GST_MAP_WRITE | GST_MAP_GL)) {
- gst_gl_context_set_error (convert->context, "Failed to map "
- "intermediate memory");
+ GST_ERROR_OBJECT (convert, "Failed to map intermediate memory");
res = FALSE;
continue;
}
@@ -2487,21 +2416,13 @@
gl = context->gl_vtable;
- out_width = GST_VIDEO_INFO_WIDTH (&convert->out_info);
- out_height = GST_VIDEO_INFO_HEIGHT (&convert->out_info);
-
- gl->BindFramebuffer (GL_FRAMEBUFFER, convert->fbo);
+ gst_gl_framebuffer_bind (convert->fbo);
/* attach the texture to the FBO to renderer to */
for (i = 0; i < c_info->out_n_textures; i++) {
- guint gl_target =
- gst_gl_texture_target_to_gl (convert->priv->to_texture_target);
+ GstGLBaseMemory *tex = (GstGLBaseMemory *) convert->priv->out_tex[i];
- /* needed? */
- gl->BindTexture (gl_target, convert->priv->out_tex[i]->tex_id);
-
- gl->FramebufferTexture2D (GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0 + i,
- gl_target, convert->priv->out_tex[i]->tex_id, 0);
+ gst_gl_framebuffer_attach (convert->fbo, GL_COLOR_ATTACHMENT0 + i, tex);
}
if (gl->DrawBuffers)
@@ -2511,6 +2432,8 @@
gl->GetIntegerv (GL_VIEWPORT, viewport_dim);
+ gst_gl_framebuffer_get_effective_dimensions (convert->fbo, &out_width,
+ &out_height);
gl->Viewport (0, 0, out_width, out_height);
gst_gl_shader_use (convert->shader);
@@ -2556,7 +2479,7 @@
gst_gl_context_check_framebuffer_status (context);
- gl->BindFramebuffer (GL_FRAMEBUFFER, 0);
+ gst_gl_context_clear_framebuffer (context);
return TRUE;
}
diff --git a/gst-libs/gst/gl/gstglcolorconvert.h b/gst-libs/gst/gl/gstglcolorconvert.h
index 5980cfa..fbbbf3b 100644
--- a/gst-libs/gst/gl/gstglcolorconvert.h
+++ b/gst-libs/gst/gl/gstglcolorconvert.h
@@ -59,8 +59,7 @@
GstBuffer * outbuf;
/* used for the conversion */
- GLuint fbo;
- GLuint depth_buffer;
+ GstGLFramebuffer *fbo;
GstGLShader *shader;
/* <private> */
diff --git a/gst-libs/gst/gl/gstglcontext.c b/gst-libs/gst/gl/gstglcontext.c
index d222e08..2bc0a78 100644
--- a/gst-libs/gst/gl/gstglcontext.c
+++ b/gst-libs/gst/gl/gstglcontext.c
@@ -642,7 +642,14 @@
gst_gl_window_quit (context->window);
GST_INFO_OBJECT (context, "joining gl thread");
- g_thread_join (context->priv->gl_thread);
+ g_mutex_lock (&context->priv->render_lock);
+ if (context->priv->alive) {
+ GThread *t = context->priv->gl_thread;
+ g_mutex_unlock (&context->priv->render_lock);
+ g_thread_join (t);
+ } else {
+ g_mutex_unlock (&context->priv->render_lock);
+ }
GST_INFO_OBJECT (context, "gl thread joined");
context->priv->gl_thread = NULL;
}
diff --git a/gst-libs/gst/gl/gstgldisplay.c b/gst-libs/gst/gl/gstgldisplay.c
index fee0316..7cb6266 100644
--- a/gst-libs/gst/gl/gstgldisplay.c
+++ b/gst-libs/gst/gl/gstgldisplay.c
@@ -142,6 +142,7 @@
gst_gl_buffer_init_once ();
gst_gl_memory_pbo_init_once ();
+ gst_gl_renderbuffer_init_once ();
#if GST_GL_HAVE_PLATFORM_EGL
gst_gl_memory_egl_init_once ();
diff --git a/gst-libs/gst/gl/gstglfilter.c b/gst-libs/gst/gl/gstglfilter.c
index 7c4e254..b0693c1 100644
--- a/gst-libs/gst/gl/gstglfilter.c
+++ b/gst-libs/gst/gl/gstglfilter.c
@@ -78,7 +78,8 @@
#define gst_gl_filter_parent_class parent_class
G_DEFINE_TYPE_WITH_CODE (GstGLFilter, gst_gl_filter, GST_TYPE_GL_BASE_FILTER,
GST_DEBUG_CATEGORY_INIT (gst_gl_filter_debug, "glfilter", 0,
- "glfilter element"););
+ "glfilter element");
+ );
static void gst_gl_filter_set_property (GObject * object, guint prop_id,
const GValue * value, GParamSpec * pspec);
@@ -227,12 +228,11 @@
filter->vbo_indices = 0;
}
- if (filter->fbo != 0) {
- gst_gl_context_del_fbo (context, filter->fbo, filter->depthbuffer);
+ if (filter->fbo != NULL) {
+ gst_object_unref (filter->fbo);
+ filter->fbo = NULL;
}
- filter->fbo = 0;
- filter->depthbuffer = 0;
filter->default_shader = NULL;
filter->draw_attr_position_loc = -1;
filter->draw_attr_texture_loc = -1;
@@ -690,14 +690,12 @@
out_width = GST_VIDEO_INFO_WIDTH (&filter->out_info);
out_height = GST_VIDEO_INFO_HEIGHT (&filter->out_info);
- if (filter->fbo) {
- gst_gl_context_del_fbo (context, filter->fbo, filter->depthbuffer);
- filter->fbo = 0;
- filter->depthbuffer = 0;
- }
- //blocking call, generate a FBO
- if (!gst_gl_context_gen_fbo (context, out_width, out_height,
- &filter->fbo, &filter->depthbuffer))
+ if (filter->fbo)
+ gst_object_unref (filter->fbo);
+
+ if (!(filter->fbo =
+ gst_gl_framebuffer_new_with_default_depth (context, out_width,
+ out_height)))
goto context_error;
if (filter_class->init_fbo) {
@@ -904,7 +902,7 @@
GstBuffer * outbuf)
{
GstGLFilterClass *filter_class;
- guint in_tex, out_tex;
+ GstMemory *in_tex, *out_tex;
GstVideoFrame gl_frame, out_frame;
gboolean ret;
@@ -916,7 +914,12 @@
goto inbuf_error;
}
- in_tex = *(guint *) gl_frame.data[0];
+ in_tex = gl_frame.map[0].memory;
+ if (!gst_is_gl_memory (in_tex)) {
+ ret = FALSE;
+ GST_ERROR_OBJECT (filter, "Input memory must be GstGLMemory");
+ goto inbuf_error;
+ }
if (!gst_video_frame_map (&out_frame, &filter->out_info, outbuf,
GST_MAP_WRITE | GST_MAP_GL)) {
@@ -924,13 +927,17 @@
goto unmap_out_error;
}
- out_tex = *(guint *) out_frame.data[0];
+ out_tex = out_frame.map[0].memory;
+ g_return_val_if_fail (gst_is_gl_memory (out_tex), FALSE);
- GST_DEBUG ("calling filter_texture with textures in:%i out:%i", in_tex,
- out_tex);
+ GST_DEBUG ("calling filter_texture with textures in:%i out:%i",
+ GST_GL_MEMORY_CAST (in_tex)->tex_id,
+ GST_GL_MEMORY_CAST (out_tex)->tex_id);
g_assert (filter_class->filter_texture);
- ret = filter_class->filter_texture (filter, in_tex, out_tex);
+
+ ret = filter_class->filter_texture (filter, GST_GL_MEMORY_CAST (in_tex),
+ GST_GL_MEMORY_CAST (out_tex));
gst_video_frame_unmap (&out_frame);
unmap_out_error:
@@ -941,10 +948,19 @@
}
static void
-_debug_marker (GstGLContext * context, GstGLFilter * filter)
+_filter_gl (GstGLContext * context, GstGLFilter * filter)
{
+ GstGLFilterClass *filter_class = GST_GL_FILTER_GET_CLASS (filter);
+
gst_gl_insert_debug_marker (context,
"processing in element %s", GST_OBJECT_NAME (filter));
+
+ if (filter_class->filter)
+ filter->gl_result =
+ filter_class->filter (filter, filter->inbuf, filter->outbuf);
+ else
+ filter->gl_result =
+ gst_gl_filter_filter_texture (filter, filter->inbuf, filter->outbuf);
}
static GstFlowReturn
@@ -967,12 +983,11 @@
if (in_sync_meta)
gst_gl_sync_meta_wait (in_sync_meta, context);
- gst_gl_context_thread_add (context, (GstGLContextThreadFunc) _debug_marker,
+ filter->inbuf = inbuf;
+ filter->outbuf = outbuf;
+ gst_gl_context_thread_add (context, (GstGLContextThreadFunc) _filter_gl,
filter);
- if (filter_class->filter)
- ret = filter_class->filter (filter, inbuf, outbuf);
- else
- ret = gst_gl_filter_filter_texture (filter, inbuf, outbuf);
+ ret = filter->gl_result;
out_sync_meta = gst_buffer_get_gl_sync_meta (outbuf);
if (out_sync_meta)
@@ -981,66 +996,46 @@
return ret ? GST_FLOW_OK : GST_FLOW_ERROR;
}
-struct glcb2
+struct glcb
{
- GLCB func;
+ GstGLFilter *filter;
+ GstGLFilterRenderFunc func;
+ GstGLMemory *in_tex;
gpointer data;
- guint texture;
- guint width;
- guint height;
};
-/* convenience functions to simplify filter development */
-static void
-_glcb2 (gpointer data)
+static gboolean
+_glcb (gpointer data)
{
- struct glcb2 *cb = data;
+ struct glcb *cb = data;
- cb->func (cb->width, cb->height, cb->texture, cb->data);
+ return cb->func (cb->filter, cb->in_tex, cb->data);
}
/**
* gst_gl_filter_render_to_target:
* @filter: a #GstGLFilter
- * @resize: whether to automatically resize the texture between the input size
- * and the output size
* @input: the input texture
- * @target: the output texture
+ * @output: the output texture
* @func: the function to transform @input into @output. called with @data
* @data: the data associated with @func
*
- * Transforms @input into @output using @func on through FBO. @resize should
- * only ever be %TRUE whenever @input is the input texture of @filter.
+ * Transforms @input into @output using @func on through FBO.
+ *
+ * Returns: the return value of @func
*/
-void
-gst_gl_filter_render_to_target (GstGLFilter * filter, gboolean resize,
- GLuint input, GLuint target, GLCB func, gpointer data)
+gboolean
+gst_gl_filter_render_to_target (GstGLFilter * filter, GstGLMemory * input,
+ GstGLMemory * output, GstGLFilterRenderFunc func, gpointer data)
{
- GstGLContext *context = GST_GL_BASE_FILTER (filter)->context;
- guint in_width, in_height, out_width, out_height;
- struct glcb2 cb;
+ struct glcb cb;
- out_width = GST_VIDEO_INFO_WIDTH (&filter->out_info);
- out_height = GST_VIDEO_INFO_HEIGHT (&filter->out_info);
- if (resize) {
- in_width = GST_VIDEO_INFO_WIDTH (&filter->in_info);
- in_height = GST_VIDEO_INFO_HEIGHT (&filter->in_info);
- } else {
- in_width = out_width;
- in_height = out_height;
- }
-
- GST_LOG ("rendering to target. in %u, %ux%u out %u, %ux%u", input, in_width,
- in_height, target, out_width, out_height);
-
+ cb.filter = filter;
cb.func = func;
+ cb.in_tex = input;
cb.data = data;
- cb.texture = input;
- cb.width = in_width;
- cb.height = in_height;
- gst_gl_context_use_fbo_v2 (context, out_width, out_height,
- filter->fbo, filter->depthbuffer, target, _glcb2, &cb);
+ return gst_gl_framebuffer_draw_to_texture (filter->fbo, output, _glcb, &cb);
}
static void
@@ -1065,10 +1060,10 @@
filter->valid_attributes = TRUE;
}
-static void
-_draw_with_shader_cb (gint width, gint height, guint texture, gpointer stuff)
+static gboolean
+_draw_with_shader_cb (GstGLFilter * filter, GstGLMemory * in_tex,
+ gpointer unused)
{
- GstGLFilter *filter = GST_GL_FILTER (stuff);
GstGLContext *context = GST_GL_BASE_FILTER (filter)->context;
GstGLFuncs *gl = context->gl_vtable;
@@ -1083,26 +1078,27 @@
gst_gl_shader_use (filter->default_shader);
gl->ActiveTexture (GL_TEXTURE1);
- gl->BindTexture (GL_TEXTURE_2D, texture);
+ gl->BindTexture (GL_TEXTURE_2D, gst_gl_memory_get_texture_id (in_tex));
gst_gl_shader_set_uniform_1i (filter->default_shader, "tex", 1);
- gst_gl_shader_set_uniform_1f (filter->default_shader, "width", width);
- gst_gl_shader_set_uniform_1f (filter->default_shader, "height", height);
+ gst_gl_shader_set_uniform_1f (filter->default_shader, "width",
+ GST_VIDEO_INFO_WIDTH (&filter->out_info));
+ gst_gl_shader_set_uniform_1f (filter->default_shader, "height",
+ GST_VIDEO_INFO_HEIGHT (&filter->out_info));
- gst_gl_filter_draw_texture (filter, texture, width, height);
+ gst_gl_filter_draw_fullscreen_quad (filter);
+
+ return TRUE;
}
/**
* gst_gl_filter_render_to_target_with_shader:
* @filter: a #GstGLFilter
- * @resize: whether to automatically resize the texture between the input size
- * and the output size
* @input: the input texture
- * @target: the output texture
+ * @output: the output texture
* @shader: the shader to use.
*
- * Transforms @input into @output using @shader on FBO. @resize should
- * only ever be %TRUE whenever @input is the input texture of @filter.
+ * Transforms @input into @output using @shader with a FBO.
*
* See also: gst_gl_filter_render_to_target()
*/
@@ -1110,14 +1106,14 @@
* the shader, render input to a quad */
void
gst_gl_filter_render_to_target_with_shader (GstGLFilter * filter,
- gboolean resize, GLuint input, GLuint target, GstGLShader * shader)
+ GstGLMemory * input, GstGLMemory * output, GstGLShader * shader)
{
if (filter->default_shader != shader)
filter->valid_attributes = FALSE;
filter->default_shader = shader;
- gst_gl_filter_render_to_target (filter, resize, input, target,
- _draw_with_shader_cb, filter);
+ gst_gl_filter_render_to_target (filter, input, output, _draw_with_shader_cb,
+ NULL);
}
/* *INDENT-OFF* */
@@ -1168,23 +1164,20 @@
}
/**
- * gst_gl_filter_draw_texture:
+ * gst_gl_filter_draw_fullscreen_quad:
* @filter: a #GstGLFilter
- * @texture: the texture to draw
- * @width: width of @texture
- * @height: height of texture
*
- * Draws @texture into the OpenGL scene at the specified @width and @height.
+ * Render a fullscreen quad using the current GL state. The only GL state this
+ * modifies is the necessary vertex/index buffers and, if necessary, a
+ * Vertex Array Object for drawing a fullscreen quad. Framebuffer state,
+ * any shaders, viewport state, etc must be setup by the caller.
*/
void
-gst_gl_filter_draw_texture (GstGLFilter * filter, GLuint texture,
- guint width, guint height)
+gst_gl_filter_draw_fullscreen_quad (GstGLFilter * filter)
{
GstGLContext *context = GST_GL_BASE_FILTER (filter)->context;
GstGLFuncs *gl = context->gl_vtable;
- GST_DEBUG ("drawing texture:%u dimensions:%ux%u", texture, width, height);
-
{
if (!filter->vertex_buffer) {
if (gl->GenVertexArrays) {
diff --git a/gst-libs/gst/gl/gstglfilter.h b/gst-libs/gst/gl/gstglfilter.h
index 5025bde..f56e2d0 100644
--- a/gst-libs/gst/gl/gstglfilter.h
+++ b/gst-libs/gst/gl/gstglfilter.h
@@ -38,6 +38,8 @@
#define GST_IS_GL_FILTER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass) ,GST_TYPE_GL_FILTER))
#define GST_GL_FILTER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj) ,GST_TYPE_GL_FILTER,GstGLFilterClass))
+typedef gboolean (*GstGLFilterRenderFunc) (GstGLFilter * filter, GstGLMemory * in_tex, gpointer user_data);
+
/**
* GstGLFilter:
* @base_transform: parent #GstBaseTransform
@@ -63,9 +65,13 @@
GstCaps *out_caps;
+ /* <protected> */
+ GstGLFramebuffer *fbo;
+
/* <private> */
- GLuint fbo;
- GLuint depthbuffer;
+ gboolean gl_result;
+ GstBuffer *inbuf;
+ GstBuffer *outbuf;
GstGLShader *default_shader;
gboolean valid_attributes;
@@ -99,7 +105,7 @@
gboolean (*set_caps) (GstGLFilter* filter, GstCaps* incaps, GstCaps* outcaps);
gboolean (*filter) (GstGLFilter *filter, GstBuffer *inbuf, GstBuffer *outbuf);
- gboolean (*filter_texture) (GstGLFilter *filter, guint in_tex, guint out_tex);
+ gboolean (*filter_texture) (GstGLFilter *filter, GstGLMemory *in_tex, GstGLMemory *out_tex);
gboolean (*init_fbo) (GstGLFilter *filter);
GstCaps *(*transform_internal_caps) (GstGLFilter *filter,
@@ -113,13 +119,17 @@
gboolean gst_gl_filter_filter_texture (GstGLFilter * filter, GstBuffer * inbuf,
GstBuffer * outbuf);
-void gst_gl_filter_render_to_target (GstGLFilter *filter, gboolean resize, GLuint input,
- GLuint target, GLCB func, gpointer data);
+gboolean gst_gl_filter_render_to_target (GstGLFilter *filter,
+ GstGLMemory * input,
+ GstGLMemory * output,
+ GstGLFilterRenderFunc func,
+ gpointer data);
-void gst_gl_filter_render_to_target_with_shader (GstGLFilter * filter, gboolean resize,
- GLuint input, GLuint target, GstGLShader *shader);
-
-void gst_gl_filter_draw_texture (GstGLFilter *filter, GLuint texture, guint width, guint height);
+void gst_gl_filter_draw_fullscreen_quad (GstGLFilter *filter);
+void gst_gl_filter_render_to_target_with_shader (GstGLFilter * filter,
+ GstGLMemory * input,
+ GstGLMemory * output,
+ GstGLShader *shader);
G_END_DECLS
diff --git a/gst-libs/gst/gl/gstglformat.c b/gst-libs/gst/gl/gstglformat.c
index 237e250..1a71327 100644
--- a/gst-libs/gst/gl/gstglformat.c
+++ b/gst-libs/gst/gl/gstglformat.c
@@ -31,22 +31,6 @@
#define USING_GLES2(context) (gst_gl_context_check_gl_version (context, GST_GL_API_GLES2, 2, 0))
#define USING_GLES3(context) (gst_gl_context_check_gl_version (context, GST_GL_API_GLES2, 3, 0))
-#ifndef GL_RGBA8
-#define GL_RGBA8 0x8058
-#endif
-#ifndef GL_RED
-#define GL_RED 0x1903
-#endif
-#ifndef GL_RG
-#define GL_RG 0x8227
-#endif
-#ifndef GL_R8
-#define GL_R8 0x8229
-#endif
-#ifndef GL_RG8
-#define GL_RG8 0x822B
-#endif
-
#ifndef GL_TEXTURE_RECTANGLE
#define GL_TEXTURE_RECTANGLE 0x84F5
#endif
@@ -59,21 +43,21 @@
{
switch (format) {
case GST_VIDEO_GL_TEXTURE_TYPE_RGBA:
- case GL_RGBA:
+ case GST_GL_RGBA:
return 4;
case GST_VIDEO_GL_TEXTURE_TYPE_RGB:
case GST_VIDEO_GL_TEXTURE_TYPE_RGB16:
- case GL_RGB:
+ case GST_GL_RGB:
return 3;
case GST_VIDEO_GL_TEXTURE_TYPE_LUMINANCE_ALPHA:
case GST_VIDEO_GL_TEXTURE_TYPE_RG:
- case GL_LUMINANCE_ALPHA:
- case GL_RG:
+ case GST_GL_LUMINANCE_ALPHA:
+ case GST_GL_RG:
return 2;
case GST_VIDEO_GL_TEXTURE_TYPE_LUMINANCE:
case GST_VIDEO_GL_TEXTURE_TYPE_R:
- case GL_LUMINANCE:
- case GL_RED:
+ case GST_GL_LUMINANCE:
+ case GST_GL_RED:
return 1;
default:
return 0;
@@ -153,20 +137,20 @@
{
switch (tex_format) {
case GST_VIDEO_GL_TEXTURE_TYPE_LUMINANCE_ALPHA:
- return GL_LUMINANCE_ALPHA;
+ return GST_GL_LUMINANCE_ALPHA;
case GST_VIDEO_GL_TEXTURE_TYPE_LUMINANCE:
- return GL_LUMINANCE;
+ return GST_GL_LUMINANCE;
case GST_VIDEO_GL_TEXTURE_TYPE_RGBA:
- return GL_RGBA;
+ return GST_GL_RGBA;
case GST_VIDEO_GL_TEXTURE_TYPE_RGB:
case GST_VIDEO_GL_TEXTURE_TYPE_RGB16:
- return GL_RGB;
+ return GST_GL_RGB;
case GST_VIDEO_GL_TEXTURE_TYPE_RG:
- return GL_RG;
+ return GST_GL_RG;
case GST_VIDEO_GL_TEXTURE_TYPE_R:
- return GL_RED;
+ return GST_GL_RED;
default:
- return GST_VIDEO_GL_TEXTURE_TYPE_RGBA;
+ return tex_format;
}
}
@@ -273,51 +257,52 @@
gst_gl_context_check_feature (context, "GL_EXT_texture_rg");
switch (format) {
- case GL_RGBA:
+ case GST_GL_RGBA:
switch (type) {
case GL_UNSIGNED_BYTE:
return USING_GLES2 (context)
- && !USING_GLES3 (context) ? GL_RGBA : GL_RGBA8;
+ && !USING_GLES3 (context) ? GST_GL_RGBA : GST_GL_RGBA8;
break;
}
break;
- case GL_RGB:
+ case GST_GL_RGB:
switch (type) {
case GL_UNSIGNED_BYTE:
- return GL_RGB8;
+ return GST_GL_RGB8;
break;
case GL_UNSIGNED_SHORT_5_6_5:
- return GL_RGB;
+ return GST_GL_RGB;
break;
}
break;
- case GL_RG:
+ case GST_GL_RG:
switch (type) {
case GL_UNSIGNED_BYTE:
if (!USING_GLES3 (context) && USING_GLES2 (context) && ext_texture_rg)
- return GL_RG;
- return GL_RG8;
+ return GST_GL_RG;
+ return GST_GL_RG8;
break;
}
break;
- case GL_RED:
+ case GST_GL_RED:
switch (type) {
case GL_UNSIGNED_BYTE:
if (!USING_GLES3 (context) && USING_GLES2 (context) && ext_texture_rg)
- return GL_RED;
- return GL_R8;
+ return GST_GL_RED;
+ return GST_GL_R8;
break;
}
break;
- case GL_LUMINANCE:
- return GL_LUMINANCE;
- break;
- case GL_LUMINANCE_ALPHA:
- return GL_LUMINANCE_ALPHA;
- break;
- case GL_ALPHA:
- return GL_ALPHA;
- break;
+ case GST_GL_RGBA8:
+ case GST_GL_RGB8:
+ case GST_GL_RG8:
+ case GST_GL_R8:
+ case GST_GL_LUMINANCE:
+ case GST_GL_LUMINANCE_ALPHA:
+ case GST_GL_ALPHA:
+ case GST_GL_DEPTH_COMPONENT16:
+ case GST_GL_DEPTH24_STENCIL8:
+ return format;
default:
break;
}
diff --git a/gst-libs/gst/gl/gstglformat.h b/gst-libs/gst/gl/gstglformat.h
index fcd618a..e4e6e37 100644
--- a/gst-libs/gst/gl/gstglformat.h
+++ b/gst-libs/gst/gl/gstglformat.h
@@ -70,6 +70,33 @@
G_BEGIN_DECLS
+typedef enum
+{
+ /* values taken from the GL headers */
+ GST_GL_LUMINANCE = 0x1909,
+
+ GST_GL_ALPHA = 0x1906,
+
+ GST_GL_LUMINANCE_ALPHA = 0x190A,
+
+ GST_GL_RED = 0x1903,
+ GST_GL_R8 = 0x8229,
+
+ GST_GL_RG = 0x8227,
+ GST_GL_RG8 = 0x822B,
+
+ GST_GL_RGB = 0x1907,
+ GST_GL_RGB8 = 0x8051,
+ GST_GL_RGB565 = 0x8D62,
+
+ GST_GL_RGBA = 0x1908,
+ GST_GL_RGBA8 = 0x8058,
+
+ GST_GL_DEPTH_COMPONENT16 = 0x81A5,
+
+ GST_GL_DEPTH24_STENCIL8 = 0x88F0,
+} GstGLFormat;
+
guint gst_gl_format_type_n_bytes (guint format,
guint type);
guint gst_gl_texture_type_n_bytes (GstVideoGLTextureType tex_format);
diff --git a/gst-libs/gst/gl/gstglframebuffer.c b/gst-libs/gst/gl/gstglframebuffer.c
index fb706f5..67f860e 100644
--- a/gst-libs/gst/gl/gstglframebuffer.c
+++ b/gst-libs/gst/gl/gstglframebuffer.c
@@ -24,13 +24,33 @@
#include "gl.h"
#include "gstglframebuffer.h"
+#ifndef GL_FRAMEBUFFER_UNDEFINED
+#define GL_FRAMEBUFFER_UNDEFINED 0x8219
+#endif
+#ifndef GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT
+#define GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT 0x8CD6
+#endif
+#ifndef GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT
+#define GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT 0x8CD7
+#endif
+#ifndef GL_FRAMEBUFFER_UNSUPPORTED
+#define GL_FRAMEBUFFER_UNSUPPORTED 0x8CDD
+#endif
+#ifndef GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS
+#define GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS 0x8CD9
+#endif
+
+#ifndef GL_DEPTH_STENCIL_ATTACHMENT
+#define GL_DEPTH_STENCIL_ATTACHMENT 0x821A
+#endif
+
GST_DEBUG_CATEGORY_STATIC (gst_gl_framebuffer_debug);
#define GST_CAT_DEFAULT gst_gl_framebuffer_debug
#define DEBUG_INIT \
GST_DEBUG_CATEGORY_INIT (gst_gl_framebuffer_debug, "glframebuffer", 0, "GL Framebuffer");
-G_DEFINE_TYPE_WITH_CODE (GstGLFramebuffer, gst_gl_framebuffer, G_TYPE_OBJECT,
+G_DEFINE_TYPE_WITH_CODE (GstGLFramebuffer, gst_gl_framebuffer, GST_TYPE_OBJECT,
DEBUG_INIT);
#define GST_GL_FRAMEBUFFER_GET_PRIVATE(o) \
@@ -40,13 +60,35 @@
struct _GstGLFramebufferPrivate
{
- gint width;
- gint height;
-
- guint fbo;
- guint depth;
+ guint effective_width;
+ guint effective_height;
};
+struct fbo_attachment
+{
+ guint attachment_point;
+ GstGLBaseMemory *mem;
+};
+
+static void
+_fbo_attachment_init (struct fbo_attachment *attach, guint point,
+ GstGLBaseMemory * mem)
+{
+ attach->attachment_point = point;
+ attach->mem = (GstGLBaseMemory *) gst_memory_ref (GST_MEMORY_CAST (mem));
+}
+
+static void
+_fbo_attachment_unset (struct fbo_attachment *attach)
+{
+ if (!attach)
+ return;
+
+ if (attach->mem)
+ gst_memory_unref (GST_MEMORY_CAST (attach->mem));
+ attach->mem = NULL;
+}
+
static void
gst_gl_framebuffer_class_init (GstGLFramebufferClass * klass)
{
@@ -56,183 +98,355 @@
}
static void
-gst_gl_framebuffer_init (GstGLFramebuffer * fbo)
+gst_gl_framebuffer_init (GstGLFramebuffer * fb)
{
- fbo->priv = GST_GL_FRAMEBUFFER_GET_PRIVATE (fbo);
+ fb->priv = GST_GL_FRAMEBUFFER_GET_PRIVATE (fb);
+
+ fb->attachments =
+ g_array_new (FALSE, FALSE, (sizeof (struct fbo_attachment)));
+ g_array_set_clear_func (fb->attachments,
+ (GDestroyNotify) _fbo_attachment_unset);
+}
+
+static void
+_delete_fbo_gl (GstGLContext * context, GstGLFramebuffer * fb)
+{
+ const GstGLFuncs *gl = context->gl_vtable;
+
+ if (fb->fbo_id)
+ gl->DeleteFramebuffers (1, &fb->fbo_id);
+ fb->fbo_id = 0;
}
static void
gst_gl_framebuffer_finalize (GObject * object)
{
- GstGLFramebuffer *fbo = GST_GL_FRAMEBUFFER (object);
+ GstGLFramebuffer *fb = GST_GL_FRAMEBUFFER (object);
- if (fbo->context) {
- gst_object_unref (fbo->context);
- fbo->context = NULL;
+ if (fb->context) {
+ if (fb->fbo_id)
+ gst_gl_context_thread_add (fb->context,
+ (GstGLContextThreadFunc) _delete_fbo_gl, fb);
+
+ gst_object_unref (fb->context);
+ fb->context = NULL;
}
+ if (fb->attachments)
+ g_array_free (fb->attachments, TRUE);
+ fb->attachments = NULL;
+
G_OBJECT_CLASS (gst_gl_framebuffer_parent_class)->finalize (object);
}
GstGLFramebuffer *
gst_gl_framebuffer_new (GstGLContext * context)
{
- GstGLFramebuffer *fbo = g_object_new (GST_TYPE_GL_FRAMEBUFFER, NULL);
-
- fbo->context = gst_object_ref (context);
-
- return fbo;
-}
-
-gboolean
-gst_gl_framebuffer_generate (GstGLFramebuffer * frame, gint width, gint height,
- guint * fbo, guint * depth)
-{
- GLuint fake_texture = 0;
+ GstGLFramebuffer *fb;
const GstGLFuncs *gl;
- GLenum internal_format;
- g_return_val_if_fail (GST_IS_GL_FRAMEBUFFER (frame), FALSE);
- g_return_val_if_fail (fbo != NULL && depth != NULL, FALSE);
- g_return_val_if_fail (width > 0 && height > 0, FALSE);
+ g_return_val_if_fail (GST_IS_GL_CONTEXT (context), NULL);
+ g_return_val_if_fail (gst_gl_context_get_current () == context, NULL);
- gl = frame->context->gl_vtable;
-
- GST_TRACE ("creating FBO dimensions:%ux%u", width, height);
+ gl = context->gl_vtable;
if (!gl->GenFramebuffers) {
- gst_gl_context_set_error (frame->context,
- "Context, EXT_framebuffer_object not supported");
- return FALSE;
+ GST_ERROR_OBJECT (context, "Framebuffers are not supported!");
+ return NULL;
}
- /* setup FBO */
- gl->GenFramebuffers (1, fbo);
- gl->BindFramebuffer (GL_FRAMEBUFFER, *fbo);
- /* setup the render buffer for depth */
- gl->GenRenderbuffers (1, depth);
- gl->BindRenderbuffer (GL_RENDERBUFFER, *depth);
+ fb = g_object_new (GST_TYPE_GL_FRAMEBUFFER, NULL);
+ fb->context = gst_object_ref (context);
+ gl->GenFramebuffers (1, &fb->fbo_id);
- if (gst_gl_context_get_gl_api (frame->context) & (GST_GL_API_OPENGL |
+ return fb;
+}
+
+GstGLFramebuffer *
+gst_gl_framebuffer_new_with_default_depth (GstGLContext * context, guint width,
+ guint height)
+{
+ GstGLFramebuffer *fb = gst_gl_framebuffer_new (context);
+ GstGLBaseMemoryAllocator *render_alloc;
+ GstGLAllocationParams *params;
+ GstGLBaseMemory *renderbuffer;
+ guint attach_point, attach_type;
+
+ if (!fb)
+ return NULL;
+
+ if (gst_gl_context_get_gl_api (fb->context) & (GST_GL_API_OPENGL |
GST_GL_API_OPENGL3)) {
- gl->RenderbufferStorage (GL_RENDERBUFFER, GL_DEPTH24_STENCIL8, width,
- height);
- }
- if (gst_gl_context_get_gl_api (frame->context) & GST_GL_API_GLES2) {
- gl->RenderbufferStorage (GL_RENDERBUFFER, GL_DEPTH_COMPONENT16,
- width, height);
+ attach_point = GL_DEPTH_STENCIL_ATTACHMENT;
+ attach_type = GST_GL_DEPTH24_STENCIL8;
+ } else if (gst_gl_context_get_gl_api (fb->context) & GST_GL_API_GLES2) {
+ attach_point = GL_DEPTH_ATTACHMENT;
+ attach_type = GST_GL_DEPTH_COMPONENT16;
+ } else {
+ g_assert_not_reached ();
+ return NULL;
}
- /* setup a texture to render to */
- gl->GenTextures (1, &fake_texture);
- gl->BindTexture (GL_TEXTURE_2D, fake_texture);
- internal_format =
- gst_gl_sized_gl_format_from_gl_format_type (frame->context, GL_RGBA,
- GL_UNSIGNED_BYTE);
- gl->TexImage2D (GL_TEXTURE_2D, 0, internal_format, width, height, 0, GL_RGBA,
- GL_UNSIGNED_BYTE, NULL);
- gl->TexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
- gl->TexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
- gl->TexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
- gl->TexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
+ render_alloc = (GstGLBaseMemoryAllocator *)
+ gst_allocator_find (GST_GL_RENDERBUFFER_ALLOCATOR_NAME);
+ params = (GstGLAllocationParams *)
+ gst_gl_renderbuffer_allocation_params_new (context, NULL, attach_type,
+ width, height);
- /* attach the texture to the FBO to renderer to */
- gl->FramebufferTexture2D (GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0,
- GL_TEXTURE_2D, fake_texture, 0);
+ renderbuffer = gst_gl_base_memory_alloc (render_alloc, params);
+ gst_gl_allocation_params_free (params);
+ gst_object_unref (render_alloc);
- /* attach the depth render buffer to the FBO */
- gl->FramebufferRenderbuffer (GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT,
- GL_RENDERBUFFER, *depth);
+ gst_gl_framebuffer_bind (fb);
+ gst_gl_framebuffer_attach (fb, attach_point, renderbuffer);
+ gst_gl_context_clear_framebuffer (fb->context);
+ gst_memory_unref (GST_MEMORY_CAST (renderbuffer));
- if (gst_gl_context_get_gl_api (frame->context) & (GST_GL_API_OPENGL |
- GST_GL_API_OPENGL3)) {
- gl->FramebufferRenderbuffer (GL_FRAMEBUFFER, GL_STENCIL_ATTACHMENT,
- GL_RENDERBUFFER, *depth);
- }
-
- if (gl->CheckFramebufferStatus (GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE) {
- gst_gl_context_set_error (frame->context,
- "GL framebuffer status incomplete");
-
- gl->DeleteTextures (1, &fake_texture);
-
- return FALSE;
- }
-
- /* unbind the FBO */
- gl->BindFramebuffer (GL_FRAMEBUFFER, 0);
-
- gl->DeleteTextures (1, &fake_texture);
-
- return TRUE;
+ return fb;
}
gboolean
-gst_gl_framebuffer_use_v2 (GstGLFramebuffer * frame, gint texture_fbo_width,
- gint texture_fbo_height, GLuint fbo, GLuint depth_buffer,
- GLuint texture_fbo, GLCB_V2 cb, gpointer stuff)
+gst_gl_framebuffer_draw_to_texture (GstGLFramebuffer * fb, GstGLMemory * mem,
+ GstGLFramebufferFunc func, gpointer user_data)
{
- const GstGLFuncs *gl;
GLint viewport_dim[4] = { 0 };
+ const GstGLFuncs *gl;
+ gboolean ret;
- g_return_val_if_fail (GST_IS_GL_FRAMEBUFFER (frame), FALSE);
- g_return_val_if_fail (texture_fbo_width > 0 && texture_fbo_height > 0, FALSE);
- g_return_val_if_fail (fbo != 0, FALSE);
- g_return_val_if_fail (texture_fbo != 0, FALSE);
- g_return_val_if_fail (cb != NULL, FALSE);
+ g_return_val_if_fail (GST_IS_GL_FRAMEBUFFER (fb), FALSE);
+ g_return_val_if_fail (gst_is_gl_memory (GST_MEMORY_CAST (mem)), FALSE);
- gl = frame->context->gl_vtable;
+ gl = fb->context->gl_vtable;
- GST_TRACE ("Binding v2 FBO %u dimensions:%ux%u with texture:%u ",
- fbo, texture_fbo_width, texture_fbo_height, texture_fbo);
+ GST_TRACE_OBJECT (fb, "drawing to texture %u, dimensions %ix%i", mem->tex_id,
+ gst_gl_memory_get_texture_width (mem),
+ gst_gl_memory_get_texture_height (mem));
- gl->BindFramebuffer (GL_FRAMEBUFFER, fbo);
-
- /* setup a texture to render to */
- gl->BindTexture (GL_TEXTURE_2D, texture_fbo);
-
- /* attach the texture to the FBO to renderer to */
- gl->FramebufferTexture2D (GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0,
- GL_TEXTURE_2D, texture_fbo, 0);
+ gst_gl_framebuffer_bind (fb);
+ gst_gl_framebuffer_attach (fb, GL_COLOR_ATTACHMENT0, (GstGLBaseMemory *) mem);
gl->GetIntegerv (GL_VIEWPORT, viewport_dim);
-
- gl->Viewport (0, 0, texture_fbo_width, texture_fbo_height);
-
- if (gst_gl_context_get_gl_api (frame->context) & (GST_GL_API_OPENGL |
+ gl->Viewport (0, 0, fb->priv->effective_width, fb->priv->effective_height);
+ if (gst_gl_context_get_gl_api (fb->context) & (GST_GL_API_OPENGL |
GST_GL_API_OPENGL3))
gl->DrawBuffer (GL_COLOR_ATTACHMENT0);
- /* the opengl scene */
- cb (stuff);
+ ret = func (user_data);
- if (gst_gl_context_get_gl_api (frame->context) & (GST_GL_API_OPENGL |
+ if (gst_gl_context_get_gl_api (fb->context) & (GST_GL_API_OPENGL |
GST_GL_API_OPENGL3))
gl->DrawBuffer (GL_NONE);
+ gl->Viewport (viewport_dim[0], viewport_dim[1], viewport_dim[2],
+ viewport_dim[3]);
+ gst_gl_context_clear_framebuffer (fb->context);
- gl->Viewport (viewport_dim[0], viewport_dim[1],
- viewport_dim[2], viewport_dim[3]);
-
- gl->BindFramebuffer (GL_FRAMEBUFFER, 0);
-
- return TRUE;
+ return ret;
}
void
-gst_gl_framebuffer_delete (GstGLFramebuffer * frame, guint fbo, guint depth)
+gst_gl_framebuffer_bind (GstGLFramebuffer * fb)
{
const GstGLFuncs *gl;
- g_return_if_fail (GST_IS_GL_FRAMEBUFFER (frame));
+ g_return_if_fail (GST_IS_GL_FRAMEBUFFER (fb));
+ g_return_if_fail (gst_gl_context_get_current () == fb->context);
+ g_return_if_fail (fb->fbo_id != 0);
- gl = frame->context->gl_vtable;
+ gl = fb->context->gl_vtable;
- GST_TRACE ("Deleting FBO %u", fbo);
+ gl->BindFramebuffer (GL_FRAMEBUFFER, fb->fbo_id);
+}
- if (fbo) {
- gl->DeleteFramebuffers (1, &fbo);
+void
+gst_gl_context_clear_framebuffer (GstGLContext * context)
+{
+ const GstGLFuncs *gl;
+
+ g_return_if_fail (GST_IS_GL_CONTEXT (context));
+
+ gl = context->gl_vtable;
+
+ gl->BindFramebuffer (GL_FRAMEBUFFER, 0);
+}
+
+static void
+_update_effective_dimensions (GstGLFramebuffer * fb)
+{
+ int i;
+ guint min_width = -1, min_height = -1;
+
+ /* remove the previous attachment */
+ for (i = 0; i < fb->attachments->len; i++) {
+ struct fbo_attachment *attach;
+ int width, height;
+
+ attach = &g_array_index (fb->attachments, struct fbo_attachment, i);
+
+ if (gst_is_gl_memory (GST_MEMORY_CAST (attach->mem))) {
+ GstGLMemory *mem = (GstGLMemory *) attach->mem;
+
+ width = gst_gl_memory_get_texture_width (mem);
+ height = gst_gl_memory_get_texture_height (mem);
+ } else if (gst_is_gl_renderbuffer (GST_MEMORY_CAST (attach->mem))) {
+ GstGLRenderbuffer *mem = (GstGLRenderbuffer *) attach->mem;
+
+ width = mem->width;
+ height = mem->height;
+ } else {
+ g_assert_not_reached ();
+ }
+
+ if (width < min_width)
+ min_width = width;
+ if (height < min_height)
+ min_height = height;
}
- if (depth) {
- gl->DeleteRenderbuffers (1, &depth);
+
+ fb->priv->effective_width = min_width;
+ fb->priv->effective_height = min_height;
+}
+
+static gboolean
+_is_valid_attachment_point (guint attachment_point)
+{
+ /* all 31 possible color attachments */
+ if (attachment_point >= 0x8CE0 && attachment_point <= 0x8CFF)
+ return TRUE;
+
+ /* depth-stencil attachment */
+ if (attachment_point == 0x821A)
+ return TRUE;
+
+ /* depth attachment */
+ if (attachment_point == 0x8D00)
+ return TRUE;
+
+ /* stencil attachment */
+ if (attachment_point == 0x8D20)
+ return TRUE;
+
+ return FALSE;
+}
+
+static void
+_attach_gl_memory (GstGLFramebuffer * fb, guint attachment_point,
+ GstGLMemory * mem)
+{
+ struct fbo_attachment attach;
+ const GstGLFuncs *gl = fb->context->gl_vtable;
+ guint gl_target = gst_gl_texture_target_to_gl (mem->tex_target);
+
+ gst_gl_framebuffer_bind (fb);
+
+ gl->FramebufferTexture2D (GL_FRAMEBUFFER, attachment_point, gl_target,
+ mem->tex_id, 0);
+
+ _fbo_attachment_init (&attach, attachment_point, (GstGLBaseMemory *) mem);
+ fb->attachments = g_array_append_val (fb->attachments, attach);
+}
+
+static void
+_attach_renderbuffer (GstGLFramebuffer * fb, guint attachment_point,
+ GstGLRenderbuffer * rb)
+{
+ struct fbo_attachment attach;
+ const GstGLFuncs *gl = fb->context->gl_vtable;
+
+ gst_gl_framebuffer_bind (fb);
+ gl->BindRenderbuffer (GL_RENDERBUFFER, rb->renderbuffer_id);
+
+ gl->FramebufferRenderbuffer (GL_FRAMEBUFFER, attachment_point,
+ GL_RENDERBUFFER, rb->renderbuffer_id);
+
+ _fbo_attachment_init (&attach, attachment_point, (GstGLBaseMemory *) rb);
+ fb->attachments = g_array_append_val (fb->attachments, attach);
+}
+
+void
+gst_gl_framebuffer_attach (GstGLFramebuffer * fb, guint attachment_point,
+ GstGLBaseMemory * mem)
+{
+ int i;
+
+ g_return_if_fail (GST_IS_GL_FRAMEBUFFER (fb));
+ g_return_if_fail (gst_gl_context_get_current () == fb->context);
+ g_return_if_fail (_is_valid_attachment_point (attachment_point));
+
+ /* remove the previous attachment */
+ for (i = 0; i < fb->attachments->len; i++) {
+ struct fbo_attachment *attach;
+
+ attach = &g_array_index (fb->attachments, struct fbo_attachment, i);
+
+ if (attach->attachment_point == attachment_point) {
+ g_array_remove_index_fast (fb->attachments, i);
+ break;
+ }
}
+
+ if (gst_is_gl_memory (GST_MEMORY_CAST (mem))) {
+ _attach_gl_memory (fb, attachment_point, (GstGLMemory *) mem);
+ } else if (gst_is_gl_renderbuffer (GST_MEMORY_CAST (mem))) {
+ _attach_renderbuffer (fb, attachment_point, (GstGLRenderbuffer *) mem);
+ } else {
+ g_assert_not_reached ();
+ return;
+ }
+
+ _update_effective_dimensions (fb);
+}
+
+void
+gst_gl_framebuffer_get_effective_dimensions (GstGLFramebuffer * fb,
+ guint * width, guint * height)
+{
+ g_return_if_fail (GST_IS_GL_FRAMEBUFFER (fb));
+
+ if (width)
+ *width = fb->priv->effective_width;
+ if (height)
+ *height = fb->priv->effective_height;
+}
+
+gboolean
+gst_gl_context_check_framebuffer_status (GstGLContext * context)
+{
+ g_return_val_if_fail (GST_IS_GL_CONTEXT (context), FALSE);
+
+ switch (context->gl_vtable->CheckFramebufferStatus (GL_FRAMEBUFFER)) {
+ case GL_FRAMEBUFFER_COMPLETE:
+ return TRUE;
+ break;
+ case GL_FRAMEBUFFER_UNSUPPORTED:
+ GST_WARNING_OBJECT (context, "GL_FRAMEBUFFER_UNSUPPORTED");
+ break;
+ case GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT:
+ GST_WARNING_OBJECT (context, "GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT");
+ break;
+ case GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT:
+ GST_WARNING_OBJECT (context,
+ "GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT");
+ break;
+ case GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS:
+ GST_WARNING_OBJECT (context, "GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS");
+ break;
+#if GST_GL_HAVE_OPENGL
+ case GL_FRAMEBUFFER_UNDEFINED:
+ GST_WARNING_OBJECT (context, "GL_FRAMEBUFFER_UNDEFINED");
+ break;
+#endif
+ default:
+ GST_WARNING_OBJECT (context, "Unknown FBO error");
+ break;
+ }
+
+ return FALSE;
+}
+
+guint
+gst_gl_framebuffer_get_id (GstGLFramebuffer * fb)
+{
+ g_return_val_if_fail (GST_IS_GL_FRAMEBUFFER (fb), 0);
+
+ return fb->fbo_id;
}
diff --git a/gst-libs/gst/gl/gstglframebuffer.h b/gst-libs/gst/gl/gstglframebuffer.h
index 4768afb..0e135c8 100644
--- a/gst-libs/gst/gl/gstglframebuffer.h
+++ b/gst-libs/gst/gl/gstglframebuffer.h
@@ -34,35 +34,58 @@
#define GST_IS_GL_FRAMEBUFFER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), GST_TYPE_GL_FRAMEBUFFER))
#define GST_GL_FRAMEBUFFER_CAST(obj) ((GstGLFramebuffer*)(obj))
-typedef struct _GstGLFramebuffer GstGLFramebuffer;
typedef struct _GstGLFramebufferClass GstGLFramebufferClass;
typedef struct _GstGLFramebufferPrivate GstGLFramebufferPrivate;
+/**
+ * GstGLFramebufferFunc:
+ * @data: user data
+ *
+ * callback definition for operating through a Framebuffer object
+ */
+typedef gboolean (*GstGLFramebufferFunc) (gpointer stuff);
+
struct _GstGLFramebuffer
{
- GObject object;
+ GstObject object;
/* <private> */
GstGLContext *context;
+ guint fbo_id;
+ GArray *attachments;
+
GstGLFramebufferPrivate *priv;
};
struct _GstGLFramebufferClass
{
- GObjectClass object_class;
+ GstObjectClass object_class;
};
-GstGLFramebuffer *gst_gl_framebuffer_new (GstGLContext *context);
+GstGLFramebuffer * gst_gl_framebuffer_new (GstGLContext *context);
+GstGLFramebuffer * gst_gl_framebuffer_new_with_default_depth (GstGLContext *context,
+ guint width,
+ guint height);
-gboolean gst_gl_framebuffer_generate (GstGLFramebuffer *frame, gint width, gint height,
- guint * fbo, guint * depthbuffer);
+guint gst_gl_framebuffer_get_id (GstGLFramebuffer * fb);
-gboolean gst_gl_framebuffer_use_v2 (GstGLFramebuffer * frame, gint texture_fbo_width,
- gint texture_fbo_height, GLuint fbo, GLuint depth_buffer,
- GLuint texture_fbo, GLCB_V2 cb, gpointer stuff);
+void gst_gl_framebuffer_attach (GstGLFramebuffer * fb,
+ guint attachment_point,
+ GstGLBaseMemory * mem);
+void gst_gl_framebuffer_bind (GstGLFramebuffer * fb);
+void gst_gl_context_clear_framebuffer (GstGLContext * context);
-void gst_gl_framebuffer_delete (GstGLFramebuffer *frame, guint fbo, guint depth);
+void gst_gl_framebuffer_get_effective_dimensions (GstGLFramebuffer * fb,
+ guint * width,
+ guint * height);
+
+gboolean gst_gl_context_check_framebuffer_status (GstGLContext * context);
+
+gboolean gst_gl_framebuffer_draw_to_texture (GstGLFramebuffer * fb,
+ GstGLMemory * mem,
+ GstGLFramebufferFunc cb,
+ gpointer user_data);
#ifdef G_DEFINE_AUTOPTR_CLEANUP_FUNC
G_DEFINE_AUTOPTR_CLEANUP_FUNC(GstGLFramebuffer, gst_object_unref)
diff --git a/gst-libs/gst/gl/gstglmemorypbo.c b/gst-libs/gst/gl/gstglmemorypbo.c
index e749488..ebf8f29 100644
--- a/gst-libs/gst/gl/gstglmemorypbo.c
+++ b/gst-libs/gst/gl/gstglmemorypbo.c
@@ -429,7 +429,7 @@
in_gl_type = GL_UNSIGNED_SHORT_5_6_5;
if (!gl->GenFramebuffers) {
- gst_gl_context_set_error (context,
+ GST_CAT_ERROR (GST_CAT_GL_MEMORY,
"Context, EXT_framebuffer_object not supported");
goto error;
}
@@ -439,9 +439,9 @@
if (copy_params->respecify) {
if (in_size != out_size) {
- GST_ERROR ("Cannot copy between textures with backing data of different"
- "sizes. input %" G_GSIZE_FORMAT " output %" G_GSIZE_FORMAT, in_size,
- out_size);
+ GST_CAT_ERROR (GST_CAT_GL_MEMORY, "Cannot copy between textures with "
+ "backing data of different sizes. input %" G_GSIZE_FORMAT " output %"
+ G_GSIZE_FORMAT, in_size, out_size);
goto error;
}
}
@@ -487,7 +487,7 @@
GstMapInfo pbo_info;
if (!gl->GenBuffers || !src->pbo) {
- gst_gl_context_set_error (context, "Cannot reinterpret texture contents "
+ GST_CAT_ERROR (GST_CAT_GL_MEMORY, "Cannot reinterpret texture contents "
"without pixel buffer objects");
gl->BindTexture (out_tex_target, 0);
goto fbo_error;
@@ -495,7 +495,7 @@
if (gst_gl_context_get_gl_api (context) & GST_GL_API_GLES2
&& (in_gl_format != GL_RGBA || in_gl_type != GL_UNSIGNED_BYTE)) {
- gst_gl_context_set_error (context, "Cannot copy non RGBA/UNSIGNED_BYTE "
+ GST_CAT_ERROR (GST_CAT_GL_MEMORY, "Cannot copy non RGBA/UNSIGNED_BYTE "
"textures on GLES2");
gl->BindTexture (out_tex_target, 0);
goto fbo_error;
diff --git a/gst-libs/gst/gl/gstglrenderbuffer.c b/gst-libs/gst/gl/gstglrenderbuffer.c
new file mode 100644
index 0000000..0cabad9
--- /dev/null
+++ b/gst-libs/gst/gl/gstglrenderbuffer.c
@@ -0,0 +1,456 @@
+/*
+ * GStreamer
+ * Copyright (C) 2015 Matthew Waters <matthew@centricular.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <string.h>
+
+#include <gst/video/video.h>
+
+#include <gst/gl/gstglbasememory.h>
+#include <gst/gl/gstglrenderbuffer.h>
+
+/**
+ * SECTION:gstglrenderbuffer
+ * @short_description: memory subclass for GL renderbuffer objects
+ * @see_also: #GstMemory, #GstAllocator
+ *
+ * GstGLRenderbuffer is a #GstGLBaseMemory subclass providing support for
+ * OpenGL renderbuffers.
+ *
+ * #GstGLRenderbuffer is created or wrapped through gst_gl_base_memory_alloc()
+ * with #GstGLRenderbufferAllocationParams.
+ */
+
+#define USING_OPENGL(context) (gst_gl_context_check_gl_version (context, GST_GL_API_OPENGL, 1, 0))
+#define USING_OPENGL3(context) (gst_gl_context_check_gl_version (context, GST_GL_API_OPENGL3, 3, 1))
+#define USING_GLES(context) (gst_gl_context_check_gl_version (context, GST_GL_API_GLES, 1, 0))
+#define USING_GLES2(context) (gst_gl_context_check_gl_version (context, GST_GL_API_GLES2, 2, 0))
+#define USING_GLES3(context) (gst_gl_context_check_gl_version (context, GST_GL_API_GLES2, 3, 0))
+
+static GstAllocator *_gl_renderbuffer_allocator;
+
+GST_DEBUG_CATEGORY_STATIC (GST_CAT_GL_RENDERBUFFER);
+#define GST_CAT_DEFAULT GST_CAT_GL_RENDERBUFFER
+
+G_DEFINE_TYPE (GstGLRenderbufferAllocator, gst_gl_renderbuffer_allocator,
+ GST_TYPE_GL_BASE_MEMORY_ALLOCATOR);
+
+static guint
+_new_renderbuffer (GstGLContext * context, guint format, guint width,
+ guint height)
+{
+ const GstGLFuncs *gl = context->gl_vtable;
+ guint rbo_id;
+
+ gl->GenRenderbuffers (1, &rbo_id);
+ gl->BindRenderbuffer (GL_RENDERBUFFER, rbo_id);
+
+ gl->RenderbufferStorage (GL_RENDERBUFFER, format, width, height);
+
+ gl->BindRenderbuffer (GL_RENDERBUFFER, 0);
+
+ return rbo_id;
+}
+
+static gboolean
+_gl_rbo_create (GstGLRenderbuffer * gl_mem, GError ** error)
+{
+ if (!gl_mem->renderbuffer_wrapped) {
+ GstGLContext *context = gl_mem->mem.context;
+ GLenum internal_format;
+ GLenum tex_format;
+ GLenum renderbuffer_type;
+
+ tex_format = gst_gl_format_from_gl_texture_type (gl_mem->renderbuffer_type);
+ renderbuffer_type = GL_UNSIGNED_BYTE;
+ if (gl_mem->renderbuffer_type == GST_VIDEO_GL_TEXTURE_TYPE_RGB16)
+ renderbuffer_type = GL_UNSIGNED_SHORT_5_6_5;
+
+ internal_format =
+ gst_gl_sized_gl_format_from_gl_format_type (context, tex_format,
+ renderbuffer_type);
+
+ gl_mem->renderbuffer_id =
+ _new_renderbuffer (context, internal_format,
+ gst_gl_renderbuffer_get_width (gl_mem),
+ gst_gl_renderbuffer_get_height (gl_mem));
+
+ GST_CAT_TRACE (GST_CAT_GL_RENDERBUFFER, "Generating renderbuffer id:%u "
+ "format:%u dimensions:%ux%u", gl_mem->renderbuffer_id, internal_format,
+ gst_gl_renderbuffer_get_width (gl_mem),
+ gst_gl_renderbuffer_get_height (gl_mem));
+ }
+
+ return TRUE;
+}
+
+static void
+gst_gl_renderbuffer_init (GstGLRenderbuffer * mem, GstAllocator * allocator,
+ GstMemory * parent, GstGLContext * context,
+ GstVideoGLTextureType renderbuffer_type, GstAllocationParams * params,
+ guint width, guint height, gpointer user_data, GDestroyNotify notify)
+{
+ gsize size = gst_gl_texture_type_n_bytes (renderbuffer_type) * width * height;
+
+ mem->renderbuffer_type = renderbuffer_type;
+ mem->width = width;
+ mem->height = height;
+
+ gst_gl_base_memory_init ((GstGLBaseMemory *) mem, allocator, parent, context,
+ params, size, user_data, notify);
+
+ GST_CAT_DEBUG (GST_CAT_GL_RENDERBUFFER, "new GL renderbuffer context:%"
+ GST_PTR_FORMAT " memory:%p format:%u dimensions:%ux%u ", context, mem,
+ mem->renderbuffer_type, gst_gl_renderbuffer_get_width (mem),
+ gst_gl_renderbuffer_get_height (mem));
+}
+
+static gpointer
+_gl_rbo_map (GstGLRenderbuffer * gl_mem, GstMapInfo * info, gsize maxsize)
+{
+ GST_CAT_WARNING (GST_CAT_GL_RENDERBUFFER, "Renderbuffer's cannot be mapped");
+
+ return NULL;
+}
+
+static void
+_gl_rbo_unmap (GstGLRenderbuffer * gl_mem, GstMapInfo * info)
+{
+}
+
+static GstMemory *
+_gl_rbo_copy (GstGLRenderbuffer * src, gssize offset, gssize size)
+{
+ GST_CAT_WARNING (GST_CAT_GL_RENDERBUFFER, "Renderbuffer's cannot be copied");
+
+ return NULL;
+}
+
+static GstMemory *
+_gl_rbo_alloc (GstAllocator * allocator, gsize size,
+ GstAllocationParams * params)
+{
+ g_warning ("Use gst_gl_base_memory_alloc to allocate from this allocator");
+
+ return NULL;
+}
+
+static void
+_gl_rbo_destroy (GstGLRenderbuffer * gl_mem)
+{
+ const GstGLFuncs *gl = gl_mem->mem.context->gl_vtable;
+
+ if (gl_mem->renderbuffer_id && !gl_mem->renderbuffer_wrapped)
+ gl->DeleteRenderbuffers (1, &gl_mem->renderbuffer_id);
+}
+
+static GstGLRenderbuffer *
+_default_gl_rbo_alloc (GstGLRenderbufferAllocator * allocator,
+ GstGLRenderbufferAllocationParams * params)
+{
+ guint alloc_flags = params->parent.alloc_flags;
+ GstGLRenderbuffer *mem;
+
+ g_return_val_if_fail ((alloc_flags &
+ GST_GL_ALLOCATION_PARAMS_ALLOC_FLAG_WRAP_SYSMEM) == 0, NULL);
+
+ mem = g_new0 (GstGLRenderbuffer, 1);
+
+ if (alloc_flags & GST_GL_ALLOCATION_PARAMS_ALLOC_FLAG_WRAP_GPU_HANDLE) {
+ mem->renderbuffer_id = GPOINTER_TO_UINT (params->parent.gl_handle);
+ mem->renderbuffer_wrapped = TRUE;
+ }
+
+ gst_gl_renderbuffer_init (mem, GST_ALLOCATOR_CAST (allocator), NULL,
+ params->parent.context, params->renderbuffer_type,
+ params->parent.alloc_params, params->width, params->height,
+ params->parent.user_data, params->parent.notify);
+
+ return mem;
+}
+
+static void
+gst_gl_renderbuffer_allocator_class_init (GstGLRenderbufferAllocatorClass *
+ klass)
+{
+ GstGLBaseMemoryAllocatorClass *gl_base;
+ GstAllocatorClass *allocator_class;
+
+ gl_base = (GstGLBaseMemoryAllocatorClass *) klass;
+ allocator_class = (GstAllocatorClass *) klass;
+
+ gl_base->alloc =
+ (GstGLBaseMemoryAllocatorAllocFunction) _default_gl_rbo_alloc;
+ gl_base->create = (GstGLBaseMemoryAllocatorCreateFunction) _gl_rbo_create;
+ gl_base->destroy = (GstGLBaseMemoryAllocatorDestroyFunction) _gl_rbo_destroy;
+
+ allocator_class->alloc = _gl_rbo_alloc;
+}
+
+static void
+gst_gl_renderbuffer_allocator_init (GstGLRenderbufferAllocator * allocator)
+{
+ GstAllocator *alloc = GST_ALLOCATOR_CAST (allocator);
+
+ alloc->mem_type = GST_GL_RENDERBUFFER_ALLOCATOR_NAME;
+
+ alloc->mem_map_full = (GstMemoryMapFullFunction) _gl_rbo_map;
+ alloc->mem_unmap_full = (GstMemoryUnmapFullFunction) _gl_rbo_unmap;
+ alloc->mem_copy = (GstMemoryCopyFunction) _gl_rbo_copy;
+
+ GST_OBJECT_FLAG_SET (allocator, GST_ALLOCATOR_FLAG_CUSTOM_ALLOC);
+}
+
+/**
+ * gst_gl_renderbuffer_get_width:
+ * @gl_mem: a #GstGLRenderbuffer
+ *
+ * Returns: the configured width of @gl_mem
+ *
+ * Since: 1.8
+ */
+gint
+gst_gl_renderbuffer_get_width (GstGLRenderbuffer * gl_mem)
+{
+ g_return_val_if_fail (gst_is_gl_renderbuffer ((GstMemory *) gl_mem), 0);
+
+ return gl_mem->width;
+}
+
+/**
+ * gst_gl_renderbuffer_get_height:
+ * @gl_mem: a #GstGLRenderbuffer
+ *
+ * Returns: the configured height of @gl_mem
+ *
+ * Since: 1.8
+ */
+gint
+gst_gl_renderbuffer_get_height (GstGLRenderbuffer * gl_mem)
+{
+ g_return_val_if_fail (gst_is_gl_renderbuffer ((GstMemory *) gl_mem), 0);
+
+ return gl_mem->height;
+}
+
+/**
+ * gst_gl_renderbuffer_get_type:
+ * @gl_mem: a #GstGLRenderbuffer
+ *
+ * Returns: the #GstVideoGLTextureType of @gl_mem
+ *
+ * Since: 1.8
+ */
+GstVideoGLTextureType
+gst_gl_renderbuffer_get_type (GstGLRenderbuffer * gl_mem)
+{
+ g_return_val_if_fail (gst_is_gl_renderbuffer ((GstMemory *) gl_mem), 0);
+
+ return gl_mem->renderbuffer_type;
+}
+
+/**
+ * gst_gl_renderbuffer_get_id:
+ * @gl_mem: a #GstGLRenderbuffer
+ *
+ * Returns: the OpenGL renderbuffer handle of @gl_mem
+ *
+ * Since: 1.8
+ */
+guint
+gst_gl_renderbuffer_get_id (GstGLRenderbuffer * gl_mem)
+{
+ g_return_val_if_fail (gst_is_gl_renderbuffer ((GstMemory *) gl_mem), 0);
+
+ return gl_mem->renderbuffer_id;
+}
+
+/**
+ * gst_gl_renderbuffer_init_once:
+ *
+ * Initializes the GL Base Texture allocator. It is safe to call this function
+ * multiple times. This must be called before any other GstGLRenderbuffer operation.
+ *
+ * Since: 1.4
+ */
+void
+gst_gl_renderbuffer_init_once (void)
+{
+ static volatile gsize _init = 0;
+
+ if (g_once_init_enter (&_init)) {
+ gst_gl_base_memory_init_once ();
+
+ GST_DEBUG_CATEGORY_INIT (GST_CAT_GL_RENDERBUFFER, "glrenderbuffermemory", 0,
+ "OpenGL Renderbuffer memory");
+
+ _gl_renderbuffer_allocator =
+ g_object_new (GST_TYPE_GL_RENDERBUFFER_ALLOCATOR, NULL);
+ GST_OBJECT_FLAG_SET (_gl_renderbuffer_allocator,
+ GST_OBJECT_FLAG_MAY_BE_LEAKED);
+
+ gst_allocator_register (GST_GL_RENDERBUFFER_ALLOCATOR_NAME,
+ _gl_renderbuffer_allocator);
+
+ g_once_init_leave (&_init, 1);
+ }
+}
+
+/**
+ * gst_is_gl_renderbuffer:
+ * @mem:a #GstMemory
+ *
+ * Returns: whether the memory at @mem is a #GstGLRenderbuffer
+ *
+ * Since: 1.10
+ */
+gboolean
+gst_is_gl_renderbuffer (GstMemory * mem)
+{
+ return mem != NULL && mem->allocator != NULL
+ && g_type_is_a (G_OBJECT_TYPE (mem->allocator),
+ GST_TYPE_GL_RENDERBUFFER_ALLOCATOR);
+}
+
+static void
+_gst_gl_rb_alloc_params_free_data (GstGLRenderbufferAllocationParams * params)
+{
+ gst_gl_allocation_params_free_data (¶ms->parent);
+}
+
+static void
+_gst_gl_rb_alloc_params_copy_data (GstGLRenderbufferAllocationParams * src_vid,
+ GstGLRenderbufferAllocationParams * dest_vid)
+{
+ GstGLAllocationParams *src = (GstGLAllocationParams *) src_vid;
+ GstGLAllocationParams *dest = (GstGLAllocationParams *) dest_vid;
+
+ gst_gl_allocation_params_copy_data (src, dest);
+
+ dest_vid->renderbuffer_type = src_vid->renderbuffer_type;
+ dest_vid->width = src_vid->width;
+ dest_vid->height = src_vid->height;
+}
+
+static gboolean
+ _gst_gl_renderbuffer_allocation_params_init_full
+ (GstGLRenderbufferAllocationParams * params, gsize struct_size,
+ guint alloc_flags, GstGLAllocationParamsCopyFunc copy,
+ GstGLAllocationParamsFreeFunc free, GstGLContext * context,
+ GstAllocationParams * alloc_params, guint width, guint height,
+ GstVideoGLTextureType renderbuffer_type, gpointer wrapped_data,
+ gpointer gl_handle, gpointer user_data, GDestroyNotify notify)
+{
+ g_return_val_if_fail (params != NULL, FALSE);
+ g_return_val_if_fail (copy != NULL, FALSE);
+ g_return_val_if_fail (free != NULL, FALSE);
+ g_return_val_if_fail (GST_IS_GL_CONTEXT (context), FALSE);
+
+ memset (params, 0, sizeof (*params));
+
+ if (!gst_gl_allocation_params_init ((GstGLAllocationParams *) params,
+ struct_size, alloc_flags, copy, free, context, 0, alloc_params,
+ wrapped_data, gl_handle, user_data, notify))
+ return FALSE;
+
+ params->renderbuffer_type = renderbuffer_type;
+ params->width = width;
+ params->height = height;
+
+ return TRUE;
+}
+
+/**
+ * gst_gl_renderbuffer_allocation_params_new:
+ * @context: a #GstGLContext
+ * @alloc_params: (allow-none): the #GstAllocationParams for sysmem mappings of the texture
+ * @width: the width of the renderbuffer
+ * @height: the height of the renderbuffer
+ * @renderbuffer_type: the #GstVideoGLTextureType for the created textures
+ *
+ * Returns: a new #GstGLRenderbufferAllocationParams for allocating #GstGLRenderbuffer's
+ *
+ * Since: 1.10
+ */
+GstGLRenderbufferAllocationParams *
+gst_gl_renderbuffer_allocation_params_new (GstGLContext * context,
+ GstAllocationParams * alloc_params, GstVideoGLTextureType renderbuffer_type,
+ guint width, guint height)
+{
+ GstGLRenderbufferAllocationParams *params =
+ g_new0 (GstGLRenderbufferAllocationParams, 1);
+
+ if (!_gst_gl_renderbuffer_allocation_params_init_full (params,
+ sizeof (GstGLRenderbufferAllocationParams),
+ GST_GL_ALLOCATION_PARAMS_ALLOC_FLAG_ALLOC |
+ GST_GL_ALLOCATION_PARAMS_ALLOC_FLAG_VIDEO,
+ (GstGLAllocationParamsCopyFunc) _gst_gl_rb_alloc_params_copy_data,
+ (GstGLAllocationParamsFreeFunc) _gst_gl_rb_alloc_params_free_data,
+ context, alloc_params, width, height, renderbuffer_type, NULL, 0,
+ NULL, NULL)) {
+ g_free (params);
+ return NULL;
+ }
+
+ return params;
+}
+
+/**
+ * gst_gl_renderbuffer_allocation_params_new_wrapped:
+ * @context: a #GstGLContext
+ * @alloc_params: (allow-none): the #GstAllocationParams for @tex_id
+ * @width: the width of the renderbuffer
+ * @height: the height of the renderbuffer
+ * @renderbuffer_type: the #GstVideoGLTextureType for @tex_id
+ * @gl_handle: the GL handle to wrap
+ * @user_data: (allow-none): user data to call @notify with
+ * @notify: (allow-none): a #GDestroyNotify
+ *
+ * Returns: a new #GstGLRenderbufferAllocationParams for wrapping @gl_handle as a
+ * renderbuffer
+ *
+ * Since: 1.10
+ */
+GstGLRenderbufferAllocationParams *
+gst_gl_renderbuffer_allocation_params_new_wrapped (GstGLContext * context,
+ GstAllocationParams * alloc_params, GstVideoGLTextureType renderbuffer_type,
+ guint width, guint height, gpointer gl_handle, gpointer user_data,
+ GDestroyNotify notify)
+{
+ GstGLRenderbufferAllocationParams *params =
+ g_new0 (GstGLRenderbufferAllocationParams, 1);
+
+ if (!_gst_gl_renderbuffer_allocation_params_init_full (params,
+ sizeof (GstGLRenderbufferAllocationParams),
+ GST_GL_ALLOCATION_PARAMS_ALLOC_FLAG_WRAP_GPU_HANDLE |
+ GST_GL_ALLOCATION_PARAMS_ALLOC_FLAG_VIDEO,
+ (GstGLAllocationParamsCopyFunc) _gst_gl_rb_alloc_params_copy_data,
+ (GstGLAllocationParamsFreeFunc) _gst_gl_rb_alloc_params_free_data,
+ context, alloc_params, width, height, renderbuffer_type, NULL,
+ gl_handle, user_data, notify)) {
+ g_free (params);
+ return NULL;
+ }
+
+ return params;
+}
diff --git a/gst-libs/gst/gl/gstglrenderbuffer.h b/gst-libs/gst/gl/gstglrenderbuffer.h
new file mode 100644
index 0000000..1ed323e
--- /dev/null
+++ b/gst-libs/gst/gl/gstglrenderbuffer.h
@@ -0,0 +1,131 @@
+/*
+ * GStreamer
+ * Copyright (C) 2015 Matthew Waters <matthew@centricular.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef _GST_GL_RENDERBUFFER_H_
+#define _GST_GL_RENDERBUFFER_H_
+
+#include <gst/gst.h>
+#include <gst/gstallocator.h>
+#include <gst/gstmemory.h>
+
+#include <gst/gl/gstglbasememory.h>
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_GL_RENDERBUFFER_ALLOCATOR (gst_gl_renderbuffer_allocator_get_type())
+GType gst_gl_renderbuffer_allocator_get_type(void);
+
+#define GST_IS_GL_RENDERBUFFER_ALLOCATOR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_GL_RENDERBUFFER_ALLOCATOR))
+#define GST_IS_GL_RENDERBUFFER_ALLOCATOR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_GL_RENDERBUFFER_ALLOCATOR))
+#define GST_GL_RENDERBUFFER_ALLOCATOR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GST_TYPE_GL_RENDERBUFFER_ALLOCATOR, GstGLRenderbufferAllocatorClass))
+#define GST_GL_RENDERBUFFER_ALLOCATOR(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_GL_RENDERBUFFER_ALLOCATOR, GstGLRenderbufferAllocator))
+#define GST_GL_RENDERBUFFER_ALLOCATOR_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_GL_RENDERBUFFER_ALLOCATOR, GstGLRenderbufferAllocatorClass))
+#define GST_GL_RENDERBUFFER_ALLOCATOR_CAST(obj) ((GstGLRenderbufferAllocator *)(obj))
+
+#define GST_GL_RENDERBUFFER_CAST(obj) ((GstGLRenderbuffer *) obj)
+
+/**
+ * GST_GL_RENDERBUFFER_ALLOCATOR_NAME:
+ *
+ * The name of the GL renderbuffer allocator
+ */
+#define GST_GL_RENDERBUFFER_ALLOCATOR_NAME "GLRenderbuffer"
+
+/**
+ * GstGLRenderbuffer:
+ * @mem: the parent object
+ * @renderbuffer_id: the GL texture id for this memory
+ * @renderbuffer_type: the texture type
+ * @width: the width
+ * @height: the height
+ *
+ * Represents information about a GL renderbuffer
+ */
+struct _GstGLRenderbuffer
+{
+ GstGLBaseMemory mem;
+
+ guint renderbuffer_id;
+ GstVideoGLTextureType renderbuffer_type;
+ guint width;
+ guint height;
+
+ /* <protected> */
+ gboolean renderbuffer_wrapped;
+};
+
+/**
+ * GstGLRenderbufferAllocator
+ *
+ * Opaque #GstGLRenderbufferAllocator struct
+ */
+struct _GstGLRenderbufferAllocator
+{
+ GstGLBaseMemoryAllocator parent;
+};
+
+/**
+ * GstGLRenderbufferAllocatorClass:
+ *
+ * The #GstGLRenderbufferAllocatorClass only contains private data
+ */
+struct _GstGLRenderbufferAllocatorClass
+{
+ GstGLBaseMemoryAllocatorClass parent_class;
+};
+
+#include <gst/gl/gstglbasememory.h>
+
+typedef struct
+{
+ GstGLAllocationParams parent;
+
+ GstVideoGLTextureType renderbuffer_type;
+ guint width;
+ guint height;
+} GstGLRenderbufferAllocationParams;
+
+GstGLRenderbufferAllocationParams * gst_gl_renderbuffer_allocation_params_new (GstGLContext * context,
+ GstAllocationParams * alloc_params,
+ GstVideoGLTextureType renderbuffer_type,
+ guint width,
+ guint height);
+
+GstGLRenderbufferAllocationParams * gst_gl_renderbuffer_allocation_params_new_wrapped (GstGLContext * context,
+ GstAllocationParams * alloc_params,
+ GstVideoGLTextureType renderbuffer_type,
+ guint width,
+ guint height,
+ gpointer gl_handle,
+ gpointer user_data,
+ GDestroyNotify notify);
+
+void gst_gl_renderbuffer_init_once (void);
+gboolean gst_is_gl_renderbuffer (GstMemory * mem);
+
+/* accessors */
+gint gst_gl_renderbuffer_get_width (GstGLRenderbuffer * gl_mem);
+gint gst_gl_renderbuffer_get_height (GstGLRenderbuffer * gl_mem);
+GstVideoGLTextureType gst_gl_renderbuffer_get_type (GstGLRenderbuffer * gl_mem);
+guint gst_gl_renderbuffer_get_id (GstGLRenderbuffer * gl_mem);
+
+G_END_DECLS
+
+#endif /* _GST_GL_RENDERBUFFER_H_ */
diff --git a/gst-libs/gst/gl/gstglupload.c b/gst-libs/gst/gl/gstglupload.c
index e94195b..bfa5f22 100644
--- a/gst-libs/gst/gl/gstglupload.c
+++ b/gst-libs/gst/gl/gstglupload.c
@@ -189,7 +189,7 @@
GstStaticCaps *input_template_caps;
gpointer (*new) (GstGLUpload * upload);
- GstCaps *(*transform_caps) (GstGLContext * context,
+ GstCaps *(*transform_caps) (gpointer impl, GstGLContext * context,
GstPadDirection direction, GstCaps * caps);
gboolean (*accept) (gpointer impl, GstBuffer * buffer, GstCaps * in_caps,
GstCaps * out_caps);
@@ -203,6 +203,8 @@
struct GLMemoryUpload
{
GstGLUpload *upload;
+ GstGLTextureTarget input_target;
+ GstGLTextureTarget output_target;
};
static gpointer
@@ -211,14 +213,17 @@
struct GLMemoryUpload *mem = g_new0 (struct GLMemoryUpload, 1);
mem->upload = upload;
+ mem->input_target = GST_GL_TEXTURE_TARGET_NONE;
+ mem->output_target = GST_GL_TEXTURE_TARGET_NONE;
return mem;
}
static GstCaps *
-_gl_memory_upload_transform_caps (GstGLContext * context,
+_gl_memory_upload_transform_caps (gpointer impl, GstGLContext * context,
GstPadDirection direction, GstCaps * caps)
{
+ struct GLMemoryUpload *upload = impl;
GstCapsFeatures *passthrough =
gst_caps_features_from_string
(GST_CAPS_FEATURE_META_GST_VIDEO_OVERLAY_COMPOSITION);
@@ -231,12 +236,17 @@
gst_caps_features_free (passthrough);
if (direction == GST_PAD_SINK) {
- GstGLTextureTarget target_mask = 0;
GstCaps *tmp;
+ GstGLTextureTarget target_mask;
- target_mask |= 1 << GST_GL_TEXTURE_TARGET_2D;
- target_mask |= 1 << GST_GL_TEXTURE_TARGET_RECTANGLE;
- target_mask |= 1 << GST_GL_TEXTURE_TARGET_EXTERNAL_OES;
+ if (upload->input_target != GST_GL_TEXTURE_TARGET_NONE) {
+ target_mask = 1 << upload->input_target;
+ } else {
+ target_mask = 1 << GST_GL_TEXTURE_TARGET_2D |
+ 1 << GST_GL_TEXTURE_TARGET_RECTANGLE |
+ 1 << GST_GL_TEXTURE_TARGET_EXTERNAL_OES;
+ }
+
tmp = _caps_intersect_texture_target (ret, target_mask);
gst_caps_unref (ret);
ret = tmp;
@@ -412,6 +422,21 @@
gl_mem->mem.context))
return GST_GL_UPLOAD_UNSHARED_GL_CONTEXT;
+ if (upload->output_target == GST_GL_TEXTURE_TARGET_NONE &&
+ upload->upload->priv->out_caps) {
+ upload->output_target =
+ _caps_get_texture_target (upload->upload->priv->out_caps,
+ GST_GL_TEXTURE_TARGET_NONE);
+ }
+
+ /* always track the last input texture target so ::transform_caps() can
+ * use it to build the output caps */
+ upload->input_target = gl_mem->tex_target;
+ if (upload->output_target != gl_mem->tex_target) {
+ *outbuf = NULL;
+ return GST_GL_UPLOAD_RECONFIGURE;
+ }
+
if (gst_is_gl_memory_pbo (mem))
gst_gl_memory_pbo_upload_transfer ((GstGLMemoryPBO *) mem);
}
@@ -466,7 +491,7 @@
}
static GstCaps *
-_dma_buf_upload_transform_caps (GstGLContext * context,
+_dma_buf_upload_transform_caps (gpointer impl, GstGLContext * context,
GstPadDirection direction, GstCaps * caps)
{
GstCapsFeatures *passthrough =
@@ -705,7 +730,7 @@
gboolean result;
GstVideoGLTextureUploadMeta *meta;
guint texture_ids[GST_GL_UPLOAD_MAX_PLANES];
- GstGLVideoAllocationParams *params;
+ GstBufferPool *pool;
};
static gpointer
@@ -714,12 +739,13 @@
struct GLUploadMeta *meta = g_new0 (struct GLUploadMeta, 1);
meta->upload = upload;
+ meta->pool = NULL;
return meta;
}
static GstCaps *
-_upload_meta_upload_transform_caps (GstGLContext * context,
+_upload_meta_upload_transform_caps (gpointer impl, GstGLContext * context,
GstPadDirection direction, GstCaps * caps)
{
GstCapsFeatures *passthrough =
@@ -766,6 +792,8 @@
GstCapsFeatures *features;
GstVideoGLTextureUploadMeta *meta;
gboolean ret = TRUE;
+ GstStructure *config;
+ gsize size;
features = gst_caps_get_features (in_caps, 0);
@@ -780,13 +808,21 @@
if (!ret)
return ret;
- if (upload->params)
- gst_gl_allocation_params_free ((GstGLAllocationParams *) upload->params);
- if (!(upload->params =
- gst_gl_video_allocation_params_new (upload->upload->context, NULL,
- &upload->upload->priv->in_info, -1, NULL,
- GST_GL_TEXTURE_TARGET_2D, 0)))
- return FALSE;
+ if (upload->pool == NULL)
+ upload->pool = gst_gl_buffer_pool_new (upload->upload->context);
+
+ if (!gst_buffer_pool_is_active (upload->pool)) {
+ config = gst_buffer_pool_get_config (upload->pool);
+
+ size = upload->upload->priv->in_info.size;
+ gst_buffer_pool_config_set_params (config, in_caps, size, 0, 0);
+
+ if (!gst_buffer_pool_set_config (upload->pool, config)) {
+ GST_WARNING_OBJECT (upload->upload, "failed to set bufferpool config");
+ return FALSE;
+ }
+ gst_buffer_pool_set_active (upload->pool, TRUE);
+ }
if (buffer) {
if ((meta = gst_buffer_get_video_gl_texture_upload_meta (buffer)) == NULL)
@@ -861,9 +897,6 @@
int i;
GstVideoInfo *in_info = &upload->upload->priv->in_info;
guint max_planes = GST_VIDEO_INFO_N_PLANES (in_info);
- GstGLMemoryAllocator *allocator;
-
- allocator = gst_gl_memory_allocator_get_default (upload->upload->context);
/* Support stereo views for separated multiview mode */
if (GST_VIDEO_INFO_MULTIVIEW_MODE (in_info) ==
@@ -874,11 +907,11 @@
upload->meta = gst_buffer_get_video_gl_texture_upload_meta (buffer);
- /* FIXME: buffer pool */
- *outbuf = gst_buffer_new ();
- gst_gl_memory_setup_buffer (allocator, *outbuf, upload->params, NULL, NULL,
- 0);
- gst_object_unref (allocator);
+ if (gst_buffer_pool_acquire_buffer (upload->pool, outbuf,
+ NULL) != GST_FLOW_OK) {
+ GST_WARNING_OBJECT (upload, "failed to acquire buffer from bufferpool");
+ return GST_GL_UPLOAD_ERROR;
+ }
for (i = 0; i < GST_GL_UPLOAD_MAX_PLANES; i++) {
guint tex_id = 0;
@@ -914,8 +947,8 @@
g_return_if_fail (impl != NULL);
- if (upload->params)
- gst_gl_allocation_params_free ((GstGLAllocationParams *) upload->params);
+ if (upload->pool)
+ gst_object_unref (upload->pool);
g_free (upload);
}
@@ -1007,7 +1040,7 @@
}
static GstCaps *
-_raw_data_upload_transform_caps (GstGLContext * context,
+_raw_data_upload_transform_caps (gpointer impl, GstGLContext * context,
GstPadDirection direction, GstCaps * caps)
{
GstCapsFeatures *passthrough =
@@ -1211,7 +1244,10 @@
GstGLUpload *upload = g_object_new (GST_TYPE_GL_UPLOAD, NULL);
gint i, n;
- upload->context = gst_object_ref (context);
+ if (context)
+ gst_gl_upload_set_context (upload, context);
+ else
+ upload->context = NULL;
n = G_N_ELEMENTS (upload_methods);
upload->priv->upload_impl = g_malloc (sizeof (gpointer) * n);
@@ -1225,6 +1261,14 @@
return upload;
}
+void
+gst_gl_upload_set_context (GstGLUpload * upload, GstGLContext * context)
+{
+ g_return_if_fail (upload != NULL);
+
+ gst_object_replace ((GstObject **) & upload->context, (GstObject *) context);
+}
+
static void
gst_gl_upload_finalize (GObject * object)
{
@@ -1233,8 +1277,6 @@
upload = GST_GL_UPLOAD (object);
- if (upload->priv->method_impl)
- upload->priv->method->free (upload->priv->method_impl);
upload->priv->method_i = 0;
if (upload->context) {
@@ -1263,8 +1305,8 @@
}
GstCaps *
-gst_gl_upload_transform_caps (GstGLContext * context, GstPadDirection direction,
- GstCaps * caps, GstCaps * filter)
+gst_gl_upload_transform_caps (GstGLUpload * upload, GstGLContext * context,
+ GstPadDirection direction, GstCaps * caps, GstCaps * filter)
{
GstCaps *result, *tmp;
gint i;
@@ -1274,7 +1316,9 @@
for (i = 0; i < G_N_ELEMENTS (upload_methods); i++) {
GstCaps *tmp2;
- tmp2 = upload_methods[i]->transform_caps (context, direction, caps);
+ tmp2 =
+ upload_methods[i]->transform_caps (upload->priv->upload_impl[i],
+ context, direction, caps);
if (tmp2)
tmp = gst_caps_merge (tmp, tmp2);
@@ -1327,8 +1371,6 @@
gst_video_info_from_caps (&upload->priv->in_info, in_caps);
gst_video_info_from_caps (&upload->priv->out_info, out_caps);
- if (upload->priv->method_impl)
- upload->priv->method->free (upload->priv->method_impl);
upload->priv->method_impl = NULL;
upload->priv->method_i = 0;
@@ -1383,16 +1425,14 @@
static gboolean
_upload_find_method (GstGLUpload * upload)
{
+ gint method_i;
+
if (upload->priv->method_i >= G_N_ELEMENTS (upload_methods))
return FALSE;
- if (upload->priv->method_impl) {
- upload->priv->method->free (upload->priv->method_impl);
- upload->priv->method_impl = NULL;
- }
-
- upload->priv->method = upload_methods[upload->priv->method_i];
- upload->priv->method_impl = upload->priv->method->new (upload);
+ method_i = upload->priv->method_i;
+ upload->priv->method = upload_methods[method_i];
+ upload->priv->method_impl = upload->priv->upload_impl[method_i];
GST_DEBUG_OBJECT (upload, "attempting upload with uploader %s",
upload->priv->method->name);
@@ -1447,19 +1487,24 @@
upload->priv->method->perform (upload->priv->method_impl, buffer,
&outbuf);
if (ret == GST_GL_UPLOAD_UNSHARED_GL_CONTEXT) {
- upload->priv->method->free (upload->priv->method_impl);
- upload->priv->method = &_raw_data_upload;
- upload->priv->method_impl = upload->priv->method->new (upload);
+ for (int i = 0; i < G_N_ELEMENTS (upload_methods); i++) {
+ if (upload_methods[i] == &_raw_data_upload) {
+ upload->priv->method = &_raw_data_upload;
+ upload->priv->method_impl = upload->priv->upload_impl[i];
+ upload->priv->method_i = i;
+
+ break;
+ }
+ }
goto restart;
- } else if (ret == GST_GL_UPLOAD_DONE) {
+ } else if (ret == GST_GL_UPLOAD_DONE || ret == GST_GL_UPLOAD_RECONFIGURE) {
/* we are done */
} else {
- upload->priv->method->free (upload->priv->method_impl);
upload->priv->method_impl = NULL;
NEXT_METHOD;
}
- if (buffer != outbuf)
+ if (outbuf && buffer != outbuf)
gst_buffer_copy_into (outbuf, buffer,
GST_BUFFER_COPY_FLAGS | GST_BUFFER_COPY_TIMESTAMPS, 0, -1);
*outbuf_ptr = outbuf;
diff --git a/gst-libs/gst/gl/gstglupload.h b/gst-libs/gst/gl/gstglupload.h
index 577c94b..d158502 100644
--- a/gst-libs/gst/gl/gstglupload.h
+++ b/gst-libs/gst/gl/gstglupload.h
@@ -47,8 +47,9 @@
GST_GL_UPLOAD_ERROR = -1,
GST_GL_UPLOAD_UNSUPPORTED = -2,
+ GST_GL_UPLOAD_RECONFIGURE = -3,
/* <private> */
- GST_GL_UPLOAD_UNSHARED_GL_CONTEXT = -3,
+ GST_GL_UPLOAD_UNSHARED_GL_CONTEXT = -100,
} GstGLUploadReturn;
/**
@@ -82,7 +83,11 @@
GstGLUpload * gst_gl_upload_new (GstGLContext * context);
-GstCaps * gst_gl_upload_transform_caps (GstGLContext * context,
+void gst_gl_upload_set_context (GstGLUpload * upload,
+ GstGLContext * context);
+
+GstCaps * gst_gl_upload_transform_caps (GstGLUpload * upload,
+ GstGLContext * context,
GstPadDirection direction,
GstCaps * caps,
GstCaps * filter);
diff --git a/gst-libs/gst/gl/gstglutils.c b/gst-libs/gst/gl/gstglutils.c
index ade2f95..4a23914 100644
--- a/gst-libs/gst/gl/gstglutils.c
+++ b/gst-libs/gst/gl/gstglutils.c
@@ -36,164 +36,12 @@
#include <gst/gl/wayland/gstgldisplay_wayland.h>
#endif
-#ifndef GL_FRAMEBUFFER_UNDEFINED
-#define GL_FRAMEBUFFER_UNDEFINED 0x8219
-#endif
-#ifndef GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT
-#define GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT 0x8CD6
-#endif
-#ifndef GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT
-#define GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT 0x8CD7
-#endif
-#ifndef GL_FRAMEBUFFER_UNSUPPORTED
-#define GL_FRAMEBUFFER_UNSUPPORTED 0x8CDD
-#endif
-#ifndef GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS
-#define GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS 0x8CD9
-#endif
-
#define USING_OPENGL(context) (gst_gl_context_check_gl_version (context, GST_GL_API_OPENGL, 1, 0))
#define USING_OPENGL3(context) (gst_gl_context_check_gl_version (context, GST_GL_API_OPENGL3, 3, 1))
#define USING_GLES(context) (gst_gl_context_check_gl_version (context, GST_GL_API_GLES, 1, 0))
#define USING_GLES2(context) (gst_gl_context_check_gl_version (context, GST_GL_API_GLES2, 2, 0))
#define USING_GLES3(context) (gst_gl_context_check_gl_version (context, GST_GL_API_GLES2, 3, 0))
-static gchar *error_message;
-
-/* called in the gl thread */
-gboolean
-gst_gl_context_check_framebuffer_status (GstGLContext * context)
-{
- GLenum status = 0;
- status = context->gl_vtable->CheckFramebufferStatus (GL_FRAMEBUFFER);
-
- switch (status) {
- case GL_FRAMEBUFFER_COMPLETE:
- return TRUE;
- break;
-
- case GL_FRAMEBUFFER_UNSUPPORTED:
- GST_ERROR ("GL_FRAMEBUFFER_UNSUPPORTED");
- break;
-
- case GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT:
- GST_ERROR ("GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT");
- break;
-
- case GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT:
- GST_ERROR ("GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT");
- break;
- case GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS:
- GST_ERROR ("GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS");
- break;
-#if GST_GL_HAVE_OPENGL
- case GL_FRAMEBUFFER_UNDEFINED:
- GST_ERROR ("GL_FRAMEBUFFER_UNDEFINED");
- break;
-#endif
- default:
- GST_ERROR ("General FBO error");
- }
-
- return FALSE;
-}
-
-typedef struct _GenFBO
-{
- GstGLFramebuffer *frame;
- gint width, height;
- GLuint *fbo, *depth;
-} GenFBO;
-
-static void
-_gen_fbo (GstGLContext * context, GenFBO * data)
-{
- gst_gl_framebuffer_generate (data->frame, data->width, data->height,
- data->fbo, data->depth);
-}
-
-gboolean
-gst_gl_context_gen_fbo (GstGLContext * context, gint width, gint height,
- GLuint * fbo, GLuint * depthbuffer)
-{
- GstGLFramebuffer *frame = gst_gl_framebuffer_new (context);
-
- GenFBO data = { frame, width, height, fbo, depthbuffer };
-
- gst_gl_context_thread_add (context, (GstGLContextThreadFunc) _gen_fbo, &data);
-
- gst_object_unref (frame);
-
- return TRUE;
-}
-
-typedef struct _UseFBO2
-{
- GstGLFramebuffer *frame;
- gint texture_fbo_width;
- gint texture_fbo_height;
- GLuint fbo;
- GLuint depth_buffer;
- GLuint texture_fbo;
- GLCB_V2 cb;
- gpointer stuff;
-} UseFBO2;
-
-static void
-_use_fbo_v2 (GstGLContext * context, UseFBO2 * data)
-{
- gst_gl_framebuffer_use_v2 (data->frame, data->texture_fbo_width,
- data->texture_fbo_height, data->fbo, data->depth_buffer,
- data->texture_fbo, data->cb, data->stuff);
-}
-
-gboolean
-gst_gl_context_use_fbo_v2 (GstGLContext * context, gint texture_fbo_width,
- gint texture_fbo_height, GLuint fbo, GLuint depth_buffer,
- GLuint texture_fbo, GLCB_V2 cb, gpointer stuff)
-{
- GstGLFramebuffer *frame = gst_gl_framebuffer_new (context);
-
- UseFBO2 data =
- { frame, texture_fbo_width, texture_fbo_height, fbo, depth_buffer,
- texture_fbo, cb, stuff
- };
-
- gst_gl_context_thread_add (context, (GstGLContextThreadFunc) _use_fbo_v2,
- &data);
-
- gst_object_unref (frame);
-
- return TRUE;
-}
-
-typedef struct _DelFBO
-{
- GstGLFramebuffer *frame;
- GLuint fbo;
- GLuint depth;
-} DelFBO;
-
-/* Called in the gl thread */
-static void
-_del_fbo (GstGLContext * context, DelFBO * data)
-{
- gst_gl_framebuffer_delete (data->frame, data->fbo, data->depth);
-}
-
-/* Called by gltestsrc and glfilter */
-void
-gst_gl_context_del_fbo (GstGLContext * context, GLuint fbo, GLuint depth_buffer)
-{
- GstGLFramebuffer *frame = gst_gl_framebuffer_new (context);
-
- DelFBO data = { frame, fbo, depth_buffer };
-
- gst_gl_context_thread_add (context, (GstGLContextThreadFunc) _del_fbo, &data);
-
- gst_object_unref (frame);
-}
-
struct _compile_shader
{
GstGLShader **shader;
@@ -275,26 +123,6 @@
return *shader != NULL;
}
-void
-gst_gl_context_set_error (GstGLContext * context, const char *format, ...)
-{
- va_list args;
-
- g_free (error_message);
-
- va_start (args, format);
- error_message = g_strdup_vprintf (format, args);
- va_end (args);
-
- GST_WARNING ("%s", error_message);
-}
-
-gchar *
-gst_gl_context_get_error (void)
-{
- return error_message;
-}
-
/* Called by glfilter */
void
gst_gl_context_del_shader (GstGLContext * context, GstGLShader * shader)
diff --git a/gst-libs/gst/gl/gstglutils.h b/gst-libs/gst/gl/gstglutils.h
index 4741dad..a714759 100644
--- a/gst-libs/gst/gl/gstglutils.h
+++ b/gst-libs/gst/gl/gstglutils.h
@@ -28,64 +28,11 @@
G_BEGIN_DECLS
-/**
- * GstGLContextProjection:
- *
- * %GST_GL_DISPLAY_PROJECTION_ORTHO2D: Orthogonal projection
- * %GST_GL_DISPLAY_CONVERSION_MATRIX: Perspective projection
- */
-typedef enum
-{
- GST_GL_DISPLAY_PROJECTION_ORTHO2D,
- GST_GL_DISPLAY_PROJECTION_PERSPECTIVE
-} GstGLDisplayProjection;
-
-/**
- * CDCB:
- * @texture: texture to draw
- * @width: new width
- * @height: new height:
- * @data: user data
- *
- * client draw callback
- */
-typedef gboolean (*CDCB) (GLuint texture, GLuint width, GLuint height, gpointer data);
-/**
- * GLCB:
- * @width: the width
- * @height: the height
- * @texture: texture
- * @stuff: user data
- *
- * callback definition for operating on textures
- */
-typedef void (*GLCB) (gint, gint, guint, gpointer stuff);
-/**
- * GLCB_V2:
- * @stuff: user data
- *
- * callback definition for operating through a Framebuffer object
- */
-typedef void (*GLCB_V2) (gpointer stuff);
-
-gboolean gst_gl_context_gen_fbo (GstGLContext * context, gint width, gint height,
- GLuint * fbo, GLuint * depthbuffer);
-gboolean gst_gl_context_use_fbo_v2 (GstGLContext * context, gint texture_fbo_width,
- gint texture_fbo_height, GLuint fbo, GLuint depth_buffer,
- GLuint texture_fbo, GLCB_V2 cb, gpointer stuff);
-void gst_gl_context_del_fbo (GstGLContext * context, GLuint fbo,
- GLuint depth_buffer);
-
gboolean gst_gl_context_gen_shader (GstGLContext * context,
const gchar * shader_vertex_source,
const gchar * shader_fragment_source, GstGLShader ** shader);
void gst_gl_context_del_shader (GstGLContext * context, GstGLShader * shader);
-gboolean gst_gl_context_check_framebuffer_status (GstGLContext * context);
-
-void gst_gl_context_set_error (GstGLContext * context, const char * format, ...);
-gchar *gst_gl_context_get_error (void);
-
gboolean gst_gl_ensure_element_data (gpointer element,
GstGLDisplay **display_ptr, GstGLContext ** other_context_ptr);
gboolean gst_gl_handle_set_context (GstElement * element, GstContext * context,
diff --git a/gst-libs/gst/gl/gstglviewconvert.c b/gst-libs/gst/gl/gstglviewconvert.c
index 0697891..c409e3a 100644
--- a/gst-libs/gst/gl/gstglviewconvert.c
+++ b/gst-libs/gst/gl/gstglviewconvert.c
@@ -1208,7 +1208,7 @@
g_value_set_static_string (&item, GST_GL_TEXTURE_TARGET_EXTERNAL_OES_STR);
}
- gst_structure_set_value (s, "texture-target", &item);
+ gst_structure_set_value (s_other, "texture-target", &item);
g_value_unset (&item);
@@ -1286,9 +1286,7 @@
}
}
- tmp = _fixate_texture_target (viewconvert, direction, caps, othercaps);
- gst_caps_unref (othercaps);
- othercaps = tmp;
+ othercaps = _fixate_texture_target (viewconvert, direction, caps, othercaps);
done:
GST_DEBUG_OBJECT (viewconvert, "dir %s fixated to %" GST_PTR_FORMAT
@@ -1304,6 +1302,11 @@
if (viewconvert->shader)
gst_gl_context_del_shader (viewconvert->context, viewconvert->shader);
viewconvert->shader = NULL;
+
+ if (viewconvert->fbo)
+ gst_object_unref (viewconvert->fbo);
+ viewconvert->fbo = NULL;
+
viewconvert->initted = FALSE;
viewconvert->reconfigure = FALSE;
}
@@ -1383,74 +1386,16 @@
static gboolean
_init_view_convert_fbo (GstGLViewConvert * viewconvert)
{
- GstGLFuncs *gl;
guint out_width, out_height;
- GLuint fake_texture = 0; /* a FBO must hava texture to init */
- GLenum internal_format;
- gboolean ret = TRUE;
- gl = viewconvert->context->gl_vtable;
out_width = GST_VIDEO_INFO_WIDTH (&viewconvert->out_info);
out_height = GST_VIDEO_INFO_HEIGHT (&viewconvert->out_info);
- if (!gl->GenFramebuffers) {
- /* turn off the pipeline because Frame buffer object is a not present */
- gst_gl_context_set_error (viewconvert->context,
- "Frambuffer objects unsupported");
- return FALSE;
- }
- /* setup FBO */
- gl->GenFramebuffers (1, &viewconvert->fbo);
- gl->BindFramebuffer (GL_FRAMEBUFFER, viewconvert->fbo);
- /* setup the render buffer for depth */
- gl->GenRenderbuffers (1, &viewconvert->depth_buffer);
- gl->BindRenderbuffer (GL_RENDERBUFFER, viewconvert->depth_buffer);
- if (USING_OPENGL (viewconvert->context)
- || USING_OPENGL3 (viewconvert->context)) {
- gl->RenderbufferStorage (GL_RENDERBUFFER, GL_DEPTH_COMPONENT, out_width,
- out_height);
- gl->RenderbufferStorage (GL_RENDERBUFFER, GL_DEPTH24_STENCIL8,
- out_width, out_height);
- }
- if (USING_GLES2 (viewconvert->context)) {
- gl->RenderbufferStorage (GL_RENDERBUFFER, GL_DEPTH_COMPONENT16,
- out_width, out_height);
- }
+ viewconvert->fbo =
+ gst_gl_framebuffer_new_with_default_depth (viewconvert->context,
+ out_width, out_height);
- /* a fake texture is attached to the convert FBO (cannot init without it) */
- gl->GenTextures (1, &fake_texture);
- gl->BindTexture (GL_TEXTURE_2D, fake_texture);
- internal_format =
- gst_gl_sized_gl_format_from_gl_format_type (viewconvert->context, GL_RGBA,
- GL_UNSIGNED_BYTE);
- gl->TexImage2D (GL_TEXTURE_2D, 0, internal_format, out_width, out_height,
- 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);
- gl->TexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
- gl->TexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
- gl->TexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
- gl->TexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
- /* attach the texture to the FBO to renderer to */
- gl->FramebufferTexture2D (GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0,
- GL_TEXTURE_2D, fake_texture, 0);
- /* attach the depth render buffer to the FBO */
- gl->FramebufferRenderbuffer (GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT,
- GL_RENDERBUFFER, viewconvert->depth_buffer);
- if (USING_OPENGL (viewconvert->context)) {
- gl->FramebufferRenderbuffer (GL_FRAMEBUFFER, GL_STENCIL_ATTACHMENT,
- GL_RENDERBUFFER, viewconvert->depth_buffer);
- }
-
- if (!gst_gl_context_check_framebuffer_status (viewconvert->context)) {
- gst_gl_context_set_error (viewconvert->context,
- "GL framebuffer status incomplete");
- ret = FALSE;
- }
-
- /* unbind the FBO */
- gl->BindTexture (GL_TEXTURE_2D, 0);
- gl->BindFramebuffer (GL_FRAMEBUFFER, 0);
- gl->DeleteTextures (1, &fake_texture);
- return ret;
+ return viewconvert->fbo != NULL;
}
/* free after use */
@@ -1643,8 +1588,8 @@
viewconvert->out_info.width, viewconvert->out_info.height);
if (!gl->CreateProgramObject && !gl->CreateProgram) {
- gst_gl_context_set_error (viewconvert->context,
- "Cannot perform multiview conversion without OpenGL shaders");
+ GST_ERROR_OBJECT (viewconvert, "Cannot perform multiview conversion "
+ "without OpenGL shaders");
goto error;
}
@@ -1865,9 +1810,9 @@
gst_gl_texture_target_to_gl (viewconvert->from_texture_target);
gl = context->gl_vtable;
- out_width = GST_VIDEO_INFO_WIDTH (&viewconvert->out_info);
- out_height = GST_VIDEO_INFO_HEIGHT (&viewconvert->out_info);
- gl->BindFramebuffer (GL_FRAMEBUFFER, viewconvert->fbo);
+
+ gst_gl_framebuffer_bind (viewconvert->fbo);
+
if (out_mode == GST_VIDEO_MULTIVIEW_MODE_SEPARATED ||
out_mode == GST_VIDEO_MULTIVIEW_MODE_FRAME_BY_FRAME) {
out_views = viewconvert->out_info.views;
@@ -1877,19 +1822,18 @@
/* attach the texture to the FBO to renderer to */
for (i = 0; i < out_views; i++) {
- guint gl_target =
- gst_gl_texture_target_to_gl (viewconvert->to_texture_target);
+ GstGLBaseMemory *tex = (GstGLBaseMemory *) priv->out_tex[i];
- /* needed? */
- gl->BindTexture (gl_target, priv->out_tex[i]->tex_id);
- gl->FramebufferTexture2D (GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0 + i,
- gl_target, priv->out_tex[i]->tex_id, 0);
+ gst_gl_framebuffer_attach (viewconvert->fbo, GL_COLOR_ATTACHMENT0 + i, tex);
}
if (gl->DrawBuffers)
gl->DrawBuffers (out_views, multipleRT);
else if (gl->DrawBuffer)
gl->DrawBuffer (GL_COLOR_ATTACHMENT0);
+
+ gst_gl_framebuffer_get_effective_dimensions (viewconvert->fbo, &out_width,
+ &out_height);
gl->GetIntegerv (GL_VIEWPORT, viewport_dim);
gl->Viewport (0, 0, out_width, out_height);
@@ -1911,6 +1855,7 @@
gl->BindVertexArray (priv->vao);
else
_bind_buffer (viewconvert);
+
if (in_mode == GST_VIDEO_MULTIVIEW_MODE_SEPARATED ||
in_mode == GST_VIDEO_MULTIVIEW_MODE_FRAME_BY_FRAME) {
if (priv->in_tex[1] == NULL) {
@@ -1924,7 +1869,9 @@
gl->ActiveTexture (GL_TEXTURE0);
gl->BindTexture (from_gl_target, priv->in_tex[0]->tex_id);
+
gl->DrawElements (GL_TRIANGLES, 6, GL_UNSIGNED_SHORT, NULL);
+
if (gl->BindVertexArray)
gl->BindVertexArray (0);
else
@@ -1935,8 +1882,8 @@
gst_gl_context_clear_shader (context);
gl->Viewport (viewport_dim[0], viewport_dim[1], viewport_dim[2],
viewport_dim[3]);
- gst_gl_context_check_framebuffer_status (context);
- gl->BindFramebuffer (GL_FRAMEBUFFER, 0);
+ gst_gl_context_clear_framebuffer (context);
+
return TRUE;
}
@@ -2144,15 +2091,13 @@
GstMapInfo to_info, from_info;
if (!gst_memory_map ((GstMemory *) priv->out_tex[j],
&from_info, GST_MAP_READ | GST_MAP_GL)) {
- gst_gl_context_set_error (viewconvert->context,
- "Failed to map " "intermediate memory");
+ GST_ERROR_OBJECT (viewconvert, "Failed to map intermediate memory");
res = FALSE;
continue;
}
if (!gst_memory_map ((GstMemory *) out_tex, &to_info,
GST_MAP_WRITE | GST_MAP_GL)) {
- gst_gl_context_set_error (viewconvert->context, "Failed to map "
- "intermediate memory");
+ GST_ERROR_OBJECT (viewconvert, "Failed to map intermediate memory");
res = FALSE;
continue;
}
diff --git a/gst-libs/gst/gl/gstglviewconvert.h b/gst-libs/gst/gl/gstglviewconvert.h
index 8cfa1b2..ee1166c 100644
--- a/gst-libs/gst/gl/gstglviewconvert.h
+++ b/gst-libs/gst/gl/gstglviewconvert.h
@@ -68,8 +68,7 @@
gboolean initted;
gboolean reconfigure;
- GLuint fbo;
- GLuint depth_buffer;
+ GstGLFramebuffer *fbo;
GstGLViewConvertPrivate *priv;
};
diff --git a/gst-libs/gst/gl/gstglwindow.c b/gst-libs/gst/gl/gstglwindow.c
index 410bc86..b74d397 100644
--- a/gst-libs/gst/gl/gstglwindow.c
+++ b/gst-libs/gst/gl/gstglwindow.c
@@ -487,8 +487,6 @@
}
window_class->draw (window);
-
- window->queue_resize = FALSE;
}
/**
@@ -1164,14 +1162,38 @@
window_class->queue_resize (window);
}
+struct resize_data
+{
+ GstGLWindow *window;
+ guint width, height;
+};
+
+static void
+_on_resize (gpointer data)
+{
+ struct resize_data *resize = data;
+
+ resize->window->resize (resize->window->resize_data, resize->width,
+ resize->height);
+}
+
void
gst_gl_window_resize (GstGLWindow * window, guint width, guint height)
{
g_return_if_fail (GST_IS_GL_WINDOW (window));
- if (window->resize)
- window->resize (window->resize_data, width, height);
+ if (window->resize) {
+ struct resize_data resize = { 0, };
+
+ resize.window = window;
+ resize.width = width;
+ resize.height = height;
+
+ gst_gl_window_send_message (window, (GstGLWindowCB) _on_resize, &resize);
+ }
window->priv->surface_width = width;
window->priv->surface_height = height;
+
+ window->queue_resize = FALSE;
}
diff --git a/gst-libs/gst/gl/wayland/Makefile.in b/gst-libs/gst/gl/wayland/Makefile.in
index ee594bf..3f5be32 100644
--- a/gst-libs/gst/gl/wayland/Makefile.in
+++ b/gst-libs/gst/gl/wayland/Makefile.in
@@ -298,6 +298,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -347,6 +349,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/gst-libs/gst/gl/wayland/gstgldisplay_wayland.c b/gst-libs/gst/gl/wayland/gstgldisplay_wayland.c
index c5c5094..6654280 100644
--- a/gst-libs/gst/gl/wayland/gstgldisplay_wayland.c
+++ b/gst-libs/gst/gl/wayland/gstgldisplay_wayland.c
@@ -117,7 +117,12 @@
ret->display = wl_display_connect (name);
if (!ret->display) {
- GST_ERROR ("Failed to open X11 display connection with name, \'%s\'", name);
+ if (name != NULL) {
+ GST_ERROR ("Failed to open Wayland display connection with name \'%s\'",
+ name);
+ } else {
+ GST_ERROR ("Failed to open Wayland display connection.");
+ }
return NULL;
}
diff --git a/gst-libs/gst/gl/wayland/gstglwindow_wayland_egl.h b/gst-libs/gst/gl/wayland/gstglwindow_wayland_egl.h
index e0166da..a88955f 100644
--- a/gst-libs/gst/gl/wayland/gstglwindow_wayland_egl.h
+++ b/gst-libs/gst/gl/wayland/gstglwindow_wayland_egl.h
@@ -103,4 +103,4 @@
G_END_DECLS
-#endif /* __GST_GL_WINDOW_X11_H__ */
+#endif /* __GST_GL_WINDOW_WAYLAND_EGL_H__ */
diff --git a/gst-libs/gst/gl/wayland/wayland_event_source.c b/gst-libs/gst/gl/wayland/wayland_event_source.c
index 114977a..ffb1503 100644
--- a/gst-libs/gst/gl/wayland/wayland_event_source.c
+++ b/gst-libs/gst/gl/wayland/wayland_event_source.c
@@ -51,19 +51,30 @@
sync_callback
};
+/* only thread safe iff called on the same thread @queue is being dispatched on */
gint
gst_gl_wl_display_roundtrip_queue (struct wl_display *display,
struct wl_event_queue *queue)
{
- struct wl_callback *callback = wl_display_sync (display);
+ struct wl_callback *callback;
gboolean done = FALSE;
gint ret = 0;
- if (callback == NULL)
+ if (queue) {
+ /* creating a wl_proxy and setting the queue is racy with the dispatching
+ * of the default queue */
+ while (wl_display_prepare_read_queue (display, queue) != 0) {
+ if ((ret = wl_display_dispatch_queue_pending (display, queue)) < 0)
+ return ret;
+ }
+ }
+ if (!(callback = wl_display_sync (display))) {
return -1;
+ }
wl_callback_add_listener (callback, &sync_listener, &done);
if (queue) {
wl_proxy_set_queue ((struct wl_proxy *) callback, queue);
+ wl_display_cancel_read (display);
while (!done && ret >= 0)
ret = wl_display_dispatch_queue (display, queue);
} else {
@@ -84,6 +95,7 @@
uint32_t mask;
struct wl_display *display;
struct wl_event_queue *queue;
+ gboolean reading;
} WaylandEventSource;
static gboolean
@@ -93,10 +105,29 @@
*timeout = -1;
- /* We have to add/remove the GPollFD if we want to update our
- * poll event mask dynamically. Instead, let's just flush all
- * writes on idle */
- wl_display_flush (source->display);
+ /* we may be called multiple times for prepare */
+ if (source->reading)
+ wl_display_cancel_read (source->display);
+
+ if (source->queue) {
+ while (wl_display_prepare_read_queue (source->display, source->queue) != 0) {
+ if (wl_display_dispatch_queue_pending (source->display,
+ source->queue) < 0) {
+ g_critical ("Failed to dispatch pending events\n");
+ }
+ }
+ } else {
+ while (wl_display_prepare_read (source->display) != 0) {
+ if (wl_display_dispatch_pending (source->display) < 0) {
+ g_critical ("Failed to dispatch pending events\n");
+ }
+ }
+ }
+ source->reading = TRUE;
+
+ /* FIXME: this may return EAGAIN if the fd is full */
+ if (wl_display_flush (source->display) < 0)
+ g_critical ("Failed to flush Wayland connection\n");
return FALSE;
}
@@ -109,6 +140,13 @@
retval = source->pfd.revents;
+ if (source->pfd.revents & G_IO_IN) {
+ wl_display_read_events (source->display);
+ } else {
+ wl_display_cancel_read (source->display);
+ }
+ source->reading = FALSE;
+
return retval;
}
@@ -118,13 +156,11 @@
{
WaylandEventSource *source = (WaylandEventSource *) base;
- if (source->pfd.revents) {
- if (source->queue)
- wl_display_dispatch_queue_pending (source->display, source->queue);
- else
- wl_display_dispatch_pending (source->display);
- source->pfd.revents = 0;
- }
+ if (source->queue)
+ wl_display_dispatch_queue_pending (source->display, source->queue);
+ else
+ wl_display_dispatch_pending (source->display);
+ source->pfd.revents = 0;
if (callback)
callback (data);
@@ -132,11 +168,22 @@
return TRUE;
}
+static void
+wayland_event_source_finalize (GSource * base)
+{
+ WaylandEventSource *source = (WaylandEventSource *) base;
+
+ if (source->reading) {
+ wl_display_cancel_read (source->display);
+ }
+ source->reading = FALSE;
+}
+
static GSourceFuncs wayland_event_source_funcs = {
wayland_event_source_prepare,
wayland_event_source_check,
wayland_event_source_dispatch,
- NULL
+ wayland_event_source_finalize
};
GSource *
diff --git a/gst-libs/gst/gl/win32/Makefile.in b/gst-libs/gst/gl/win32/Makefile.in
index 9857cd0..78f80a5 100644
--- a/gst-libs/gst/gl/win32/Makefile.in
+++ b/gst-libs/gst/gl/win32/Makefile.in
@@ -303,6 +303,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -352,6 +354,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/gst-libs/gst/gl/x11/Makefile.in b/gst-libs/gst/gl/x11/Makefile.in
index b2e7071..6652f19 100644
--- a/gst-libs/gst/gl/x11/Makefile.in
+++ b/gst-libs/gst/gl/x11/Makefile.in
@@ -332,6 +332,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -381,6 +383,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/gst-libs/gst/gl/x11/gstglwindow_x11.c b/gst-libs/gst/gl/x11/gstglwindow_x11.c
index a330825..d08b757 100644
--- a/gst-libs/gst/gl/x11/gstglwindow_x11.c
+++ b/gst-libs/gst/gl/x11/gstglwindow_x11.c
@@ -391,6 +391,7 @@
GstGLWindow *window = GST_GL_WINDOW (window_x11);
if (gst_gl_window_is_running (window)) {
+ guint width, height;
XWindowAttributes attr;
XGetWindowAttributes (window_x11->device, window_x11->internal_win_id,
@@ -414,13 +415,16 @@
}
}
- if (window_x11->allow_extra_expose_events) {
- if (window->queue_resize) {
- guint width, height;
+ gst_gl_window_get_surface_dimensions (window, &width, &height);
+ if (attr.width != width || attr.height != height) {
+ width = attr.width;
+ height = attr.height;
+ gst_gl_window_queue_resize (window);
+ }
- gst_gl_window_get_surface_dimensions (window, &width, &height);
+ if (window_x11->allow_extra_expose_events) {
+ if (window->queue_resize)
gst_gl_window_resize (window, width, height);
- }
if (window->draw) {
GstGLContext *context = gst_gl_window_get_context (window);
diff --git a/gst-libs/gst/insertbin/Makefile.in b/gst-libs/gst/insertbin/Makefile.in
index 507b2e6..f14c347 100644
--- a/gst-libs/gst/insertbin/Makefile.in
+++ b/gst-libs/gst/insertbin/Makefile.in
@@ -315,6 +315,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -364,6 +366,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/gst-libs/gst/interfaces/Makefile.in b/gst-libs/gst/interfaces/Makefile.in
index b4bc22e..90ed7b8 100644
--- a/gst-libs/gst/interfaces/Makefile.in
+++ b/gst-libs/gst/interfaces/Makefile.in
@@ -345,6 +345,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -394,6 +396,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/gst-libs/gst/mpegts/Makefile.in b/gst-libs/gst/mpegts/Makefile.in
index 07d58c9..a23c1b6 100644
--- a/gst-libs/gst/mpegts/Makefile.in
+++ b/gst-libs/gst/mpegts/Makefile.in
@@ -353,6 +353,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -402,6 +404,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/gst-libs/gst/player/Makefile.in b/gst-libs/gst/player/Makefile.in
index 715ffb1..12813a5 100644
--- a/gst-libs/gst/player/Makefile.in
+++ b/gst-libs/gst/player/Makefile.in
@@ -338,6 +338,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -387,6 +389,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/gst-libs/gst/player/gstplayer.c b/gst-libs/gst/player/gstplayer.c
index 15d7d34..7c5c57d 100644
--- a/gst-libs/gst/player/gstplayer.c
+++ b/gst-libs/gst/player/gstplayer.c
@@ -78,6 +78,26 @@
return quark;
}
+static GQuark QUARK_CONFIG;
+
+/* Keep ConfigQuarkId and _config_quark_strings ordered and synced */
+typedef enum
+{
+ CONFIG_QUARK_USER_AGENT = 0,
+ CONFIG_QUARK_POSITION_INTERVAL_UPDATE,
+
+ CONFIG_QUARK_MAX
+} ConfigQuarkId;
+
+static const gchar *_config_quark_strings[] = {
+ "user-agent",
+ "position-interval-update",
+};
+
+GQuark _config_quark_table[CONFIG_QUARK_MAX];
+
+#define CONFIG_QUARK(q) _config_quark_table[CONFIG_QUARK_##q]
+
enum
{
PROP_0,
@@ -95,7 +115,6 @@
PROP_MUTE,
PROP_RATE,
PROP_PIPELINE,
- PROP_POSITION_UPDATE_INTERVAL,
PROP_VIDEO_MULTIVIEW_MODE,
PROP_VIDEO_MULTIVIEW_FLAGS,
PROP_AUDIO_VIDEO_OFFSET,
@@ -136,6 +155,7 @@
GstPlayerSignalDispatcher *signal_dispatcher;
gchar *uri;
+ gchar *redirect_uri;
gchar *suburi;
GThread *thread;
@@ -151,7 +171,6 @@
GSource *tick_source, *ready_timeout_source;
gdouble rate;
- guint position_update_interval_ms;
GstPlayerState app_state;
gint buffering;
@@ -161,6 +180,8 @@
GstElement *current_vis_element;
+ GstStructure *config;
+
/* Protected by lock */
gboolean seek_pending; /* Only set from main context */
GstClockTime last_seek_time; /* Only set from main context */
@@ -194,12 +215,11 @@
static gpointer gst_player_main (gpointer data);
static void gst_player_seek_internal_locked (GstPlayer * self);
-static gboolean gst_player_stop_internal (gpointer user_data);
+static void gst_player_stop_internal (GstPlayer * self, gboolean transient);
static gboolean gst_player_pause_internal (gpointer user_data);
static gboolean gst_player_play_internal (gpointer user_data);
-static gboolean gst_player_set_rate_internal (gpointer user_data);
-static gboolean gst_player_set_position_update_interval_internal (gpointer
- user_data);
+static gboolean gst_player_seek_internal (gpointer user_data);
+static void gst_player_set_rate_internal (GstPlayer * self);
static void change_state (GstPlayer * self, GstPlayerState state);
static GstPlayerMediaInfo *gst_player_media_info_create (GstPlayer * self);
@@ -243,7 +263,12 @@
self->context = g_main_context_new ();
self->loop = g_main_loop_new (self->context, FALSE);
- self->position_update_interval_ms = DEFAULT_POSITION_UPDATE_INTERVAL_MS;
+ /* *INDENT-OFF* */
+ self->config = gst_structure_new_id (QUARK_CONFIG,
+ CONFIG_QUARK (POSITION_INTERVAL_UPDATE), G_TYPE_UINT, DEFAULT_POSITION_UPDATE_INTERVAL_MS,
+ NULL);
+ /* *INDENT-ON* */
+
self->seek_pending = FALSE;
self->seek_position = GST_CLOCK_TIME_NONE;
self->last_seek_time = GST_CLOCK_TIME_NONE;
@@ -253,6 +278,23 @@
}
static void
+config_quark_initialize (void)
+{
+ gint i;
+
+ QUARK_CONFIG = g_quark_from_static_string ("player-config");
+
+ if (G_N_ELEMENTS (_config_quark_strings) != CONFIG_QUARK_MAX)
+ g_warning ("the quark table is not consistent! %d != %d",
+ (int) G_N_ELEMENTS (_config_quark_strings), CONFIG_QUARK_MAX);
+
+ for (i = 0; i < CONFIG_QUARK_MAX; i++) {
+ _config_quark_table[i] =
+ g_quark_from_static_string (_config_quark_strings[i]);
+ }
+}
+
+static void
gst_player_class_init (GstPlayerClass * klass)
{
GObjectClass *gobject_class = (GObjectClass *) klass;
@@ -328,13 +370,6 @@
g_param_spec_double ("rate", "rate", "Playback rate",
-64.0, 64.0, DEFAULT_RATE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
- param_specs[PROP_POSITION_UPDATE_INTERVAL] =
- g_param_spec_uint ("position-update-interval", "Position update interval",
- "Interval in milliseconds between two position-updated signals."
- "Pass 0 to stop updating the position.",
- 0, 10000, DEFAULT_POSITION_UPDATE_INTERVAL_MS,
- G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
-
param_specs[PROP_VIDEO_MULTIVIEW_MODE] =
g_param_spec_enum ("video-multiview-mode",
"Multiview Mode Override",
@@ -421,6 +456,8 @@
g_signal_new ("seek-done", G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_LAST | G_SIGNAL_NO_RECURSE | G_SIGNAL_NO_HOOKS, 0, NULL,
NULL, NULL, G_TYPE_NONE, 1, GST_TYPE_CLOCK_TIME);
+
+ config_quark_initialize ();
}
static void
@@ -454,6 +491,7 @@
GST_TRACE_OBJECT (self, "Finalizing");
g_free (self->uri);
+ g_free (self->redirect_uri);
g_free (self->suburi);
if (self->global_tags)
gst_tag_list_unref (self->global_tags);
@@ -463,6 +501,8 @@
g_object_unref (self->signal_dispatcher);
if (self->current_vis_element)
gst_object_unref (self->current_vis_element);
+ if (self->config)
+ gst_structure_free (self->config);
g_mutex_clear (&self->lock);
g_cond_clear (&self->cond);
@@ -512,7 +552,7 @@
{
GstPlayer *self = user_data;
- gst_player_stop_internal (self);
+ gst_player_stop_internal (self, FALSE);
g_mutex_lock (&self->lock);
@@ -554,14 +594,15 @@
target_state = self->target_state;
position = gst_player_get_position (self);
- gst_player_stop_internal (self);
+ gst_player_stop_internal (self, TRUE);
g_mutex_lock (&self->lock);
GST_DEBUG_OBJECT (self, "Changing SUBURI to '%s'",
GST_STR_NULL (self->suburi));
g_object_set (self->playbin, "suburi", self->suburi, NULL);
- g_object_set (self->playbin, "uri", self->uri, NULL);
+ g_object_set (self->playbin, "uri",
+ self->redirect_uri ? self->redirect_uri : self->uri, NULL);
g_mutex_unlock (&self->lock);
@@ -577,6 +618,26 @@
}
static void
+gst_player_set_rate_internal (GstPlayer * self)
+{
+ self->seek_position = gst_player_get_position (self);
+
+ /* If there is no seek being dispatch to the main context currently do that,
+ * otherwise we just updated the rate so that it will be taken by
+ * the seek handler from the main context instead of the old one.
+ */
+ if (!self->seek_source) {
+ /* If no seek is pending then create new seek source */
+ if (!self->seek_pending) {
+ self->seek_source = g_idle_source_new ();
+ g_source_set_callback (self->seek_source,
+ (GSourceFunc) gst_player_seek_internal, self, NULL);
+ g_source_attach (self->seek_source, self->context);
+ }
+ }
+}
+
+static void
gst_player_set_property (GObject * object, guint prop_id,
const GValue * value, GParamSpec * pspec)
{
@@ -592,6 +653,8 @@
case PROP_URI:{
g_mutex_lock (&self->lock);
g_free (self->uri);
+ g_free (self->redirect_uri);
+ self->redirect_uri = NULL;
self->uri = g_value_dup_string (value);
GST_DEBUG_OBJECT (self, "Set uri=%s", self->uri);
@@ -621,23 +684,13 @@
g_mutex_lock (&self->lock);
self->rate = g_value_get_double (value);
GST_DEBUG_OBJECT (self, "Set rate=%lf", g_value_get_double (value));
- g_mutex_unlock (&self->lock);
-
gst_player_set_rate_internal (self);
+ g_mutex_unlock (&self->lock);
break;
case PROP_MUTE:
GST_DEBUG_OBJECT (self, "Set mute=%d", g_value_get_boolean (value));
g_object_set_property (G_OBJECT (self->playbin), "mute", value);
break;
- case PROP_POSITION_UPDATE_INTERVAL:
- g_mutex_lock (&self->lock);
- self->position_update_interval_ms = g_value_get_uint (value);
- GST_DEBUG_OBJECT (self, "Set position update interval=%u ms",
- g_value_get_uint (value));
- g_mutex_unlock (&self->lock);
-
- gst_player_set_position_update_interval_internal (self);
- break;
case PROP_VIDEO_MULTIVIEW_MODE:
GST_DEBUG_OBJECT (self, "Set multiview mode=%u",
g_value_get_enum (value));
@@ -730,7 +783,7 @@
break;
case PROP_RATE:
g_mutex_lock (&self->lock);
- g_value_set_double (value, gst_player_get_rate (self));
+ g_value_set_double (value, self->rate);
g_mutex_unlock (&self->lock);
break;
case PROP_MUTE:
@@ -740,11 +793,6 @@
case PROP_PIPELINE:
g_value_set_object (value, self->playbin);
break;
- case PROP_POSITION_UPDATE_INTERVAL:
- g_mutex_lock (&self->lock);
- g_value_set_uint (value, gst_player_get_position_update_interval (self));
- g_mutex_unlock (&self->lock);
- break;
case PROP_VIDEO_MULTIVIEW_MODE:{
g_object_get_property (G_OBJECT (self->playbin), "video-multiview-mode",
value);
@@ -889,13 +937,17 @@
static void
add_tick_source (GstPlayer * self)
{
+ guint position_update_interval_ms;
+
if (self->tick_source)
return;
- if (!self->position_update_interval_ms)
+ position_update_interval_ms =
+ gst_player_config_get_position_update_interval (self->config);
+ if (!position_update_interval_ms)
return;
- self->tick_source = g_timeout_source_new (self->position_update_interval_ms);
+ self->tick_source = g_timeout_source_new (position_update_interval_ms);
g_source_set_callback (self->tick_source, (GSourceFunc) tick_cb, self, NULL);
g_source_attach (self->tick_source, self->context);
}
@@ -1751,14 +1803,14 @@
/* Remember target state and restore after setting the URI */
target_state = self->target_state;
+ gst_player_stop_internal (self, TRUE);
+
g_mutex_lock (&self->lock);
- g_free (self->uri);
-
- self->uri = g_strdup (new_location);
+ g_free (self->redirect_uri);
+ self->redirect_uri = g_strdup (new_location);
+ g_object_set (self->playbin, "uri", self->redirect_uri, NULL);
g_mutex_unlock (&self->lock);
- gst_player_set_uri_internal (self);
-
if (target_state == GST_STATE_PAUSED)
gst_player_pause_internal (self);
else if (target_state == GST_STATE_PLAYING)
@@ -2488,6 +2540,26 @@
}
}
+static void
+source_setup_cb (GstElement * playbin, GstElement * source, GstPlayer * self)
+{
+ gchar *user_agent;
+
+ user_agent = gst_player_config_get_user_agent (self->config);
+ if (user_agent) {
+ GParamSpec *prop;
+
+ prop = g_object_class_find_property (G_OBJECT_GET_CLASS (source),
+ "user-agent");
+ if (prop && prop->value_type == G_TYPE_STRING) {
+ GST_INFO_OBJECT (self, "Setting source user-agent: %s", user_agent);
+ g_object_set (source, "user-agent", user_agent, NULL);
+ }
+
+ g_free (user_agent);
+ }
+}
+
static gpointer
gst_player_main (gpointer data)
{
@@ -2577,6 +2649,8 @@
G_CALLBACK (volume_notify_cb), self);
g_signal_connect (self->playbin, "notify::mute",
G_CALLBACK (mute_notify_cb), self);
+ g_signal_connect (self->playbin, "source-setup",
+ G_CALLBACK (source_setup_cb), self);
self->target_state = GST_STATE_NULL;
self->current_state = GST_STATE_NULL;
@@ -2584,6 +2658,7 @@
self->buffering = 100;
self->is_eos = FALSE;
self->is_live = FALSE;
+ self->rate = 1.0;
GST_TRACE_OBJECT (self, "Starting main loop");
g_main_loop_run (self->loop);
@@ -2721,7 +2796,7 @@
GST_SEEK_FLAG_FLUSH, 0);
if (!ret) {
GST_ERROR_OBJECT (self, "Seek to beginning failed");
- gst_player_stop_internal (self);
+ gst_player_stop_internal (self, TRUE);
gst_player_play_internal (self);
}
}
@@ -2792,7 +2867,7 @@
GST_SEEK_FLAG_FLUSH, 0);
if (!ret) {
GST_ERROR_OBJECT (self, "Seek to beginning failed");
- gst_player_stop_internal (self);
+ gst_player_stop_internal (self, TRUE);
gst_player_pause_internal (self);
}
}
@@ -2819,12 +2894,10 @@
gst_player_pause_internal, self, NULL);
}
-static gboolean
-gst_player_stop_internal (gpointer user_data)
+static void
+gst_player_stop_internal (GstPlayer * self, gboolean transient)
{
- GstPlayer *self = GST_PLAYER (user_data);
-
- GST_DEBUG_OBJECT (self, "Stop");
+ GST_DEBUG_OBJECT (self, "Stop (transient %d)", transient);
tick_cb (self);
remove_tick_source (self);
@@ -2838,7 +2911,10 @@
gst_bus_set_flushing (self->bus, TRUE);
gst_element_set_state (self->playbin, GST_STATE_READY);
gst_bus_set_flushing (self->bus, FALSE);
- change_state (self, GST_PLAYER_STATE_STOPPED);
+ change_state (self, transient
+ && self->app_state !=
+ GST_PLAYER_STATE_STOPPED ? GST_PLAYER_STATE_BUFFERING :
+ GST_PLAYER_STATE_STOPPED);
self->buffering = 100;
g_mutex_lock (&self->lock);
if (self->media_info) {
@@ -2859,10 +2935,19 @@
self->last_seek_time = GST_CLOCK_TIME_NONE;
self->rate = 1.0;
g_mutex_unlock (&self->lock);
+}
+
+static gboolean
+gst_player_stop_internal_dispatch (gpointer user_data)
+{
+ GstPlayer *self = GST_PLAYER (user_data);
+
+ gst_player_stop_internal (self, FALSE);
return G_SOURCE_REMOVE;
}
+
/**
* gst_player_stop:
* @player: #GstPlayer instance
@@ -2880,7 +2965,7 @@
g_mutex_unlock (&self->lock);
g_main_context_invoke_full (self->context, G_PRIORITY_DEFAULT,
- gst_player_stop_internal, self, NULL);
+ gst_player_stop_internal_dispatch, self, NULL);
}
/* Must be called with lock from main context, releases lock! */
@@ -2965,34 +3050,6 @@
return G_SOURCE_REMOVE;
}
-static gboolean
-gst_player_set_rate_internal (gpointer user_data)
-{
- GstPlayer *self = user_data;
-
- g_mutex_lock (&self->lock);
-
- self->seek_position = gst_player_get_position (self);
-
- /* If there is no seek being dispatch to the main context currently do that,
- * otherwise we just updated the rate so that it will be taken by
- * the seek handler from the main context instead of the old one.
- */
- if (!self->seek_source) {
- /* If no seek is pending then create new seek source */
- if (!self->seek_pending) {
- self->seek_source = g_idle_source_new ();
- g_source_set_callback (self->seek_source,
- (GSourceFunc) gst_player_seek_internal, self, NULL);
- g_source_attach (self->seek_source, self->context);
- }
- }
-
- g_mutex_unlock (&self->lock);
-
- return G_SOURCE_REMOVE;
-}
-
/**
* gst_player_set_rate:
* @player: #GstPlayer instance
@@ -3006,11 +3063,7 @@
g_return_if_fail (GST_IS_PLAYER (self));
g_return_if_fail (rate != 0.0);
- g_mutex_lock (&self->lock);
- self->rate = rate;
- g_mutex_unlock (&self->lock);
-
- gst_player_set_rate_internal (self);
+ g_object_set (self, "rate", rate, NULL);
}
/**
@@ -3022,62 +3075,13 @@
gdouble
gst_player_get_rate (GstPlayer * self)
{
+ gdouble val;
+
g_return_val_if_fail (GST_IS_PLAYER (self), DEFAULT_RATE);
- return self->rate;
-}
+ g_object_get (self, "rate", &val, NULL);
-static gboolean
-gst_player_set_position_update_interval_internal (gpointer user_data)
-{
- GstPlayer *self = user_data;
-
- g_mutex_lock (&self->lock);
-
- if (self->tick_source) {
- remove_tick_source (self);
- add_tick_source (self);
- }
-
- g_mutex_unlock (&self->lock);
-
- return G_SOURCE_REMOVE;
-}
-
-/**
- * gst_player_set_position_update_interval:
- * @player: #GstPlayer instance
- * @interval: interval in ms
- *
- * Set interval in milliseconds between two position-updated signals.
- * Pass 0 to stop updating the position.
- */
-void
-gst_player_set_position_update_interval (GstPlayer * self, guint interval)
-{
- g_return_if_fail (GST_IS_PLAYER (self));
- g_return_if_fail (interval <= 10000);
-
- g_mutex_lock (&self->lock);
- self->position_update_interval_ms = interval;
- g_mutex_unlock (&self->lock);
-
- gst_player_set_position_update_interval_internal (self);
-}
-
-/**
- * gst_player_get_position_update_interval:
- * @player: #GstPlayer instance
- *
- * Returns: current position update interval in milliseconds
- */
-guint
-gst_player_get_position_update_interval (GstPlayer * self)
-{
- g_return_val_if_fail (GST_IS_PLAYER (self),
- DEFAULT_POSITION_UPDATE_INTERVAL_MS);
-
- return self->position_update_interval_ms;
+ return val;
}
/**
@@ -3174,6 +3178,46 @@
}
/**
+ * gst_player_set_subtitle_uri:
+ * @player: #GstPlayer instance
+ * @uri: subtitle URI
+ *
+ * Returns: %TRUE or %FALSE
+ *
+ * Sets the external subtitle URI.
+ */
+gboolean
+gst_player_set_subtitle_uri (GstPlayer * self, const gchar * suburi)
+{
+ g_return_val_if_fail (GST_IS_PLAYER (self), FALSE);
+
+ g_object_set (self, "suburi", suburi, NULL);
+
+ return TRUE;
+}
+
+/**
+ * gst_player_get_subtitle_uri:
+ * @player: #GstPlayer instance
+ *
+ * current subtitle URI
+ *
+ * Returns: (transfer full): URI of the current external subtitle.
+ * g_free() after usage.
+ */
+gchar *
+gst_player_get_subtitle_uri (GstPlayer * self)
+{
+ gchar *val = NULL;
+
+ g_return_val_if_fail (GST_IS_PLAYER (self), NULL);
+
+ g_object_get (self, "suburi", &val, NULL);
+
+ return val;
+}
+
+/**
* gst_player_get_position:
* @player: #GstPlayer instance
*
@@ -3553,46 +3597,6 @@
}
/**
- * gst_player_set_subtitle_uri:
- * @player: #GstPlayer instance
- * @uri: subtitle URI
- *
- * Returns: %TRUE or %FALSE
- *
- * Sets the external subtitle URI.
- */
-gboolean
-gst_player_set_subtitle_uri (GstPlayer * self, const gchar * suburi)
-{
- g_return_val_if_fail (GST_IS_PLAYER (self), FALSE);
-
- g_object_set (self, "suburi", suburi, NULL);
-
- return TRUE;
-}
-
-/**
- * gst_player_get_subtitle_uri:
- * @player: #GstPlayer instance
- *
- * current subtitle URI
- *
- * Returns: (transfer full): URI of the current external subtitle.
- * g_free() after usage.
- */
-gchar *
-gst_player_get_subtitle_uri (GstPlayer * self)
-{
- gchar *val = NULL;
-
- g_return_val_if_fail (GST_IS_PLAYER (self), NULL);
-
- g_object_get (self, "suburi", &val, NULL);
-
- return val;
-}
-
-/**
* gst_player_set_visualization:
* @player: #GstPlayer instance
* @name: visualization element obtained from
@@ -3921,8 +3925,6 @@
*
* Sets audio-video-offset property by value of @offset
*
- * Returns: void
- *
* Since 1.10
*/
void
@@ -4061,3 +4063,156 @@
g_assert_not_reached ();
return NULL;
}
+
+/**
+ * gst_player_set_config:
+ * @player: #GstPlayer instance
+ * @config: (transfer full): a #GstStructure
+ *
+ * Set the configuration of the player. If the player is already configured, and
+ * the configuration haven't change, this function will return %TRUE. If the
+ * player is not in the GST_PLAYER_STATE_STOPPED, this method will return %FALSE
+ * and active configuration will remain.
+ *
+ * @config is a #GstStructure that contains the configuration parameters for
+ * the player.
+ *
+ * This function takes ownership of @config.
+ *
+ * Returns: %TRUE when the configuration could be set.
+ * Since 1.10
+ */
+gboolean
+gst_player_set_config (GstPlayer * self, GstStructure * config)
+{
+ g_return_val_if_fail (GST_IS_PLAYER (self), FALSE);
+ g_return_val_if_fail (config != NULL, FALSE);
+
+ g_mutex_lock (&self->lock);
+
+ if (self->app_state != GST_PLAYER_STATE_STOPPED) {
+ GST_INFO_OBJECT (self, "can't change config while player is %s",
+ gst_player_state_get_name (self->app_state));
+ g_mutex_unlock (&self->lock);
+ return FALSE;
+ }
+
+ if (self->config)
+ gst_structure_free (self->config);
+ self->config = config;
+ g_mutex_unlock (&self->lock);
+
+ return TRUE;
+}
+
+/**
+ * gst_player_get_config:
+ * @player: #GstPlayer instance
+ *
+ * Get a copy of the current configuration of the player. This configuration
+ * can either be modified and used for the gst_player_set_config() call
+ * or it must be freed after usage.
+ *
+ * Returns: (transfer full): a copy of the current configuration of @player. Use
+ * gst_structure_free() after usage or gst_player_set_config().
+ *
+ * Since 1.10
+ */
+GstStructure *
+gst_player_get_config (GstPlayer * self)
+{
+ GstStructure *ret;
+
+ g_return_val_if_fail (GST_IS_PLAYER (self), NULL);
+
+ g_mutex_lock (&self->lock);
+ ret = gst_structure_copy (self->config);
+ g_mutex_unlock (&self->lock);
+
+ return ret;
+}
+
+/**
+ * gst_player_config_set_user_agent:
+ * @config: a #GstPlayer configuration
+ * @agent: the string to use as user agent
+ *
+ * Set the user agent to pass to the server if @player needs to connect
+ * to a server during playback. This is typically used when playing HTTP
+ * or RTSP streams.
+ *
+ * Since 1.10
+ */
+void
+gst_player_config_set_user_agent (GstStructure * config, const gchar * agent)
+{
+ g_return_if_fail (config != NULL);
+ g_return_if_fail (agent != NULL);
+
+ gst_structure_id_set (config,
+ CONFIG_QUARK (USER_AGENT), G_TYPE_STRING, agent, NULL);
+}
+
+/**
+ * gst_player_config_get_user_agent:
+ * @config: a #GstPlayer configuration
+ *
+ * Return the user agent which has been configured using
+ * gst_player_config_set_user_agent() if any.
+ *
+ * Returns: (transfer full): the configured agent, or %NULL
+ * Since 1.10
+ */
+gchar *
+gst_player_config_get_user_agent (const GstStructure * config)
+{
+ gchar *agent = NULL;
+
+ g_return_val_if_fail (config != NULL, NULL);
+
+ gst_structure_id_get (config,
+ CONFIG_QUARK (USER_AGENT), G_TYPE_STRING, &agent, NULL);
+
+ return agent;
+}
+
+/**
+ * gst_player_config_set_position_update_interval:
+ * @config: a #GstPlayer configuration
+ * @interval: interval in ms
+ *
+ * set interval in milliseconds between two position-updated signals.
+ * pass 0 to stop updating the position.
+ * Since 1.10
+ */
+void
+gst_player_config_set_position_update_interval (GstStructure * config,
+ guint interval)
+{
+ g_return_if_fail (config != NULL);
+ g_return_if_fail (interval <= 10000);
+
+ gst_structure_id_set (config,
+ CONFIG_QUARK (POSITION_INTERVAL_UPDATE), G_TYPE_UINT, interval, NULL);
+}
+
+/**
+ * gst_player_config_get_position_update_interval:
+ * @config: a #GstPlayer configuration
+ *
+ * Returns: current position update interval in milliseconds
+ *
+ * Since 1.10
+ */
+guint
+gst_player_config_get_position_update_interval (const GstStructure * config)
+{
+ guint interval = DEFAULT_POSITION_UPDATE_INTERVAL_MS;
+
+ g_return_val_if_fail (config != NULL, DEFAULT_POSITION_UPDATE_INTERVAL_MS);
+
+ gst_structure_id_get (config,
+ CONFIG_QUARK (POSITION_INTERVAL_UPDATE), G_TYPE_UINT, &interval, NULL);
+
+ return interval;
+}
diff --git a/gst-libs/gst/player/gstplayer.h b/gst-libs/gst/player/gstplayer.h
index 0ab4233..e51d8c5 100644
--- a/gst-libs/gst/player/gstplayer.h
+++ b/gst-libs/gst/player/gstplayer.h
@@ -118,6 +118,10 @@
void gst_player_set_uri (GstPlayer * player,
const gchar * uri);
+gchar * gst_player_get_subtitle_uri (GstPlayer * player);
+gboolean gst_player_set_subtitle_uri (GstPlayer * player,
+ const gchar *uri);
+
GstClockTime gst_player_get_position (GstPlayer * player);
GstClockTime gst_player_get_duration (GstPlayer * player);
@@ -160,10 +164,6 @@
GstPlayerSubtitleInfo * gst_player_get_current_subtitle_track
(GstPlayer * player);
-gboolean gst_player_set_subtitle_uri (GstPlayer * player,
- const gchar *uri);
-gchar * gst_player_get_subtitle_uri (GstPlayer * player);
-
gboolean gst_player_set_visualization (GstPlayer * player,
const gchar *name);
@@ -192,6 +192,20 @@
void gst_player_set_audio_video_offset (GstPlayer * player,
gint64 offset);
+gboolean gst_player_set_config (GstPlayer * player,
+ GstStructure * config);
+GstStructure * gst_player_get_config (GstPlayer * player);
+
+/* helpers for configuring the config structure */
+
+void gst_player_config_set_user_agent (GstStructure * config,
+ const gchar * agent);
+gchar * gst_player_config_get_user_agent (const GstStructure * config);
+
+void gst_player_config_set_position_update_interval (GstStructure * config,
+ guint interval);
+guint gst_player_config_get_position_update_interval (const GstStructure * config);
+
G_END_DECLS
#endif /* __GST_PLAYER_H__ */
diff --git a/gst-libs/gst/uridownloader/Makefile.in b/gst-libs/gst/uridownloader/Makefile.in
index 320d227..cd272fc 100644
--- a/gst-libs/gst/uridownloader/Makefile.in
+++ b/gst-libs/gst/uridownloader/Makefile.in
@@ -313,6 +313,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -362,6 +364,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/gst-libs/gst/video/Makefile.in b/gst-libs/gst/video/Makefile.in
index 46b029b..8fe794c 100644
--- a/gst-libs/gst/video/Makefile.in
+++ b/gst-libs/gst/video/Makefile.in
@@ -317,6 +317,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -366,6 +368,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/gst-libs/gst/video/gstvideoaggregator.c b/gst-libs/gst/video/gstvideoaggregator.c
index 9046252..cd42d7e 100644
--- a/gst-libs/gst/video/gstvideoaggregator.c
+++ b/gst-libs/gst/video/gstvideoaggregator.c
@@ -133,7 +133,7 @@
gst_object_unref (vagg);
}
-static gboolean
+static GstFlowReturn
_flush_pad (GstAggregatorPad * aggpad, GstAggregator * aggregator)
{
GstVideoAggregator *vagg = GST_VIDEO_AGGREGATOR (aggregator);
@@ -144,7 +144,7 @@
pad->priv->start_time = -1;
pad->priv->end_time = -1;
- return TRUE;
+ return GST_FLOW_OK;
}
static gboolean
@@ -737,7 +737,8 @@
GST_DEBUG_OBJECT (vagg, "updating caps from %" GST_PTR_FORMAT,
downstream_caps);
GST_DEBUG_OBJECT (vagg, " with filter %" GST_PTR_FORMAT, peercaps);
- if (!(caps = vagg_klass->update_caps (vagg, downstream_caps, peercaps))) {
+ if (!(caps = vagg_klass->update_caps (vagg, downstream_caps, peercaps)) ||
+ gst_caps_is_empty (caps)) {
GST_WARNING_OBJECT (vagg, "Subclass failed to update provided caps");
gst_caps_unref (downstream_caps);
if (peercaps)
diff --git a/gst-libs/gst/wayland/Makefile.in b/gst-libs/gst/wayland/Makefile.in
index a657f4c..ce15520 100644
--- a/gst-libs/gst/wayland/Makefile.in
+++ b/gst-libs/gst/wayland/Makefile.in
@@ -327,6 +327,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -376,6 +378,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/gst-plugins-bad.doap b/gst-plugins-bad.doap
index 97eeb8a..832fc1d 100644
--- a/gst-plugins-bad.doap
+++ b/gst-plugins-bad.doap
@@ -35,6 +35,16 @@
<release>
<Version>
+ <revision>1.9.2</revision>
+ <branch>master</branch>
+ <name></name>
+ <created>2016-09-01</created>
+ <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-bad/gst-plugins-bad-1.9.2.tar.xz" />
+ </Version>
+ </release>
+
+ <release>
+ <Version>
<revision>1.9.1</revision>
<branch>master</branch>
<name></name>
diff --git a/gst-plugins-bad.spec b/gst-plugins-bad.spec
index d5b7698..214aa7d 100644
--- a/gst-plugins-bad.spec
+++ b/gst-plugins-bad.spec
@@ -6,7 +6,7 @@
Summary: GStreamer streaming media framework "bad" plug-ins
Name: %{gstreamer}-plugins-bad
-Version: 1.9.1
+Version: 1.9.2
Release: 1.gst
# The freeze and nfs plugins are LGPLv2 (only)
License: LGPLv2+ and LGPLv2
diff --git a/gst/Makefile.in b/gst/Makefile.in
index c86b66b..4e514fb 100644
--- a/gst/Makefile.in
+++ b/gst/Makefile.in
@@ -304,6 +304,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -353,6 +355,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/gst/accurip/Makefile.in b/gst/accurip/Makefile.in
index 95f90ce..dc25a0e 100644
--- a/gst/accurip/Makefile.in
+++ b/gst/accurip/Makefile.in
@@ -325,6 +325,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -374,6 +376,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/gst/adpcmdec/Makefile.in b/gst/adpcmdec/Makefile.in
index f0eebbb..dbdb94c 100644
--- a/gst/adpcmdec/Makefile.in
+++ b/gst/adpcmdec/Makefile.in
@@ -322,6 +322,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -371,6 +373,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/gst/adpcmenc/Makefile.in b/gst/adpcmenc/Makefile.in
index 2ad407c..010d8f3 100644
--- a/gst/adpcmenc/Makefile.in
+++ b/gst/adpcmenc/Makefile.in
@@ -322,6 +322,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -371,6 +373,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/gst/aiff/Makefile.am b/gst/aiff/Makefile.am
index ebe4230..ee13fcf 100644
--- a/gst/aiff/Makefile.am
+++ b/gst/aiff/Makefile.am
@@ -9,7 +9,7 @@
$(GST_BASE_CFLAGS) \
$(GST_CFLAGS)
libgstaiff_la_LIBADD = \
- $(GST_PLUGINS_BASE_LIBS) -lgsttag-$(GST_API_VERSION) -lgstaudio-$(GST_API_VERSION)\
+ $(GST_PLUGINS_BASE_LIBS) -lgsttag-$(GST_API_VERSION) -lgstaudio-$(GST_API_VERSION) -lgstpbutils-$(GST_API_VERSION) \
$(GST_BASE_LIBS) \
$(LIBM)
libgstaiff_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
diff --git a/gst/aiff/Makefile.in b/gst/aiff/Makefile.in
index d59580c..d013cd8 100644
--- a/gst/aiff/Makefile.in
+++ b/gst/aiff/Makefile.in
@@ -326,6 +326,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -375,6 +377,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
@@ -792,7 +796,7 @@
$(GST_CFLAGS)
libgstaiff_la_LIBADD = \
- $(GST_PLUGINS_BASE_LIBS) -lgsttag-$(GST_API_VERSION) -lgstaudio-$(GST_API_VERSION)\
+ $(GST_PLUGINS_BASE_LIBS) -lgsttag-$(GST_API_VERSION) -lgstaudio-$(GST_API_VERSION) -lgstpbutils-$(GST_API_VERSION) \
$(GST_BASE_LIBS) \
$(LIBM)
diff --git a/gst/aiff/aiffparse.c b/gst/aiff/aiffparse.c
index 27c8313..faa2647 100644
--- a/gst/aiff/aiffparse.c
+++ b/gst/aiff/aiffparse.c
@@ -59,6 +59,7 @@
#include "aiffparse.h"
#include <gst/audio/audio.h>
#include <gst/tag/tag.h>
+#include <gst/pbutils/descriptions.h>
#include <gst/gst-i18n-plugin.h>
GST_DEBUG_CATEGORY (aiffparse_debug);
@@ -995,6 +996,32 @@
aiff->bytes_per_sample = aiff->channels * aiff->width / 8;
aiff->bps = aiff->bytes_per_sample * aiff->rate;
+ if (!aiff->tags)
+ aiff->tags = gst_tag_list_new_empty ();
+
+ {
+ GstCaps *templ_caps = gst_pad_get_pad_template_caps (aiff->sinkpad);
+ gst_pb_utils_add_codec_description_to_tag_list (aiff->tags,
+ GST_TAG_CONTAINER_FORMAT, templ_caps);
+ gst_caps_unref (templ_caps);
+ }
+
+ if (aiff->bps) {
+ guint bitrate = aiff->bps * 8;
+
+ GST_DEBUG_OBJECT (aiff, "adding bitrate of %u bps to tag list",
+ bitrate);
+
+ /* At the moment, aiffparse only supports uncompressed PCM data.
+ * Therefore, nominal, actual, minimum, maximum bitrate are the same.
+ * XXX: If AIFF-C support is extended to include compression,
+ * make sure that aiff->bps is set properly. */
+ gst_tag_list_add (aiff->tags, GST_TAG_MERGE_REPLACE,
+ GST_TAG_BITRATE, bitrate, GST_TAG_NOMINAL_BITRATE, bitrate,
+ GST_TAG_MINIMUM_BITRATE, bitrate, GST_TAG_MAXIMUM_BITRATE,
+ bitrate, NULL);
+ }
+
if (aiff->bytes_per_sample <= 0)
goto no_bytes_per_sample;
@@ -1500,9 +1527,7 @@
} else if (ret < GST_FLOW_EOS || ret == GST_FLOW_NOT_LINKED) {
/* for fatal errors we post an error message, post the error
* first so the app knows about the error first. */
- GST_ELEMENT_ERROR (aiff, STREAM, FAILED,
- (_("Internal data flow error.")),
- ("streaming task paused, reason %s (%d)", reason, ret));
+ GST_ELEMENT_FLOW_ERROR (aiff, ret);
gst_pad_push_event (aiff->srcpad, gst_event_new_eos ());
}
return;
@@ -1906,6 +1931,15 @@
aiff->start_segment = gst_event_new_segment (&segment);
+ /* If the seek is within the same SSND chunk and there is no new
+ * end_offset defined keep the previous end_offset. This will avoid noise
+ * at the end of playback if e.g. a metadata chunk is located at the end
+ * of the file. */
+ if (aiff->end_offset > 0 && offset < aiff->end_offset &&
+ offset >= aiff->datastart && end_offset == -1) {
+ end_offset = aiff->end_offset;
+ }
+
/* stream leftover data in current segment */
if (aiff->state == AIFF_PARSE_DATA)
gst_aiff_parse_flush_data (aiff);
diff --git a/gst/asfmux/Makefile.in b/gst/asfmux/Makefile.in
index b6b100b..adae8ba 100644
--- a/gst/asfmux/Makefile.in
+++ b/gst/asfmux/Makefile.in
@@ -330,6 +330,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -379,6 +381,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/gst/audiofxbad/Makefile.in b/gst/audiofxbad/Makefile.in
index 5972f58..05d0feb 100644
--- a/gst/audiofxbad/Makefile.in
+++ b/gst/audiofxbad/Makefile.in
@@ -324,6 +324,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -373,6 +375,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/gst/audiomixer/Makefile.in b/gst/audiomixer/Makefile.in
index 814cebc..cbe3065 100644
--- a/gst/audiomixer/Makefile.in
+++ b/gst/audiomixer/Makefile.in
@@ -355,6 +355,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -404,6 +406,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/gst/audiovisualizers/Makefile.in b/gst/audiovisualizers/Makefile.in
index 75c29ee..925a461 100644
--- a/gst/audiovisualizers/Makefile.in
+++ b/gst/audiovisualizers/Makefile.in
@@ -333,6 +333,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -382,6 +384,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/gst/autoconvert/Makefile.in b/gst/autoconvert/Makefile.in
index d674bc3..5a56ce6 100644
--- a/gst/autoconvert/Makefile.in
+++ b/gst/autoconvert/Makefile.in
@@ -327,6 +327,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -376,6 +378,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/gst/bayer/Makefile.in b/gst/bayer/Makefile.in
index 547253a..3d1213f 100644
--- a/gst/bayer/Makefile.in
+++ b/gst/bayer/Makefile.in
@@ -351,6 +351,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -400,6 +402,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/gst/bayer/gstbayer2rgb.c b/gst/bayer/gstbayer2rgb.c
index e159ca2..0b6f232 100644
--- a/gst/bayer/gstbayer2rgb.c
+++ b/gst/bayer/gstbayer2rgb.c
@@ -80,7 +80,11 @@
#include <gst/video/video.h>
#include <string.h>
#include <stdlib.h>
-#include <_stdint.h>
+
+#ifdef HAVE_STDINT_H
+#include <stdint.h>
+#endif
+
#include "gstbayerorc.h"
#define GST_CAT_DEFAULT gst_bayer2rgb_debug
diff --git a/gst/camerabin2/Makefile.in b/gst/camerabin2/Makefile.in
index 900fdb2..554a2f5 100644
--- a/gst/camerabin2/Makefile.in
+++ b/gst/camerabin2/Makefile.in
@@ -333,6 +333,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -382,6 +384,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/gst/camerabin2/gstcamerabin2.c b/gst/camerabin2/gstcamerabin2.c
index d0876d5..24bb4fb 100644
--- a/gst/camerabin2/gstcamerabin2.c
+++ b/gst/camerabin2/gstcamerabin2.c
@@ -17,17 +17,16 @@
* Boston, MA 02110-1301, USA.
*/
/**
- * SECTION:element-camerabin2
+ * SECTION:element-camerabin
*
- * CameraBin2 is a high-level camera object that encapsulates gstreamer
+ * CameraBin is a high-level camera object that encapsulates gstreamer
* elements, providing an API for controlling a digital camera.
*
* <note>
- * Note that camerabin2 is still UNSTABLE and under
- * development.
+ * Note that camerabin is still UNSTABLE and under development.
* </note>
*
- * CameraBin2 has the following main features:
+ * CameraBin has the following main features:
* <itemizedlist>
* <listitem>
* Record videos
@@ -46,12 +45,12 @@
* <refsect2>
* <title>Usage</title>
* <para>
- * Camerabin2 can be created using gst_element_factory_make() just like
+ * Camerabin can be created using gst_element_factory_make() just like
* any other element. Video or image capture mode can be selected using
* the #GstCameraBin:mode property and the file to save the capture is
* selected using #GstCameraBin:location property.
*
- * After creating camerabin2, applications might want to do some
+ * After creating camerabin, applications might want to do some
* customization (there's a section about this below), then select
* the desired mode and start capturing.
*
@@ -76,11 +75,11 @@
* <refsect2>
* <title>Customization</title>
* <para>
- * Camerabin2 provides various customization properties, allowing the user
+ * Camerabin provides various customization properties, allowing the user
* to set custom filters, selecting the viewfinder sink and formats to
* use to encode the captured images/videos.
*
- * #GstEncodingProfile<!-- -->s are used to tell camerabin2 which formats it
+ * #GstEncodingProfile<!-- -->s are used to tell camerabin which formats it
* should encode the captures to, those should be set to
* #GstCameraBin:image-profile and #GstCameraBin:video-profile. Default is
* jpeg for images, and ogg (theora and vorbis) for video. If a profile without
@@ -89,7 +88,7 @@
* #GstCameraBin:preview-caps can be used to select which format preview
* images should be posted on the #GstBus. It has to be a raw video format.
*
- * Camerabin2 has a #GstCameraBin:camera-source property so applications can
+ * Camerabin has a #GstCameraBin:camera-source property so applications can
* set their source that will provide buffers for the viewfinder and for
* captures. This camera source is a special type of source that has 3 pads.
* To use a 'regular' source with a single pad you should use
@@ -103,7 +102,7 @@
* #GstCameraBin:viewfinder-caps, these #GstCaps should be a subset of
* #GstCameraBin:viewfinder-supported-caps.
*
- * To select the desired resolution for captures, camerabin2 provides
+ * To select the desired resolution for captures, camerabin provides
* #GstCameraBin:image-capture-caps and #GstCameraBin:video-capture-caps,
* these caps must be a subset of what the source can produce. The allowed
* caps can be probed using #GstCameraBin:image-capture-supported-caps and
@@ -121,8 +120,8 @@
* <refsect2>
* <title>Example launch line</title>
* <para>
- * Unfortunately, camerabin can't be really used from gst-launch-1.0, as you need
- * to send signals to control it. The following pipeline might be able
+ * Unfortunately, camerabin can't be really used from gst-launch-1.0, as you
+ * need to send signals to control it. The following pipeline might be able
* to show the viewfinder using all the default elements.
* |[
* gst-launch-1.0 -v -m camerabin
diff --git a/gst/cdxaparse/Makefile.in b/gst/cdxaparse/Makefile.in
index 34de1a4..ea2cc0c 100644
--- a/gst/cdxaparse/Makefile.in
+++ b/gst/cdxaparse/Makefile.in
@@ -326,6 +326,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -375,6 +377,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/gst/coloreffects/Makefile.in b/gst/coloreffects/Makefile.in
index c637219..5175637 100644
--- a/gst/coloreffects/Makefile.in
+++ b/gst/coloreffects/Makefile.in
@@ -327,6 +327,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -376,6 +378,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/gst/compositor/Makefile.in b/gst/compositor/Makefile.in
index f87fa3d..b3e7666 100644
--- a/gst/compositor/Makefile.in
+++ b/gst/compositor/Makefile.in
@@ -356,6 +356,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -405,6 +407,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/gst/dataurisrc/Makefile.in b/gst/dataurisrc/Makefile.in
index 408eca8..a6635b6 100644
--- a/gst/dataurisrc/Makefile.in
+++ b/gst/dataurisrc/Makefile.in
@@ -322,6 +322,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -371,6 +373,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/gst/dccp/Makefile.in b/gst/dccp/Makefile.in
index f21618b..c3461f1 100644
--- a/gst/dccp/Makefile.in
+++ b/gst/dccp/Makefile.in
@@ -332,6 +332,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -381,6 +383,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/gst/dccp/gstdccp_common.h b/gst/dccp/gstdccp_common.h
index 3851e51..c88f8ef 100644
--- a/gst/dccp/gstdccp_common.h
+++ b/gst/dccp/gstdccp_common.h
@@ -38,9 +38,19 @@
#define socklen_t int
#endif
#endif
+
+#ifdef HAVE_SYS_TYPES_H
#include <sys/types.h>
-#include <_stdint.h>
+#endif
+
+#ifdef HAVE_STDINT_H
+#include <stdint.h>
+#endif
+
+#ifdef HAVE_UNISTD_H
#include <unistd.h>
+#endif
+
#include <string.h>
#endif /* __GST_DCCP_NET_H__ */
diff --git a/gst/debugutils/Makefile.in b/gst/debugutils/Makefile.in
index 393485f..ca14b4e 100644
--- a/gst/debugutils/Makefile.in
+++ b/gst/debugutils/Makefile.in
@@ -333,6 +333,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -382,6 +384,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/gst/dvbsuboverlay/Makefile.in b/gst/dvbsuboverlay/Makefile.in
index 4cacb4f..71d7354 100644
--- a/gst/dvbsuboverlay/Makefile.in
+++ b/gst/dvbsuboverlay/Makefile.in
@@ -326,6 +326,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -375,6 +377,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/gst/dvdspu/Makefile.in b/gst/dvdspu/Makefile.in
index 458b085..e34728c 100644
--- a/gst/dvdspu/Makefile.in
+++ b/gst/dvdspu/Makefile.in
@@ -329,6 +329,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -378,6 +380,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/gst/dvdspu/gstdvdspu.c b/gst/dvdspu/gstdvdspu.c
index 52d1038..fb21748 100644
--- a/gst/dvdspu/gstdvdspu.c
+++ b/gst/dvdspu/gstdvdspu.c
@@ -664,7 +664,9 @@
{
GstVideoFrame frame;
- gst_video_frame_map (&frame, &dvdspu->spu_state.info, buf, GST_MAP_READWRITE);
+ if (!gst_video_frame_map (&frame, &dvdspu->spu_state.info, buf,
+ GST_MAP_READWRITE))
+ return;
switch (dvdspu->spu_input_type) {
case SPU_INPUT_TYPE_VOBSUB:
diff --git a/gst/faceoverlay/Makefile.in b/gst/faceoverlay/Makefile.in
index 6492262..ddf88dd 100644
--- a/gst/faceoverlay/Makefile.in
+++ b/gst/faceoverlay/Makefile.in
@@ -326,6 +326,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -375,6 +377,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/gst/festival/Makefile.in b/gst/festival/Makefile.in
index 91853f4..49c95ed 100644
--- a/gst/festival/Makefile.in
+++ b/gst/festival/Makefile.in
@@ -325,6 +325,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -374,6 +376,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/gst/fieldanalysis/Makefile.in b/gst/fieldanalysis/Makefile.in
index a480ba9..8f76739 100644
--- a/gst/fieldanalysis/Makefile.in
+++ b/gst/fieldanalysis/Makefile.in
@@ -354,6 +354,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -403,6 +405,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/gst/freeverb/Makefile.in b/gst/freeverb/Makefile.in
index 0ced9c9..2b54f45 100644
--- a/gst/freeverb/Makefile.in
+++ b/gst/freeverb/Makefile.in
@@ -328,6 +328,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -377,6 +379,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/gst/frei0r/Makefile.in b/gst/frei0r/Makefile.in
index ce3fd52..606a7c7 100644
--- a/gst/frei0r/Makefile.in
+++ b/gst/frei0r/Makefile.in
@@ -329,6 +329,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -378,6 +380,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/gst/gaudieffects/Makefile.in b/gst/gaudieffects/Makefile.in
index 63f754d..f9c07c9 100644
--- a/gst/gaudieffects/Makefile.in
+++ b/gst/gaudieffects/Makefile.in
@@ -360,6 +360,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -409,6 +411,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/gst/gaudieffects/gstchromium.h b/gst/gaudieffects/gstchromium.h
index 4d54e2a..8c3b4a0 100644
--- a/gst/gaudieffects/gstchromium.h
+++ b/gst/gaudieffects/gstchromium.h
@@ -62,10 +62,10 @@
#define GST_IS_CHROMIUM_CLASS(klass) \
(G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_CHROMIUM))
-typedef struct GstChromium GstChromium;
-typedef struct GstChromiumClass GstChromiumClass;
+typedef struct _GstChromium GstChromium;
+typedef struct _GstChromiumClass GstChromiumClass;
-struct GstChromium
+struct _GstChromium
{
GstVideoFilter videofilter;
@@ -73,7 +73,7 @@
gint edge_a, edge_b;
};
-struct GstChromiumClass
+struct _GstChromiumClass
{
GstVideoFilterClass parent_class;
};
diff --git a/gst/gaudieffects/gstgaussblur.h b/gst/gaudieffects/gstgaussblur.h
index 84688b9..33cbb02 100644
--- a/gst/gaudieffects/gstgaussblur.h
+++ b/gst/gaudieffects/gstgaussblur.h
@@ -58,10 +58,10 @@
#define GST_GAUSSIANBLUR(obj) \
(G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_GAUSSIANBLUR, GstGaussianBlur))
-typedef struct GstGaussianBlur GstGaussianBlur;
-typedef struct GstGaussianBlurClass GstGaussianBlurClass;
+typedef struct _GstGaussianBlur GstGaussianBlur;
+typedef struct _GstGaussianBlurClass GstGaussianBlurClass;
-struct GstGaussianBlur
+struct _GstGaussianBlur
{
GstVideoFilter videofilter;
gint width, height, stride;
@@ -75,7 +75,7 @@
gint16 *smoothedim;
};
-struct GstGaussianBlurClass
+struct _GstGaussianBlurClass
{
GstVideoFilterClass parent_class;
};
diff --git a/gst/gdp/Makefile.in b/gst/gdp/Makefile.in
index aa131e5..a5d24b2 100644
--- a/gst/gdp/Makefile.in
+++ b/gst/gdp/Makefile.in
@@ -327,6 +327,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -376,6 +378,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/gst/geometrictransform/Makefile.in b/gst/geometrictransform/Makefile.in
index bb8458b..f5186b5 100644
--- a/gst/geometrictransform/Makefile.in
+++ b/gst/geometrictransform/Makefile.in
@@ -348,6 +348,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -397,6 +399,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/gst/hdvparse/Makefile.in b/gst/hdvparse/Makefile.in
index eb329f1..429a566 100644
--- a/gst/hdvparse/Makefile.in
+++ b/gst/hdvparse/Makefile.in
@@ -325,6 +325,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -374,6 +376,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/gst/id3tag/Makefile.in b/gst/id3tag/Makefile.in
index 163fb43..d26a95d 100644
--- a/gst/id3tag/Makefile.in
+++ b/gst/id3tag/Makefile.in
@@ -326,6 +326,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -375,6 +377,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/gst/inter/Makefile.in b/gst/inter/Makefile.in
index f8db455..65f9478 100644
--- a/gst/inter/Makefile.in
+++ b/gst/inter/Makefile.in
@@ -342,6 +342,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -391,6 +393,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/gst/interlace/Makefile.in b/gst/interlace/Makefile.in
index f53c3a6..e4b2770 100644
--- a/gst/interlace/Makefile.in
+++ b/gst/interlace/Makefile.in
@@ -322,6 +322,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -371,6 +373,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/gst/ivfparse/Makefile.in b/gst/ivfparse/Makefile.in
index 77c0f8d..c063c19 100644
--- a/gst/ivfparse/Makefile.in
+++ b/gst/ivfparse/Makefile.in
@@ -325,6 +325,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -374,6 +376,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/gst/ivtc/Makefile.in b/gst/ivtc/Makefile.in
index 722b535..6daaafa 100644
--- a/gst/ivtc/Makefile.in
+++ b/gst/ivtc/Makefile.in
@@ -323,6 +323,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -372,6 +374,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/gst/jp2kdecimator/Makefile.in b/gst/jp2kdecimator/Makefile.in
index d64158e..7c04639 100644
--- a/gst/jp2kdecimator/Makefile.in
+++ b/gst/jp2kdecimator/Makefile.in
@@ -327,6 +327,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -376,6 +378,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/gst/jpegformat/Makefile.in b/gst/jpegformat/Makefile.in
index cb7b85d..852b83e 100644
--- a/gst/jpegformat/Makefile.in
+++ b/gst/jpegformat/Makefile.in
@@ -327,6 +327,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -376,6 +378,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/gst/librfb/Makefile.in b/gst/librfb/Makefile.in
index ecbbf43..da90a30 100644
--- a/gst/librfb/Makefile.in
+++ b/gst/librfb/Makefile.in
@@ -329,6 +329,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -378,6 +380,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/gst/librfb/d3des.c b/gst/librfb/d3des.c
index c05fea3..377670e 100644
--- a/gst/librfb/d3des.c
+++ b/gst/librfb/d3des.c
@@ -26,8 +26,13 @@
* (GEnie : OUTER; CIS : [71755,204]) Graven Imagery, 1992.
*/
+#ifdef HAVE_CONFIG_H
#include "config.h"
-#include "_stdint.h"
+#endif
+
+#ifdef HAVE_STDINT_H
+#include <stdint.h>
+#endif
#include "d3des.h"
diff --git a/gst/midi/Makefile.in b/gst/midi/Makefile.in
index 1199978..c875eb6 100644
--- a/gst/midi/Makefile.in
+++ b/gst/midi/Makefile.in
@@ -326,6 +326,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -375,6 +377,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/gst/midi/midiparse.c b/gst/midi/midiparse.c
index d52539b..d58ea3f 100644
--- a/gst/midi/midiparse.c
+++ b/gst/midi/midiparse.c
@@ -1282,9 +1282,7 @@
event = gst_event_new_eos ();
/* for fatal errors we post an error message, post the error
* first so the app knows about the error first. */
- GST_ELEMENT_ERROR (midiparse, STREAM, FAILED,
- ("Internal data flow error."),
- ("streaming task paused, reason %s (%d)", reason, ret));
+ GST_ELEMENT_FLOW_ERROR (midiparse, ret);
gst_pad_push_event (midiparse->srcpad, event);
}
}
diff --git a/gst/mpegdemux/Makefile.in b/gst/mpegdemux/Makefile.in
index a7b6e29..99a9319 100644
--- a/gst/mpegdemux/Makefile.in
+++ b/gst/mpegdemux/Makefile.in
@@ -327,6 +327,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -376,6 +378,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/gst/mpegdemux/gstmpegdemux.c b/gst/mpegdemux/gstmpegdemux.c
index 68985b2..b608db8 100644
--- a/gst/mpegdemux/gstmpegdemux.c
+++ b/gst/mpegdemux/gstmpegdemux.c
@@ -3005,9 +3005,7 @@
}
}
} else if (ret == GST_FLOW_NOT_LINKED || ret < GST_FLOW_EOS) {
- GST_ELEMENT_ERROR (demux, STREAM, FAILED,
- ("Internal data stream error."),
- ("stream stopped, reason %s", reason));
+ GST_ELEMENT_FLOW_ERROR (demux, ret);
gst_ps_demux_send_event (demux, gst_event_new_eos ());
}
diff --git a/gst/mpegpsmux/Makefile.in b/gst/mpegpsmux/Makefile.in
index ae79453..329e2d8 100644
--- a/gst/mpegpsmux/Makefile.in
+++ b/gst/mpegpsmux/Makefile.in
@@ -328,6 +328,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -377,6 +379,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/gst/mpegtsdemux/Makefile.in b/gst/mpegtsdemux/Makefile.in
index 05b1780..d31ac11 100644
--- a/gst/mpegtsdemux/Makefile.in
+++ b/gst/mpegtsdemux/Makefile.in
@@ -333,6 +333,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -382,6 +384,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/gst/mpegtsdemux/gstmpegdefs.h b/gst/mpegtsdemux/gstmpegdefs.h
index e179f7d..5947d71 100644
--- a/gst/mpegtsdemux/gstmpegdefs.h
+++ b/gst/mpegtsdemux/gstmpegdefs.h
@@ -48,6 +48,7 @@
/* private stream types */
#define ST_PS_VIDEO_MPEG2_DCII 0x80
#define ST_PS_AUDIO_AC3 0x81
+#define ST_PS_AUDIO_LPCM2 0x83
#define ST_PS_AUDIO_DTS 0x8a
#define ST_PS_AUDIO_LPCM 0x8b
#define ST_PS_DVD_SUBPICTURE 0xff
diff --git a/gst/mpegtsdemux/mpegtsbase.c b/gst/mpegtsdemux/mpegtsbase.c
index 481695a..e736f9b 100644
--- a/gst/mpegtsdemux/mpegtsbase.c
+++ b/gst/mpegtsdemux/mpegtsbase.c
@@ -1326,7 +1326,7 @@
mpegts_packetizer_clear (base->packetizer);
GST_WARNING_OBJECT (base, "Couldn't find any PCR within the first %d bytes",
10 * 65536);
- return GST_FLOW_ERROR;
+ return GST_FLOW_OK;
}
@@ -1382,9 +1382,7 @@
(_("Internal data stream error.")),
("No program activated before EOS"));
} else if (ret == GST_FLOW_NOT_LINKED || ret < GST_FLOW_EOS) {
- GST_ELEMENT_ERROR (base, STREAM, FAILED,
- (_("Internal data stream error.")),
- ("stream stopped, reason %s", reason));
+ GST_ELEMENT_FLOW_ERROR (base, ret);
GST_MPEGTS_BASE_GET_CLASS (base)->push_event (base, gst_event_new_eos ());
}
gst_pad_pause_task (base->sinkpad);
diff --git a/gst/mpegtsdemux/mpegtspacketizer.c b/gst/mpegtsdemux/mpegtspacketizer.c
index a7e0798..16fb8ff 100644
--- a/gst/mpegtsdemux/mpegtspacketizer.c
+++ b/gst/mpegtsdemux/mpegtspacketizer.c
@@ -557,6 +557,7 @@
mpegts_packetizer_clear (MpegTSPacketizer2 * packetizer)
{
guint i;
+ MpegTSPCR *pcrtable;
packetizer->packet_size = 0;
@@ -579,6 +580,10 @@
packetizer->map_offset = 0;
packetizer->last_in_time = GST_CLOCK_TIME_NONE;
+ pcrtable = packetizer->observations[packetizer->pcrtablelut[0x1fff]];
+ if (pcrtable)
+ pcrtable->base_time = GST_CLOCK_TIME_NONE;
+
/* Close current PCR group */
PACKETIZER_GROUP_LOCK (packetizer);
@@ -595,6 +600,7 @@
mpegts_packetizer_flush (MpegTSPacketizer2 * packetizer, gboolean hard)
{
guint i;
+ MpegTSPCR *pcrtable;
GST_DEBUG ("Flushing");
if (packetizer->streams) {
@@ -614,6 +620,10 @@
packetizer->map_offset = 0;
packetizer->last_in_time = GST_CLOCK_TIME_NONE;
+ pcrtable = packetizer->observations[packetizer->pcrtablelut[0x1fff]];
+ if (pcrtable)
+ pcrtable->base_time = GST_CLOCK_TIME_NONE;
+
/* Close current PCR group */
PACKETIZER_GROUP_LOCK (packetizer);
for (i = 0; i < MAX_PCR_OBS_CHANNELS; i++) {
@@ -2189,6 +2199,12 @@
PACKETIZER_GROUP_LOCK (packetizer);
pcrtable = get_pcr_table (packetizer, pcr_pid);
+ if (!GST_CLOCK_TIME_IS_VALID (pcrtable->base_time) && pcr_pid == 0x1fff &&
+ GST_CLOCK_TIME_IS_VALID (packetizer->last_in_time)) {
+ pcrtable->base_time = packetizer->last_in_time;
+ pcrtable->base_pcrtime = pts;
+ }
+
/* Use clock skew if present */
if (packetizer->calculate_skew
&& GST_CLOCK_TIME_IS_VALID (pcrtable->base_time)) {
@@ -2206,7 +2222,8 @@
* That being said, this will only happen for the small interval of time
* where PTS/DTS are wrapping just before we see the first reset/wrap PCR
*/
- if (G_UNLIKELY (ABSDIFF (res, pcrtable->last_pcrtime) > 15 * GST_SECOND))
+ if (G_UNLIKELY (pcr_pid != 0x1fff &&
+ ABSDIFF (res, pcrtable->last_pcrtime) > 15 * GST_SECOND))
res = GST_CLOCK_TIME_NONE;
else {
GstClockTime tmp = pcrtable->base_time + pcrtable->skew;
diff --git a/gst/mpegtsdemux/tsdemux.c b/gst/mpegtsdemux/tsdemux.c
index 91d3776..7a396cd 100644
--- a/gst/mpegtsdemux/tsdemux.c
+++ b/gst/mpegtsdemux/tsdemux.c
@@ -305,7 +305,8 @@
GValue * value, GParamSpec * pspec);
static void gst_ts_demux_flush_streams (GstTSDemux * tsdemux, gboolean hard);
static GstFlowReturn
-gst_ts_demux_push_pending_data (GstTSDemux * demux, TSDemuxStream * stream);
+gst_ts_demux_push_pending_data (GstTSDemux * demux, TSDemuxStream * stream,
+ MpegTSBaseProgram * program);
static void gst_ts_demux_stream_flush (TSDemuxStream * stream,
GstTSDemux * demux, gboolean hard);
@@ -972,7 +973,7 @@
/* If we are pushing out EOS, flush out pending data first */
if (GST_EVENT_TYPE (event) == GST_EVENT_EOS &&
gst_pad_is_active (stream->pad))
- gst_ts_demux_push_pending_data (demux, stream);
+ gst_ts_demux_push_pending_data (demux, stream, NULL);
gst_event_ref (event);
gst_pad_push_event (stream->pad, event);
@@ -1505,6 +1506,10 @@
is_audio = TRUE;
caps = gst_caps_new_empty_simple ("audio/x-ac3");
break;
+ case ST_PS_AUDIO_LPCM2:
+ is_audio = TRUE;
+ caps = gst_caps_new_empty_simple ("audio/x-private2-lpcm");
+ break;
case ST_PS_AUDIO_DTS:
is_audio = TRUE;
caps = gst_caps_new_empty_simple ("audio/x-dts");
@@ -1647,6 +1652,8 @@
stream->nb_out_buffers = 0;
stream->gap_ref_buffers = 0;
stream->gap_ref_pts = GST_CLOCK_TIME_NONE;
+ /* Only wait for a valid timestamp if we have a PCR_PID */
+ stream->pending_ts = program->pcr_pid < 0x1fff;
stream->continuity_counter = CONTINUITY_UNSET;
}
}
@@ -1677,7 +1684,7 @@
if (gst_pad_is_active (stream->pad)) {
/* Flush out all data */
GST_DEBUG_OBJECT (stream->pad, "Flushing out pending data");
- gst_ts_demux_push_pending_data ((GstTSDemux *) base, stream);
+ gst_ts_demux_push_pending_data ((GstTSDemux *) base, stream, NULL);
GST_DEBUG_OBJECT (stream->pad, "Pushing out EOS");
gst_pad_push_event (stream->pad, gst_event_new_eos ());
@@ -1825,7 +1832,8 @@
for (tmp = demux->previous_program->stream_list; tmp; tmp = tmp->next) {
TSDemuxStream *stream = (TSDemuxStream *) tmp->data;
if (stream->pad)
- gst_ts_demux_push_pending_data (demux, stream);
+ gst_ts_demux_push_pending_data (demux, stream,
+ demux->previous_program);
}
}
@@ -2225,7 +2233,8 @@
}
static void
-calculate_and_push_newsegment (GstTSDemux * demux, TSDemuxStream * stream)
+calculate_and_push_newsegment (GstTSDemux * demux, TSDemuxStream * stream,
+ MpegTSBaseProgram * target_program)
{
MpegTSBase *base = (MpegTSBase *) demux;
GstClockTime lowest_pts = GST_CLOCK_TIME_NONE;
@@ -2234,12 +2243,15 @@
GST_DEBUG ("Creating new newsegment for stream %p", stream);
+ if (target_program == NULL)
+ target_program = demux->program;
+
/* Speedup : if we don't need to calculate anything, go straight to pushing */
if (demux->segment_event)
goto push_new_segment;
/* Calculate the 'new_start' value, used for newsegment */
- for (tmp = demux->program->stream_list; tmp; tmp = tmp->next) {
+ for (tmp = target_program->stream_list; tmp; tmp = tmp->next) {
TSDemuxStream *pstream = (TSDemuxStream *) tmp->data;
if (GST_CLOCK_TIME_IS_VALID (pstream->first_pts)) {
@@ -2288,7 +2300,7 @@
}
push_new_segment:
- for (tmp = demux->program->stream_list; tmp; tmp = tmp->next) {
+ for (tmp = target_program->stream_list; tmp; tmp = tmp->next) {
stream = (TSDemuxStream *) tmp->data;
if (stream->pad == NULL)
continue;
@@ -2363,7 +2375,7 @@
"Stream needs update. Pushing GAP event to TS %" GST_TIME_FORMAT,
GST_TIME_ARGS (time));
if (G_UNLIKELY (ps->need_newsegment))
- calculate_and_push_newsegment (demux, ps);
+ calculate_and_push_newsegment (demux, ps, NULL);
/* Now send gap event */
gst_pad_push_event (ps->pad, gst_event_new_gap (time, 0));
@@ -2471,13 +2483,15 @@
}
static GstFlowReturn
-gst_ts_demux_push_pending_data (GstTSDemux * demux, TSDemuxStream * stream)
+gst_ts_demux_push_pending_data (GstTSDemux * demux, TSDemuxStream * stream,
+ MpegTSBaseProgram * target_program)
{
GstFlowReturn res = GST_FLOW_OK;
MpegTSBaseStream *bs = (MpegTSBaseStream *) stream;
GstBuffer *buffer = NULL;
GstBufferList *buffer_list = NULL;
+
GST_DEBUG_OBJECT (stream->pad,
"stream:%p, pid:0x%04x stream_type:%d state:%d", stream, bs->pid,
bs->stream_type, stream->state);
@@ -2591,7 +2605,7 @@
}
if (G_UNLIKELY (stream->need_newsegment))
- calculate_and_push_newsegment (demux, stream);
+ calculate_and_push_newsegment (demux, stream, target_program);
/* FIXME : Push pending buffers if any */
if (G_UNLIKELY (stream->pending)) {
@@ -2685,13 +2699,19 @@
* hit this will trigger a gap check */
if (G_UNLIKELY (stream->pts != GST_CLOCK_TIME_NONE &&
stream->pts > stream->gap_ref_pts + 2 * GST_SECOND)) {
- GstClockTime curpcr =
- mpegts_packetizer_get_current_time (MPEG_TS_BASE_PACKETIZER (demux),
- demux->program->pcr_pid);
- if (curpcr == GST_CLOCK_TIME_NONE || curpcr < 800 * GST_MSECOND)
- goto beach;
- curpcr -= 800 * GST_MSECOND;
- gst_ts_demux_check_and_sync_streams (demux, curpcr);
+ if (demux->program->pcr_pid != 0x1fff) {
+ GstClockTime curpcr =
+ mpegts_packetizer_get_current_time (MPEG_TS_BASE_PACKETIZER (demux),
+ demux->program->pcr_pid);
+ if (curpcr == GST_CLOCK_TIME_NONE || curpcr < 800 * GST_MSECOND)
+ goto beach;
+ curpcr -= 800 * GST_MSECOND;
+ /* Use the current PCR (with a safety margin) to sync against */
+ gst_ts_demux_check_and_sync_streams (demux, curpcr);
+ } else {
+ /* If we don't have a PCR track, just use the current stream PTS */
+ gst_ts_demux_check_and_sync_streams (demux, stream->pts);
+ }
}
}
@@ -2719,7 +2739,7 @@
if (G_UNLIKELY (packet->payload_unit_start_indicator) &&
FLAGS_HAS_PAYLOAD (packet->scram_afc_cc))
/* Flush previous data */
- res = gst_ts_demux_push_pending_data (demux, stream);
+ res = gst_ts_demux_push_pending_data (demux, stream, NULL);
if (packet->payload && (res == GST_FLOW_OK || res == GST_FLOW_NOT_LINKED)
&& stream->pad) {
@@ -2729,7 +2749,7 @@
/* Finally check if the data we queued completes a packet */
if (stream->expected_size && stream->current_size == stream->expected_size) {
GST_LOG ("pushing complete packet");
- res = gst_ts_demux_push_pending_data (demux, stream);
+ res = gst_ts_demux_push_pending_data (demux, stream, NULL);
}
}
@@ -2777,7 +2797,7 @@
for (tmp = demux->program->stream_list; tmp; tmp = tmp->next) {
TSDemuxStream *stream = (TSDemuxStream *) tmp->data;
if (stream->pad) {
- res = gst_ts_demux_push_pending_data (demux, stream);
+ res = gst_ts_demux_push_pending_data (demux, stream, NULL);
if (G_UNLIKELY (res != GST_FLOW_OK))
break;
}
diff --git a/gst/mpegtsmux/Makefile.in b/gst/mpegtsmux/Makefile.in
index 4b0a2ef..f426a2b 100644
--- a/gst/mpegtsmux/Makefile.in
+++ b/gst/mpegtsmux/Makefile.in
@@ -372,6 +372,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -421,6 +423,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/gst/mpegtsmux/tsmux/Makefile.in b/gst/mpegtsmux/tsmux/Makefile.in
index 92b64e0..4ceb024 100644
--- a/gst/mpegtsmux/tsmux/Makefile.in
+++ b/gst/mpegtsmux/tsmux/Makefile.in
@@ -297,6 +297,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -346,6 +348,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/gst/mve/Makefile.in b/gst/mve/Makefile.in
index ed8cafb..9d6fc66 100644
--- a/gst/mve/Makefile.in
+++ b/gst/mve/Makefile.in
@@ -329,6 +329,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -378,6 +380,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/gst/mxf/Makefile.in b/gst/mxf/Makefile.in
index 78cec92..a971f53 100644
--- a/gst/mxf/Makefile.in
+++ b/gst/mxf/Makefile.in
@@ -334,6 +334,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -383,6 +385,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/gst/mxf/mxfdemux.c b/gst/mxf/mxfdemux.c
index ca09cc7..823b1b6 100644
--- a/gst/mxf/mxfdemux.c
+++ b/gst/mxf/mxfdemux.c
@@ -3098,9 +3098,7 @@
} else if (flow == GST_FLOW_NOT_LINKED || flow < GST_FLOW_EOS) {
GstEvent *e;
- GST_ELEMENT_ERROR (demux, STREAM, FAILED,
- ("Internal data stream error."),
- ("stream stopped, reason %s", reason));
+ GST_ELEMENT_FLOW_ERROR (demux, flow);
e = gst_event_new_eos ();
gst_event_set_seqnum (e, demux->seqnum);
gst_mxf_demux_push_src_event (demux, e);
diff --git a/gst/netsim/Makefile.in b/gst/netsim/Makefile.in
index 70a2f75..22b3865 100644
--- a/gst/netsim/Makefile.in
+++ b/gst/netsim/Makefile.in
@@ -325,6 +325,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -374,6 +376,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/gst/nuvdemux/Makefile.in b/gst/nuvdemux/Makefile.in
index f270c92..3fab7dc 100644
--- a/gst/nuvdemux/Makefile.in
+++ b/gst/nuvdemux/Makefile.in
@@ -324,6 +324,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -373,6 +375,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/gst/nuvdemux/gstnuvdemux.c b/gst/nuvdemux/gstnuvdemux.c
index b98d35d..88968f0 100644
--- a/gst/nuvdemux/gstnuvdemux.c
+++ b/gst/nuvdemux/gstnuvdemux.c
@@ -729,9 +729,7 @@
if (res == GST_FLOW_UNEXPECTED) {
gst_nuv_demux_send_eos (nuv);
} else if (res == GST_FLOW_NOT_LINKED || res < GST_FLOW_UNEXPECTED) {
- GST_ELEMENT_ERROR (nuv, STREAM, FAILED,
- (_("Internal data stream error.")),
- ("streaming stopped, reason %s", gst_flow_get_name (res)));
+ GST_ELEMENT_FLOW_ERROR (nuv, res);
gst_nuv_demux_send_eos (nuv);
}
diff --git a/gst/onvif/Makefile.in b/gst/onvif/Makefile.in
index b4fa711..9985535 100644
--- a/gst/onvif/Makefile.in
+++ b/gst/onvif/Makefile.in
@@ -324,6 +324,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -373,6 +375,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/gst/patchdetect/Makefile.in b/gst/patchdetect/Makefile.in
index 1c72039..ce7bf67 100644
--- a/gst/patchdetect/Makefile.in
+++ b/gst/patchdetect/Makefile.in
@@ -327,6 +327,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -376,6 +378,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/gst/pcapparse/Makefile.in b/gst/pcapparse/Makefile.in
index 466349b..00bea88 100644
--- a/gst/pcapparse/Makefile.in
+++ b/gst/pcapparse/Makefile.in
@@ -327,6 +327,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -376,6 +378,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/gst/pnm/Makefile.in b/gst/pnm/Makefile.in
index db106aa..01c71c2 100644
--- a/gst/pnm/Makefile.in
+++ b/gst/pnm/Makefile.in
@@ -327,6 +327,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -376,6 +378,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/gst/rawparse/Makefile.am b/gst/rawparse/Makefile.am
index 3bd8438..623dc94 100644
--- a/gst/rawparse/Makefile.am
+++ b/gst/rawparse/Makefile.am
@@ -2,10 +2,13 @@
plugin_LTLIBRARIES = libgstrawparse.la
libgstrawparse_la_SOURCES = \
- gstrawparse.c \
gstunalignedaudioparse.c \
+ gstunalignedvideoparse.c \
gstaudioparse.c \
gstvideoparse.c \
+ gstrawbaseparse.c \
+ gstrawaudioparse.c \
+ gstrawvideoparse.c \
plugin.c
libgstrawparse_la_CFLAGS = \
$(GST_PLUGINS_BASE_CFLAGS) \
@@ -21,7 +24,11 @@
noinst_HEADERS = \
unalignedaudio.h \
+ unalignedvideo.h \
gstunalignedaudioparse.h \
+ gstunalignedvideoparse.h \
gstaudioparse.h \
- gstrawparse.h \
- gstvideoparse.h
+ gstvideoparse.h \
+ gstrawbaseparse.h \
+ gstrawaudioparse.h \
+ gstrawvideoparse.h
diff --git a/gst/rawparse/Makefile.in b/gst/rawparse/Makefile.in
index 1883e2a..a49d9b4 100644
--- a/gst/rawparse/Makefile.in
+++ b/gst/rawparse/Makefile.in
@@ -165,10 +165,15 @@
am__DEPENDENCIES_1 =
libgstrawparse_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \
$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
-am_libgstrawparse_la_OBJECTS = libgstrawparse_la-gstrawparse.lo \
+am_libgstrawparse_la_OBJECTS = \
libgstrawparse_la-gstunalignedaudioparse.lo \
+ libgstrawparse_la-gstunalignedvideoparse.lo \
libgstrawparse_la-gstaudioparse.lo \
- libgstrawparse_la-gstvideoparse.lo libgstrawparse_la-plugin.lo
+ libgstrawparse_la-gstvideoparse.lo \
+ libgstrawparse_la-gstrawbaseparse.lo \
+ libgstrawparse_la-gstrawaudioparse.lo \
+ libgstrawparse_la-gstrawvideoparse.lo \
+ libgstrawparse_la-plugin.lo
libgstrawparse_la_OBJECTS = $(am_libgstrawparse_la_OBJECTS)
AM_V_lt = $(am__v_lt_@AM_V@)
am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
@@ -328,6 +333,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -377,6 +384,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
@@ -786,10 +795,13 @@
wayland_scanner = @wayland_scanner@
plugin_LTLIBRARIES = libgstrawparse.la
libgstrawparse_la_SOURCES = \
- gstrawparse.c \
gstunalignedaudioparse.c \
+ gstunalignedvideoparse.c \
gstaudioparse.c \
gstvideoparse.c \
+ gstrawbaseparse.c \
+ gstrawaudioparse.c \
+ gstrawvideoparse.c \
plugin.c
libgstrawparse_la_CFLAGS = \
@@ -807,10 +819,14 @@
libgstrawparse_la_LIBTOOLFLAGS = $(GST_PLUGIN_LIBTOOLFLAGS)
noinst_HEADERS = \
unalignedaudio.h \
+ unalignedvideo.h \
gstunalignedaudioparse.h \
+ gstunalignedvideoparse.h \
gstaudioparse.h \
- gstrawparse.h \
- gstvideoparse.h
+ gstvideoparse.h \
+ gstrawbaseparse.h \
+ gstrawaudioparse.h \
+ gstrawvideoparse.h
all: all-am
@@ -891,8 +907,11 @@
-rm -f *.tab.c
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstrawparse_la-gstaudioparse.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstrawparse_la-gstrawparse.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstrawparse_la-gstrawaudioparse.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstrawparse_la-gstrawbaseparse.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstrawparse_la-gstrawvideoparse.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstrawparse_la-gstunalignedaudioparse.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstrawparse_la-gstunalignedvideoparse.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstrawparse_la-gstvideoparse.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstrawparse_la-plugin.Plo@am__quote@
@@ -920,13 +939,6 @@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
-libgstrawparse_la-gstrawparse.lo: gstrawparse.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrawparse_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrawparse_la_CFLAGS) $(CFLAGS) -MT libgstrawparse_la-gstrawparse.lo -MD -MP -MF $(DEPDIR)/libgstrawparse_la-gstrawparse.Tpo -c -o libgstrawparse_la-gstrawparse.lo `test -f 'gstrawparse.c' || echo '$(srcdir)/'`gstrawparse.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstrawparse_la-gstrawparse.Tpo $(DEPDIR)/libgstrawparse_la-gstrawparse.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstrawparse.c' object='libgstrawparse_la-gstrawparse.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrawparse_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrawparse_la_CFLAGS) $(CFLAGS) -c -o libgstrawparse_la-gstrawparse.lo `test -f 'gstrawparse.c' || echo '$(srcdir)/'`gstrawparse.c
-
libgstrawparse_la-gstunalignedaudioparse.lo: gstunalignedaudioparse.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrawparse_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrawparse_la_CFLAGS) $(CFLAGS) -MT libgstrawparse_la-gstunalignedaudioparse.lo -MD -MP -MF $(DEPDIR)/libgstrawparse_la-gstunalignedaudioparse.Tpo -c -o libgstrawparse_la-gstunalignedaudioparse.lo `test -f 'gstunalignedaudioparse.c' || echo '$(srcdir)/'`gstunalignedaudioparse.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstrawparse_la-gstunalignedaudioparse.Tpo $(DEPDIR)/libgstrawparse_la-gstunalignedaudioparse.Plo
@@ -934,6 +946,13 @@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrawparse_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrawparse_la_CFLAGS) $(CFLAGS) -c -o libgstrawparse_la-gstunalignedaudioparse.lo `test -f 'gstunalignedaudioparse.c' || echo '$(srcdir)/'`gstunalignedaudioparse.c
+libgstrawparse_la-gstunalignedvideoparse.lo: gstunalignedvideoparse.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrawparse_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrawparse_la_CFLAGS) $(CFLAGS) -MT libgstrawparse_la-gstunalignedvideoparse.lo -MD -MP -MF $(DEPDIR)/libgstrawparse_la-gstunalignedvideoparse.Tpo -c -o libgstrawparse_la-gstunalignedvideoparse.lo `test -f 'gstunalignedvideoparse.c' || echo '$(srcdir)/'`gstunalignedvideoparse.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstrawparse_la-gstunalignedvideoparse.Tpo $(DEPDIR)/libgstrawparse_la-gstunalignedvideoparse.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstunalignedvideoparse.c' object='libgstrawparse_la-gstunalignedvideoparse.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrawparse_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrawparse_la_CFLAGS) $(CFLAGS) -c -o libgstrawparse_la-gstunalignedvideoparse.lo `test -f 'gstunalignedvideoparse.c' || echo '$(srcdir)/'`gstunalignedvideoparse.c
+
libgstrawparse_la-gstaudioparse.lo: gstaudioparse.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrawparse_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrawparse_la_CFLAGS) $(CFLAGS) -MT libgstrawparse_la-gstaudioparse.lo -MD -MP -MF $(DEPDIR)/libgstrawparse_la-gstaudioparse.Tpo -c -o libgstrawparse_la-gstaudioparse.lo `test -f 'gstaudioparse.c' || echo '$(srcdir)/'`gstaudioparse.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstrawparse_la-gstaudioparse.Tpo $(DEPDIR)/libgstrawparse_la-gstaudioparse.Plo
@@ -948,6 +967,27 @@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrawparse_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrawparse_la_CFLAGS) $(CFLAGS) -c -o libgstrawparse_la-gstvideoparse.lo `test -f 'gstvideoparse.c' || echo '$(srcdir)/'`gstvideoparse.c
+libgstrawparse_la-gstrawbaseparse.lo: gstrawbaseparse.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrawparse_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrawparse_la_CFLAGS) $(CFLAGS) -MT libgstrawparse_la-gstrawbaseparse.lo -MD -MP -MF $(DEPDIR)/libgstrawparse_la-gstrawbaseparse.Tpo -c -o libgstrawparse_la-gstrawbaseparse.lo `test -f 'gstrawbaseparse.c' || echo '$(srcdir)/'`gstrawbaseparse.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstrawparse_la-gstrawbaseparse.Tpo $(DEPDIR)/libgstrawparse_la-gstrawbaseparse.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstrawbaseparse.c' object='libgstrawparse_la-gstrawbaseparse.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrawparse_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrawparse_la_CFLAGS) $(CFLAGS) -c -o libgstrawparse_la-gstrawbaseparse.lo `test -f 'gstrawbaseparse.c' || echo '$(srcdir)/'`gstrawbaseparse.c
+
+libgstrawparse_la-gstrawaudioparse.lo: gstrawaudioparse.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrawparse_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrawparse_la_CFLAGS) $(CFLAGS) -MT libgstrawparse_la-gstrawaudioparse.lo -MD -MP -MF $(DEPDIR)/libgstrawparse_la-gstrawaudioparse.Tpo -c -o libgstrawparse_la-gstrawaudioparse.lo `test -f 'gstrawaudioparse.c' || echo '$(srcdir)/'`gstrawaudioparse.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstrawparse_la-gstrawaudioparse.Tpo $(DEPDIR)/libgstrawparse_la-gstrawaudioparse.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstrawaudioparse.c' object='libgstrawparse_la-gstrawaudioparse.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrawparse_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrawparse_la_CFLAGS) $(CFLAGS) -c -o libgstrawparse_la-gstrawaudioparse.lo `test -f 'gstrawaudioparse.c' || echo '$(srcdir)/'`gstrawaudioparse.c
+
+libgstrawparse_la-gstrawvideoparse.lo: gstrawvideoparse.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrawparse_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrawparse_la_CFLAGS) $(CFLAGS) -MT libgstrawparse_la-gstrawvideoparse.lo -MD -MP -MF $(DEPDIR)/libgstrawparse_la-gstrawvideoparse.Tpo -c -o libgstrawparse_la-gstrawvideoparse.lo `test -f 'gstrawvideoparse.c' || echo '$(srcdir)/'`gstrawvideoparse.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstrawparse_la-gstrawvideoparse.Tpo $(DEPDIR)/libgstrawparse_la-gstrawvideoparse.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstrawvideoparse.c' object='libgstrawparse_la-gstrawvideoparse.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrawparse_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrawparse_la_CFLAGS) $(CFLAGS) -c -o libgstrawparse_la-gstrawvideoparse.lo `test -f 'gstrawvideoparse.c' || echo '$(srcdir)/'`gstrawvideoparse.c
+
libgstrawparse_la-plugin.lo: plugin.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrawparse_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrawparse_la_CFLAGS) $(CFLAGS) -MT libgstrawparse_la-plugin.lo -MD -MP -MF $(DEPDIR)/libgstrawparse_la-plugin.Tpo -c -o libgstrawparse_la-plugin.lo `test -f 'plugin.c' || echo '$(srcdir)/'`plugin.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstrawparse_la-plugin.Tpo $(DEPDIR)/libgstrawparse_la-plugin.Plo
diff --git a/gst/rawparse/gstaudioparse.c b/gst/rawparse/gstaudioparse.c
index b60118b..4e7f694 100644
--- a/gst/rawparse/gstaudioparse.c
+++ b/gst/rawparse/gstaudioparse.c
@@ -22,6 +22,8 @@
* SECTION:element-audioparse
*
* Converts a byte stream into audio frames.
+ *
+ * <note>This element is deprecated. Use #GstRawAudioParse instead.</note>
*/
#ifdef HAVE_CONFIG_H
@@ -32,11 +34,34 @@
* for now with newer GLib versions (>= 2.31.0) */
#define GLIB_DISABLE_DEPRECATION_WARNINGS
+#include <gst/gst.h>
+#include <gst/audio/audio.h>
#include "gstaudioparse.h"
+#include "gstrawaudioparse.h"
#include "unalignedaudio.h"
#include <string.h>
+
+static GstStaticPadTemplate static_sink_template =
+GST_STATIC_PAD_TEMPLATE ("sink",
+ GST_PAD_SINK,
+ GST_PAD_ALWAYS,
+ GST_STATIC_CAPS_ANY);
+
+
+static GstStaticPadTemplate static_src_template =
+ GST_STATIC_PAD_TEMPLATE ("src",
+ GST_PAD_SRC,
+ GST_PAD_ALWAYS,
+ GST_STATIC_CAPS (GST_AUDIO_CAPS_MAKE (GST_AUDIO_FORMATS_ALL)
+ ", layout = (string) { interleaved, non-interleaved }; "
+ GST_UNALIGNED_RAW_AUDIO_CAPS "; "
+ "audio/x-alaw, rate=(int)[1,MAX], channels=(int)[1,MAX]; "
+ "audio/x-mulaw, rate=(int)[1,MAX], channels=(int)[1,MAX]")
+ );
+
+
typedef enum
{
GST_AUDIO_PARSE_FORMAT_RAW,
@@ -44,21 +69,10 @@
GST_AUDIO_PARSE_FORMAT_ALAW
} GstAudioParseFormat;
-typedef enum
-{
- GST_AUDIO_PARSE_ENDIANNESS_LITTLE = 1234,
- GST_AUDIO_PARSE_ENDIANNESS_BIG = 4321
-} GstAudioParseEndianness;
-
static void gst_audio_parse_set_property (GObject * object, guint prop_id,
const GValue * value, GParamSpec * pspec);
static void gst_audio_parse_get_property (GObject * object, guint prop_id,
GValue * value, GParamSpec * pspec);
-static void gst_audio_parse_finalize (GObject * object);
-
-static GstCaps *gst_audio_parse_get_caps (GstRawParse * rp);
-
-static void gst_audio_parse_update_frame_size (GstAudioParse * ap);
GST_DEBUG_CATEGORY_STATIC (gst_audio_parse_debug);
#define GST_CAT_DEFAULT gst_audio_parse_debug
@@ -97,21 +111,16 @@
#define gst_audio_parse_parent_class parent_class
-G_DEFINE_TYPE (GstAudioParse, gst_audio_parse, GST_TYPE_RAW_PARSE);
+G_DEFINE_TYPE (GstAudioParse, gst_audio_parse, GST_TYPE_BIN);
static void
gst_audio_parse_class_init (GstAudioParseClass * klass)
{
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
GstElementClass *gstelement_class = GST_ELEMENT_CLASS (klass);
- GstRawParseClass *rp_class = GST_RAW_PARSE_CLASS (klass);
- GstCaps *caps;
gobject_class->set_property = gst_audio_parse_set_property;
gobject_class->get_property = gst_audio_parse_get_property;
- gobject_class->finalize = gst_audio_parse_finalize;
-
- rp_class->get_caps = gst_audio_parse_get_caps;
g_object_class_install_property (gobject_class, PROP_FORMAT,
g_param_spec_enum ("format", "Format",
@@ -155,18 +164,13 @@
gst_element_class_set_static_metadata (gstelement_class, "Audio Parse",
"Filter/Audio",
- "Converts stream into audio frames",
+ "Converts stream into audio frames (deprecated: use rawaudioparse instead)",
"Sebastian Dröge <sebastian.droege@collabora.co.uk>");
- caps = gst_caps_from_string (GST_AUDIO_CAPS_MAKE (GST_AUDIO_FORMATS_ALL)
- ", layout = (string) { interleaved, non-interleaved }; "
- GST_UNALIGNED_RAW_AUDIO_CAPS "; "
- "audio/x-alaw, rate=(int)[1,MAX], channels=(int)[1,MAX]; "
- "audio/x-mulaw, rate=(int)[1,MAX], channels=(int)[1,MAX]");
-
- gst_raw_parse_class_set_src_pad_template (rp_class, caps);
- gst_raw_parse_class_set_multiple_frames_per_buffer (rp_class, TRUE);
- gst_caps_unref (caps);
+ gst_element_class_add_pad_template (gstelement_class,
+ gst_static_pad_template_get (&static_sink_template));
+ gst_element_class_add_pad_template (gstelement_class,
+ gst_static_pad_template_get (&static_src_template));
GST_DEBUG_CATEGORY_INIT (gst_audio_parse_debug, "audioparse", 0,
"audioparse element");
@@ -175,13 +179,28 @@
static void
gst_audio_parse_init (GstAudioParse * ap)
{
- ap->format = GST_AUDIO_PARSE_FORMAT_RAW;
- ap->raw_format = GST_AUDIO_FORMAT_S16;
- ap->channels = 2;
- ap->interleaved = TRUE;
+ GstPad *inner_pad;
+ GstPad *ghostpad;
- gst_audio_parse_update_frame_size (ap);
- gst_raw_parse_set_fps (GST_RAW_PARSE (ap), 44100, 1);
+ ap->rawaudioparse =
+ gst_element_factory_make ("rawaudioparse", "inner_rawaudioparse");
+ g_assert (ap->rawaudioparse != NULL);
+
+ gst_bin_add (GST_BIN (ap), ap->rawaudioparse);
+
+ inner_pad = gst_element_get_static_pad (ap->rawaudioparse, "sink");
+ ghostpad =
+ gst_ghost_pad_new_from_template ("sink", inner_pad,
+ gst_element_class_get_pad_template (GST_ELEMENT_GET_CLASS (ap), "sink"));
+ gst_element_add_pad (GST_ELEMENT (ap), ghostpad);
+ gst_object_unref (GST_OBJECT (inner_pad));
+
+ inner_pad = gst_element_get_static_pad (ap->rawaudioparse, "src");
+ ghostpad =
+ gst_ghost_pad_new_from_template ("src", inner_pad,
+ gst_element_class_get_pad_template (GST_ELEMENT_GET_CLASS (ap), "src"));
+ gst_element_add_pad (GST_ELEMENT (ap), ghostpad);
+ gst_object_unref (GST_OBJECT (inner_pad));
}
static void
@@ -190,39 +209,68 @@
{
GstAudioParse *ap = GST_AUDIO_PARSE (object);
- g_return_if_fail (!gst_raw_parse_is_negotiated (GST_RAW_PARSE (ap)));
-
switch (prop_id) {
- case PROP_FORMAT:
- ap->format = g_value_get_enum (value);
- break;
- case PROP_RAW_FORMAT:
- ap->raw_format = g_value_get_enum (value);
- break;
- case PROP_RATE:
- gst_raw_parse_set_fps (GST_RAW_PARSE (ap), g_value_get_int (value), 1);
- break;
- case PROP_CHANNELS:
- ap->channels = g_value_get_int (value);
- break;
- case PROP_INTERLEAVED:
- ap->interleaved = g_value_get_boolean (value);
- break;
- case PROP_CHANNEL_POSITIONS:
- if (ap->channel_positions)
- g_value_array_free (ap->channel_positions);
+ case PROP_FORMAT:{
+ GstRawAudioParseFormat raw_parse_format;
- ap->channel_positions = g_value_dup_boxed (value);
+ switch (g_value_get_enum (value)) {
+ case GST_AUDIO_PARSE_FORMAT_RAW:
+ raw_parse_format = GST_RAW_AUDIO_PARSE_FORMAT_PCM;
+ break;
+
+ case GST_AUDIO_PARSE_FORMAT_MULAW:
+ raw_parse_format = GST_RAW_AUDIO_PARSE_FORMAT_MULAW;
+ break;
+
+ case GST_AUDIO_PARSE_FORMAT_ALAW:
+ raw_parse_format = GST_RAW_AUDIO_PARSE_FORMAT_ALAW;
+ break;
+
+ default:
+ g_assert_not_reached ();
+ break;
+ }
+
+ g_object_set (G_OBJECT (ap->rawaudioparse), "format", raw_parse_format,
+ NULL);
+
break;
+ }
+
+ case PROP_RAW_FORMAT:
+ g_object_set (G_OBJECT (ap->rawaudioparse), "pcm-format",
+ g_value_get_enum (value), NULL);
+ break;
+
+ case PROP_RATE:
+ g_object_set (G_OBJECT (ap->rawaudioparse), "sample-rate",
+ g_value_get_int (value), NULL);
+ break;
+
+ case PROP_CHANNELS:
+ g_object_set (G_OBJECT (ap->rawaudioparse), "num-channels",
+ g_value_get_int (value), NULL);
+ break;
+
+ case PROP_INTERLEAVED:
+ g_object_set (G_OBJECT (ap->rawaudioparse), "interleaved",
+ g_value_get_boolean (value), NULL);
+ break;
+
+ case PROP_CHANNEL_POSITIONS:
+ g_object_set (G_OBJECT (ap->rawaudioparse), "channel-positions",
+ g_value_get_boxed (value), NULL);
+ break;
+
case PROP_USE_SINK_CAPS:
- ap->use_sink_caps = g_value_get_boolean (value);
+ g_object_set (G_OBJECT (ap->rawaudioparse), "use-sink-caps",
+ g_value_get_boolean (value), NULL);
break;
+
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
}
-
- gst_audio_parse_update_frame_size (ap);
}
static void
@@ -232,226 +280,85 @@
GstAudioParse *ap = GST_AUDIO_PARSE (object);
switch (prop_id) {
- case PROP_FORMAT:
- g_value_set_enum (value, ap->format);
- break;
- case PROP_RAW_FORMAT:
- g_value_set_enum (value, ap->raw_format);
- break;
- case PROP_RATE:{
- gint fps_n, fps_d;
+ case PROP_FORMAT:{
+ GstRawAudioParseFormat raw_parse_format;
+ GstAudioParseFormat format;
- gst_raw_parse_get_fps (GST_RAW_PARSE (ap), &fps_n, &fps_d);
- g_value_set_int (value, fps_n);
+ g_object_get (G_OBJECT (ap->rawaudioparse), "format", &raw_parse_format,
+ NULL);
+
+ switch (raw_parse_format) {
+ case GST_RAW_AUDIO_PARSE_FORMAT_PCM:
+ format = GST_AUDIO_PARSE_FORMAT_RAW;
+ break;
+
+ case GST_RAW_AUDIO_PARSE_FORMAT_MULAW:
+ format = GST_AUDIO_PARSE_FORMAT_MULAW;
+ break;
+
+ case GST_RAW_AUDIO_PARSE_FORMAT_ALAW:
+ format = GST_AUDIO_PARSE_FORMAT_ALAW;
+ break;
+
+ default:
+ g_assert_not_reached ();
+ break;
+ }
+
+ g_value_set_enum (value, format);
+
break;
}
- case PROP_CHANNELS:
- g_value_set_int (value, ap->channels);
+
+ case PROP_RAW_FORMAT:{
+ GstAudioFormat format;
+ g_object_get (G_OBJECT (ap->rawaudioparse), "pcm-format", &format, NULL);
+ g_value_set_enum (value, format);
break;
- case PROP_INTERLEAVED:
- g_value_set_boolean (value, ap->interleaved);
+ }
+
+ case PROP_RATE:{
+ gint sample_rate;
+ g_object_get (G_OBJECT (ap->rawaudioparse), "sample-rate", &sample_rate,
+ NULL);
+ g_value_set_int (value, sample_rate);
break;
- case PROP_CHANNEL_POSITIONS:
- g_value_set_boxed (value, ap->channel_positions);
+ }
+
+ case PROP_CHANNELS:{
+ gint num_channels;
+ g_object_get (G_OBJECT (ap->rawaudioparse), "num-channels", &num_channels,
+ NULL);
+ g_value_set_int (value, num_channels);
break;
- case PROP_USE_SINK_CAPS:
- g_value_set_boolean (value, ap->use_sink_caps);
+ }
+
+ case PROP_INTERLEAVED:{
+ gboolean interleaved;
+ g_object_get (G_OBJECT (ap->rawaudioparse), "interleaved", &interleaved,
+ NULL);
+ g_value_set_boolean (value, interleaved);
break;
+ }
+
+ case PROP_CHANNEL_POSITIONS:{
+ gpointer channel_positions;
+ g_object_get (G_OBJECT (ap->rawaudioparse), "channel-positions",
+ &channel_positions, NULL);
+ g_value_set_boxed (value, channel_positions);
+ break;
+ }
+
+ case PROP_USE_SINK_CAPS:{
+ gboolean use_sink_caps;
+ g_object_get (G_OBJECT (ap->rawaudioparse), "use-sink-caps",
+ &use_sink_caps, NULL);
+ g_value_set_boolean (value, use_sink_caps);
+ break;
+ }
+
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
}
}
-
-static void
-gst_audio_parse_finalize (GObject * object)
-{
- GstAudioParse *ap = GST_AUDIO_PARSE (object);
-
- if (ap->channel_positions) {
- g_value_array_free (ap->channel_positions);
- ap->channel_positions = NULL;
- }
-
- g_free (ap->channel_pos);
- g_free (ap->channel_order);
-
- G_OBJECT_CLASS (parent_class)->finalize (object);
-}
-
-void
-gst_audio_parse_update_frame_size (GstAudioParse * ap)
-{
- gint framesize, width;
-
- switch (ap->format) {
- case GST_AUDIO_PARSE_FORMAT_ALAW:
- case GST_AUDIO_PARSE_FORMAT_MULAW:
- width = 8;
- break;
- case GST_AUDIO_PARSE_FORMAT_RAW:
- default:
- {
- GstAudioInfo info;
-
- gst_audio_info_init (&info);
- /* rate, etc do not really matter here */
- gst_audio_info_set_format (&info, ap->raw_format, 44100, ap->channels,
- NULL);
- width = GST_AUDIO_INFO_WIDTH (&info);
- break;
- }
- }
-
- framesize = (width / 8) * ap->channels;
-
- gst_raw_parse_set_framesize (GST_RAW_PARSE (ap), framesize);
-}
-
-static GstAudioChannelPosition *
-gst_audio_parse_get_channel_positions (GValueArray * positions)
-{
- gint i;
- guint channels;
- GstAudioChannelPosition *pos;
-
- channels = positions->n_values;
- pos = g_new (GstAudioChannelPosition, positions->n_values);
-
- for (i = 0; i < channels; i++) {
- GValue *v = g_value_array_get_nth (positions, i);
-
- pos[i] = g_value_get_enum (v);
- }
-
- return pos;
-}
-
-static void
-gst_audio_parse_setup_channel_positions (GstAudioParse * ap)
-{
- GstAudioChannelPosition *pos, *to;
-
- g_free (ap->channel_pos);
- g_free (ap->channel_order);
- ap->channel_pos = NULL;
- ap->channel_order = NULL;
-
- if (!ap->channel_positions) {
- GST_DEBUG_OBJECT (ap, "no channel positions");
- /* implicit mapping for 1- and 2-channel audio is okay */
- /* will come up with one in other cases also */
- return;
- }
-
- pos = gst_audio_parse_get_channel_positions (ap->channel_positions);
- if (ap->channels != ap->channel_positions->n_values ||
- !gst_audio_check_valid_channel_positions (pos, ap->channels, FALSE)) {
- GST_DEBUG_OBJECT (ap, "invalid channel position");
- g_free (pos);
- return;
- }
-
- /* ok, got something we can work with now */
- to = g_new (GstAudioChannelPosition, ap->channels);
- memcpy (to, pos, ap->channels * sizeof (to[0]));
- gst_audio_channel_positions_to_valid_order (to, ap->channels);
-
- ap->channel_pos = pos;
- ap->channel_order = to;
-}
-
-static GstCaps *
-gst_audio_parse_get_caps (GstRawParse * rp)
-{
- GstAudioParse *ap = GST_AUDIO_PARSE (rp);
- GstCaps *caps, *ncaps;
- GstAudioInfo info;
- gint fps_n, fps_d;
- const GValue *val;
-
- if (ap->use_sink_caps) {
- gint rate;
- GstCaps *caps = gst_pad_get_current_caps (rp->sinkpad);
- GstStructure *structure;
-
- if (!caps) {
- GST_WARNING_OBJECT (ap,
- "Sink pad has no caps, but we were asked to use its caps");
- return NULL;
- }
-
- /* For unaligned raw data, the output caps stay the same,
- * except that audio/x-unaligned-raw becomes audio/x-raw,
- * since audioparse aligns the sample data */
- structure = gst_caps_get_structure (caps, 0);
- if (gst_structure_has_name (structure, "audio/x-unaligned-raw")) {
- caps = gst_caps_make_writable (caps);
- structure = gst_caps_get_structure (caps, 0);
- gst_structure_set_name (structure, "audio/x-raw");
- }
-
- if (!gst_audio_info_from_caps (&info, caps)) {
- GST_WARNING_OBJECT (ap, "Failed to parse caps %" GST_PTR_FORMAT, caps);
- gst_caps_unref (caps);
- return NULL;
- }
-
- ap->format = GST_AUDIO_PARSE_FORMAT_RAW;
- ap->raw_format = GST_AUDIO_INFO_FORMAT (&info);
- ap->channels = GST_AUDIO_INFO_CHANNELS (&info);
- ap->interleaved = info.layout == GST_AUDIO_LAYOUT_INTERLEAVED;
-
- rate = GST_AUDIO_INFO_RATE (&info);
- gst_raw_parse_set_fps (GST_RAW_PARSE (ap), rate, 1);
- gst_audio_parse_update_frame_size (ap);
-
- return caps;
- }
-
- gst_raw_parse_get_fps (rp, &fps_n, &fps_d);
- gst_audio_parse_setup_channel_positions (ap);
-
- /* yes, even when format not raw */
- gst_audio_info_init (&info);
- gst_audio_info_set_format (&info, ap->raw_format, fps_n, ap->channels,
- ap->channel_order);
- info.layout = ap->interleaved ? GST_AUDIO_LAYOUT_INTERLEAVED :
- GST_AUDIO_LAYOUT_NON_INTERLEAVED;
- caps = gst_audio_info_to_caps (&info);
-
- switch (ap->format) {
- case GST_AUDIO_PARSE_FORMAT_RAW:
- break;
- case GST_AUDIO_PARSE_FORMAT_ALAW:
- ncaps = gst_caps_new_simple ("audio/x-alaw",
- "rate", G_TYPE_INT, fps_n,
- "channels", G_TYPE_INT, ap->channels, NULL);
- /* pick mask stuff from faked raw format */
- val = gst_structure_get_value (gst_caps_get_structure (caps, 0),
- "channel-mask");
- if (val)
- gst_caps_set_value (ncaps, "channel-mask", val);
- gst_caps_unref (caps);
- caps = ncaps;
- break;
- case GST_AUDIO_PARSE_FORMAT_MULAW:
- ncaps = gst_caps_new_simple ("audio/x-mulaw",
- "rate", G_TYPE_INT, fps_n,
- "channels", G_TYPE_INT, ap->channels, NULL);
- /* pick mask stuff from faked raw format */
- val = gst_structure_get_value (gst_caps_get_structure (caps, 0),
- "channel-mask");
- if (val)
- gst_caps_set_value (ncaps, "channel-mask", val);
- gst_caps_unref (caps);
- caps = ncaps;
- break;
- default:
- caps = gst_caps_new_empty ();
- GST_ERROR_OBJECT (rp, "unexpected format %d", ap->format);
- break;
- }
-
- return caps;
-}
diff --git a/gst/rawparse/gstaudioparse.h b/gst/rawparse/gstaudioparse.h
index 2a357d9..efa5730 100644
--- a/gst/rawparse/gstaudioparse.h
+++ b/gst/rawparse/gstaudioparse.h
@@ -23,11 +23,6 @@
#define __GST_AUDIO_PARSE_H__
#include <gst/gst.h>
-#include <gst/base/gstbasetransform.h>
-#include <gst/base/gstadapter.h>
-#include <gst/audio/audio.h>
-
-#include "gstrawparse.h"
#define GST_TYPE_AUDIO_PARSE \
(gst_audio_parse_get_type())
@@ -45,23 +40,13 @@
struct _GstAudioParse
{
- GstRawParse parent;
-
- /* properties */
- gboolean use_sink_caps;
- gint format;
- GstAudioFormat raw_format;
- gint channels;
- gboolean interleaved;
- GValueArray *channel_positions;
-
- GstAudioChannelPosition *channel_pos;
- GstAudioChannelPosition *channel_order;
+ GstBin parent;
+ GstElement *rawaudioparse;
};
struct _GstAudioParseClass
{
- GstRawParseClass parent_class;
+ GstBinClass parent_class;
};
diff --git a/gst/rawparse/gstrawaudioparse.c b/gst/rawparse/gstrawaudioparse.c
new file mode 100644
index 0000000..98575dd
--- /dev/null
+++ b/gst/rawparse/gstrawaudioparse.c
@@ -0,0 +1,1088 @@
+/* GStreamer
+ * Copyright (C) <2016> Carlos Rafael Giani <dv at pseudoterminal dot org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+/**
+ * SECTION:element-rawaudioparse
+ *
+ * This element parses incoming data as raw audio samples and timestamps it.
+ * It also handles seek queries in said raw audio data, and ensures that output
+ * buffers contain an integer number of samples, even if the input buffers don't.
+ * For example, with sample format S16LE and 2 channels, an input buffer of 411
+ * bytes contains 102.75 samples. rawaudioparse will then output 102 samples
+ * (= 408 bytes) and keep the remaining 3 bytes. These will then be prepended to
+ * the next input data.
+ *
+ * The element implements the properties and sink caps configuration as specified
+ * in the #GstRawBaseParse documentation. The properties configuration can be
+ * modified by using the sample-rate, num-channels, channel-positions, format,
+ * and pcm-format properties.
+ *
+ * Currently, this parser supports raw data in a-law, mu-law, or linear PCM format.
+ *
+ * To facilitate operation with the unalignedaudioparse element, rawaudioparse
+ * supports the "audio/x-unaligned-raw" media type. This is treated identically to
+ * "audio/x-raw", except that it is used by source elements which do not guarantee
+ * that the buffers they push out are timestamped and contain an integer amount of
+ * samples (see the 411 bytes example above). By using a different media type, it
+ * is guaranteed that unalignedaudioparse is autoplugged, making sure that the
+ * autoplugged chain does not push unparsed content downstream. The source caps'
+ * media type with linear PCM data is always "audio/x-raw", even if the sink caps
+ * use "audio/x-unaligned-raw".
+ *
+ * The channel-positions property can be used to set explicit position information
+ * for each channel. If the array that is passed to this property does not match
+ * the number of channels indicated by num-channels, then said number of channels
+ * is updated to the array length. If channel-positions is NULL, then the default
+ * GStreamer positioning is used. This property is also useful for swapping left
+ * and right in a stereo signal for example.
+ *
+ * <refsect2>
+ * <title>Example pipelines</title>
+ * |[
+ * gst-launch-1.0 souphttpsrc http://my-dlna-server/track.l16 \
+ * rawaudioparse ! audioconvert ! audioresample ! autoaudiosink
+ * ]| Receive L16 data from a DLNA server, parse and timestamp it with
+ * rawaudioparse, and play it. use-sink-caps is set to true since souphttpsrc
+ * will set its source pad's caps to audio/x-unaligned-raw for the L16 stream.
+ * |[
+ * gst-launch-1.0 filesrc location=audio.raw ! rawaudioparse use-sink-caps=false \
+ * format=pcm pcm-format=s16le sample-rate=48000 num-channels=2 \
+ * audioconvert ! audioresample ! autoaudiosink
+ * ]| Read raw data from a local file and parse it as PCM data with 48000 Hz sample
+ * rate, signed 16 bit integer samples, and 2 channels. use-sink-caps is set to
+ * false to ensure the property information is used and the parser does not expect
+ * audio/x-raw or audio/x-unaligned-raw caps.
+ * </refsect2>
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+/* FIXME: GValueArray is deprecated, but there is currently no viabla alternative
+ * See https://bugzilla.gnome.org/show_bug.cgi?id=667228 */
+#define GLIB_DISABLE_DEPRECATION_WARNINGS
+
+#include <string.h>
+#include "gstrawaudioparse.h"
+#include "unalignedaudio.h"
+
+
+GST_DEBUG_CATEGORY_STATIC (raw_audio_parse_debug);
+#define GST_CAT_DEFAULT raw_audio_parse_debug
+
+
+enum
+{
+ PROP_0,
+ PROP_FORMAT,
+ PROP_PCM_FORMAT,
+ PROP_SAMPLE_RATE,
+ PROP_NUM_CHANNELS,
+ PROP_INTERLEAVED,
+ PROP_CHANNEL_POSITIONS
+};
+
+
+#define DEFAULT_FORMAT GST_RAW_AUDIO_PARSE_FORMAT_PCM
+#define DEFAULT_PCM_FORMAT GST_AUDIO_FORMAT_S16
+#define DEFAULT_SAMPLE_RATE 44100
+#define DEFAULT_NUM_CHANNELS 2
+#define DEFAULT_INTERLEAVED TRUE
+
+
+#define GST_RAW_AUDIO_PARSE_CAPS \
+ GST_AUDIO_CAPS_MAKE(GST_AUDIO_FORMATS_ALL) \
+ ", layout = (string) { interleaved, non-interleaved }; " \
+ "audio/x-alaw, rate = (int) [ 1, MAX ], channels = (int) [ 1, MAX ]; " \
+ "audio/x-mulaw, rate = (int) [ 1, MAX ], channels = (int) [ 1, MAX ]; "
+
+
+static GstStaticPadTemplate static_sink_template =
+ GST_STATIC_PAD_TEMPLATE ("sink",
+ GST_PAD_SINK,
+ GST_PAD_ALWAYS,
+ GST_STATIC_CAPS (GST_UNALIGNED_RAW_AUDIO_CAPS "; " GST_RAW_AUDIO_PARSE_CAPS)
+ );
+
+
+static GstStaticPadTemplate static_src_template =
+GST_STATIC_PAD_TEMPLATE ("src",
+ GST_PAD_SRC,
+ GST_PAD_ALWAYS,
+ GST_STATIC_CAPS (GST_RAW_AUDIO_PARSE_CAPS)
+ );
+
+
+#define gst_raw_audio_parse_parent_class parent_class
+G_DEFINE_TYPE (GstRawAudioParse, gst_raw_audio_parse, GST_TYPE_RAW_BASE_PARSE);
+
+
+static void gst_raw_audio_parse_set_property (GObject * object, guint prop_id,
+ GValue const *value, GParamSpec * pspec);
+static void gst_raw_audio_parse_get_property (GObject * object, guint prop_id,
+ GValue * value, GParamSpec * pspec);
+
+static gboolean gst_raw_audio_parse_stop (GstBaseParse * parse);
+
+static gboolean gst_raw_audio_parse_set_current_config (GstRawBaseParse *
+ raw_base_parse, GstRawBaseParseConfig config);
+static GstRawBaseParseConfig
+gst_raw_audio_parse_get_current_config (GstRawBaseParse * raw_base_parse);
+static gboolean gst_raw_audio_parse_set_config_from_caps (GstRawBaseParse *
+ raw_base_parse, GstRawBaseParseConfig config, GstCaps * caps);
+static gboolean gst_raw_audio_parse_get_caps_from_config (GstRawBaseParse *
+ raw_base_parse, GstRawBaseParseConfig config, GstCaps ** caps);
+static gsize gst_raw_audio_parse_get_config_frame_size (GstRawBaseParse *
+ raw_base_parse, GstRawBaseParseConfig config);
+static gboolean gst_raw_audio_parse_is_config_ready (GstRawBaseParse *
+ raw_base_parse, GstRawBaseParseConfig config);
+static gboolean gst_raw_audio_parse_process (GstRawBaseParse * raw_base_parse,
+ GstRawBaseParseConfig config, GstBuffer * in_data, gsize total_num_in_bytes,
+ gsize num_valid_in_bytes, GstBuffer ** processed_data);
+static gboolean gst_raw_audio_parse_is_unit_format_supported (GstRawBaseParse *
+ raw_base_parse, GstFormat format);
+static void gst_raw_audio_parse_get_units_per_second (GstRawBaseParse *
+ raw_base_parse, GstFormat format, GstRawBaseParseConfig config,
+ gsize * units_per_sec_n, gsize * units_per_sec_d);
+
+static gboolean gst_raw_audio_parse_is_using_sink_caps (GstRawAudioParse *
+ raw_audio_parse);
+static GstRawAudioParseConfig
+ * gst_raw_audio_parse_get_config_ptr (GstRawAudioParse * raw_audio_parse,
+ GstRawBaseParseConfig config);
+
+static void gst_raw_audio_parse_init_config (GstRawAudioParseConfig * config);
+static gboolean gst_raw_audio_parse_set_config_channels (GstRawAudioParseConfig
+ * config, guint num_channels, guint64 channel_mask, gboolean set_positions);
+static gboolean
+gst_raw_audio_parse_update_channel_reordering_flag (GstRawAudioParseConfig *
+ config);
+static void gst_raw_audio_parse_update_config_bpf (GstRawAudioParseConfig *
+ config);
+static gboolean gst_raw_audio_parse_caps_to_config (GstRawAudioParse *
+ raw_audio_parse, GstCaps * caps, GstRawAudioParseConfig * config);
+static gboolean gst_raw_audio_parse_config_to_caps (GstRawAudioParse *
+ raw_audio_parse, GstCaps ** caps, GstRawAudioParseConfig * config);
+
+
+
+static void
+gst_raw_audio_parse_class_init (GstRawAudioParseClass * klass)
+{
+ GObjectClass *object_class;
+ GstElementClass *element_class;
+ GstBaseParseClass *baseparse_class;
+ GstRawBaseParseClass *rawbaseparse_class;
+
+ GST_DEBUG_CATEGORY_INIT (raw_audio_parse_debug, "rawaudioparse", 0,
+ "rawaudioparse element");
+
+ object_class = G_OBJECT_CLASS (klass);
+ element_class = GST_ELEMENT_CLASS (klass);
+ baseparse_class = GST_BASE_PARSE_CLASS (klass);
+ rawbaseparse_class = GST_RAW_BASE_PARSE_CLASS (klass);
+
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&static_sink_template));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&static_src_template));
+
+ object_class->set_property =
+ GST_DEBUG_FUNCPTR (gst_raw_audio_parse_set_property);
+ object_class->get_property =
+ GST_DEBUG_FUNCPTR (gst_raw_audio_parse_get_property);
+
+ baseparse_class->stop = GST_DEBUG_FUNCPTR (gst_raw_audio_parse_stop);
+
+ rawbaseparse_class->set_current_config =
+ GST_DEBUG_FUNCPTR (gst_raw_audio_parse_set_current_config);
+ rawbaseparse_class->get_current_config =
+ GST_DEBUG_FUNCPTR (gst_raw_audio_parse_get_current_config);
+ rawbaseparse_class->set_config_from_caps =
+ GST_DEBUG_FUNCPTR (gst_raw_audio_parse_set_config_from_caps);
+ rawbaseparse_class->get_caps_from_config =
+ GST_DEBUG_FUNCPTR (gst_raw_audio_parse_get_caps_from_config);
+ rawbaseparse_class->get_config_frame_size =
+ GST_DEBUG_FUNCPTR (gst_raw_audio_parse_get_config_frame_size);
+ rawbaseparse_class->is_config_ready =
+ GST_DEBUG_FUNCPTR (gst_raw_audio_parse_is_config_ready);
+ rawbaseparse_class->process = GST_DEBUG_FUNCPTR (gst_raw_audio_parse_process);
+ rawbaseparse_class->is_unit_format_supported =
+ GST_DEBUG_FUNCPTR (gst_raw_audio_parse_is_unit_format_supported);
+ rawbaseparse_class->get_units_per_second =
+ GST_DEBUG_FUNCPTR (gst_raw_audio_parse_get_units_per_second);
+
+ g_object_class_install_property (object_class,
+ PROP_FORMAT,
+ g_param_spec_enum ("format",
+ "Format",
+ "Format of the raw audio stream",
+ gst_raw_audio_parse_format_get_type (),
+ GST_RAW_AUDIO_PARSE_FORMAT_PCM,
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)
+ );
+ g_object_class_install_property (object_class,
+ PROP_PCM_FORMAT,
+ g_param_spec_enum ("pcm-format",
+ "PCM format",
+ "Format of audio samples in PCM stream (ignored if format property is not set to pcm)",
+ GST_TYPE_AUDIO_FORMAT,
+ GST_RAW_AUDIO_PARSE_FORMAT_PCM,
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)
+ );
+ g_object_class_install_property (object_class,
+ PROP_SAMPLE_RATE,
+ g_param_spec_int ("sample-rate",
+ "Sample rate",
+ "Rate of audio samples in raw stream",
+ 1, INT_MAX,
+ DEFAULT_SAMPLE_RATE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)
+ );
+ g_object_class_install_property (object_class,
+ PROP_NUM_CHANNELS,
+ g_param_spec_int ("num-channels",
+ "Number of channels",
+ "Number of channels in raw stream",
+ 1, INT_MAX,
+ DEFAULT_NUM_CHANNELS, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)
+ );
+ g_object_class_install_property (object_class,
+ PROP_INTERLEAVED,
+ g_param_spec_boolean ("interleaved",
+ "Interleaved layout",
+ "True if audio has interleaved layout",
+ DEFAULT_INTERLEAVED, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)
+ );
+ g_object_class_install_property (object_class,
+ PROP_CHANNEL_POSITIONS,
+ g_param_spec_value_array ("channel-positions",
+ "Channel positions",
+ "Channel positions used on the output",
+ g_param_spec_enum ("channel-position",
+ "Channel position",
+ "Channel position of the n-th input",
+ GST_TYPE_AUDIO_CHANNEL_POSITION,
+ GST_AUDIO_CHANNEL_POSITION_NONE,
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS),
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)
+ );
+
+ gst_element_class_set_static_metadata (element_class,
+ "rawaudioparse",
+ "Codec/Parser/Audio",
+ "Converts unformatted data streams into timestamped raw audio frames",
+ "Carlos Rafael Giani <dv@pseudoterminal.org>");
+}
+
+
+static void
+gst_raw_audio_parse_init (GstRawAudioParse * raw_audio_parse)
+{
+ /* Setup configs and select which one shall be the current one from the start. */
+ gst_raw_audio_parse_init_config (&(raw_audio_parse->properties_config));
+ gst_raw_audio_parse_init_config (&(raw_audio_parse->sink_caps_config));
+ /* As required by GstRawBaseParse, ensure that the current configuration
+ * is initially set to be the properties config */
+ raw_audio_parse->current_config = &(raw_audio_parse->properties_config);
+
+ /* Properties config must be valid from the start, so set its ready value
+ * to TRUE, and make sure its bpf value is valid. */
+ raw_audio_parse->properties_config.ready = TRUE;
+ gst_raw_audio_parse_update_config_bpf (&(raw_audio_parse->properties_config));
+}
+
+
+static void
+gst_raw_audio_parse_set_property (GObject * object, guint prop_id,
+ GValue const *value, GParamSpec * pspec)
+{
+ GstBaseParse *base_parse = GST_BASE_PARSE (object);
+ GstRawBaseParse *raw_base_parse = GST_RAW_BASE_PARSE (object);
+ GstRawAudioParse *raw_audio_parse = GST_RAW_AUDIO_PARSE (object);
+
+ /* All properties are handled similarly:
+ * - if the new value is the same as the current value, nothing is done
+ * - the parser lock is held while the new value is set
+ * - if the properties config is the current config, the source caps are
+ * invalidated to ensure that the code in handle_frame pushes a new CAPS
+ * event out
+ * - properties that affect the bpf value call the function to update
+ * the bpf and also call gst_base_parse_set_min_frame_size() to ensure
+ * that the minimum frame size can hold 1 frame (= one sample for each
+ * channel)
+ */
+
+ switch (prop_id) {
+ case PROP_FORMAT:
+ {
+ GstRawAudioParseFormat new_format = g_value_get_enum (value);
+
+ GST_RAW_BASE_PARSE_CONFIG_MUTEX_LOCK (object);
+
+ if (new_format != raw_audio_parse->properties_config.format) {
+ raw_audio_parse->properties_config.format = new_format;
+ gst_raw_audio_parse_update_config_bpf (&
+ (raw_audio_parse->properties_config));
+
+ if (!gst_raw_audio_parse_is_using_sink_caps (raw_audio_parse)) {
+ gst_raw_base_parse_invalidate_src_caps (raw_base_parse);
+ gst_base_parse_set_min_frame_size (base_parse,
+ raw_audio_parse->properties_config.bpf);
+ }
+ }
+
+ GST_RAW_BASE_PARSE_CONFIG_MUTEX_UNLOCK (object);
+ break;
+ }
+
+ case PROP_PCM_FORMAT:
+ {
+ GstAudioFormat new_pcm_format = g_value_get_enum (value);
+
+ GST_RAW_BASE_PARSE_CONFIG_MUTEX_LOCK (object);
+
+ if (new_pcm_format != raw_audio_parse->properties_config.pcm_format) {
+ raw_audio_parse->properties_config.pcm_format = new_pcm_format;
+ gst_raw_audio_parse_update_config_bpf (&
+ (raw_audio_parse->properties_config));
+
+ if (!gst_raw_audio_parse_is_using_sink_caps (raw_audio_parse)) {
+ gst_raw_base_parse_invalidate_src_caps (raw_base_parse);
+ gst_base_parse_set_min_frame_size (base_parse,
+ raw_audio_parse->properties_config.bpf);
+ }
+ }
+
+ GST_RAW_BASE_PARSE_CONFIG_MUTEX_UNLOCK (object);
+ break;
+ }
+
+ case PROP_SAMPLE_RATE:
+ {
+ guint new_sample_rate = g_value_get_int (value);
+
+ GST_RAW_BASE_PARSE_CONFIG_MUTEX_LOCK (object);
+
+ if (new_sample_rate != raw_audio_parse->properties_config.sample_rate) {
+ raw_audio_parse->properties_config.sample_rate = new_sample_rate;
+
+ if (!gst_raw_audio_parse_is_using_sink_caps (raw_audio_parse))
+ gst_raw_base_parse_invalidate_src_caps (raw_base_parse);
+ }
+
+ GST_RAW_BASE_PARSE_CONFIG_MUTEX_UNLOCK (object);
+ break;
+ }
+
+ case PROP_NUM_CHANNELS:
+ {
+ guint new_num_channels = g_value_get_int (value);
+
+ GST_RAW_BASE_PARSE_CONFIG_MUTEX_LOCK (object);
+
+ if (new_num_channels != raw_audio_parse->properties_config.num_channels) {
+ gst_raw_audio_parse_set_config_channels (&
+ (raw_audio_parse->properties_config), new_num_channels, 0, TRUE);
+
+ raw_audio_parse->properties_config.num_channels = new_num_channels;
+ gst_raw_audio_parse_update_config_bpf (&
+ (raw_audio_parse->properties_config));
+
+ if (!gst_raw_audio_parse_is_using_sink_caps (raw_audio_parse)) {
+ gst_raw_base_parse_invalidate_src_caps (raw_base_parse);
+ gst_base_parse_set_min_frame_size (base_parse,
+ raw_audio_parse->properties_config.bpf);
+ }
+ }
+
+ GST_RAW_BASE_PARSE_CONFIG_MUTEX_UNLOCK (object);
+ break;
+ }
+
+ case PROP_INTERLEAVED:
+ {
+ gboolean new_interleaved = g_value_get_boolean (value);
+
+ GST_RAW_BASE_PARSE_CONFIG_MUTEX_LOCK (object);
+
+ if (new_interleaved != raw_audio_parse->properties_config.interleaved) {
+ raw_audio_parse->properties_config.interleaved = new_interleaved;
+
+ if (!gst_raw_audio_parse_is_using_sink_caps (raw_audio_parse))
+ gst_raw_base_parse_invalidate_src_caps (raw_base_parse);
+ }
+
+ GST_RAW_BASE_PARSE_CONFIG_MUTEX_UNLOCK (object);
+ break;
+ }
+
+ case PROP_CHANNEL_POSITIONS:
+ {
+ GValueArray *valarray = g_value_get_boxed (value);
+ GstRawAudioParseConfig *config = &(raw_audio_parse->properties_config);
+
+ /* Sanity check - reject empty arrays */
+ if ((valarray != NULL) && (valarray->n_values == 0)) {
+ GST_ELEMENT_ERROR (raw_audio_parse, LIBRARY, SETTINGS,
+ ("channel position property holds an empty array"), (NULL));
+ break;
+ }
+
+ GST_RAW_BASE_PARSE_CONFIG_MUTEX_LOCK (object);
+
+ if ((valarray == NULL) && (config->num_channels > 0)) {
+ /* NULL value given, and number of channels is nonzero.
+ * Use the default GStreamer positioning. Call
+ * set_config_channels with the set_positions parameter
+ * set to TRUE to ensure the position values are filled. */
+ gst_raw_audio_parse_set_config_channels (&
+ (raw_audio_parse->properties_config), config->num_channels, 0,
+ TRUE);
+ } else {
+ /* Non-NULL value given. Make sure the channel_positions
+ * array in the properties config has enough room, and that
+ * the num_channels value equals the array length. Then copy
+ * the values from the valarray to channel_positions, and
+ * produce a copy of that array in case its channel positions
+ * are not in a valid GStreamer order (to be able to apply
+ * channel reordering later).
+ */
+
+ guint i;
+
+ if (valarray->n_values != config->num_channels) {
+ /* Call with set_positions == FALSE to ensure that
+ * the array is properly allocated but not filled
+ * (it is filled below) */
+ gst_raw_audio_parse_set_config_channels (config, valarray->n_values,
+ 0, FALSE);
+ }
+
+ for (i = 0; i < config->num_channels; ++i) {
+ GValue *val = g_value_array_get_nth (valarray, i);
+ config->channel_positions[i] = g_value_get_enum (val);
+ }
+
+ gst_raw_audio_parse_update_channel_reordering_flag (config);
+ }
+
+ gst_raw_audio_parse_update_config_bpf (&
+ (raw_audio_parse->properties_config));
+
+ if (!gst_raw_audio_parse_is_using_sink_caps (raw_audio_parse)) {
+ gst_raw_base_parse_invalidate_src_caps (raw_base_parse);
+ gst_base_parse_set_min_frame_size (base_parse,
+ raw_audio_parse->properties_config.bpf);
+ }
+
+ GST_RAW_BASE_PARSE_CONFIG_MUTEX_UNLOCK (object);
+ break;
+ }
+
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+
+static void
+gst_raw_audio_parse_get_property (GObject * object, guint prop_id,
+ GValue * value, GParamSpec * pspec)
+{
+ GstRawAudioParse *raw_audio_parse = GST_RAW_AUDIO_PARSE (object);
+
+ switch (prop_id) {
+ case PROP_FORMAT:
+ GST_RAW_BASE_PARSE_CONFIG_MUTEX_LOCK (object);
+ g_value_set_enum (value, raw_audio_parse->properties_config.format);
+ GST_RAW_BASE_PARSE_CONFIG_MUTEX_UNLOCK (object);
+ break;
+
+ case PROP_PCM_FORMAT:
+ GST_RAW_BASE_PARSE_CONFIG_MUTEX_LOCK (object);
+ g_value_set_enum (value, raw_audio_parse->properties_config.pcm_format);
+ GST_RAW_BASE_PARSE_CONFIG_MUTEX_UNLOCK (object);
+ break;
+
+ case PROP_SAMPLE_RATE:
+ GST_RAW_BASE_PARSE_CONFIG_MUTEX_LOCK (object);
+ g_value_set_int (value, raw_audio_parse->properties_config.sample_rate);
+ GST_RAW_BASE_PARSE_CONFIG_MUTEX_UNLOCK (object);
+ break;
+
+ case PROP_NUM_CHANNELS:
+ GST_RAW_BASE_PARSE_CONFIG_MUTEX_LOCK (object);
+ g_value_set_int (value, raw_audio_parse->properties_config.num_channels);
+ GST_RAW_BASE_PARSE_CONFIG_MUTEX_UNLOCK (object);
+ break;
+
+ case PROP_INTERLEAVED:
+ GST_RAW_BASE_PARSE_CONFIG_MUTEX_LOCK (object);
+ g_value_set_boolean (value,
+ raw_audio_parse->properties_config.interleaved);
+ GST_RAW_BASE_PARSE_CONFIG_MUTEX_UNLOCK (object);
+ break;
+
+ case PROP_CHANNEL_POSITIONS:
+ {
+ GstRawAudioParseConfig *config;
+ GValueArray *valarray;
+
+ GST_RAW_BASE_PARSE_CONFIG_MUTEX_LOCK (object);
+
+ valarray = NULL;
+ config = &(raw_audio_parse->properties_config);
+
+ /* Copy channel positions into the valuearray */
+ if (config->num_channels > 0) {
+ guint i;
+ GValue val = G_VALUE_INIT;
+ g_assert (config->channel_positions);
+
+ g_value_init (&val, GST_TYPE_AUDIO_CHANNEL_POSITION);
+ valarray = g_value_array_new (config->num_channels);
+
+ for (i = 0; i < config->num_channels; ++i) {
+ g_value_set_enum (&val, config->channel_positions[i]);
+ g_value_array_insert (valarray, i, &val);
+ }
+
+ g_value_unset (&val);
+ }
+
+ GST_RAW_BASE_PARSE_CONFIG_MUTEX_UNLOCK (object);
+
+ /* Pass on ownership to the value array,
+ * since we don't need it anymore */
+ g_value_take_boxed (value, valarray);
+
+ break;
+ }
+
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+
+static gboolean
+gst_raw_audio_parse_stop (GstBaseParse * parse)
+{
+ GstRawAudioParse *raw_audio_parse = GST_RAW_AUDIO_PARSE (parse);
+
+ /* Sink caps config is not ready until caps come in.
+ * We are stopping processing, the element is being reset,
+ * so the config has to be un-readied.
+ * (Since the properties config is not depending on caps,
+ * its ready status is always TRUE.) */
+ raw_audio_parse->sink_caps_config.ready = FALSE;
+
+ return GST_BASE_PARSE_CLASS (parent_class)->stop (parse);
+}
+
+
+static gboolean
+gst_raw_audio_parse_set_current_config (GstRawBaseParse * raw_base_parse,
+ GstRawBaseParseConfig config)
+{
+ GstRawAudioParse *raw_audio_parse = GST_RAW_AUDIO_PARSE (raw_base_parse);
+
+ switch (config) {
+ case GST_RAW_BASE_PARSE_CONFIG_PROPERTIES:
+ raw_audio_parse->current_config = &(raw_audio_parse->properties_config);
+ break;
+
+ case GST_RAW_BASE_PARSE_CONFIG_SINKCAPS:
+ raw_audio_parse->current_config = &(raw_audio_parse->sink_caps_config);
+ break;
+
+ default:
+ g_assert_not_reached ();
+ }
+
+ return TRUE;
+}
+
+
+static GstRawBaseParseConfig
+gst_raw_audio_parse_get_current_config (GstRawBaseParse * raw_base_parse)
+{
+ GstRawAudioParse *raw_audio_parse = GST_RAW_AUDIO_PARSE (raw_base_parse);
+ return gst_raw_audio_parse_is_using_sink_caps (raw_audio_parse) ?
+ GST_RAW_BASE_PARSE_CONFIG_SINKCAPS : GST_RAW_BASE_PARSE_CONFIG_PROPERTIES;
+}
+
+
+static gboolean
+gst_raw_audio_parse_set_config_from_caps (GstRawBaseParse * raw_base_parse,
+ GstRawBaseParseConfig config, GstCaps * caps)
+{
+ GstRawAudioParse *raw_audio_parse = GST_RAW_AUDIO_PARSE (raw_base_parse);
+ return gst_raw_audio_parse_caps_to_config (raw_audio_parse, caps,
+ gst_raw_audio_parse_get_config_ptr (raw_audio_parse, config));
+}
+
+
+static gboolean
+gst_raw_audio_parse_get_caps_from_config (GstRawBaseParse * raw_base_parse,
+ GstRawBaseParseConfig config, GstCaps ** caps)
+{
+ GstRawAudioParse *raw_audio_parse = GST_RAW_AUDIO_PARSE (raw_base_parse);
+ return gst_raw_audio_parse_config_to_caps (raw_audio_parse, caps,
+ gst_raw_audio_parse_get_config_ptr (raw_audio_parse, config));
+}
+
+
+static gsize
+gst_raw_audio_parse_get_config_frame_size (GstRawBaseParse * raw_base_parse,
+ GstRawBaseParseConfig config)
+{
+ GstRawAudioParse *raw_audio_parse = GST_RAW_AUDIO_PARSE (raw_base_parse);
+ return gst_raw_audio_parse_get_config_ptr (raw_audio_parse, config)->bpf;
+}
+
+
+static gboolean
+gst_raw_audio_parse_is_config_ready (GstRawBaseParse * raw_base_parse,
+ GstRawBaseParseConfig config)
+{
+ GstRawAudioParse *raw_audio_parse = GST_RAW_AUDIO_PARSE (raw_base_parse);
+ return gst_raw_audio_parse_get_config_ptr (raw_audio_parse, config)->ready;
+}
+
+
+static gboolean
+gst_raw_audio_parse_process (GstRawBaseParse * raw_base_parse,
+ GstRawBaseParseConfig config, GstBuffer * in_data, gsize total_num_in_bytes,
+ gsize num_valid_in_bytes, GstBuffer ** processed_data)
+{
+ GstRawAudioParse *raw_audio_parse = GST_RAW_AUDIO_PARSE (raw_base_parse);
+ GstRawAudioParseConfig *config_ptr =
+ gst_raw_audio_parse_get_config_ptr (raw_audio_parse, config);
+
+ if ((config_ptr->format == GST_RAW_AUDIO_PARSE_FORMAT_PCM)
+ && config_ptr->needs_channel_reordering) {
+ /* Need to reorder samples, since they are in an invalid
+ * channel order. */
+
+ GstBuffer *outbuf;
+
+ GST_LOG_OBJECT (raw_audio_parse,
+ "using %" G_GSIZE_FORMAT " bytes out of the %" G_GSIZE_FORMAT
+ " bytes from the input buffer with reordering", num_valid_in_bytes,
+ total_num_in_bytes);
+
+ outbuf =
+ gst_buffer_copy_region (in_data,
+ GST_BUFFER_COPY_FLAGS | GST_BUFFER_COPY_TIMESTAMPS |
+ GST_BUFFER_COPY_META | GST_BUFFER_COPY_MEMORY, 0, num_valid_in_bytes);
+
+ gst_audio_buffer_reorder_channels (outbuf,
+ config_ptr->pcm_format,
+ config_ptr->num_channels,
+ config_ptr->channel_positions, config_ptr->reordered_channel_positions);
+
+ *processed_data = outbuf;
+ } else {
+ /* Nothing needs to be done with the sample data.
+ * Instruct the baseparse class to just take out_size bytes
+ * from the input buffer */
+
+ GST_LOG_OBJECT (raw_audio_parse,
+ "using %" G_GSIZE_FORMAT " bytes out of the %" G_GSIZE_FORMAT
+ " bytes from the input buffer without reordering", num_valid_in_bytes,
+ total_num_in_bytes);
+
+ *processed_data = NULL;
+ }
+
+ return TRUE;
+}
+
+
+static gboolean
+gst_raw_audio_parse_is_unit_format_supported (G_GNUC_UNUSED GstRawBaseParse *
+ raw_base_parse, GstFormat format)
+{
+ switch (format) {
+ case GST_FORMAT_BYTES:
+ case GST_FORMAT_DEFAULT:
+ return TRUE;
+ default:
+ return FALSE;
+ }
+}
+
+
+static void
+gst_raw_audio_parse_get_units_per_second (GstRawBaseParse * raw_base_parse,
+ GstFormat format, GstRawBaseParseConfig config, gsize * units_per_sec_n,
+ gsize * units_per_sec_d)
+{
+ GstRawAudioParse *raw_audio_parse = GST_RAW_AUDIO_PARSE (raw_base_parse);
+ GstRawAudioParseConfig *config_ptr =
+ gst_raw_audio_parse_get_config_ptr (raw_audio_parse, config);
+
+ switch (format) {
+ case GST_FORMAT_BYTES:
+ *units_per_sec_n = config_ptr->sample_rate * config_ptr->bpf;
+ *units_per_sec_d = 1;
+ break;
+
+ case GST_FORMAT_DEFAULT:
+ *units_per_sec_n = config_ptr->sample_rate;
+ *units_per_sec_d = 1;
+ break;
+
+ default:
+ g_assert_not_reached ();
+ }
+}
+
+
+static gboolean
+gst_raw_audio_parse_is_using_sink_caps (GstRawAudioParse * raw_audio_parse)
+{
+ return raw_audio_parse->current_config ==
+ &(raw_audio_parse->sink_caps_config);
+}
+
+
+static GstRawAudioParseConfig *
+gst_raw_audio_parse_get_config_ptr (GstRawAudioParse * raw_audio_parse,
+ GstRawBaseParseConfig config)
+{
+ g_assert (raw_audio_parse->current_config != NULL);
+
+ switch (config) {
+ case GST_RAW_BASE_PARSE_CONFIG_PROPERTIES:
+ return &(raw_audio_parse->properties_config);
+
+ case GST_RAW_BASE_PARSE_CONFIG_SINKCAPS:
+ return &(raw_audio_parse->sink_caps_config);
+
+ default:
+ g_assert (raw_audio_parse->current_config != NULL);
+ return raw_audio_parse->current_config;
+ }
+}
+
+
+static void
+gst_raw_audio_parse_init_config (GstRawAudioParseConfig * config)
+{
+ config->ready = FALSE;
+ config->format = DEFAULT_FORMAT;
+ config->pcm_format = DEFAULT_PCM_FORMAT;
+ config->bpf = 0;
+ config->sample_rate = DEFAULT_SAMPLE_RATE;
+ config->num_channels = DEFAULT_NUM_CHANNELS;
+ config->interleaved = DEFAULT_INTERLEAVED;
+ config->needs_channel_reordering = FALSE;
+
+ gst_raw_audio_parse_set_config_channels (config, config->num_channels, 0,
+ TRUE);
+}
+
+
+static gboolean
+gst_raw_audio_parse_set_config_channels (GstRawAudioParseConfig * config,
+ guint num_channels, guint64 channel_mask, gboolean set_positions)
+{
+ g_assert (num_channels > 0);
+
+ config->num_channels = num_channels;
+ /* Setting this to FALSE, since initially, after setting the channels,
+ * the default GStreamer channel ordering is used. */
+ config->needs_channel_reordering = FALSE;
+
+ /* Set the channel positions based on the given channel mask if set_positions
+ * is set to TRUE. A channel mask of 0 signifies that a fallback mask should be
+ * used for the given number of channels. */
+ if (set_positions) {
+ if (channel_mask == 0)
+ channel_mask = gst_audio_channel_get_fallback_mask (config->num_channels);
+
+ return gst_audio_channel_positions_from_mask (config->num_channels,
+ channel_mask, config->channel_positions);
+ } else {
+ return TRUE;
+ }
+}
+
+
+static gboolean
+gst_raw_audio_parse_update_channel_reordering_flag (GstRawAudioParseConfig *
+ config)
+{
+ g_assert (config->num_channels > 0);
+
+ /* If the channel_positions array contains channel positions which are in an
+ * order that conforms to the valid GStreamer order, ensure that channel
+ * reordering is disabled.
+ * Otherwise, if the order of the positions in the channel_positions array
+ * does not conform to the GStreamer order, ensure it is enabled.
+ */
+
+ if (gst_audio_check_valid_channel_positions (config->channel_positions,
+ config->num_channels, TRUE)) {
+
+ config->needs_channel_reordering = FALSE;
+
+ return TRUE;
+ } else {
+ config->needs_channel_reordering = TRUE;
+ memcpy (config->reordered_channel_positions, config->channel_positions,
+ sizeof (GstAudioChannelPosition) * config->num_channels);
+ return
+ gst_audio_channel_positions_to_valid_order
+ (config->reordered_channel_positions, config->num_channels);
+ }
+}
+
+
+static void
+gst_raw_audio_parse_update_config_bpf (GstRawAudioParseConfig * config)
+{
+ switch (config->format) {
+ case GST_RAW_AUDIO_PARSE_FORMAT_PCM:
+ {
+ GstAudioFormatInfo const *fmt_info =
+ gst_audio_format_get_info (config->pcm_format);
+ g_assert (fmt_info != NULL);
+
+ config->bpf =
+ GST_AUDIO_FORMAT_INFO_WIDTH (fmt_info) * config->num_channels / 8;
+
+ break;
+ }
+
+ case GST_RAW_AUDIO_PARSE_FORMAT_ALAW:
+ case GST_RAW_AUDIO_PARSE_FORMAT_MULAW:
+ /* A-law and mu-law both use 1 byte per sample */
+ config->bpf = 1 * config->num_channels;
+ break;
+
+ default:
+ g_assert_not_reached ();
+ }
+}
+
+
+static gboolean
+gst_raw_audio_parse_caps_to_config (GstRawAudioParse * raw_audio_parse,
+ GstCaps * caps, GstRawAudioParseConfig * config)
+{
+ gboolean ret = FALSE;
+ GstStructure *structure;
+
+ /* Caps might get copied, and the copy needs to be unref'd.
+ * Also, the caller retains ownership over the original caps.
+ * So, to make this mechanism also work with cases where the
+ * caps are *not* copied, ref the original caps here first. */
+ gst_caps_ref (caps);
+
+ structure = gst_caps_get_structure (caps, 0);
+
+ /* For unaligned raw data, the output caps stay the same,
+ * except that audio/x-unaligned-raw becomes audio/x-raw,
+ * since the parser aligns the sample data */
+ if (gst_structure_has_name (structure, "audio/x-unaligned-raw")) {
+ /* Copy the caps to be able to modify them */
+ GstCaps *new_caps = gst_caps_copy (caps);
+ gst_caps_unref (caps);
+ caps = new_caps;
+
+ /* Change the media type to audio/x-raw , otherwise
+ * gst_audio_info_from_caps() won't work */
+ structure = gst_caps_get_structure (caps, 0);
+ gst_structure_set_name (structure, "audio/x-raw");
+ }
+
+ if (gst_structure_has_name (structure, "audio/x-raw")) {
+ guint num_channels;
+ GstAudioInfo info;
+ if (!gst_audio_info_from_caps (&info, caps)) {
+ GST_ERROR_OBJECT (raw_audio_parse,
+ "failed to parse caps %" GST_PTR_FORMAT, (gpointer) caps);
+ goto done;
+ }
+
+ num_channels = GST_AUDIO_INFO_CHANNELS (&info);
+
+ config->format = GST_RAW_AUDIO_PARSE_FORMAT_PCM;
+ config->pcm_format = GST_AUDIO_INFO_FORMAT (&info);
+ config->bpf = GST_AUDIO_INFO_BPF (&info);
+ config->sample_rate = GST_AUDIO_INFO_RATE (&info);
+ config->interleaved =
+ (GST_AUDIO_INFO_LAYOUT (&info) == GST_AUDIO_LAYOUT_INTERLEAVED);
+
+ gst_raw_audio_parse_set_config_channels (config, num_channels, 0, FALSE);
+ memcpy (config->channel_positions, &(GST_AUDIO_INFO_POSITION (&info, 0)),
+ sizeof (GstAudioChannelPosition) * num_channels);
+ } else if (gst_structure_has_name (structure, "audio/x-alaw")
+ || gst_structure_has_name (structure, "audio/x-mulaw")) {
+ gint i;
+ guint64 channel_mask;
+ guint num_channels;
+
+ config->format =
+ gst_structure_has_name (structure,
+ "audio/x-alaw") ? GST_RAW_AUDIO_PARSE_FORMAT_ALAW :
+ GST_RAW_AUDIO_PARSE_FORMAT_MULAW;
+
+ if (!gst_structure_get_int (structure, "rate", &i)) {
+ GST_ERROR_OBJECT (raw_audio_parse,
+ "missing rate value in caps %" GST_PTR_FORMAT, (gpointer) caps);
+ goto done;
+ }
+ config->sample_rate = i;
+
+ if (!gst_structure_get_int (structure, "channels", &i)) {
+ GST_ERROR_OBJECT (raw_audio_parse,
+ "missing channels value in caps %" GST_PTR_FORMAT, (gpointer) caps);
+ goto done;
+ }
+ num_channels = i;
+
+ if (!gst_structure_get (structure, "channel-mask", GST_TYPE_BITMASK,
+ &channel_mask, NULL)) {
+ channel_mask = gst_audio_channel_get_fallback_mask (num_channels);
+ GST_DEBUG_OBJECT (raw_audio_parse,
+ "input caps have no channel mask - using fallback mask %#"
+ G_GINT64_MODIFIER "x for %u channels", channel_mask, num_channels);
+ }
+
+ if (!gst_raw_audio_parse_set_config_channels (config, num_channels,
+ channel_mask, TRUE)) {
+ GST_ERROR_OBJECT (raw_audio_parse,
+ "could not use channel mask %#" G_GINT64_MODIFIER
+ "x for channel positions", channel_mask);
+ goto done;
+ }
+
+ /* A-law and mu-law both use 1 byte per sample */
+ config->bpf = 1 * num_channels;
+ } else {
+ GST_ERROR_OBJECT (raw_audio_parse,
+ "caps %" GST_PTR_FORMAT " have an unsupported media type",
+ (gpointer) caps);
+ goto done;
+ }
+
+ ret = TRUE;
+
+done:
+ gst_caps_unref (caps);
+ if (ret)
+ config->ready = TRUE;
+ return ret;
+}
+
+
+static gboolean
+gst_raw_audio_parse_config_to_caps (GstRawAudioParse * raw_audio_parse,
+ GstCaps ** caps, GstRawAudioParseConfig * config)
+{
+ gboolean ret = TRUE;
+ GstAudioChannelPosition *channel_positions;
+
+ g_assert (caps != NULL);
+
+ if (config->bpf == 0) {
+ GST_ERROR_OBJECT (raw_audio_parse,
+ "cannot convert config to caps - config not filled with valid values");
+ *caps = NULL;
+ return FALSE;
+ }
+
+ channel_positions =
+ config->needs_channel_reordering ? &(config->
+ reordered_channel_positions[0]) : &(config->channel_positions[0]);
+
+ switch (config->format) {
+ case GST_RAW_AUDIO_PARSE_FORMAT_PCM:
+ {
+ GstAudioInfo info;
+ gst_audio_info_init (&info);
+ gst_audio_info_set_format (&info,
+ config->pcm_format,
+ config->sample_rate, config->num_channels, channel_positions);
+
+ *caps = gst_audio_info_to_caps (&info);
+
+ break;
+ }
+
+ case GST_RAW_AUDIO_PARSE_FORMAT_ALAW:
+ case GST_RAW_AUDIO_PARSE_FORMAT_MULAW:
+ {
+ guint64 channel_mask;
+
+ if (!gst_audio_channel_positions_to_mask (channel_positions,
+ config->num_channels, TRUE, &channel_mask)) {
+ GST_ERROR_OBJECT (raw_audio_parse, "invalid channel positions");
+ ret = FALSE;
+ break;
+ }
+
+ *caps = gst_caps_new_simple (
+ (config->format ==
+ GST_RAW_AUDIO_PARSE_FORMAT_ALAW) ? "audio/x-alaw" :
+ "audio/x-mulaw", "rate", G_TYPE_INT, config->sample_rate, "channels",
+ G_TYPE_INT, config->num_channels, "channel-mask", GST_TYPE_BITMASK,
+ channel_mask, NULL);
+
+ break;
+ }
+
+ default:
+ g_assert_not_reached ();
+ ret = FALSE;
+ }
+
+ if (!ret)
+ *caps = NULL;
+
+ return ret;
+}
+
+
+
+
+GType
+gst_raw_audio_parse_format_get_type (void)
+{
+ static GType audio_parse_format_gtype = 0;
+ static const GEnumValue types[] = {
+ {GST_RAW_AUDIO_PARSE_FORMAT_PCM, "PCM", "pcm"},
+ {GST_RAW_AUDIO_PARSE_FORMAT_ALAW, "A-Law", "alaw"},
+ {GST_RAW_AUDIO_PARSE_FORMAT_MULAW, "\302\265-Law", "mulaw"},
+ {0, NULL, NULL}
+ };
+
+ if (!audio_parse_format_gtype)
+ audio_parse_format_gtype =
+ g_enum_register_static ("GstRawAudioParseFormat", types);
+
+ return audio_parse_format_gtype;
+}
diff --git a/gst/rawparse/gstrawaudioparse.h b/gst/rawparse/gstrawaudioparse.h
new file mode 100644
index 0000000..f1e0766
--- /dev/null
+++ b/gst/rawparse/gstrawaudioparse.h
@@ -0,0 +1,131 @@
+/* GStreamer
+ * Copyright (C) <2016> Carlos Rafael Giani <dv at pseudoterminal dot org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GST_RAW_AUDIO_PARSE_H__
+#define __GST_RAW_AUDIO_PARSE_H__
+
+#include <gst/gst.h>
+#include <gst/audio/audio.h>
+#include "gstrawbaseparse.h"
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_RAW_AUDIO_PARSE \
+ (gst_raw_audio_parse_get_type())
+#define GST_RAW_AUDIO_PARSE(obj) \
+ (G_TYPE_CHECK_INSTANCE_CAST((obj), GST_TYPE_RAW_AUDIO_PARSE, GstRawAudioParse))
+#define GST_RAW_AUDIO_PARSE_CAST(obj) \
+ ((GstRawAudioParse *)(obj))
+#define GST_RAW_AUDIO_PARSE_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_CAST((klass), GST_TYPE_RAW_AUDIO_PARSE, GstRawAudioParseClass))
+#define GST_IS_RAW_AUDIO_PARSE(obj) \
+ (G_TYPE_CHECK_INSTANCE_TYPE((obj), GST_TYPE_RAW_AUDIO_PARSE))
+#define GST_IS_RAW_AUDIO_PARSE_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_TYPE((klass), GST_TYPE_RAW_AUDIO_PARSE))
+
+
+typedef enum _GstRawAudioParseFormat GstRawAudioParseFormat;
+
+typedef struct _GstRawAudioParseConfig GstRawAudioParseConfig;
+typedef struct _GstRawAudioParse GstRawAudioParse;
+typedef struct _GstRawAudioParseClass GstRawAudioParseClass;
+
+
+enum _GstRawAudioParseFormat
+{
+ GST_RAW_AUDIO_PARSE_FORMAT_PCM,
+ GST_RAW_AUDIO_PARSE_FORMAT_MULAW,
+ GST_RAW_AUDIO_PARSE_FORMAT_ALAW
+};
+
+
+/* Contains information about the sample rate, format, and channel count to use. */
+struct _GstRawAudioParseConfig
+{
+ /* If TRUE, then this configuration is ready to use */
+ gboolean ready;
+ /* Format of the configuration. Can be PCM, a-law, mu-law. */
+ GstRawAudioParseFormat format;
+ /* If format is set to PCM, this specifies the exact PCM format in use.
+ * Meaningless if format is set to anything other than PCM. */
+ GstAudioFormat pcm_format;
+ /* Bytes per frame. Calculated as: bpf = bytes_per_sample * num_channels
+ * Must be nonzero. This is the size of one frame, the value returned
+ * by the GstRawBaseParseClass get_config_frame_size() vfunc. */
+ guint bpf;
+ /* Sample rate in Hz - must be nonzero */
+ guint sample_rate;
+ /* Number of channels - must be nonzero */
+ guint num_channels;
+ /* TRUE if the data is interleaved, FALSE otherwise */
+ gboolean interleaved;
+
+ /* Array of channel positions, one position per channel; its first
+ * num_channels values are valid. They are computed out of the number
+ * of channels if no positions are explicitely given. */
+ GstAudioChannelPosition channel_positions[64];
+
+ /* If the channel_positions are in a valid GStreamer channel order, then
+ * this is not used, and needs_channel_reordering is FALSE. Otherwise,
+ * this contains the same positions as in channel_positions, but in the
+ * order GStreamer expects. needs_channel_reordering will be TRUE in that
+ * case. This is used for reordering samples in outgoing buffers if
+ * necessary. */
+ GstAudioChannelPosition reordered_channel_positions[64];
+
+ /* TRUE if channel reordering is necessary, FALSE otherwise. See above
+ * for details. */
+ gboolean needs_channel_reordering;
+};
+
+
+struct _GstRawAudioParse
+{
+ GstRawBaseParse parent;
+
+ /*< private > */
+
+ /* Configuration controlled by the object properties. Its ready value
+ * is set to TRUE from the start, so it can be used right away.
+ */
+ GstRawAudioParseConfig properties_config;
+ /* Configuration controlled by the sink caps. Its ready value is
+ * initially set to FALSE until valid sink caps come in. It is set to
+ * FALSE again when the stream-start event is observed.
+ */
+ GstRawAudioParseConfig sink_caps_config;
+ /* Currently active configuration. Points either to properties_config
+ * or to sink_caps_config. This is never NULL. */
+ GstRawAudioParseConfig *current_config;
+};
+
+
+struct _GstRawAudioParseClass
+{
+ GstRawBaseParseClass parent_class;
+};
+
+
+GType gst_raw_audio_parse_get_type (void);
+GType gst_raw_audio_parse_format_get_type (void);
+
+
+G_END_DECLS
+
+#endif
diff --git a/gst/rawparse/gstrawbaseparse.c b/gst/rawparse/gstrawbaseparse.c
new file mode 100644
index 0000000..e90f400
--- /dev/null
+++ b/gst/rawparse/gstrawbaseparse.c
@@ -0,0 +1,748 @@
+/* GStreamer
+ * Copyright (C) <2016> Carlos Rafael Giani <dv at pseudoterminal dot org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+/**
+ * SECTION:gstrawbaseparse
+ * @short_description: Base class for raw media data parsers
+ *
+ * This base class is for parsers which read raw media data and output
+ * timestamped buffers with an integer number of frames inside.
+ *
+ * The format of the raw media data is specified in one of two ways: either,
+ * the information from the sink pad's caps is taken, or the information from
+ * the properties is used (this is chosen by the use-sink-caps property).
+ * These two ways are internally referred to as "configurations". The configuration
+ * that receives its information from the sink pad's caps is called the
+ * "sink caps configuration", while the one that depends on the information from
+ * the properties is the "properties configuration". Configurations have a
+ * "readiness". A configuration is "ready" when it contains valid information.
+ * For example, with an audio parser, a configuration is not ready unless it
+ * contains a valid sample rate, sample format, and channel count.
+ *
+ * The properties configuration must always be ready, even right from the start.
+ * Subclasses must ensure this. The underlying reason is that properties have valid
+ * values right from the start, and with the properties configuration, there is
+ * nothing that readies it before actual data is sent (unlike with the sink caps
+ * configuration, where a sink caps event will ready it before data is pushed
+ * downstream).
+ *
+ * It is possible to switch between the configurations during a stream by
+ * setting the use-sink-caps property. Subclasses typically allow for updating the
+ * properties configuration during a stream by setting the various properties
+ * (like sample-rate for a raw audio parser).
+ * In these cases, the parser will produce a new CAPS event and push it downstream
+ * to announce the caps for the new configuration. This also happens if the sink
+ * caps change.
+ *
+ * A common mistake when trying to parse raw data with no input caps (for example,
+ * a file with raw PCM samples when using rawaudioparse) is to forget to set the
+ * use-sink-caps property to FALSE. In this case, the parser will report an error
+ * when it tries to access the current configuration (because then the sink caps
+ * configuration will be the current one and it will not contain valid values
+ * since no sink caps were seen at this point).
+ *
+ * Subclasses must ensure that the properties configuration is the default one.
+ *
+ * The sink caps configuration is mostly useful with push-based sources, because these
+ * will produce caps events and send them downstream. With pull-based sources, it is
+ * possible that this doesn't happen. Since the sink caps configuration requires a caps
+ * event to arrive at the sinkpad, this will cause the parser to fail then.
+ *
+ * The base class identifies the configurations by means of the GstRawAudioParseConfig
+ * enum. It instructs the subclass to switch between configurations this way, and
+ * also requests information about the current configuration, a configuration's
+ * frame size, its readiness, etc. Subclasses are not required to use any particular
+ * structure for the configuration implementations.
+ *
+ * Use the GST_RAW_BASE_PARSE_CONFIG_MUTEX_LOCK and GST_RAW_BASE_PARSE_CONFIG_MUTEX_UNLOCK
+ * macros to protect configuration modifications.
+ *
+ * <listitem>
+ * <itemizedlist>
+ * <title>Summary of the subclass requirements</title>
+ * <listitem><para>
+ * Sink caps and properties configurations must both be
+ * implemented and supported. It must also be ensured that there is a
+ * "current" configuration.
+ * </para></listitem>
+ * Modifications to the configurations must be protected with the
+ * GstRawBaseParse lock. This is typically necessary when the
+ * properties configuration is modified by setting new property values.
+ * (Note that the lock is held during *all* vfunc calls.)
+ * <listitem><para>
+ * If the properties configuration is updated (typically by
+ * setting new property values), gst_raw_base_parse_invalidate_src_caps()
+ * must be called if the properties config is the current one. This is
+ * necessary to ensure that GstBaseParse pushes a new caps event downstream
+ * which contains caps from the updated configuration.
+ * </para></listitem>
+ * <listitem><para>
+ * In case there are bytes in each frame that aren't part of the actual
+ * payload, the get_overhead_size() vfunc must be defined, and the
+ * @get_config_frame_size() vfunc must return a frame size that includes
+ * the number of non-payload bytes (= the overhead). Otherwise, the
+ * timestamps will incorrectly include the overhead bytes.
+ * </para></listitem>
+ * </listitem>
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <string.h>
+#include "gstrawbaseparse.h"
+
+
+GST_DEBUG_CATEGORY_STATIC (raw_base_parse_debug);
+#define GST_CAT_DEFAULT raw_base_parse_debug
+
+
+enum
+{
+ PROP_0,
+ PROP_USE_SINK_CAPS
+};
+
+
+#define DEFAULT_USE_SINK_CAPS FALSE
+#define INITIAL_PARSER_CONFIG \
+ ((DEFAULT_USE_SINK_CAPS) ? GST_RAW_BASE_PARSE_CONFIG_SINKCAPS : \
+ GST_RAW_BASE_PARSE_CONFIG_PROPERTIES)
+
+
+#define gst_raw_base_parse_parent_class parent_class
+G_DEFINE_ABSTRACT_TYPE (GstRawBaseParse, gst_raw_base_parse,
+ GST_TYPE_BASE_PARSE);
+
+
+static void gst_raw_base_parse_finalize (GObject * object);
+static void gst_raw_base_parse_set_property (GObject * object, guint prop_id,
+ GValue const *value, GParamSpec * pspec);
+static void gst_raw_base_parse_get_property (GObject * object, guint prop_id,
+ GValue * value, GParamSpec * pspec);
+static gboolean gst_raw_base_parse_start (GstBaseParse * parse);
+static gboolean gst_raw_base_parse_stop (GstBaseParse * parse);
+static gboolean gst_raw_base_parse_set_sink_caps (GstBaseParse * parse,
+ GstCaps * caps);
+static GstFlowReturn gst_raw_base_parse_handle_frame (GstBaseParse * parse,
+ GstBaseParseFrame * frame, gint * skipsize);
+static gboolean gst_raw_base_parse_convert (GstBaseParse * parse,
+ GstFormat src_format, gint64 src_value, GstFormat dest_format,
+ gint64 * dest_value);
+
+static gboolean gst_raw_base_parse_is_using_sink_caps (GstRawBaseParse *
+ raw_base_parse);
+static gboolean gst_raw_base_parse_is_gstformat_supported (GstRawBaseParse *
+ raw_base_parse, GstFormat format);
+
+
+
+static void
+gst_raw_base_parse_class_init (GstRawBaseParseClass * klass)
+{
+ GObjectClass *object_class;
+ GstBaseParseClass *baseparse_class;
+
+ GST_DEBUG_CATEGORY_INIT (raw_base_parse_debug, "rawbaseparse", 0,
+ "raw base parse class");
+
+ object_class = G_OBJECT_CLASS (klass);
+ baseparse_class = GST_BASE_PARSE_CLASS (klass);
+
+ object_class->finalize = GST_DEBUG_FUNCPTR (gst_raw_base_parse_finalize);
+ object_class->set_property =
+ GST_DEBUG_FUNCPTR (gst_raw_base_parse_set_property);
+ object_class->get_property =
+ GST_DEBUG_FUNCPTR (gst_raw_base_parse_get_property);
+
+ baseparse_class->start = GST_DEBUG_FUNCPTR (gst_raw_base_parse_start);
+ baseparse_class->stop = GST_DEBUG_FUNCPTR (gst_raw_base_parse_stop);
+ baseparse_class->set_sink_caps =
+ GST_DEBUG_FUNCPTR (gst_raw_base_parse_set_sink_caps);
+ baseparse_class->handle_frame =
+ GST_DEBUG_FUNCPTR (gst_raw_base_parse_handle_frame);
+ baseparse_class->convert = GST_DEBUG_FUNCPTR (gst_raw_base_parse_convert);
+
+ /**
+ * GstRawBaseParse::use-sink-caps:
+ *
+ * Use sink caps configuration. If set to false, the parser
+ * will use the properties configuration instead. It is possible
+ * to switch between these during playback.
+ */
+ g_object_class_install_property (object_class,
+ PROP_USE_SINK_CAPS,
+ g_param_spec_boolean ("use-sink-caps",
+ "Use sink caps",
+ "Use the sink caps for defining the output format",
+ DEFAULT_USE_SINK_CAPS, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)
+ );
+}
+
+
+static void
+gst_raw_base_parse_init (GstRawBaseParse * raw_base_parse)
+{
+ raw_base_parse->src_caps_set = FALSE;
+ g_mutex_init (&(raw_base_parse->config_mutex));
+}
+
+
+static void
+gst_raw_base_parse_finalize (GObject * object)
+{
+ GstRawBaseParse *raw_base_parse = GST_RAW_BASE_PARSE (object);
+
+ g_mutex_clear (&(raw_base_parse->config_mutex));
+
+ G_OBJECT_CLASS (parent_class)->finalize (object);
+}
+
+
+static void
+gst_raw_base_parse_set_property (GObject * object, guint prop_id,
+ GValue const *value, GParamSpec * pspec)
+{
+ GstBaseParse *base_parse = GST_BASE_PARSE (object);
+ GstRawBaseParse *raw_base_parse = GST_RAW_BASE_PARSE (object);
+ GstRawBaseParseClass *klass = GST_RAW_BASE_PARSE_GET_CLASS (object);
+
+ g_assert (klass->is_config_ready);
+ g_assert (klass->set_current_config);
+
+ switch (prop_id) {
+ case PROP_USE_SINK_CAPS:
+ {
+ gboolean new_state, cur_state;
+ GstRawBaseParseConfig new_config;
+
+ GST_RAW_BASE_PARSE_CONFIG_MUTEX_LOCK (object);
+
+ /* Check to ensure nothing is done if the value stays the same */
+ new_state = g_value_get_boolean (value);
+ cur_state = gst_raw_base_parse_is_using_sink_caps (raw_base_parse);
+ if (new_state == cur_state) {
+ GST_RAW_BASE_PARSE_CONFIG_MUTEX_UNLOCK (object);
+ break;
+ }
+
+ GST_DEBUG_OBJECT (raw_base_parse, "switching to %s config",
+ new_state ? "sink caps" : "properties");
+ new_config =
+ new_state ? GST_RAW_BASE_PARSE_CONFIG_SINKCAPS :
+ GST_RAW_BASE_PARSE_CONFIG_PROPERTIES;
+
+ if (!klass->set_current_config (raw_base_parse, new_config)) {
+ GST_RAW_BASE_PARSE_CONFIG_MUTEX_UNLOCK (object);
+ GST_ELEMENT_ERROR (raw_base_parse, STREAM, FAILED,
+ ("could not set new current config"), ("use-sink-caps property: %d",
+ new_state));
+ break;
+ }
+
+ /* Update the minimum frame size if the config is ready. This ensures that
+ * the next buffer that is passed to handle_frame contains complete frames.
+ * If the current config is the properties config, then it will always be
+ * ready, and its frame size will be valid. Ensure that the baseparse minimum
+ * frame size is set properly then.
+ * If the current config is the sink caps config, then it will initially not
+ * be ready until the sink caps are set, so the minimum frame size cannot be
+ * set right here. However, since the caps always come in *before* the actual
+ * data, the config will be readied in the set_sink_caps function, and be ready
+ * by the time handle_frame is called. There, the minimum frame size is set as
+ * well. */
+ if (klass->is_config_ready (raw_base_parse,
+ GST_RAW_BASE_PARSE_CONFIG_CURRENT)) {
+ gsize frame_size = klass->get_config_frame_size (raw_base_parse,
+ GST_RAW_BASE_PARSE_CONFIG_CURRENT);
+ gst_base_parse_set_min_frame_size (base_parse, frame_size);
+ }
+
+ /* Since the current config was switched, the source caps change. Ensure the
+ * new caps are pushed downstream by setting src_caps_set to FALSE: This way,
+ * the next handle_frame call will take care of that. */
+ raw_base_parse->src_caps_set = FALSE;
+
+ GST_RAW_BASE_PARSE_CONFIG_MUTEX_UNLOCK (object);
+
+ break;
+ }
+
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+
+static void
+gst_raw_base_parse_get_property (GObject * object, guint prop_id,
+ GValue * value, GParamSpec * pspec)
+{
+ GstRawBaseParse *raw_base_parse = GST_RAW_BASE_PARSE (object);
+
+ switch (prop_id) {
+ case PROP_USE_SINK_CAPS:
+ GST_RAW_BASE_PARSE_CONFIG_MUTEX_LOCK (object);
+ g_value_set_boolean (value,
+ gst_raw_base_parse_is_using_sink_caps (raw_base_parse));
+ GST_RAW_BASE_PARSE_CONFIG_MUTEX_UNLOCK (object);
+ break;
+
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+
+static gboolean
+gst_raw_base_parse_start (GstBaseParse * parse)
+{
+ GstBaseParse *base_parse = GST_BASE_PARSE (parse);
+ GstRawBaseParse *raw_base_parse = GST_RAW_BASE_PARSE (parse);
+ GstRawBaseParseClass *klass = GST_RAW_BASE_PARSE_GET_CLASS (parse);
+
+ g_assert (klass->set_current_config);
+
+ GST_RAW_BASE_PARSE_CONFIG_MUTEX_LOCK (raw_base_parse);
+
+ /* If the config is ready from the start, set the min frame size
+ * (this will happen with the properties config) */
+ if (klass->is_config_ready (raw_base_parse,
+ GST_RAW_BASE_PARSE_CONFIG_CURRENT)) {
+ gsize frame_size = klass->get_config_frame_size (raw_base_parse,
+ GST_RAW_BASE_PARSE_CONFIG_CURRENT);
+ gst_base_parse_set_min_frame_size (base_parse, frame_size);
+ }
+
+ GST_RAW_BASE_PARSE_CONFIG_MUTEX_UNLOCK (raw_base_parse);
+
+ return TRUE;
+}
+
+
+static gboolean
+gst_raw_base_parse_stop (GstBaseParse * parse)
+{
+ GstRawBaseParse *raw_base_parse = GST_RAW_BASE_PARSE (parse);
+
+ GST_RAW_BASE_PARSE_CONFIG_MUTEX_LOCK (raw_base_parse);
+ raw_base_parse->src_caps_set = FALSE;
+ GST_RAW_BASE_PARSE_CONFIG_MUTEX_UNLOCK (raw_base_parse);
+
+ return TRUE;
+}
+
+
+static gboolean
+gst_raw_base_parse_set_sink_caps (GstBaseParse * parse, GstCaps * caps)
+{
+ gboolean ret = FALSE;
+ GstRawBaseParse *raw_base_parse = GST_RAW_BASE_PARSE (parse);
+ GstRawBaseParseClass *klass = GST_RAW_BASE_PARSE_GET_CLASS (parse);
+
+ g_assert (klass->set_config_from_caps);
+ g_assert (klass->get_caps_from_config);
+ g_assert (klass->get_config_frame_size);
+
+
+ GST_RAW_BASE_PARSE_CONFIG_MUTEX_LOCK (raw_base_parse);
+
+ GST_DEBUG_OBJECT (parse, "getting config from new sink caps");
+
+ /* Convert the new sink caps to sink caps config. This also
+ * readies the config. */
+ ret =
+ klass->set_config_from_caps (raw_base_parse,
+ GST_RAW_BASE_PARSE_CONFIG_SINKCAPS, caps);
+ if (!ret) {
+ GST_ERROR_OBJECT (raw_base_parse, "could not get config from sink caps");
+ goto done;
+ }
+
+ /* If the sink caps config is currently active, push caps downstream,
+ * set the minimum frame size (to guarantee that input buffers hold
+ * complete frames), and update the src_caps_set flag. If the sink
+ * caps config isn't the currently active config, just exit, since in
+ * that case, the caps will always be pushed downstream in handle_frame. */
+ if (gst_raw_base_parse_is_using_sink_caps (raw_base_parse)) {
+ GstCaps *new_src_caps;
+ gsize frame_size;
+
+ GST_DEBUG_OBJECT (parse,
+ "sink caps config is the current one; trying to push new caps downstream");
+
+ /* Convert back to caps. The caps may have changed, for example
+ * audio/x-unaligned-raw may have been replaced with audio/x-raw.
+ * (Also, this keeps the behavior in sync with that of the block
+ * in handle_frame that pushes caps downstream if not done already.) */
+ if (!klass->get_caps_from_config (raw_base_parse,
+ GST_RAW_BASE_PARSE_CONFIG_CURRENT, &new_src_caps)) {
+ GST_ERROR_OBJECT (raw_base_parse,
+ "could not get src caps from current config");
+ goto done;
+ }
+
+ GST_DEBUG_OBJECT (raw_base_parse,
+ "got new sink caps; updating src caps to %" GST_PTR_FORMAT,
+ (gpointer) new_src_caps);
+
+ frame_size =
+ klass->get_config_frame_size (raw_base_parse,
+ GST_RAW_BASE_PARSE_CONFIG_CURRENT);
+ gst_base_parse_set_min_frame_size (parse, frame_size);
+
+ raw_base_parse->src_caps_set = TRUE;
+
+ GST_RAW_BASE_PARSE_CONFIG_MUTEX_UNLOCK (raw_base_parse);
+
+ /* Push caps outside of the lock */
+ gst_pad_push_event (GST_BASE_PARSE_SRC_PAD (raw_base_parse),
+ gst_event_new_caps (new_src_caps)
+ );
+
+ gst_caps_unref (new_src_caps);
+ } else {
+ GST_RAW_BASE_PARSE_CONFIG_MUTEX_UNLOCK (raw_base_parse);
+ }
+
+ ret = TRUE;
+
+done:
+ return ret;
+}
+
+
+static GstFlowReturn
+gst_raw_base_parse_handle_frame (GstBaseParse * parse,
+ GstBaseParseFrame * frame, gint * skipsize)
+{
+ gsize in_size, out_size;
+ guint frame_size;
+ guint num_out_frames;
+ gsize units_n, units_d;
+ guint64 buffer_duration;
+ GstFlowReturn flow_ret = GST_FLOW_OK;
+ GstEvent *new_caps_event = NULL;
+ GstRawBaseParse *raw_base_parse = GST_RAW_BASE_PARSE (parse);
+ GstRawBaseParseClass *klass = GST_RAW_BASE_PARSE_GET_CLASS (parse);
+
+ g_assert (klass->is_config_ready);
+ g_assert (klass->get_caps_from_config);
+ g_assert (klass->get_config_frame_size);
+ g_assert (klass->get_units_per_second);
+
+
+ /* We never skip any bytes this way. Instead, subclass takes care
+ * of skipping any overhead (necessary, since the way it needs to
+ * be skipped is completely subclass specific). */
+ *skipsize = 0;
+
+
+ /* The operations below access the current config. Protect
+ * against race conditions by using the object lock. */
+ GST_RAW_BASE_PARSE_CONFIG_MUTEX_LOCK (raw_base_parse);
+
+
+ /* If the source pad caps haven't been set yet, or need to be
+ * set again, do so now, BEFORE any buffers are pushed out */
+ if (G_UNLIKELY (!raw_base_parse->src_caps_set)) {
+ GstCaps *new_src_caps;
+
+ if (G_UNLIKELY (!klass->is_config_ready (raw_base_parse,
+ GST_RAW_BASE_PARSE_CONFIG_CURRENT))) {
+ /* The current configuration is not ready. No caps can be
+ * generated out of it.
+ * The most likely reason for this is that the sink caps config
+ * is the current one and no valid sink caps have been pushed
+ * by upstream. Report the problem and exit. */
+
+ if (gst_raw_base_parse_is_using_sink_caps (raw_base_parse)) {
+ goto config_not_ready;
+ } else {
+ /* This should not be reached if the property config is active */
+ g_assert_not_reached ();
+ }
+ }
+
+ GST_DEBUG_OBJECT (parse,
+ "setting src caps since this has not been done yet");
+
+ /* Convert the current config to a caps structure to
+ * inform downstream about the new format */
+ if (!klass->get_caps_from_config (raw_base_parse,
+ GST_RAW_BASE_PARSE_CONFIG_CURRENT, &new_src_caps)) {
+ GST_ERROR_OBJECT (raw_base_parse,
+ "could not get src caps from current config");
+ flow_ret = GST_FLOW_NOT_NEGOTIATED;
+ goto error_locked;
+ }
+
+ new_caps_event = gst_event_new_caps (new_src_caps);
+ gst_caps_unref (new_src_caps);
+
+ raw_base_parse->src_caps_set = TRUE;
+ }
+
+ frame_size =
+ klass->get_config_frame_size (raw_base_parse,
+ GST_RAW_BASE_PARSE_CONFIG_CURRENT);
+
+
+ in_size = gst_buffer_get_size (frame->buffer);
+
+ /* gst_base_parse_set_min_frame_size() is called when the current
+ * configuration changes and the change affects the frame size. This
+ * means that a buffer must contain at least as many bytes as indicated
+ * by the frame size. If there are fewer inside an error occurred;
+ * either something in the parser went wrong, or the min frame size
+ * wasn't updated properly. */
+ g_assert (in_size >= frame_size);
+
+ /* Determine how many complete frames would fit in the input buffer.
+ * Then check if this amount exceeds the maximum number of frames
+ * as indicated by the subclass. */
+ num_out_frames = (in_size / frame_size);
+ if (klass->get_max_frames_per_buffer) {
+ guint max_num_out_frames = klass->get_max_frames_per_buffer (raw_base_parse,
+ GST_RAW_BASE_PARSE_CONFIG_CURRENT);
+ num_out_frames = MIN (num_out_frames, max_num_out_frames);
+ }
+
+ /* Ensure that the size of the buffers that get pushed downstream
+ * is always an integer multiple of the frame size to prevent cases
+ * where downstream gets buffers with incomplete frames. */
+ out_size = num_out_frames * frame_size;
+
+ /* Set the overhead size to ensure that timestamping excludes these
+ * extra overhead bytes. */
+ frame->overhead =
+ klass->get_overhead_size ? klass->get_overhead_size (raw_base_parse,
+ GST_RAW_BASE_PARSE_CONFIG_CURRENT) : 0;
+
+ g_assert (out_size >= (guint) (frame->overhead));
+ out_size -= frame->overhead;
+
+ GST_LOG_OBJECT (raw_base_parse,
+ "%" G_GSIZE_FORMAT " bytes input %" G_GSIZE_FORMAT
+ " bytes output (%u frame(s)) %d bytes overhead", in_size, out_size,
+ num_out_frames, frame->overhead);
+
+ /* Calculate buffer duration */
+ klass->get_units_per_second (raw_base_parse, GST_FORMAT_BYTES,
+ GST_RAW_BASE_PARSE_CONFIG_CURRENT, &units_n, &units_d);
+ if (units_n == 0 || units_d == 0)
+ buffer_duration = GST_CLOCK_TIME_NONE;
+ else
+ buffer_duration =
+ gst_util_uint64_scale (out_size, GST_SECOND * units_d, units_n);
+
+ if (klass->process) {
+ GstBuffer *processed_data = NULL;
+
+ if (!klass->process (raw_base_parse, GST_RAW_BASE_PARSE_CONFIG_CURRENT,
+ frame->buffer, in_size, out_size, &processed_data))
+ goto process_error;
+
+ frame->out_buffer = processed_data;
+ } else {
+ frame->out_buffer = NULL;
+ }
+
+ /* Set the duration of the output buffer, or if none exists, of
+ * the input buffer. Do this after the process() call, since in
+ * case out_buffer is set, the subclass has created a new buffer.
+ * Instead of requiring subclasses to set the duration (which
+ * anyway must always be buffer_duration), let's do it here. */
+ if (frame->out_buffer != NULL)
+ GST_BUFFER_DURATION (frame->out_buffer) = buffer_duration;
+ else
+ GST_BUFFER_DURATION (frame->buffer) = buffer_duration;
+
+ /* Access to the current config is not needed in subsequent
+ * operations, so the lock can be released */
+ GST_RAW_BASE_PARSE_CONFIG_MUTEX_UNLOCK (raw_base_parse);
+
+
+ /* If any new caps have to be pushed downstrean, do so
+ * *before* the frame is finished */
+ if (G_UNLIKELY (new_caps_event != NULL)) {
+ gst_pad_push_event (GST_BASE_PARSE_SRC_PAD (raw_base_parse),
+ new_caps_event);
+ new_caps_event = NULL;
+ }
+
+ gst_base_parse_finish_frame (parse, frame, out_size + frame->overhead);
+
+
+ return flow_ret;
+
+
+config_not_ready:
+ GST_RAW_BASE_PARSE_CONFIG_MUTEX_UNLOCK (raw_base_parse);
+ GST_ELEMENT_ERROR (parse, STREAM, FORMAT,
+ ("sink caps config is the current config, and it is not ready -"
+ "upstream may not have pushed a caps event yet"), (NULL));
+ flow_ret = GST_FLOW_ERROR;
+ goto error_end;
+
+process_error:
+ GST_RAW_BASE_PARSE_CONFIG_MUTEX_UNLOCK (raw_base_parse);
+ GST_ELEMENT_ERROR (parse, STREAM, DECODE, ("could not process data"), (NULL));
+ flow_ret = GST_FLOW_ERROR;
+ goto error_end;
+
+error_locked:
+ GST_RAW_BASE_PARSE_CONFIG_MUTEX_UNLOCK (raw_base_parse);
+ goto error_end;
+
+error_end:
+ frame->flags |= GST_BASE_PARSE_FRAME_FLAG_DROP;
+ if (new_caps_event != NULL)
+ gst_event_unref (new_caps_event);
+ return flow_ret;
+}
+
+
+static gboolean
+gst_raw_base_parse_convert (GstBaseParse * parse, GstFormat src_format,
+ gint64 src_value, GstFormat dest_format, gint64 * dest_value)
+{
+ GstRawBaseParse *raw_base_parse = GST_RAW_BASE_PARSE (parse);
+ GstRawBaseParseClass *klass = GST_RAW_BASE_PARSE_GET_CLASS (parse);
+ gboolean ret = TRUE;
+ gsize units_n, units_d;
+
+ g_assert (klass->is_config_ready);
+ g_assert (klass->get_units_per_second);
+
+
+ /* The operations below access the current config. Protect
+ * against race conditions by using the object lock. */
+ GST_RAW_BASE_PARSE_CONFIG_MUTEX_LOCK (raw_base_parse);
+
+
+ if (!klass->is_config_ready (raw_base_parse,
+ GST_RAW_BASE_PARSE_CONFIG_CURRENT)) {
+ if (gst_raw_base_parse_is_using_sink_caps (raw_base_parse)) {
+ goto config_not_ready;
+ } else {
+ /* This should not be reached if the property config is active */
+ g_assert_not_reached ();
+ }
+ }
+
+ if (G_UNLIKELY (src_format == dest_format)) {
+ *dest_value = src_value;
+ } else if ((src_format == GST_FORMAT_TIME || dest_format == GST_FORMAT_TIME)
+ && gst_raw_base_parse_is_gstformat_supported (raw_base_parse, src_format)
+ && gst_raw_base_parse_is_gstformat_supported (raw_base_parse, src_format)) {
+ /* Perform conversions here if either the src or dest format
+ * are GST_FORMAT_TIME and the other format is supported by
+ * the subclass. This is because we perform TIME<->non-TIME
+ * conversions here. Typically, subclasses only support
+ * BYTES and DEFAULT formats. */
+
+ if (src_format == GST_FORMAT_TIME) {
+ /* The source format is time, so perform a TIME -> non-TIME conversion */
+ klass->get_units_per_second (raw_base_parse, dest_format,
+ GST_RAW_BASE_PARSE_CONFIG_CURRENT, &units_n, &units_d);
+ *dest_value = (units_n == 0
+ || units_d == 0) ? src_value : gst_util_uint64_scale (src_value,
+ units_n, GST_SECOND * units_d);
+ } else {
+ /* The dest format is time, so perform a non-TIME -> TIME conversion */
+ klass->get_units_per_second (raw_base_parse, src_format,
+ GST_RAW_BASE_PARSE_CONFIG_CURRENT, &units_n, &units_d);
+ *dest_value = (units_n == 0
+ || units_d == 0) ? src_value : gst_util_uint64_scale (src_value,
+ GST_SECOND * units_d, units_n);
+ }
+ } else {
+ /* Fallback for other conversions */
+ ret =
+ gst_base_parse_convert_default (parse, src_format, src_value,
+ dest_format, dest_value);
+ }
+
+ GST_DEBUG_OBJECT (parse,
+ "converted %s -> %s %" G_GINT64_FORMAT " -> %" GST_TIME_FORMAT,
+ gst_format_get_name (src_format), gst_format_get_name (dest_format),
+ src_value, GST_TIME_ARGS (*dest_value));
+
+ GST_RAW_BASE_PARSE_CONFIG_MUTEX_UNLOCK (raw_base_parse);
+ return ret;
+
+
+config_not_ready:
+ GST_RAW_BASE_PARSE_CONFIG_MUTEX_UNLOCK (raw_base_parse);
+ GST_ELEMENT_ERROR (parse, STREAM, FORMAT,
+ ("sink caps config is the current config, and it is not ready - "
+ "upstream may not have pushed a caps event yet"), (NULL));
+ return FALSE;
+}
+
+
+static gboolean
+gst_raw_base_parse_is_using_sink_caps (GstRawBaseParse * raw_base_parse)
+{
+ /* must be called with lock */
+ GstRawBaseParseClass *klass = GST_RAW_BASE_PARSE_GET_CLASS (raw_base_parse);
+ g_assert (klass->get_current_config);
+ return klass->get_current_config (raw_base_parse) ==
+ GST_RAW_BASE_PARSE_CONFIG_SINKCAPS;
+}
+
+
+static gboolean
+gst_raw_base_parse_is_gstformat_supported (GstRawBaseParse * raw_base_parse,
+ GstFormat format)
+{
+ /* must be called with lock */
+ GstRawBaseParseClass *klass = GST_RAW_BASE_PARSE_GET_CLASS (raw_base_parse);
+ g_assert (klass->is_unit_format_supported);
+ return klass->is_unit_format_supported (raw_base_parse, format);
+}
+
+
+
+
+
+/**
+ * gst_raw_base_parse_invalidate_src_caps:
+ * @raw_base_parse: a #GstRawBaseParse instance
+ *
+ * Flags the current source caps as invalid. Before the next downstream
+ * buffer push, @get_caps_from_config is called, and the created caps are
+ * pushed downstream in a new caps event, This is used if for example the
+ * properties configuration is modified in the subclass.
+ *
+ * Note that this must be called with the parser lock held. Use the
+ * GST_RAW_BASE_PARSE_CONFIG_MUTEX_LOCK() and GST_RAW_BASE_PARSE_CONFIG_MUTEX_UNLOCK()
+ * macros for this purpose.
+ */
+void
+gst_raw_base_parse_invalidate_src_caps (GstRawBaseParse * raw_base_parse)
+{
+ /* must be called with lock */
+ g_assert (raw_base_parse != NULL);
+ raw_base_parse->src_caps_set = FALSE;
+}
diff --git a/gst/rawparse/gstrawbaseparse.h b/gst/rawparse/gstrawbaseparse.h
new file mode 100644
index 0000000..519b409
--- /dev/null
+++ b/gst/rawparse/gstrawbaseparse.h
@@ -0,0 +1,207 @@
+/* GStreamer
+ * Copyright (C) <2016> Carlos Rafael Giani <dv at pseudoterminal dot org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GST_RAW_BASE_PARSE_H__
+#define __GST_RAW_BASE_PARSE_H__
+
+#include <gst/gst.h>
+#include <gst/base/base.h>
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_RAW_BASE_PARSE \
+ (gst_raw_base_parse_get_type())
+#define GST_RAW_BASE_PARSE(obj) \
+ (G_TYPE_CHECK_INSTANCE_CAST((obj), GST_TYPE_RAW_BASE_PARSE, GstRawBaseParse))
+#define GST_RAW_BASE_PARSE_CAST(obj) \
+ ((GstRawBaseParse *)(obj))
+#define GST_RAW_BASE_PARSE_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_CAST((klass), GST_TYPE_RAW_BASE_PARSE, GstRawBaseParseClass))
+#define GST_RAW_BASE_PARSE_GET_CLASS(obj) \
+ (G_TYPE_INSTANCE_GET_CLASS((obj), GST_TYPE_RAW_BASE_PARSE, GstRawBaseParseClass))
+#define GST_IS_RAW_BASE_PARSE(obj) \
+ (G_TYPE_CHECK_INSTANCE_TYPE((obj), GST_TYPE_RAW_BASE_PARSE))
+#define GST_IS_RAW_BASE_PARSE_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_TYPE((klass), GST_TYPE_RAW_BASE_PARSE))
+
+#define GST_RAW_BASE_PARSE_CONFIG_MUTEX_LOCK(obj) g_mutex_lock(&(((GstRawBaseParse *)(obj))->config_mutex))
+#define GST_RAW_BASE_PARSE_CONFIG_MUTEX_UNLOCK(obj) g_mutex_unlock(&(((GstRawBaseParse *)(obj))->config_mutex))
+
+
+typedef enum _GstRawBaseParseConfig GstRawBaseParseConfig;
+typedef struct _GstRawBaseParse GstRawBaseParse;
+typedef struct _GstRawBaseParseClass GstRawBaseParseClass;
+
+
+/**
+ * GstRawBaseParseConfig:
+ * @GST_RAW_BASE_PARSE_CONFIG_CURRENT: configuration that is currently active
+ * @GST_RAW_BASE_PARSE_CONFIG_SINKCAPS: configuration that is defined by the input sink caps
+ * @GST_RAW_BASE_PARSE_CONFIG_PROPERTIES: configuration that is defined by class properties
+ *
+ * Identifier for the type of parser configuration.
+ */
+enum _GstRawBaseParseConfig
+{
+ GST_RAW_BASE_PARSE_CONFIG_CURRENT = 1,
+ GST_RAW_BASE_PARSE_CONFIG_SINKCAPS,
+ GST_RAW_BASE_PARSE_CONFIG_PROPERTIES
+};
+
+
+/**
+ * GstRawBaseParse:
+ *
+ * The opaque #GstRawBaseParse data structure.
+ */
+struct _GstRawBaseParse
+{
+ GstBaseParse parent;
+
+ /*< private > */
+
+ /* TRUE if the source pad caps have been set already. This is used
+ * for checking if the source pad caps have to be set. */
+ gboolean src_caps_set;
+
+ /* Mutex which protects access to and modifications on the configs. */
+ GMutex config_mutex;
+};
+
+
+/**
+ * GstRawBaseParseClass:
+ * @parent_class: The parent class structure
+ * @set_current_config: Sets the new current configuration. Subclasses must internally
+ * switch to this new configuration. Return FALSE if this failed,
+ * TRUE otherwise.
+ * @get_current_config: Gets the current configuration. All return values except
+ * except GST_RAW_BASE_PARSE_CONFIG_CURRENT are valid.
+ * @set_config_from_caps: Parses the caps and copies its information to the configuration.
+ * Returns FALSE if this failed, TRUE otheriwse. Specified caps
+ * are not unref'd.
+ * @get_caps_from_config: Creates a new caps structure out of the information from the
+ * specified configuration. Ownership over the returned caps are
+ * transferred to the caller. If something fails during the caps
+ * creation, the vfunc must make sure to destroy any partially
+ * created caps; the *caps value is always set to NULL in case of
+ * failure. Returns FALSE in case of failure,
+ * TRUE in case of success.
+ * @get_config_frame_size: Gets the size of one frame, in bytes, from the specified
+ * configuration. This must be the size of the complete frame,
+ * including any overhead (metadata, headers, padding bytes etc.).
+ * @get_max_frames_per_buffer: Optional.
+ * Returns up to how many complete frames one output buffer may
+ * contain. The value must be nonzero. This is useful for example
+ * with video parsers which need to ensure that one output buffer
+ * contains only one video frame, even if the input buffer contains
+ * several complete frames. If this vfunc is not set, then there
+ * is no maximum number of frames per buffer - the parser reads
+ * as many complete frames as possible from the input buffer.
+ * @is_config_ready: Returns TRUE if the specified configuration is ready, FALSE
+ * otherwise.
+ * @process: Optional.
+ * This is useful to do any last minute processing before the
+ * data is pushed downstream. One example is channel reordering
+ * in audio parsers.
+ * in_data is the complete input buffer, total_num_in_bytes is
+ * the total amount of bytes this input buffer contains (including
+ * excess bytes that form an incomplete rame). num_valid_in_bytes
+ * is the subset of these bytes that are to be pushed downstream.
+ * If for example the frame size is 4, and total_num_in_bytes is
+ * 411, then num_valid_in_bytes will be 408, since the last 3
+ * bytes form an incomplete frame.
+ * The value of num_valid_in_bytes excludes the overhead bytes
+ * indicated by @get_overhead_size.
+ * If the subclass creates a new buffer here, *processed_data
+ * must be set to the new buffer's pointer. If the subclass does
+ * not create any new buffer, and just expects the first
+ * num_valid_in_bytes of the input buffer to be pushed downstream,
+ * then *processed_data must be set to NULL.
+ * If this vfunc is not set, then the parser behaves as if this
+ * vfunc set *processed_data data to NULL.
+ * @is_unit_format_supported: Returns TRUE if the given format is supported by the
+ * @get_units_per_second function, FALSE otherwise.
+ * @get_units_per_second: Returns how many units per second exist for a given format.
+ * For example, with an audio parser and format DEFAULT, the units
+ * per second are typically the number of samples per second
+ * (= the sample rate). For video parsers, this would be the frame
+ * rate. If BYTES or TIME are used as format, then the result must
+ * not include any extra overhead (metadata, headers, padding etc.)
+ * @get_overhead_size: Optional.
+ * Returns the number of bytes that make up the portion of a frame
+ * that isn't payload. Examples are padding bytes, headers, and
+ * other kinds of metadata. If this vfunc isn't defined, then an
+ * overhead size of 0 bytes is assumed.
+ *
+ * Subclasses are required to override all vfuncs except for @process, which is optional.
+ * The raw base parser lock is held during all vfunc calls.
+ */
+struct _GstRawBaseParseClass
+{
+ GstBaseParseClass parent_class;
+
+ gboolean (*set_current_config) (GstRawBaseParse *raw_base_parse,
+ GstRawBaseParseConfig config);
+ GstRawBaseParseConfig (*get_current_config) (GstRawBaseParse *raw_base_parse);
+
+ gboolean (*set_config_from_caps) (GstRawBaseParse * raw_base_parse,
+ GstRawBaseParseConfig config,
+ GstCaps * caps);
+ gboolean (*get_caps_from_config) (GstRawBaseParse * raw_base_parse,
+ GstRawBaseParseConfig config,
+ GstCaps ** caps);
+
+ gsize (*get_config_frame_size) (GstRawBaseParse * raw_base_parse,
+ GstRawBaseParseConfig config);
+ guint (*get_max_frames_per_buffer) (GstRawBaseParse * raw_base_parse,
+ GstRawBaseParseConfig config);
+
+ gboolean (*is_config_ready) (GstRawBaseParse * raw_base_parse,
+ GstRawBaseParseConfig config);
+
+ gboolean (*process) (GstRawBaseParse * raw_base_parse,
+ GstRawBaseParseConfig config,
+ GstBuffer * in_data,
+ gsize total_num_in_bytes,
+ gsize num_valid_in_bytes,
+ GstBuffer ** processed_data);
+
+ gboolean (*is_unit_format_supported) (GstRawBaseParse * raw_base_parse,
+ GstFormat format);
+ void (*get_units_per_second) (GstRawBaseParse * raw_base_parse,
+ GstFormat format,
+ GstRawBaseParseConfig config,
+ gsize * units_per_sec_n,
+ gsize * units_per_sec_d);
+
+ gint (*get_overhead_size) (GstRawBaseParse * raw_base_parse,
+ GstRawBaseParseConfig config);
+};
+
+
+void gst_raw_base_parse_invalidate_src_caps (GstRawBaseParse * raw_base_parse);
+
+
+GType gst_raw_base_parse_get_type (void);
+
+
+G_END_DECLS
+
+#endif
diff --git a/gst/rawparse/gstrawparse.c b/gst/rawparse/gstrawparse.c
deleted file mode 100644
index bd2ee11..0000000
--- a/gst/rawparse/gstrawparse.c
+++ /dev/null
@@ -1,1105 +0,0 @@
-/* GStreamer
- * Copyright (C) 2006 David A. Schleef <ds@schleef.org>
- * Copyright (C) 2007 Sebastian Dröge <slomo@circular-chaos.org>
- *
- * gstrawparse.c:
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-/* TODO: - Add locking where appropiate
- */
-
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#include <string.h>
-
-#include <gst/gst.h>
-#include <gst/base/gstbasetransform.h>
-#include <gst/base/gstadapter.h>
-
-#include "gstrawparse.h"
-
-static void gst_raw_parse_dispose (GObject * object);
-
-static gboolean gst_raw_parse_sink_activate (GstPad * sinkpad,
- GstObject * parent);
-static gboolean gst_raw_parse_sink_activatemode (GstPad * sinkpad,
- GstObject * parent, GstPadMode mode, gboolean active);
-static void gst_raw_parse_loop (GstElement * element);
-static GstStateChangeReturn gst_raw_parse_change_state (GstElement * element,
- GstStateChange transition);
-static GstFlowReturn gst_raw_parse_chain (GstPad * pad, GstObject * parent,
- GstBuffer * buffer);
-static gboolean gst_raw_parse_sink_event (GstPad * pad, GstObject * parent,
- GstEvent * event);
-static gboolean gst_raw_parse_src_event (GstPad * pad, GstObject * parent,
- GstEvent * event);
-static gboolean gst_raw_parse_src_query (GstPad * pad, GstObject * parent,
- GstQuery * query);
-static gboolean gst_raw_parse_convert (GstRawParse * rp, GstFormat src_format,
- gint64 src_value, GstFormat dest_format, gint64 * dest_value);
-static gboolean gst_raw_parse_handle_seek_pull (GstRawParse * rp,
- GstEvent * event);
-
-static void gst_raw_parse_reset (GstRawParse * rp);
-
-static GstStaticPadTemplate gst_raw_parse_sink_pad_template =
-GST_STATIC_PAD_TEMPLATE ("sink",
- GST_PAD_SINK,
- GST_PAD_ALWAYS,
- GST_STATIC_CAPS_ANY);
-
-GST_DEBUG_CATEGORY_STATIC (gst_raw_parse_debug);
-#define GST_CAT_DEFAULT gst_raw_parse_debug
-
-static void gst_raw_parse_class_init (GstRawParseClass * klass);
-static void gst_raw_parse_init (GstRawParse * clip, GstRawParseClass * g_class);
-
-static GstElementClass *parent_class;
-
-/* we can't use G_DEFINE_ABSTRACT_TYPE because we need the klass in the _init
- * method to get to the padtemplates */
-GType
-gst_raw_parse_get_type (void)
-{
- static volatile gsize raw_parse_type = 0;
-
- if (g_once_init_enter (&raw_parse_type)) {
- GType _type;
-
- _type = g_type_register_static_simple (GST_TYPE_ELEMENT,
- "GstRawParse", sizeof (GstRawParseClass),
- (GClassInitFunc) gst_raw_parse_class_init, sizeof (GstRawParse),
- (GInstanceInitFunc) gst_raw_parse_init, G_TYPE_FLAG_ABSTRACT);
-
- g_once_init_leave (&raw_parse_type, _type);
- }
- return raw_parse_type;
-}
-
-static void
-gst_raw_parse_class_init (GstRawParseClass * klass)
-{
- GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
- GstElementClass *gstelement_class = GST_ELEMENT_CLASS (klass);
-
- parent_class = g_type_class_peek_parent (klass);
-
- gobject_class->dispose = gst_raw_parse_dispose;
-
- gstelement_class->change_state =
- GST_DEBUG_FUNCPTR (gst_raw_parse_change_state);
-
- gst_element_class_add_static_pad_template (gstelement_class,
- &gst_raw_parse_sink_pad_template);
-
- GST_DEBUG_CATEGORY_INIT (gst_raw_parse_debug, "rawparse", 0,
- "rawparse element");
-}
-
-static void
-gst_raw_parse_init (GstRawParse * rp, GstRawParseClass * g_class)
-{
- GstPadTemplate *src_pad_template;
- GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
-
- rp->sinkpad =
- gst_pad_new_from_static_template (&gst_raw_parse_sink_pad_template,
- "sink");
- gst_pad_set_chain_function (rp->sinkpad,
- GST_DEBUG_FUNCPTR (gst_raw_parse_chain));
- gst_pad_set_event_function (rp->sinkpad,
- GST_DEBUG_FUNCPTR (gst_raw_parse_sink_event));
- gst_pad_set_activate_function (rp->sinkpad,
- GST_DEBUG_FUNCPTR (gst_raw_parse_sink_activate));
- gst_pad_set_activatemode_function (rp->sinkpad,
- GST_DEBUG_FUNCPTR (gst_raw_parse_sink_activatemode));
- gst_element_add_pad (GST_ELEMENT (rp), rp->sinkpad);
-
- src_pad_template = gst_element_class_get_pad_template (element_class, "src");
-
- if (src_pad_template) {
- rp->srcpad = gst_pad_new_from_template (src_pad_template, "src");
- } else {
- g_warning ("Subclass didn't specify a src pad template");
- g_assert_not_reached ();
- }
-
- gst_pad_set_event_function (rp->srcpad,
- GST_DEBUG_FUNCPTR (gst_raw_parse_src_event));
- gst_pad_set_query_function (rp->srcpad,
- GST_DEBUG_FUNCPTR (gst_raw_parse_src_query));
- gst_element_add_pad (GST_ELEMENT (rp), rp->srcpad);
-
- rp->adapter = gst_adapter_new ();
-
- rp->fps_n = 1;
- rp->fps_d = 0;
- rp->framesize = 1;
-
- gst_raw_parse_reset (rp);
-}
-
-static void
-gst_raw_parse_dispose (GObject * object)
-{
- GstRawParse *rp = GST_RAW_PARSE (object);
-
- if (rp->adapter) {
- g_object_unref (rp->adapter);
- rp->adapter = NULL;
- }
-
- G_OBJECT_CLASS (parent_class)->dispose (object);
-}
-
-void
-gst_raw_parse_class_set_src_pad_template (GstRawParseClass * klass,
- const GstCaps * allowed_caps)
-{
- GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
-
- g_return_if_fail (GST_IS_RAW_PARSE_CLASS (klass));
- g_return_if_fail (allowed_caps != NULL);
- g_return_if_fail (GST_IS_CAPS (allowed_caps));
-
- gst_element_class_add_pad_template (element_class,
- gst_pad_template_new ("src", GST_PAD_SRC, GST_PAD_ALWAYS,
- gst_caps_copy (allowed_caps)));
-}
-
-void
-gst_raw_parse_class_set_multiple_frames_per_buffer (GstRawParseClass * klass,
- gboolean multiple_frames)
-{
- g_return_if_fail (GST_IS_RAW_PARSE_CLASS (klass));
-
- klass->multiple_frames_per_buffer = multiple_frames;
-}
-
-static void
-gst_raw_parse_reset (GstRawParse * rp)
-{
- rp->n_frames = 0;
- rp->discont = TRUE;
- rp->negotiated = FALSE;
-
- gst_segment_init (&rp->segment, GST_FORMAT_TIME);
- gst_adapter_clear (rp->adapter);
-}
-
-static gboolean
-gst_raw_parse_set_src_caps (GstRawParse * rp)
-{
- GstRawParseClass *rp_class = GST_RAW_PARSE_GET_CLASS (rp);
- GstCaps *caps;
-
- if (rp->negotiated)
- return TRUE;
-
- if (rp_class->get_caps) {
- caps = rp_class->get_caps (rp);
- } else {
- GST_WARNING
- ("Subclass doesn't implement get_caps() method, using ANY caps");
- caps = gst_caps_new_any ();
- }
-
- rp->negotiated = gst_pad_set_caps (rp->srcpad, caps);
-
- /* if subclass inplement decide_allocation, send an allocation
- * query, pass result to subclass and let it handle allocation if needed. */
- if (rp_class->decide_allocation) {
- GstQuery *query;
-
- query = gst_query_new_allocation (caps, TRUE);
- if (!gst_pad_peer_query (rp->srcpad, query)) {
- /* not a problem, just debug a little */
- GST_DEBUG_OBJECT (rp, "peer ALLOCATION query failed");
- }
-
- rp_class->decide_allocation (rp, query);
- gst_query_unref (query);
- }
-
- gst_caps_unref (caps);
-
- return rp->negotiated;
-}
-
-static GstFlowReturn
-gst_raw_parse_push_buffer (GstRawParse * rp, GstBuffer * buffer)
-{
- GstFlowReturn ret;
- gint nframes;
- GstRawParseClass *rpclass;
- gsize size;
-
- rpclass = GST_RAW_PARSE_GET_CLASS (rp);
-
- size = gst_buffer_get_size (buffer);
- nframes = size / rp->framesize;
-
- if (rp->segment.rate < 0) {
- rp->n_frames -= nframes;
- rp->discont = TRUE;
- }
-
- GST_BUFFER_OFFSET (buffer) = rp->n_frames;
- GST_BUFFER_OFFSET_END (buffer) = rp->n_frames + nframes;
-
- if (rp->fps_n) {
- GST_BUFFER_TIMESTAMP (buffer) =
- gst_util_uint64_scale (rp->n_frames, GST_SECOND * rp->fps_d, rp->fps_n);
- GST_BUFFER_DURATION (buffer) =
- gst_util_uint64_scale ((rp->n_frames + nframes) * GST_SECOND, rp->fps_d,
- rp->fps_n) - GST_BUFFER_TIMESTAMP (buffer);
- } else {
- GST_BUFFER_TIMESTAMP (buffer) = rp->segment.start;
- GST_BUFFER_DURATION (buffer) = GST_CLOCK_TIME_NONE;
- }
-
- if (rpclass->pre_push_buffer) {
- rpclass->pre_push_buffer (rp, buffer);
- }
-
- if (rp->discont) {
- GST_BUFFER_FLAG_SET (buffer, GST_BUFFER_FLAG_DISCONT);
- rp->discont = FALSE;
- }
-
- if (rp->segment.rate >= 0) {
- rp->offset += size;
- rp->n_frames += nframes;
- }
-
- rp->segment.position = GST_BUFFER_TIMESTAMP (buffer);
-
- GST_LOG_OBJECT (rp, "Pushing buffer with time %" GST_TIME_FORMAT,
- GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buffer)));
-
- ret = gst_pad_push (rp->srcpad, buffer);
-
- return ret;
-}
-
-static GstFlowReturn
-gst_raw_parse_chain (GstPad * pad, GstObject * parent, GstBuffer * buffer)
-{
- GstRawParse *rp = GST_RAW_PARSE (parent);
- GstFlowReturn ret = GST_FLOW_OK;
- GstRawParseClass *rp_class = GST_RAW_PARSE_GET_CLASS (rp);
- guint buffersize, available;
-
- if (G_UNLIKELY (GST_BUFFER_FLAG_IS_SET (buffer, GST_BUFFER_FLAG_DISCONT))) {
- GST_DEBUG_OBJECT (rp, "received DISCONT buffer");
- gst_adapter_clear (rp->adapter);
- rp->discont = TRUE;
- }
-
- if (!gst_raw_parse_set_src_caps (rp))
- goto no_caps;
-
- if (rp->start_segment) {
- GST_DEBUG_OBJECT (rp, "sending start segment");
- gst_pad_push_event (rp->srcpad, rp->start_segment);
- rp->start_segment = NULL;
- }
-
- gst_adapter_push (rp->adapter, buffer);
-
- available = gst_adapter_available (rp->adapter);
- if (rp_class->multiple_frames_per_buffer) {
- buffersize = available;
- buffersize -= buffersize % rp->framesize;
- } else {
- buffersize = rp->framesize;
- }
-
- while (buffersize > 0 && gst_adapter_available (rp->adapter) >= buffersize) {
- buffer = gst_adapter_take_buffer (rp->adapter, buffersize);
-
- ret = gst_raw_parse_push_buffer (rp, buffer);
- if (ret != GST_FLOW_OK)
- break;
- }
-done:
-
- return ret;
-
- /* ERRORS */
-no_caps:
- {
- GST_ERROR_OBJECT (rp, "could not set caps");
- ret = GST_FLOW_NOT_NEGOTIATED;
- goto done;
- }
-}
-
-static void
-gst_raw_parse_loop (GstElement * element)
-{
- GstRawParse *rp = GST_RAW_PARSE (element);
- GstRawParseClass *rp_class = GST_RAW_PARSE_GET_CLASS (rp);
- GstFlowReturn ret;
- GstBuffer *buffer;
- gint size;
-
- if (G_UNLIKELY (rp->push_stream_start)) {
- gchar *stream_id;
- GstEvent *event;
-
- stream_id =
- gst_pad_create_stream_id (rp->srcpad, GST_ELEMENT_CAST (rp), NULL);
-
- event = gst_event_new_stream_start (stream_id);
- gst_event_set_group_id (event, gst_util_group_id_next ());
-
- GST_DEBUG_OBJECT (rp, "Pushing STREAM_START");
- gst_pad_push_event (rp->srcpad, event);
- rp->push_stream_start = FALSE;
- g_free (stream_id);
- }
-
- if (!gst_raw_parse_set_src_caps (rp))
- goto no_caps;
-
- if (rp->start_segment) {
- GST_DEBUG_OBJECT (rp, "sending start segment");
- gst_pad_push_event (rp->srcpad, rp->start_segment);
- rp->start_segment = NULL;
- }
-
- if (rp_class->multiple_frames_per_buffer && rp->framesize < 4096)
- size = 4096 - (4096 % rp->framesize);
- else
- size = rp->framesize;
-
- if (rp->segment.rate >= 0) {
- if (rp->offset + size > rp->upstream_length) {
- GstFormat fmt = GST_FORMAT_BYTES;
-
- if (!gst_pad_peer_query_duration (rp->sinkpad, fmt, &rp->upstream_length)) {
- GST_WARNING_OBJECT (rp,
- "Could not get upstream duration, trying to pull frame by frame");
- size = rp->framesize;
- } else if (rp->upstream_length < rp->offset + rp->framesize) {
- ret = GST_FLOW_EOS;
- goto pause;
- } else if (rp->offset + size > rp->upstream_length) {
- size = rp->upstream_length - rp->offset;
- size -= size % rp->framesize;
- }
- }
- } else {
- if (rp->offset == 0) {
- ret = GST_FLOW_EOS;
- goto pause;
- } else if (rp->offset < size) {
- size -= rp->offset;
- }
- rp->offset -= size;
- }
-
- buffer = NULL;
- ret = gst_pad_pull_range (rp->sinkpad, rp->offset, size, &buffer);
-
- if (ret != GST_FLOW_OK) {
- GST_DEBUG_OBJECT (rp, "pull_range (%" G_GINT64_FORMAT ", %u) "
- "failed, flow: %s", rp->offset, size, gst_flow_get_name (ret));
- buffer = NULL;
- goto pause;
- }
-
- if (gst_buffer_get_size (buffer) < size) {
- GST_DEBUG_OBJECT (rp, "Short read at offset %" G_GINT64_FORMAT
- ", got only %" G_GSIZE_FORMAT " of %u bytes", rp->offset,
- gst_buffer_get_size (buffer), size);
-
- if (size > rp->framesize) {
- gst_buffer_set_size (buffer, gst_buffer_get_size (buffer) -
- gst_buffer_get_size (buffer) % rp->framesize);
- } else {
- gst_buffer_unref (buffer);
- buffer = NULL;
- ret = GST_FLOW_EOS;
- goto pause;
- }
- }
-
- ret = gst_raw_parse_push_buffer (rp, buffer);
- if (ret != GST_FLOW_OK)
- goto pause;
-
- return;
-
- /* ERRORS */
-no_caps:
- {
- GST_ERROR_OBJECT (rp, "could not negotiate caps");
- ret = GST_FLOW_NOT_NEGOTIATED;
- goto pause;
- }
-pause:
- {
- const gchar *reason = gst_flow_get_name (ret);
-
- GST_LOG_OBJECT (rp, "pausing task, reason %s", reason);
- gst_pad_pause_task (rp->sinkpad);
-
- if (ret == GST_FLOW_EOS) {
- if (rp->segment.flags & GST_SEEK_FLAG_SEGMENT) {
- GstClockTime stop;
-
- GST_LOG_OBJECT (rp, "Sending segment done");
-
- if ((stop = rp->segment.stop) == -1)
- stop = rp->segment.duration;
-
- gst_element_post_message (GST_ELEMENT_CAST (rp),
- gst_message_new_segment_done (GST_OBJECT_CAST (rp),
- rp->segment.format, stop));
- gst_pad_push_event (rp->srcpad,
- gst_event_new_segment_done (rp->segment.format, stop));
- } else {
- GST_LOG_OBJECT (rp, "Sending EOS, at end of stream");
- gst_pad_push_event (rp->srcpad, gst_event_new_eos ());
- }
- } else if (ret == GST_FLOW_NOT_LINKED || ret < GST_FLOW_EOS) {
- GST_ELEMENT_ERROR (rp, STREAM, FAILED,
- ("Internal data stream error."),
- ("stream stopped, reason %s", reason));
- gst_pad_push_event (rp->srcpad, gst_event_new_eos ());
- }
- return;
- }
-}
-
-static gboolean
-gst_raw_parse_sink_activate (GstPad * sinkpad, GstObject * parent)
-{
- GstQuery *query;
- gboolean pull_mode = FALSE;
-
- query = gst_query_new_scheduling ();
-
- if (gst_pad_peer_query (sinkpad, query))
- pull_mode = gst_query_has_scheduling_mode_with_flags (query,
- GST_PAD_MODE_PULL, GST_SCHEDULING_FLAG_SEEKABLE);
-
- gst_query_unref (query);
-
- if (pull_mode) {
- GST_DEBUG ("going to pull mode");
- return gst_pad_activate_mode (sinkpad, GST_PAD_MODE_PULL, TRUE);
- } else {
- GST_DEBUG ("going to push (streaming) mode");
- return gst_pad_activate_mode (sinkpad, GST_PAD_MODE_PUSH, TRUE);
- }
-}
-
-static gboolean
-gst_raw_parse_sink_activatemode (GstPad * sinkpad, GstObject * parent,
- GstPadMode mode, gboolean active)
-{
- GstRawParse *rp = GST_RAW_PARSE (parent);
- gboolean result;
-
- switch (mode) {
- case GST_PAD_MODE_PULL:
- if (active) {
- GstFormat format;
- gint64 duration;
-
- /* get the duration in bytes */
- format = GST_FORMAT_BYTES;
- result = gst_pad_peer_query_duration (sinkpad, format, &duration);
- if (result) {
- GST_DEBUG_OBJECT (rp, "got duration %" GST_TIME_FORMAT,
- GST_TIME_ARGS (duration));
- rp->upstream_length = duration;
- /* convert to time */
- gst_raw_parse_convert (rp, format, duration, GST_FORMAT_TIME,
- &duration);
- } else {
- rp->upstream_length = -1;
- duration = -1;
- }
- rp->segment.duration = duration;
-
- rp->push_stream_start = TRUE;
-
- result = gst_raw_parse_handle_seek_pull (rp, NULL);
- rp->mode = mode;
- } else {
- result = gst_pad_stop_task (sinkpad);
- }
- return result;
- case GST_PAD_MODE_PUSH:
- rp->mode = mode;
- return TRUE;
- default:
- return FALSE;
- }
-}
-
-static GstStateChangeReturn
-gst_raw_parse_change_state (GstElement * element, GstStateChange transition)
-{
- GstRawParse *rp = GST_RAW_PARSE (element);
- GstStateChangeReturn ret = GST_STATE_CHANGE_SUCCESS;
-
- switch (transition) {
- case GST_STATE_CHANGE_READY_TO_PAUSED:
- gst_segment_init (&rp->segment, GST_FORMAT_TIME);
- rp->segment.position = 0;
- default:
- break;
- }
-
- if (GST_ELEMENT_CLASS (parent_class)->change_state)
- ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition);
-
- switch (transition) {
- case GST_STATE_CHANGE_PAUSED_TO_READY:
- gst_raw_parse_reset (rp);
- break;
- default:
- break;
- }
-
- return ret;
-}
-
-static gboolean
-gst_raw_parse_convert (GstRawParse * rp,
- GstFormat src_format, gint64 src_value,
- GstFormat dest_format, gint64 * dest_value)
-{
- gboolean ret = FALSE;
-
- GST_DEBUG ("converting value %" G_GINT64_FORMAT " from %s (%d) to %s (%d)",
- src_value, gst_format_get_name (src_format), src_format,
- gst_format_get_name (dest_format), dest_format);
-
- if (src_format == dest_format) {
- *dest_value = src_value;
- ret = TRUE;
- goto done;
- }
-
- if (src_value == -1) {
- *dest_value = -1;
- ret = TRUE;
- goto done;
- }
-
- /* bytes to frames */
- if (src_format == GST_FORMAT_BYTES && dest_format == GST_FORMAT_DEFAULT) {
- if (rp->framesize != 0) {
- *dest_value = gst_util_uint64_scale_int (src_value, 1, rp->framesize);
- } else {
- GST_ERROR ("framesize is 0");
- *dest_value = 0;
- }
- ret = TRUE;
- goto done;
- }
-
- /* frames to bytes */
- if (src_format == GST_FORMAT_DEFAULT && dest_format == GST_FORMAT_BYTES) {
- *dest_value = gst_util_uint64_scale_int (src_value, rp->framesize, 1);
- ret = TRUE;
- goto done;
- }
-
- /* time to frames */
- if (src_format == GST_FORMAT_TIME && dest_format == GST_FORMAT_DEFAULT) {
- if (rp->fps_d != 0) {
- *dest_value = gst_util_uint64_scale (src_value,
- rp->fps_n, GST_SECOND * rp->fps_d);
- } else {
- GST_ERROR ("framerate denominator is 0");
- *dest_value = 0;
- }
- ret = TRUE;
- goto done;
- }
-
- /* frames to time */
- if (src_format == GST_FORMAT_DEFAULT && dest_format == GST_FORMAT_TIME) {
- if (rp->fps_n != 0) {
- *dest_value = gst_util_uint64_scale (src_value,
- GST_SECOND * rp->fps_d, rp->fps_n);
- } else {
- GST_ERROR ("framerate numerator is 0");
- *dest_value = 0;
- }
- ret = TRUE;
- goto done;
- }
-
- /* time to bytes */
- if (src_format == GST_FORMAT_TIME && dest_format == GST_FORMAT_BYTES) {
- if (rp->fps_d != 0) {
- *dest_value = gst_util_uint64_scale (src_value,
- rp->fps_n * rp->framesize, GST_SECOND * rp->fps_d);
- } else {
- GST_ERROR ("framerate denominator is 0");
- *dest_value = 0;
- }
- ret = TRUE;
- goto done;
- }
-
- /* bytes to time */
- if (src_format == GST_FORMAT_BYTES && dest_format == GST_FORMAT_TIME) {
- if (rp->fps_n != 0 && rp->framesize != 0) {
- *dest_value = gst_util_uint64_scale (src_value,
- GST_SECOND * rp->fps_d, rp->fps_n * rp->framesize);
- } else {
- GST_ERROR ("framerate denominator and/or framesize is 0");
- *dest_value = 0;
- }
- ret = TRUE;
- }
-
-done:
-
- GST_DEBUG ("ret=%d result %" G_GINT64_FORMAT, ret, *dest_value);
-
- return ret;
-}
-
-
-static gboolean
-gst_raw_parse_sink_event (GstPad * pad, GstObject * parent, GstEvent * event)
-{
- GstRawParse *rp = GST_RAW_PARSE (parent);
- gboolean ret;
-
- switch (GST_EVENT_TYPE (event)) {
- case GST_EVENT_EOS:
- case GST_EVENT_FLUSH_STOP:
- /* Only happens in push mode */
- gst_raw_parse_reset (rp);
- ret = gst_pad_push_event (rp->srcpad, event);
- break;
- case GST_EVENT_SEGMENT:
- {
- GstSegment segment;
-
- /* Only happens in push mode */
-
- gst_event_copy_segment (event, &segment);
-
- if (segment.format != GST_FORMAT_TIME) {
- gst_event_unref (event);
-
- ret =
- gst_raw_parse_convert (rp, segment.format, segment.start,
- GST_FORMAT_TIME, (gint64 *) & segment.start);
- ret &= gst_raw_parse_convert (rp, segment.format, segment.time,
- GST_FORMAT_TIME, (gint64 *) & segment.time);
- ret &= gst_raw_parse_convert (rp, segment.format, segment.stop,
- GST_FORMAT_TIME, (gint64 *) & segment.stop);
- if (!ret) {
- GST_ERROR_OBJECT (rp,
- "Failed converting to GST_FORMAT_TIME format (%d)",
- segment.format);
- break;
- }
-
- segment.format = GST_FORMAT_TIME;
-
- event = gst_event_new_segment (&segment);
- }
-
- gst_segment_copy_into (&segment, &rp->segment);
-
- if (rp->start_segment)
- gst_event_unref (rp->start_segment);
- rp->start_segment = event;
- ret = TRUE;
- break;
- }
- default:
- ret = gst_pad_event_default (pad, parent, event);
- break;
- }
-
- return ret;
-}
-
-
-static gboolean
-gst_raw_parse_handle_seek_push (GstRawParse * rp, GstEvent * event)
-{
- GstFormat format;
- gdouble rate;
- GstSeekFlags flags;
- GstSeekType start_type, stop_type;
- gint64 start, stop;
- gboolean ret = FALSE;
-
- gst_event_parse_seek (event, &rate, &format, &flags, &start_type, &start,
- &stop_type, &stop);
-
- /* can't seek backwards yet */
- if (rate <= 0.0)
- goto wrong_rate;
-
- /* First try if upstream handles the seek */
- ret = gst_pad_push_event (rp->sinkpad, event);
- if (ret)
- return ret;
-
- /* Otherwise convert to bytes and push upstream */
- if (format == GST_FORMAT_TIME || format == GST_FORMAT_DEFAULT) {
- ret = gst_raw_parse_convert (rp, format, start, GST_FORMAT_BYTES, &start);
- ret &= gst_raw_parse_convert (rp, format, stop, GST_FORMAT_BYTES, &stop);
-
- if (ret) {
- /* Seek on a frame boundary */
- start -= start % rp->framesize;
- if (stop != -1)
- stop += rp->framesize - stop % rp->framesize;
-
- event =
- gst_event_new_seek (rate, GST_FORMAT_BYTES, flags, start_type,
- start, stop_type, stop);
-
- ret = gst_pad_push_event (rp->sinkpad, event);
- } else {
- GST_DEBUG_OBJECT (rp, "Seek failed: couldn't convert to byte positions");
- }
- } else {
- GST_DEBUG_OBJECT (rp,
- "seeking is only supported in TIME or DEFAULT format");
- }
- return ret;
-
- /* ERRORS */
-wrong_rate:
- {
- GST_DEBUG_OBJECT (rp, "Seek failed: negative rates not supported yet");
- return FALSE;
- }
-}
-
-static gboolean
-gst_raw_parse_handle_seek_pull (GstRawParse * rp, GstEvent * event)
-{
- gdouble rate;
- GstFormat format;
- GstSeekFlags flags;
- GstSeekType start_type, stop_type;
- gint64 start, stop;
- gint64 last_stop;
- gboolean ret = FALSE;
- gboolean flush;
- GstSegment seeksegment;
-
- if (event) {
- gst_event_parse_seek (event, &rate, &format, &flags, &start_type, &start,
- &stop_type, &stop);
-
- /* convert input offsets to time */
- ret = gst_raw_parse_convert (rp, format, start, GST_FORMAT_TIME, &start);
- ret &= gst_raw_parse_convert (rp, format, stop, GST_FORMAT_TIME, &stop);
- if (!ret)
- goto convert_failed;
-
- GST_DEBUG_OBJECT (rp, "converted start - stop to time");
-
- gst_event_unref (event);
- } else {
- flags = 0;
- }
-
- format = GST_FORMAT_TIME;
-
- flush = ((flags & GST_SEEK_FLAG_FLUSH) != 0);
-
- /* start flushing up and downstream so that the loop function pauses and we
- * can acquire the STREAM_LOCK. */
- if (flush) {
- GST_LOG_OBJECT (rp, "flushing");
- gst_pad_push_event (rp->sinkpad, gst_event_new_flush_start ());
- gst_pad_push_event (rp->srcpad, gst_event_new_flush_start ());
- } else {
- GST_LOG_OBJECT (rp, "pause task");
- gst_pad_pause_task (rp->sinkpad);
- }
-
- GST_PAD_STREAM_LOCK (rp->sinkpad);
-
- memcpy (&seeksegment, &rp->segment, sizeof (GstSegment));
-
- if (event) {
- /* configure the seek values */
- gst_segment_do_seek (&seeksegment, rate, format, flags,
- start_type, start, stop_type, stop, NULL);
- }
-
- /* get the desired position */
- last_stop = seeksegment.position;
-
- GST_LOG_OBJECT (rp, "seeking to %" GST_TIME_FORMAT,
- GST_TIME_ARGS (last_stop));
-
- /* convert the desired position to bytes */
- ret =
- gst_raw_parse_convert (rp, format, last_stop, GST_FORMAT_BYTES,
- &last_stop);
-
- /* prepare for streaming */
- if (flush) {
- GST_LOG_OBJECT (rp, "stop flush");
- gst_pad_push_event (rp->sinkpad, gst_event_new_flush_stop (TRUE));
- gst_pad_push_event (rp->srcpad, gst_event_new_flush_stop (TRUE));
- }
-
- if (ret) {
- /* seek done */
-
- /* Seek on a frame boundary */
- last_stop -= last_stop % rp->framesize;
-
- rp->offset = last_stop;
- rp->n_frames = last_stop / rp->framesize;
-
- GST_LOG_OBJECT (rp, "seeking to bytes %" G_GINT64_FORMAT, last_stop);
-
- memcpy (&rp->segment, &seeksegment, sizeof (GstSegment));
-
- if (rp->segment.flags & GST_SEEK_FLAG_SEGMENT) {
- gst_element_post_message (GST_ELEMENT_CAST (rp),
- gst_message_new_segment_start (GST_OBJECT_CAST (rp),
- rp->segment.format, rp->segment.position));
- }
-
- /* for deriving a stop position for the playback segment from the seek
- * segment, we must take the duration when the stop is not set */
- if ((stop = rp->segment.stop) == -1)
- stop = rp->segment.duration;
-
- GST_DEBUG_OBJECT (rp, "preparing newsegment from %" G_GINT64_FORMAT
- " to %" G_GINT64_FORMAT, rp->segment.start, stop);
-
- /* now replace the old segment so that we send it in the stream thread the
- * next time it is scheduled. */
- if (rp->start_segment)
- gst_event_unref (rp->start_segment);
- rp->start_segment = gst_event_new_segment (&rp->segment);
- }
- rp->discont = TRUE;
-
- GST_LOG_OBJECT (rp, "start streaming");
- gst_pad_start_task (rp->sinkpad, (GstTaskFunction) gst_raw_parse_loop, rp,
- NULL);
-
- GST_PAD_STREAM_UNLOCK (rp->sinkpad);
-
- return ret;
-
- /* ERRORS */
-convert_failed:
- {
- GST_DEBUG_OBJECT (rp, "Seek failed: couldn't convert to byte positions");
- return FALSE;
- }
-}
-
-static gboolean
-gst_raw_parse_src_event (GstPad * pad, GstObject * parent, GstEvent * event)
-{
- GstRawParse *rp = GST_RAW_PARSE (parent);
- gboolean ret;
-
- switch (GST_EVENT_TYPE (event)) {
- case GST_EVENT_SEEK:
- if (rp->mode == GST_PAD_MODE_PUSH)
- ret = gst_raw_parse_handle_seek_push (rp, event);
- else
- ret = gst_raw_parse_handle_seek_pull (rp, event);
- break;
- default:
- ret = gst_pad_event_default (pad, parent, event);
- break;
- }
-
- return ret;
-}
-
-static gboolean
-gst_raw_parse_src_query (GstPad * pad, GstObject * parent, GstQuery * query)
-{
- GstRawParse *rp = GST_RAW_PARSE (parent);
- gboolean ret = FALSE;
-
- GST_DEBUG ("src_query %s", gst_query_type_get_name (GST_QUERY_TYPE (query)));
-
- switch (GST_QUERY_TYPE (query)) {
- case GST_QUERY_POSITION:
- {
- GstFormat format;
- gint64 time, value;
-
- GST_LOG ("query position");
-
- gst_query_parse_position (query, &format, NULL);
-
- time = rp->segment.position;
- ret = gst_raw_parse_convert (rp, GST_FORMAT_TIME, time, format, &value);
-
- gst_query_set_position (query, format, value);
-
- break;
- }
- case GST_QUERY_DURATION:{
- gint64 duration;
- GstFormat format;
- GstQuery *bquery;
-
- GST_LOG ("query duration");
- ret = gst_pad_peer_query (rp->sinkpad, query);
- if (ret)
- goto done;
-
- gst_query_parse_duration (query, &format, NULL);
- /* We only handle TIME and DEFAULT format */
- if (format != GST_FORMAT_TIME && format != GST_FORMAT_DEFAULT)
- goto error;
-
- bquery = gst_query_new_duration (GST_FORMAT_BYTES);
- ret = gst_pad_peer_query (rp->sinkpad, bquery);
- if (!ret) {
- gst_query_unref (bquery);
- goto error;
- }
-
- gst_query_parse_duration (bquery, NULL, &duration);
- gst_query_unref (bquery);
-
- ret =
- gst_raw_parse_convert (rp, GST_FORMAT_BYTES, duration, format,
- &duration);
- if (ret)
- gst_query_set_duration (query, format, duration);
-
- break;
- }
- case GST_QUERY_CONVERT:
- {
- GstFormat src_fmt, dest_fmt;
- gint64 src_val, dest_val;
-
- GST_LOG ("query convert");
-
- gst_query_parse_convert (query, &src_fmt, &src_val, &dest_fmt, &dest_val);
- ret = gst_raw_parse_convert (rp, src_fmt, src_val, dest_fmt, &dest_val);
- if (!ret)
- goto error;
- gst_query_set_convert (query, src_fmt, src_val, dest_fmt, dest_val);
- break;
- }
- case GST_QUERY_SEEKING:{
- GstFormat fmt;
-
- ret = TRUE;
-
- /* try upstream first */
- if (gst_pad_peer_query (rp->sinkpad, query))
- break;
-
- gst_query_parse_seeking (query, &fmt, NULL, NULL, NULL);
- if (fmt != GST_FORMAT_TIME && fmt != GST_FORMAT_DEFAULT
- && fmt != GST_FORMAT_BYTES) {
- gst_query_set_seeking (query, fmt, FALSE, -1, -1);
- } else if (rp->mode == GST_PAD_MODE_PUSH) {
- GstQuery *peerquery = gst_query_new_seeking (GST_FORMAT_BYTES);
- gboolean seekable;
-
- seekable = gst_pad_peer_query (rp->sinkpad, peerquery);
- if (seekable)
- gst_query_parse_seeking (peerquery, NULL, &seekable, NULL, NULL);
-
- gst_query_unref (peerquery);
- gst_query_set_seeking (query, fmt, seekable, seekable ? 0 : -1, -1);
- } else {
- gst_query_set_seeking (query, fmt, TRUE, 0, -1);
- }
- break;
- }
- default:
- /* else forward upstream */
- ret = gst_pad_query_default (pad, parent, query);
- break;
- }
-
-done:
- return ret;
-
- /* ERRORS */
-error:
- {
- GST_DEBUG_OBJECT (rp, "query failed");
- goto done;
- }
-}
-
-void
-gst_raw_parse_set_framesize (GstRawParse * rp, int framesize)
-{
- g_return_if_fail (GST_IS_RAW_PARSE (rp));
- g_return_if_fail (!rp->negotiated);
-
- GST_DEBUG_OBJECT (rp, "framesize %d", framesize);
- rp->framesize = framesize;
-}
-
-void
-gst_raw_parse_set_fps (GstRawParse * rp, int fps_n, int fps_d)
-{
- g_return_if_fail (GST_IS_RAW_PARSE (rp));
- g_return_if_fail (!rp->negotiated);
-
- rp->fps_n = fps_n;
- rp->fps_d = fps_d;
-}
-
-void
-gst_raw_parse_get_fps (GstRawParse * rp, int *fps_n, int *fps_d)
-{
- g_return_if_fail (GST_IS_RAW_PARSE (rp));
-
- if (fps_n)
- *fps_n = rp->fps_n;
- if (fps_d)
- *fps_d = rp->fps_d;
-}
-
-gboolean
-gst_raw_parse_is_negotiated (GstRawParse * rp)
-{
- g_return_val_if_fail (GST_IS_RAW_PARSE (rp), FALSE);
-
- return rp->negotiated;
-}
diff --git a/gst/rawparse/gstrawparse.h b/gst/rawparse/gstrawparse.h
deleted file mode 100644
index 2327dc6..0000000
--- a/gst/rawparse/gstrawparse.h
+++ /dev/null
@@ -1,98 +0,0 @@
-/* GStreamer
- * Copyright (C) 2006 David A. Schleef <ds@schleef.org>
- * Copyright (C) 2007 Sebastian Dröge <slomo@circular-chaos.org>
- *
- * gstrawparse.h:
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifndef __GST_RAW_PARSE_H__
-#define __GST_RAW_PARSE_H__
-
-#include <gst/gst.h>
-#include <gst/base/gstbasetransform.h>
-#include <gst/base/gstadapter.h>
-
-G_BEGIN_DECLS
-
-#define GST_TYPE_RAW_PARSE \
- (gst_raw_parse_get_type())
-#define GST_RAW_PARSE(obj) \
- (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_RAW_PARSE,GstRawParse))
-#define GST_RAW_PARSE_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_RAW_PARSE,GstRawParseClass))
-#define GST_RAW_PARSE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj),GST_TYPE_RAW_PARSE,GstRawParseClass))
-#define GST_IS_RAW_PARSE(obj) \
- (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_RAW_PARSE))
-#define GST_IS_RAW_PARSE_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_RAW_PARSE))
-
-typedef struct _GstRawParse GstRawParse;
-typedef struct _GstRawParseClass GstRawParseClass;
-
-struct _GstRawParse
-{
- GstElement parent;
-
- /* <private> */
- GstPad *sinkpad;
- GstPad *srcpad;
-
- GstPadMode mode;
- GstAdapter *adapter;
-
- gint framesize;
- gint fps_d;
- gint fps_n;
-
- gboolean discont;
- guint64 n_frames;
-
- gint64 upstream_length;
- gint64 offset;
-
- GstSegment segment;
- GstEvent *start_segment;
-
- gboolean negotiated;
- gboolean push_stream_start;
-};
-
-struct _GstRawParseClass
-{
- GstElementClass parent_class;
-
- GstCaps * (*get_caps) (GstRawParse *rp);
- void (*pre_push_buffer) (GstRawParse *rp, GstBuffer *buffer);
- void (*decide_allocation) (GstRawParse *rp, GstQuery *query);
-
- gboolean multiple_frames_per_buffer;
-};
-
-GType gst_raw_parse_get_type (void);
-
-void gst_raw_parse_class_set_src_pad_template (GstRawParseClass *klass, const GstCaps * allowed_caps);
-void gst_raw_parse_class_set_multiple_frames_per_buffer (GstRawParseClass *klass, gboolean multiple_frames);
-
-void gst_raw_parse_set_framesize (GstRawParse *rp, int framesize);
-void gst_raw_parse_set_fps (GstRawParse *rp, int fps_n, int fps_d);
-void gst_raw_parse_get_fps (GstRawParse *rp, int *fps_n, int *fps_d);
-gboolean gst_raw_parse_is_negotiated (GstRawParse *rp);
-
-G_END_DECLS
-
-#endif /* __GST_RAW_PARSE_H__ */
diff --git a/gst/rawparse/gstrawvideoparse.c b/gst/rawparse/gstrawvideoparse.c
new file mode 100644
index 0000000..2fb58c1
--- /dev/null
+++ b/gst/rawparse/gstrawvideoparse.c
@@ -0,0 +1,1195 @@
+/* GStreamer
+ * Copyright (C) <2016> Carlos Rafael Giani <dv at pseudoterminal dot org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+/**
+ * SECTION:element-rawvideoparse
+ *
+ * This element parses incoming data as raw video frames and timestamps these.
+ * It also handles seek queries in said raw video data, and ensures that output
+ * buffers contain exactly one frame, even if the input buffers contain only
+ * partial frames or multiple frames. In the former case, it will continue to
+ * receive buffers until there is enough input data to output one frame. In the
+ * latter case, it will extract the first frame in the buffer and output it, then
+ * the second one etc. until the remaining unparsed bytes aren't enough to form
+ * a complete frame, and it will then continue as described in the earlier case.
+ *
+ * The element implements the properties and sink caps configuration as specified
+ * in the #GstRawBaseParse documentation. The properties configuration can be
+ * modified by using the width, height, pixel-aspect-ratio, framerate, interlaced,
+ * top-field-first, plane-strides, plane-offsets, and frame-stride properties.
+ *
+ * If the properties configuration is used, plane strides and offsets will be
+ * computed by using gst_video_info_set_format(). This can be overridden by passing
+ * GValueArrays to the plane-offsets and plane-strides properties. When this is
+ * done, these custom offsets and strides are used later even if new width,
+ * height, format etc. property values might be set. To switch back to computed
+ * plane strides & offsets, pass NULL to one or both of the plane-offset and
+ * plane-array properties.
+ *
+ * The frame stride property is useful in cases where there is extra data between
+ * the frames (for example, trailing metadata, or headers). The parser calculates
+ * the actual frame size out of the other properties and compares it with this
+ * frame-stride value. If the frame stride is larger than the calculated size,
+ * then the extra bytes after the end of the frame are skipped. For example, with
+ * 8-bit grayscale frames and a frame size of 100x10 pixels and a frame stride of
+ * 1500 bytes, there are 500 excess bytes at the end of the actual frame which
+ * are then skipped. It is safe to set the frame stride to a value that is smaller
+ * than the actual frame size (in fact, its default value is 0); if it is smaller,
+ * then no trailing data will be skipped.
+ *
+ * If a framerate of 0 Hz is set (for example, 0/1), then output buffers will have
+ * no duration set. The first output buffer will have a PTS 0, all subsequent ones
+ * an unset PTS.
+ *
+ * <refsect2>
+ * <title>Example pipelines</title>
+ * |[
+ * gst-launch-1.0 filesrc location=video.raw ! rawvideoparse use-sink-caps=false \
+ * width=500 height=400 format=y444 ! autovideosink
+ * ]| Read raw data from a local file and parse it as video data with 500x400 pixels
+ * and Y444 video format.
+ * |[
+ * gst-launch-1.0 filesrc location=video.raw ! queue ! "video/x-raw, width=320, \
+ * height=240, format=I420, framerate=1/1" ! rawvideoparse \
+ * use-sink-caps=true ! autovideosink
+ * ]| Read raw data from a local file and parse it as video data with 320x240 pixels
+ * and I420 video format. The queue element here is to force push based scheduling.
+ * See the documentation in #GstRawBaseParse for the reason why.
+ * </refsect2>
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+/* FIXME: GValueArray is deprecated, but there is currently no viabla alternative
+ * See https://bugzilla.gnome.org/show_bug.cgi?id=667228 */
+#define GLIB_DISABLE_DEPRECATION_WARNINGS
+
+#include <string.h>
+#include "gstrawvideoparse.h"
+#include "unalignedvideo.h"
+
+
+GST_DEBUG_CATEGORY_STATIC (raw_video_parse_debug);
+#define GST_CAT_DEFAULT raw_video_parse_debug
+
+
+enum
+{
+ PROP_0,
+ PROP_WIDTH,
+ PROP_HEIGHT,
+ PROP_FORMAT,
+ PROP_PIXEL_ASPECT_RATIO,
+ PROP_FRAMERATE,
+ PROP_INTERLACED,
+ PROP_TOP_FIELD_FIRST,
+ PROP_PLANE_STRIDES,
+ PROP_PLANE_OFFSETS,
+ PROP_FRAME_STRIDE
+};
+
+
+#define DEFAULT_WIDTH 320
+#define DEFAULT_HEIGHT 240
+#define DEFAULT_FORMAT GST_VIDEO_FORMAT_I420
+#define DEFAULT_PIXEL_ASPECT_RATIO_N 1
+#define DEFAULT_PIXEL_ASPECT_RATIO_D 1
+#define DEFAULT_FRAMERATE_N 25
+#define DEFAULT_FRAMERATE_D 1
+#define DEFAULT_INTERLACED FALSE
+#define DEFAULT_TOP_FIELD_FIRST FALSE
+#define DEFAULT_FRAME_STRIDE 0
+
+
+#define GST_RAW_VIDEO_PARSE_CAPS \
+ GST_VIDEO_CAPS_MAKE(GST_VIDEO_FORMATS_ALL) "; "
+
+
+static GstStaticPadTemplate static_sink_template =
+ GST_STATIC_PAD_TEMPLATE ("sink",
+ GST_PAD_SINK,
+ GST_PAD_ALWAYS,
+ GST_STATIC_CAPS (GST_UNALIGNED_RAW_VIDEO_CAPS "; " GST_RAW_VIDEO_PARSE_CAPS)
+ );
+
+
+static GstStaticPadTemplate static_src_template =
+GST_STATIC_PAD_TEMPLATE ("src",
+ GST_PAD_SRC,
+ GST_PAD_ALWAYS,
+ GST_STATIC_CAPS (GST_RAW_VIDEO_PARSE_CAPS)
+ );
+
+
+#define gst_raw_video_parse_parent_class parent_class
+G_DEFINE_TYPE (GstRawVideoParse, gst_raw_video_parse, GST_TYPE_RAW_BASE_PARSE);
+
+
+static void gst_raw_video_parse_set_property (GObject * object, guint prop_id,
+ GValue const *value, GParamSpec * pspec);
+static void gst_raw_video_parse_get_property (GObject * object, guint prop_id,
+ GValue * value, GParamSpec * pspec);
+
+static gboolean gst_raw_video_parse_stop (GstBaseParse * parse);
+
+static gboolean gst_raw_video_parse_set_current_config (GstRawBaseParse *
+ raw_base_parse, GstRawBaseParseConfig config);
+static GstRawBaseParseConfig
+gst_raw_video_parse_get_current_config (GstRawBaseParse * raw_base_parse);
+static gboolean gst_raw_video_parse_set_config_from_caps (GstRawBaseParse *
+ raw_base_parse, GstRawBaseParseConfig config, GstCaps * caps);
+static gboolean gst_raw_video_parse_get_caps_from_config (GstRawBaseParse *
+ raw_base_parse, GstRawBaseParseConfig config, GstCaps ** caps);
+static gsize gst_raw_video_parse_get_config_frame_size (GstRawBaseParse *
+ raw_base_parse, GstRawBaseParseConfig config);
+static guint gst_raw_video_parse_get_max_frames_per_buffer (GstRawBaseParse *
+ raw_base_parse, GstRawBaseParseConfig config);
+static gboolean gst_raw_video_parse_is_config_ready (GstRawBaseParse *
+ raw_base_parse, GstRawBaseParseConfig config);
+static gboolean gst_raw_video_parse_process (GstRawBaseParse * raw_base_parse,
+ GstRawBaseParseConfig config, GstBuffer * in_data, gsize total_num_in_bytes,
+ gsize num_valid_in_bytes, GstBuffer ** processed_data);
+static gboolean gst_raw_video_parse_is_unit_format_supported (GstRawBaseParse *
+ raw_base_parse, GstFormat format);
+static void gst_raw_video_parse_get_units_per_second (GstRawBaseParse *
+ raw_base_parse, GstFormat format, GstRawBaseParseConfig config,
+ gsize * units_per_sec_n, gsize * units_per_sec_d);
+
+static gint gst_raw_video_parse_get_overhead_size (GstRawBaseParse *
+ raw_base_parse, GstRawBaseParseConfig config);
+
+static gboolean gst_raw_video_parse_is_using_sink_caps (GstRawVideoParse *
+ raw_video_parse);
+static GstRawVideoParseConfig
+ * gst_raw_video_parse_get_config_ptr (GstRawVideoParse * raw_video_parse,
+ GstRawBaseParseConfig config);
+
+static void gst_raw_video_parse_init_config (GstRawVideoParseConfig * config);
+static void gst_raw_video_parse_update_info (GstRawVideoParseConfig * config);
+
+
+
+static void
+gst_raw_video_parse_class_init (GstRawVideoParseClass * klass)
+{
+ GObjectClass *object_class;
+ GstElementClass *element_class;
+ GstBaseParseClass *baseparse_class;
+ GstRawBaseParseClass *rawbaseparse_class;
+
+ GST_DEBUG_CATEGORY_INIT (raw_video_parse_debug, "rawvideoparse", 0,
+ "rawvideoparse element");
+
+ object_class = G_OBJECT_CLASS (klass);
+ element_class = GST_ELEMENT_CLASS (klass);
+ baseparse_class = GST_BASE_PARSE_CLASS (klass);
+ rawbaseparse_class = GST_RAW_BASE_PARSE_CLASS (klass);
+
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&static_sink_template));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&static_src_template));
+
+ object_class->set_property =
+ GST_DEBUG_FUNCPTR (gst_raw_video_parse_set_property);
+ object_class->get_property =
+ GST_DEBUG_FUNCPTR (gst_raw_video_parse_get_property);
+
+ baseparse_class->stop = GST_DEBUG_FUNCPTR (gst_raw_video_parse_stop);
+
+ rawbaseparse_class->set_current_config =
+ GST_DEBUG_FUNCPTR (gst_raw_video_parse_set_current_config);
+ rawbaseparse_class->get_current_config =
+ GST_DEBUG_FUNCPTR (gst_raw_video_parse_get_current_config);
+ rawbaseparse_class->set_config_from_caps =
+ GST_DEBUG_FUNCPTR (gst_raw_video_parse_set_config_from_caps);
+ rawbaseparse_class->get_caps_from_config =
+ GST_DEBUG_FUNCPTR (gst_raw_video_parse_get_caps_from_config);
+ rawbaseparse_class->get_config_frame_size =
+ GST_DEBUG_FUNCPTR (gst_raw_video_parse_get_config_frame_size);
+ rawbaseparse_class->get_max_frames_per_buffer =
+ GST_DEBUG_FUNCPTR (gst_raw_video_parse_get_max_frames_per_buffer);
+ rawbaseparse_class->is_config_ready =
+ GST_DEBUG_FUNCPTR (gst_raw_video_parse_is_config_ready);
+ rawbaseparse_class->process = GST_DEBUG_FUNCPTR (gst_raw_video_parse_process);
+ rawbaseparse_class->is_unit_format_supported =
+ GST_DEBUG_FUNCPTR (gst_raw_video_parse_is_unit_format_supported);
+ rawbaseparse_class->get_units_per_second =
+ GST_DEBUG_FUNCPTR (gst_raw_video_parse_get_units_per_second);
+ rawbaseparse_class->get_overhead_size =
+ GST_DEBUG_FUNCPTR (gst_raw_video_parse_get_overhead_size);
+
+ g_object_class_install_property (object_class,
+ PROP_WIDTH,
+ g_param_spec_int ("width",
+ "Width",
+ "Width of frames in raw stream",
+ 0, G_MAXINT, DEFAULT_WIDTH,
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)
+ );
+ g_object_class_install_property (object_class,
+ PROP_HEIGHT,
+ g_param_spec_int ("height",
+ "Height",
+ "Height of frames in raw stream",
+ 0, G_MAXINT,
+ DEFAULT_HEIGHT, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)
+ );
+ g_object_class_install_property (object_class,
+ PROP_FORMAT,
+ g_param_spec_enum ("format",
+ "Format",
+ "Format of frames in raw stream",
+ GST_TYPE_VIDEO_FORMAT,
+ DEFAULT_FORMAT, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)
+ );
+ g_object_class_install_property (object_class,
+ PROP_FRAMERATE,
+ gst_param_spec_fraction ("framerate",
+ "Frame rate",
+ "Rate of frames in raw stream",
+ 0, 1, G_MAXINT, 1,
+ DEFAULT_FRAMERATE_N, DEFAULT_FRAMERATE_D,
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)
+ );
+ g_object_class_install_property (object_class,
+ PROP_PIXEL_ASPECT_RATIO,
+ gst_param_spec_fraction ("pixel-aspect-ratio",
+ "Pixel aspect ratio",
+ "Pixel aspect ratio of frames in raw stream",
+ 1, 100, 100, 1,
+ DEFAULT_PIXEL_ASPECT_RATIO_N, DEFAULT_PIXEL_ASPECT_RATIO_D,
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)
+ );
+ g_object_class_install_property (object_class,
+ PROP_INTERLACED,
+ g_param_spec_boolean ("interlaced",
+ "Interlaced flag",
+ "True if frames in raw stream are interlaced",
+ DEFAULT_INTERLACED, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)
+ );
+ g_object_class_install_property (object_class,
+ PROP_TOP_FIELD_FIRST,
+ g_param_spec_boolean ("top-field-first",
+ "Top field first",
+ "True if top field in frames in raw stream come first (not used if frames aren't interlaced)",
+ DEFAULT_INTERLACED, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)
+ );
+ g_object_class_install_property (object_class,
+ PROP_PLANE_STRIDES,
+ g_param_spec_value_array ("plane-strides",
+ "Plane strides",
+ "Strides of the planets in bytes",
+ g_param_spec_uint ("plane-stride",
+ "Plane stride",
+ "Stride of the n-th plane in bytes (0 = stride equals width*bytes-per-pixel)",
+ 0, G_MAXUINT,
+ 0,
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS),
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)
+ );
+ g_object_class_install_property (object_class,
+ PROP_PLANE_OFFSETS,
+ g_param_spec_value_array ("plane-offsets",
+ "Plane offsets",
+ "Offsets of the planets in bytes",
+ g_param_spec_uint ("plane-offset",
+ "Plane offset",
+ "Offset of the n-th plane in bytes",
+ 0, G_MAXUINT,
+ 0,
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS),
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)
+ );
+ g_object_class_install_property (object_class,
+ PROP_FRAME_STRIDE,
+ g_param_spec_uint ("frame-stride",
+ "Frame stride",
+ "Stride between whole frames (0 = frames are tightly packed together)",
+ 0, G_MAXUINT,
+ DEFAULT_FRAME_STRIDE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)
+ );
+
+ gst_element_class_set_static_metadata (element_class,
+ "rawvideoparse",
+ "Codec/Parser/Video",
+ "Converts unformatted data streams into timestamped raw video frames",
+ "Carlos Rafael Giani <dv@pseudoterminal.org>");
+}
+
+
+static void
+gst_raw_video_parse_init (GstRawVideoParse * raw_video_parse)
+{
+ gst_raw_video_parse_init_config (&(raw_video_parse->properties_config));
+ gst_raw_video_parse_init_config (&(raw_video_parse->sink_caps_config));
+
+ /* As required by GstRawBaseParse, ensure that the current configuration
+ * is initially set to be the properties config */
+ raw_video_parse->current_config = &(raw_video_parse->properties_config);
+
+ /* Properties config must be valid from the start, so set its ready value
+ * to TRUE, and make sure its bpf value is valid. */
+ raw_video_parse->properties_config.ready = TRUE;
+ raw_video_parse->properties_config.top_field_first = DEFAULT_TOP_FIELD_FIRST;
+ raw_video_parse->properties_config.frame_stride = DEFAULT_FRAME_STRIDE;
+}
+
+
+static void
+gst_raw_video_parse_set_property (GObject * object, guint prop_id,
+ GValue const *value, GParamSpec * pspec)
+{
+ GstBaseParse *base_parse = GST_BASE_PARSE (object);
+ GstRawBaseParse *raw_base_parse = GST_RAW_BASE_PARSE (object);
+ GstRawVideoParse *raw_video_parse = GST_RAW_VIDEO_PARSE (object);
+ GstRawVideoParseConfig *props_cfg = &(raw_video_parse->properties_config);
+
+ /* All properties are handled similarly:
+ * - if the new value is the same as the current value, nothing is done
+ * - the parser lock is held while the new value is set
+ * - if the properties config is the current config, the source caps are
+ * invalidated to ensure that the code in handle_frame pushes a new CAPS
+ * event out
+ * - properties that affect the video frame size call the function to update
+ * the info and also call gst_base_parse_set_min_frame_size() to ensure
+ * that the minimum frame size can hold 1 frame (= one sample for each
+ * channel); to ensure that the min frame size includes any extra padding,
+ * it is set to the result of gst_raw_video_parse_get_config_frame_size()
+ * - property configuration values that require video info updates aren't
+ * written directory into the video info structure, but in the extra
+ * fields instead (gst_raw_video_parse_update_info() then copies the values
+ * from these fields into the video info); see the documentation inside
+ * gst_raw_video_parse_update_info() for the reason why
+ */
+
+ switch (prop_id) {
+ case PROP_WIDTH:
+ {
+ gint new_width = g_value_get_int (value);
+
+ GST_RAW_BASE_PARSE_CONFIG_MUTEX_LOCK (object);
+
+ if (new_width != props_cfg->width) {
+ props_cfg->width = new_width;
+ gst_raw_video_parse_update_info (props_cfg);
+
+ if (!gst_raw_video_parse_is_using_sink_caps (raw_video_parse)) {
+ gst_raw_base_parse_invalidate_src_caps (raw_base_parse);
+ gst_base_parse_set_min_frame_size (base_parse,
+ gst_raw_video_parse_get_config_frame_size (raw_base_parse,
+ GST_RAW_BASE_PARSE_CONFIG_PROPERTIES));
+ }
+ }
+
+ GST_RAW_BASE_PARSE_CONFIG_MUTEX_UNLOCK (object);
+ break;
+ }
+
+ case PROP_HEIGHT:
+ {
+ gint new_height = g_value_get_int (value);
+
+ GST_RAW_BASE_PARSE_CONFIG_MUTEX_LOCK (object);
+
+ if (new_height != props_cfg->height) {
+ props_cfg->height = new_height;
+ gst_raw_video_parse_update_info (props_cfg);
+
+ if (!gst_raw_video_parse_is_using_sink_caps (raw_video_parse)) {
+ gst_raw_base_parse_invalidate_src_caps (raw_base_parse);
+ gst_base_parse_set_min_frame_size (base_parse,
+ gst_raw_video_parse_get_config_frame_size (raw_base_parse,
+ GST_RAW_BASE_PARSE_CONFIG_PROPERTIES));
+ }
+ }
+
+ GST_RAW_BASE_PARSE_CONFIG_MUTEX_UNLOCK (object);
+ break;
+ }
+
+ case PROP_FORMAT:
+ {
+ GstVideoFormat new_format = g_value_get_enum (value);
+
+ GST_RAW_BASE_PARSE_CONFIG_MUTEX_LOCK (object);
+
+ if (new_format != props_cfg->format) {
+ props_cfg->format = new_format;
+ gst_raw_video_parse_update_info (props_cfg);
+
+ if (!gst_raw_video_parse_is_using_sink_caps (raw_video_parse)) {
+ gst_raw_base_parse_invalidate_src_caps (raw_base_parse);
+ gst_base_parse_set_min_frame_size (base_parse,
+ gst_raw_video_parse_get_config_frame_size (raw_base_parse,
+ GST_RAW_BASE_PARSE_CONFIG_PROPERTIES));
+ }
+ }
+
+ GST_RAW_BASE_PARSE_CONFIG_MUTEX_UNLOCK (object);
+ break;
+ }
+
+ case PROP_PIXEL_ASPECT_RATIO:
+ {
+ GST_RAW_BASE_PARSE_CONFIG_MUTEX_LOCK (object);
+
+ /* The pixel aspect ratio does not affect the video frame size,
+ * so it is just set directly without any updates */
+ props_cfg->pixel_aspect_ratio_n =
+ GST_VIDEO_INFO_PAR_N (&(props_cfg->info)) =
+ gst_value_get_fraction_numerator (value);
+ props_cfg->pixel_aspect_ratio_d =
+ GST_VIDEO_INFO_PAR_D (&(props_cfg->info)) =
+ gst_value_get_fraction_denominator (value);
+ GST_DEBUG_OBJECT (raw_video_parse, "setting pixel aspect ratio to %u/%u",
+ props_cfg->pixel_aspect_ratio_n, props_cfg->pixel_aspect_ratio_d);
+
+ GST_RAW_BASE_PARSE_CONFIG_MUTEX_UNLOCK (object);
+ break;
+ }
+
+ case PROP_FRAMERATE:
+ {
+ GST_RAW_BASE_PARSE_CONFIG_MUTEX_LOCK (object);
+
+ /* The framerate does not affect the video frame size,
+ * so it is just set directly without any updates */
+ props_cfg->framerate_n = GST_VIDEO_INFO_FPS_N (&(props_cfg->info)) =
+ gst_value_get_fraction_numerator (value);
+ props_cfg->framerate_d = GST_VIDEO_INFO_FPS_D (&(props_cfg->info)) =
+ gst_value_get_fraction_denominator (value);
+ GST_DEBUG_OBJECT (raw_video_parse, "setting framerate to %u/%u",
+ props_cfg->framerate_n, props_cfg->framerate_d);
+
+ GST_RAW_BASE_PARSE_CONFIG_MUTEX_UNLOCK (object);
+ break;
+ }
+
+ case PROP_INTERLACED:
+ {
+ GST_RAW_BASE_PARSE_CONFIG_MUTEX_LOCK (object);
+
+ /* Interlacing does not affect the video frame size,
+ * so it is just set directly without any updates */
+ props_cfg->interlaced = g_value_get_boolean (value);
+ GST_VIDEO_INFO_INTERLACE_MODE (&(props_cfg->info)) =
+ props_cfg->interlaced ? GST_VIDEO_INTERLACE_MODE_INTERLEAVED :
+ GST_VIDEO_INTERLACE_MODE_PROGRESSIVE;
+
+ GST_RAW_BASE_PARSE_CONFIG_MUTEX_UNLOCK (object);
+
+ break;
+ }
+
+ case PROP_TOP_FIELD_FIRST:
+ {
+ /* The top-field-first flag is a detail related to
+ * interlacing, so no video info update is needed */
+
+ GST_RAW_BASE_PARSE_CONFIG_MUTEX_LOCK (object);
+ props_cfg->top_field_first = g_value_get_boolean (value);
+ GST_RAW_BASE_PARSE_CONFIG_MUTEX_UNLOCK (object);
+ break;
+ }
+
+ case PROP_PLANE_STRIDES:
+ {
+ GValueArray *valarray = g_value_get_boxed (value);
+ guint n_planes;
+ guint i;
+
+ /* If no valarray is given, then disable custom
+ * plane strides & offsets and stick to the
+ * standard computed ones */
+ if (valarray == NULL) {
+ GST_DEBUG_OBJECT (raw_video_parse,
+ "custom plane strides & offsets disabled");
+ props_cfg->custom_plane_strides = FALSE;
+ gst_raw_video_parse_update_info (props_cfg);
+ break;
+ }
+
+ /* Sanity check - reject empty arrays */
+ if ((valarray != NULL) && (valarray->n_values == 0)) {
+ GST_ELEMENT_ERROR (raw_video_parse, LIBRARY, SETTINGS,
+ ("plane strides property holds an empty array"), (NULL));
+ break;
+ }
+
+ GST_RAW_BASE_PARSE_CONFIG_MUTEX_LOCK (object);
+
+ n_planes = GST_VIDEO_INFO_N_PLANES (&(props_cfg->info));
+
+ /* Check that the valarray holds the right number of values */
+ if (valarray->n_values != n_planes) {
+ GST_ELEMENT_ERROR (raw_video_parse, LIBRARY, SETTINGS,
+ ("incorrect number of elements in plane strides property"),
+ ("expected: %u, got: %u", n_planes, valarray->n_values));
+ GST_RAW_BASE_PARSE_CONFIG_MUTEX_UNLOCK (object);
+ break;
+ }
+
+ /* Copy the values to the stride array */
+ for (i = 0; i < n_planes; ++i) {
+ GValue *val = g_value_array_get_nth (valarray, i);
+ props_cfg->plane_strides[i] = g_value_get_uint (val);
+ GST_DEBUG_OBJECT (raw_video_parse, "plane #%u stride: %d", i,
+ props_cfg->plane_strides[i]);
+ }
+
+ props_cfg->custom_plane_strides = TRUE;
+
+ gst_raw_video_parse_update_info (props_cfg);
+
+ if (!gst_raw_video_parse_is_using_sink_caps (raw_video_parse))
+ gst_base_parse_set_min_frame_size (base_parse,
+ gst_raw_video_parse_get_config_frame_size (raw_base_parse,
+ GST_RAW_BASE_PARSE_CONFIG_PROPERTIES));
+
+ GST_RAW_BASE_PARSE_CONFIG_MUTEX_UNLOCK (object);
+ break;
+ }
+
+ case PROP_PLANE_OFFSETS:
+ {
+ GValueArray *valarray = g_value_get_boxed (value);
+ guint n_planes;
+ guint i;
+
+ /* If no valarray is given, then disable custom
+ * plane strides & offsets and stick to the
+ * standard computed ones */
+ if (valarray == NULL) {
+ GST_DEBUG_OBJECT (raw_video_parse,
+ "custom plane strides & offsets disabled");
+ props_cfg->custom_plane_strides = FALSE;
+ gst_raw_video_parse_update_info (props_cfg);
+ break;
+ }
+
+ /* Sanity check - reject empty arrays */
+ if ((valarray != NULL) && (valarray->n_values == 0)) {
+ GST_ELEMENT_ERROR (raw_video_parse, LIBRARY, SETTINGS,
+ ("plane offsets property holds an empty array"), (NULL));
+ break;
+ }
+
+ GST_RAW_BASE_PARSE_CONFIG_MUTEX_LOCK (object);
+
+ n_planes = GST_VIDEO_INFO_N_PLANES (&(props_cfg->info));
+
+ /* Check that the valarray holds the right number of values */
+ if (valarray->n_values != n_planes) {
+ GST_ELEMENT_ERROR (raw_video_parse, LIBRARY, SETTINGS,
+ ("incorrect number of elements in plane offsets property"),
+ ("expected: %u, got: %u", n_planes, valarray->n_values));
+ GST_RAW_BASE_PARSE_CONFIG_MUTEX_UNLOCK (object);
+ break;
+ }
+
+ /* Copy the values to the offset array */
+ for (i = 0; i < n_planes; ++i) {
+ GValue *val = g_value_array_get_nth (valarray, i);
+ props_cfg->plane_offsets[i] = g_value_get_uint (val);
+ GST_DEBUG_OBJECT (raw_video_parse, "plane #%u offset: %" G_GSIZE_FORMAT,
+ i, props_cfg->plane_offsets[i]);
+ }
+
+ props_cfg->custom_plane_strides = TRUE;
+
+ gst_raw_video_parse_update_info (props_cfg);
+
+ if (!gst_raw_video_parse_is_using_sink_caps (raw_video_parse))
+ gst_base_parse_set_min_frame_size (base_parse,
+ gst_raw_video_parse_get_config_frame_size (raw_base_parse,
+ GST_RAW_BASE_PARSE_CONFIG_PROPERTIES));
+
+ GST_RAW_BASE_PARSE_CONFIG_MUTEX_UNLOCK (object);
+ break;
+ }
+
+ case PROP_FRAME_STRIDE:
+ {
+ /* The frame stride does not affect the video frame size,
+ * so it is just set directly without any updates */
+
+ GST_RAW_BASE_PARSE_CONFIG_MUTEX_LOCK (object);
+ props_cfg->frame_stride = g_value_get_uint (value);
+ gst_raw_video_parse_update_info (props_cfg);
+ if (!gst_raw_video_parse_is_using_sink_caps (raw_video_parse))
+ gst_base_parse_set_min_frame_size (base_parse,
+ gst_raw_video_parse_get_config_frame_size (raw_base_parse,
+ GST_RAW_BASE_PARSE_CONFIG_PROPERTIES));
+ GST_RAW_BASE_PARSE_CONFIG_MUTEX_UNLOCK (object);
+
+ break;
+ }
+
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+
+static void
+gst_raw_video_parse_get_property (GObject * object, guint prop_id,
+ GValue * value, GParamSpec * pspec)
+{
+ GstRawVideoParse *raw_video_parse = GST_RAW_VIDEO_PARSE (object);
+ GstRawVideoParseConfig *props_cfg = &(raw_video_parse->properties_config);
+
+ switch (prop_id) {
+ case PROP_WIDTH:
+ GST_RAW_BASE_PARSE_CONFIG_MUTEX_LOCK (object);
+ g_value_set_int (value, props_cfg->width);
+ GST_RAW_BASE_PARSE_CONFIG_MUTEX_UNLOCK (object);
+ break;
+
+ case PROP_HEIGHT:
+ GST_RAW_BASE_PARSE_CONFIG_MUTEX_LOCK (object);
+ g_value_set_int (value, props_cfg->height);
+ GST_RAW_BASE_PARSE_CONFIG_MUTEX_UNLOCK (object);
+ break;
+
+ case PROP_FORMAT:
+ GST_RAW_BASE_PARSE_CONFIG_MUTEX_LOCK (object);
+ g_value_set_enum (value, props_cfg->format);
+ GST_RAW_BASE_PARSE_CONFIG_MUTEX_UNLOCK (object);
+ break;
+
+ case PROP_PIXEL_ASPECT_RATIO:
+ GST_RAW_BASE_PARSE_CONFIG_MUTEX_LOCK (object);
+ gst_value_set_fraction (value, props_cfg->pixel_aspect_ratio_n,
+ props_cfg->pixel_aspect_ratio_d);
+ GST_RAW_BASE_PARSE_CONFIG_MUTEX_UNLOCK (object);
+
+ break;
+
+ case PROP_FRAMERATE:
+ GST_RAW_BASE_PARSE_CONFIG_MUTEX_LOCK (object);
+ gst_value_set_fraction (value, props_cfg->framerate_n,
+ props_cfg->framerate_d);
+ GST_RAW_BASE_PARSE_CONFIG_MUTEX_UNLOCK (object);
+ break;
+
+ case PROP_INTERLACED:
+ GST_RAW_BASE_PARSE_CONFIG_MUTEX_LOCK (object);
+ g_value_set_boolean (value, props_cfg->interlaced);
+ GST_RAW_BASE_PARSE_CONFIG_MUTEX_UNLOCK (object);
+ break;
+
+ case PROP_TOP_FIELD_FIRST:
+ GST_RAW_BASE_PARSE_CONFIG_MUTEX_LOCK (object);
+ g_value_set_boolean (value, props_cfg->top_field_first);
+ GST_RAW_BASE_PARSE_CONFIG_MUTEX_UNLOCK (object);
+ break;
+
+ case PROP_PLANE_STRIDES:
+ {
+ guint i, n_planes;
+ GValue val = G_VALUE_INIT;
+ GValueArray *valarray;
+
+ GST_RAW_BASE_PARSE_CONFIG_MUTEX_LOCK (object);
+
+ n_planes = GST_VIDEO_INFO_N_PLANES (&(props_cfg->info));
+ valarray = g_value_array_new (n_planes);
+ g_value_init (&val, G_TYPE_UINT);
+
+ for (i = 0; i < n_planes; ++i) {
+ g_value_set_uint (&val, props_cfg->plane_strides[i]);
+ g_value_array_insert (valarray, i, &val);
+ }
+
+ g_value_unset (&val);
+
+ GST_RAW_BASE_PARSE_CONFIG_MUTEX_UNLOCK (object);
+
+ /* Pass on ownership to the value array,
+ * since we don't need it anymore */
+ g_value_take_boxed (value, valarray);
+ break;
+ }
+
+ case PROP_PLANE_OFFSETS:
+ {
+ guint i, n_planes;
+ GValue val = G_VALUE_INIT;
+ GValueArray *valarray;
+
+ GST_RAW_BASE_PARSE_CONFIG_MUTEX_LOCK (object);
+
+ n_planes = GST_VIDEO_INFO_N_PLANES (&(props_cfg->info));
+ valarray = g_value_array_new (n_planes);
+ g_value_init (&val, G_TYPE_UINT);
+
+ for (i = 0; i < n_planes; ++i) {
+ g_value_set_uint (&val, props_cfg->plane_offsets[i]);
+ g_value_array_insert (valarray, i, &val);
+ }
+
+ g_value_unset (&val);
+
+ GST_RAW_BASE_PARSE_CONFIG_MUTEX_UNLOCK (object);
+
+ /* Pass on ownership to the value array,
+ * since we don't need it anymore */
+ g_value_take_boxed (value, valarray);
+ break;
+ }
+
+ case PROP_FRAME_STRIDE:
+ GST_RAW_BASE_PARSE_CONFIG_MUTEX_LOCK (object);
+ g_value_set_uint (value, raw_video_parse->properties_config.frame_stride);
+ GST_RAW_BASE_PARSE_CONFIG_MUTEX_UNLOCK (object);
+ break;
+
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+
+static gboolean
+gst_raw_video_parse_stop (GstBaseParse * parse)
+{
+ GstRawVideoParse *raw_video_parse = GST_RAW_VIDEO_PARSE (parse);
+
+ /* Sink caps config is not ready until caps come in.
+ * We are stopping processing, the element is being reset,
+ * so the config has to be un-readied.
+ * (Since the properties config is not depending on caps,
+ * its ready status is always TRUE.) */
+ raw_video_parse->sink_caps_config.ready = FALSE;
+
+ return GST_BASE_PARSE_CLASS (parent_class)->stop (parse);
+}
+
+
+static gboolean
+gst_raw_video_parse_set_current_config (GstRawBaseParse * raw_base_parse,
+ GstRawBaseParseConfig config)
+{
+ GstRawVideoParse *raw_video_parse = GST_RAW_VIDEO_PARSE (raw_base_parse);
+
+ switch (config) {
+ case GST_RAW_BASE_PARSE_CONFIG_PROPERTIES:
+ raw_video_parse->current_config = &(raw_video_parse->properties_config);
+ break;
+
+ case GST_RAW_BASE_PARSE_CONFIG_SINKCAPS:
+ raw_video_parse->current_config = &(raw_video_parse->sink_caps_config);
+ break;
+
+ default:
+ g_assert_not_reached ();
+ }
+
+ return TRUE;
+}
+
+
+static GstRawBaseParseConfig
+gst_raw_video_parse_get_current_config (GstRawBaseParse * raw_base_parse)
+{
+ GstRawVideoParse *raw_video_parse = GST_RAW_VIDEO_PARSE (raw_base_parse);
+ return gst_raw_video_parse_is_using_sink_caps (raw_video_parse) ?
+ GST_RAW_BASE_PARSE_CONFIG_SINKCAPS : GST_RAW_BASE_PARSE_CONFIG_PROPERTIES;
+}
+
+
+static gboolean
+gst_raw_video_parse_set_config_from_caps (GstRawBaseParse * raw_base_parse,
+ GstRawBaseParseConfig config, GstCaps * caps)
+{
+ int i;
+ GstStructure *structure;
+ GstRawVideoParse *raw_video_parse = GST_RAW_VIDEO_PARSE (raw_base_parse);
+ GstRawVideoParseConfig *config_ptr =
+ gst_raw_video_parse_get_config_ptr (raw_video_parse, config);
+
+ g_assert (caps != NULL);
+
+ /* Caps might get copied, and the copy needs to be unref'd.
+ * Also, the caller retains ownership over the original caps.
+ * So, to make this mechanism also work with cases where the
+ * caps are *not* copied, ref the original caps here first. */
+ gst_caps_ref (caps);
+
+ structure = gst_caps_get_structure (caps, 0);
+
+ /* For unaligned raw data, the output caps stay the same,
+ * except that video/x-unaligned-raw becomes video/x-raw,
+ * since the parser aligns the frame data */
+ if (gst_structure_has_name (structure, "video/x-unaligned-raw")) {
+ /* Copy the caps to be able to modify them */
+ GstCaps *new_caps = gst_caps_copy (caps);
+ gst_caps_unref (caps);
+ caps = new_caps;
+
+ /* Change the media type to video/x-raw , otherwise
+ * gst_video_info_from_caps() won't work */
+ structure = gst_caps_get_structure (caps, 0);
+ gst_structure_set_name (structure, "video/x-raw");
+ }
+
+ config_ptr->ready = gst_video_info_from_caps (&(config_ptr->info), caps);
+
+ if (config_ptr->ready) {
+ config_ptr->width = GST_VIDEO_INFO_WIDTH (&(config_ptr->info));
+ config_ptr->height = GST_VIDEO_INFO_HEIGHT (&(config_ptr->info));
+ config_ptr->pixel_aspect_ratio_n =
+ GST_VIDEO_INFO_PAR_N (&(config_ptr->info));
+ config_ptr->pixel_aspect_ratio_d =
+ GST_VIDEO_INFO_PAR_D (&(config_ptr->info));
+ config_ptr->framerate_n = GST_VIDEO_INFO_FPS_N (&(config_ptr->info));
+ config_ptr->framerate_d = GST_VIDEO_INFO_FPS_D (&(config_ptr->info));
+ config_ptr->interlaced = GST_VIDEO_INFO_IS_INTERLACED (&(config_ptr->info));
+ config_ptr->height = GST_VIDEO_INFO_HEIGHT (&(config_ptr->info));
+ config_ptr->top_field_first = 0;
+ config_ptr->frame_stride = 0;
+
+ for (i = 0; i < GST_VIDEO_MAX_PLANES; ++i) {
+ config_ptr->plane_offsets[i] =
+ GST_VIDEO_INFO_PLANE_OFFSET (&(config_ptr->info), i);
+ config_ptr->plane_strides[i] =
+ GST_VIDEO_INFO_PLANE_STRIDE (&(config_ptr->info), i);
+ }
+ }
+
+ gst_caps_unref (caps);
+
+ return config_ptr->ready;
+}
+
+
+static gboolean
+gst_raw_video_parse_get_caps_from_config (GstRawBaseParse * raw_base_parse,
+ GstRawBaseParseConfig config, GstCaps ** caps)
+{
+ GstRawVideoParse *raw_video_parse = GST_RAW_VIDEO_PARSE (raw_base_parse);
+ GstRawVideoParseConfig *config_ptr =
+ gst_raw_video_parse_get_config_ptr (raw_video_parse, config);
+
+ g_assert (caps != NULL);
+
+ *caps = gst_video_info_to_caps (&(config_ptr->info));
+
+ return *caps != NULL;
+}
+
+
+static gsize
+gst_raw_video_parse_get_config_frame_size (GstRawBaseParse * raw_base_parse,
+ GstRawBaseParseConfig config)
+{
+ GstRawVideoParse *raw_video_parse = GST_RAW_VIDEO_PARSE (raw_base_parse);
+ GstRawVideoParseConfig *config_ptr =
+ gst_raw_video_parse_get_config_ptr (raw_video_parse, config);
+ return MAX (GST_VIDEO_INFO_SIZE (&(config_ptr->info)),
+ (gsize) (config_ptr->frame_stride));
+}
+
+
+static guint
+gst_raw_video_parse_get_max_frames_per_buffer (G_GNUC_UNUSED GstRawBaseParse *
+ raw_base_parse, G_GNUC_UNUSED GstRawBaseParseConfig config)
+{
+ /* We want exactly one frame per buffer */
+ return 1;
+}
+
+
+static gboolean
+gst_raw_video_parse_is_config_ready (GstRawBaseParse * raw_base_parse,
+ GstRawBaseParseConfig config)
+{
+ GstRawVideoParse *raw_video_parse = GST_RAW_VIDEO_PARSE (raw_base_parse);
+ return gst_raw_video_parse_get_config_ptr (raw_video_parse, config)->ready;
+}
+
+
+static gboolean
+gst_raw_video_parse_process (GstRawBaseParse * raw_base_parse,
+ GstRawBaseParseConfig config, GstBuffer * in_data,
+ G_GNUC_UNUSED gsize total_num_in_bytes,
+ G_GNUC_UNUSED gsize num_valid_in_bytes, GstBuffer ** processed_data)
+{
+ GstRawVideoParse *raw_video_parse = GST_RAW_VIDEO_PARSE (raw_base_parse);
+ GstRawVideoParseConfig *config_ptr =
+ gst_raw_video_parse_get_config_ptr (raw_video_parse, config);
+ guint frame_flags = 0;
+ GstVideoInfo *video_info = &(config_ptr->info);
+ GstVideoMeta *videometa;
+ GstBuffer *out_data;
+
+ /* In case of extra padding bytes, get a subbuffer without the padding bytes.
+ * Otherwise, just add the video meta. */
+ if (GST_VIDEO_INFO_SIZE (video_info) < config_ptr->frame_stride) {
+ *processed_data = out_data =
+ gst_buffer_copy_region (in_data,
+ GST_BUFFER_COPY_FLAGS | GST_BUFFER_COPY_TIMESTAMPS |
+ GST_BUFFER_COPY_MEMORY, 0, GST_VIDEO_INFO_SIZE (video_info));
+ } else {
+ out_data = in_data;
+ *processed_data = NULL;
+ }
+
+ if (config_ptr->interlaced) {
+ GST_BUFFER_FLAG_SET (out_data, GST_VIDEO_BUFFER_FLAG_INTERLACED);
+ frame_flags |= GST_VIDEO_FRAME_FLAG_INTERLACED;
+
+ if (config_ptr->top_field_first) {
+ GST_BUFFER_FLAG_SET (out_data, GST_VIDEO_BUFFER_FLAG_TFF);
+ frame_flags |= GST_VIDEO_FRAME_FLAG_TFF;
+ } else
+ GST_BUFFER_FLAG_UNSET (out_data, GST_VIDEO_BUFFER_FLAG_TFF);
+ }
+
+ /* Remove any existing videometa - it will be replaced by the new videometa
+ * from here */
+ while ((videometa = gst_buffer_get_video_meta (out_data))) {
+ GST_LOG_OBJECT (raw_base_parse, "removing existing videometa from buffer");
+ gst_buffer_remove_meta (out_data, (GstMeta *) videometa);
+ }
+
+ gst_buffer_add_video_meta_full (out_data,
+ frame_flags,
+ config_ptr->format,
+ config_ptr->width,
+ config_ptr->height,
+ GST_VIDEO_INFO_N_PLANES (video_info),
+ config_ptr->plane_offsets, config_ptr->plane_strides);
+
+
+ return TRUE;
+}
+
+
+static gboolean
+gst_raw_video_parse_is_unit_format_supported (G_GNUC_UNUSED GstRawBaseParse *
+ raw_base_parse, GstFormat format)
+{
+ switch (format) {
+ case GST_FORMAT_BYTES:
+ case GST_FORMAT_DEFAULT:
+ return TRUE;
+ default:
+ return FALSE;
+ }
+}
+
+
+static void
+gst_raw_video_parse_get_units_per_second (GstRawBaseParse * raw_base_parse,
+ GstFormat format, GstRawBaseParseConfig config, gsize * units_per_sec_n,
+ gsize * units_per_sec_d)
+{
+ GstRawVideoParse *raw_video_parse = GST_RAW_VIDEO_PARSE (raw_base_parse);
+ GstRawVideoParseConfig *config_ptr =
+ gst_raw_video_parse_get_config_ptr (raw_video_parse, config);
+
+ switch (format) {
+ case GST_FORMAT_BYTES:
+ {
+ gsize framesize = GST_VIDEO_INFO_SIZE (&(config_ptr->info));
+ gint64 n = framesize * config_ptr->framerate_n;
+ gint64 d = config_ptr->framerate_d;
+ gint64 common_div = gst_util_greatest_common_divisor_int64 (n, d);
+ GST_DEBUG_OBJECT (raw_video_parse,
+ "n: %" G_GINT64_FORMAT " d: %" G_GINT64_FORMAT " common divisor: %"
+ G_GINT64_FORMAT, n, d, common_div);
+
+ /* Divide numerator and denominator by greatest common divisor.
+ * This minimizes the risk of integer overflows in the baseparse class. */
+ *units_per_sec_n = n / common_div;
+ *units_per_sec_d = d / common_div;
+
+ break;
+ }
+
+ case GST_FORMAT_DEFAULT:
+ {
+ *units_per_sec_n = config_ptr->framerate_n;
+ *units_per_sec_d = config_ptr->framerate_d;
+ break;
+ }
+
+ default:
+ g_assert_not_reached ();
+ }
+}
+
+
+static gint
+gst_raw_video_parse_get_overhead_size (GstRawBaseParse * raw_base_parse,
+ GstRawBaseParseConfig config)
+{
+ GstRawVideoParse *raw_video_parse = GST_RAW_VIDEO_PARSE (raw_base_parse);
+ GstRawVideoParseConfig *config_ptr =
+ gst_raw_video_parse_get_config_ptr (raw_video_parse, config);
+ gint64 frame_size = GST_VIDEO_INFO_SIZE (&(config_ptr->info));
+ gint64 frame_stride = config_ptr->frame_stride;
+
+ /* In the video parser, the overhead is defined by the difference between
+ * the frame stride and the actual frame size. If the former is larger,
+ * then the additional bytes are considered padding bytes and get ignored
+ * by the base class. */
+
+ GST_LOG_OBJECT (raw_video_parse,
+ "frame size: %" G_GINT64_FORMAT " frame stride: %" G_GINT64_FORMAT,
+ frame_size, frame_stride);
+
+ return (frame_size < frame_stride) ? (gint) (frame_stride - frame_size) : 0;
+}
+
+
+static gboolean
+gst_raw_video_parse_is_using_sink_caps (GstRawVideoParse * raw_video_parse)
+{
+ return raw_video_parse->current_config ==
+ &(raw_video_parse->sink_caps_config);
+}
+
+
+static GstRawVideoParseConfig *
+gst_raw_video_parse_get_config_ptr (GstRawVideoParse * raw_video_parse,
+ GstRawBaseParseConfig config)
+{
+ g_assert (raw_video_parse->current_config != NULL);
+
+ switch (config) {
+ case GST_RAW_BASE_PARSE_CONFIG_PROPERTIES:
+ return &(raw_video_parse->properties_config);
+
+ case GST_RAW_BASE_PARSE_CONFIG_SINKCAPS:
+ return &(raw_video_parse->sink_caps_config);
+
+ default:
+ g_assert (raw_video_parse->current_config != NULL);
+ return raw_video_parse->current_config;
+ }
+}
+
+
+static void
+gst_raw_video_parse_init_config (GstRawVideoParseConfig * config)
+{
+ int i;
+
+ config->ready = FALSE;
+ config->width = DEFAULT_WIDTH;
+ config->height = DEFAULT_HEIGHT;
+ config->format = DEFAULT_FORMAT;
+ config->pixel_aspect_ratio_n = DEFAULT_PIXEL_ASPECT_RATIO_N;
+ config->pixel_aspect_ratio_d = DEFAULT_PIXEL_ASPECT_RATIO_D;
+ config->framerate_n = DEFAULT_FRAMERATE_N;
+ config->framerate_d = DEFAULT_FRAMERATE_D;
+ config->interlaced = DEFAULT_INTERLACED;
+
+ config->top_field_first = DEFAULT_TOP_FIELD_FIRST;
+ config->frame_stride = DEFAULT_FRAME_STRIDE;
+
+ gst_video_info_set_format (&(config->info), DEFAULT_FORMAT, DEFAULT_WIDTH,
+ DEFAULT_HEIGHT);
+ for (i = 0; i < GST_VIDEO_MAX_PLANES; ++i) {
+ config->plane_offsets[i] = GST_VIDEO_INFO_PLANE_OFFSET (&(config->info), i);
+ config->plane_strides[i] = GST_VIDEO_INFO_PLANE_STRIDE (&(config->info), i);
+ }
+}
+
+
+static void
+gst_raw_video_parse_update_info (GstRawVideoParseConfig * config)
+{
+ guint i;
+ guint n_planes;
+ guint last_plane;
+ gsize last_plane_offset, last_plane_size;
+ GstVideoInfo *info = &(config->info);
+
+ GST_DEBUG ("updating info with width %u height %u format %s "
+ " custom plane strides&offsets %d", config->width, config->height,
+ gst_video_format_to_string (config->format),
+ config->custom_plane_strides);
+
+ gst_video_info_set_format (info, config->format, config->width,
+ config->height);
+
+ GST_VIDEO_INFO_PAR_N (info) = config->pixel_aspect_ratio_n;
+ GST_VIDEO_INFO_PAR_D (info) = config->pixel_aspect_ratio_d;
+ GST_VIDEO_INFO_FPS_N (info) = config->framerate_n;
+ GST_VIDEO_INFO_FPS_D (info) = config->framerate_d;
+ GST_VIDEO_INFO_INTERLACE_MODE (info) =
+ config->interlaced ? GST_VIDEO_INTERLACE_MODE_INTERLEAVED :
+ GST_VIDEO_INTERLACE_MODE_PROGRESSIVE;
+
+ /* Check if there are custom plane strides & offsets that need to be preserved */
+ if (config->custom_plane_strides) {
+ /* In case there are, overwrite the offsets&strides computed by
+ * gst_video_info_set_format with the custom ones */
+ for (i = 0; i < GST_VIDEO_MAX_PLANES; ++i) {
+ GST_VIDEO_INFO_PLANE_OFFSET (info, i) = config->plane_offsets[i];
+ GST_VIDEO_INFO_PLANE_STRIDE (info, i) = config->plane_strides[i];
+ }
+ } else {
+ /* No custom planes&offsets; copy the computed ones into
+ * the plane_offsets & plane_strides arrays to ensure they
+ * are equal to the ones in the videoinfo */
+ for (i = 0; i < GST_VIDEO_MAX_PLANES; ++i) {
+ config->plane_offsets[i] = GST_VIDEO_INFO_PLANE_OFFSET (info, i);
+ config->plane_strides[i] = GST_VIDEO_INFO_PLANE_STRIDE (info, i);
+ }
+ }
+
+ n_planes = GST_VIDEO_INFO_N_PLANES (info);
+ if (n_planes < 1)
+ n_planes = 1;
+
+ /* Figure out what plane is the physically last one. Typically
+ * this is the last plane in the list (= at index n_planes-1).
+ * However, this is not guaranteed, so we have to scan the offsets
+ * to find the last plane. */
+ last_plane_offset = 0;
+ last_plane = 0;
+ for (i = 0; i < n_planes; ++i) {
+ gsize plane_offset = GST_VIDEO_INFO_PLANE_OFFSET (info, i);
+ if (plane_offset >= last_plane_offset) {
+ last_plane = i;
+ last_plane_offset = plane_offset;
+ }
+ }
+
+ last_plane_size =
+ GST_VIDEO_INFO_PLANE_STRIDE (info,
+ last_plane) * GST_VIDEO_FORMAT_INFO_SCALE_HEIGHT (info->finfo,
+ last_plane, config->height);
+
+ GST_VIDEO_INFO_SIZE (info) = last_plane_offset + last_plane_size;
+
+ GST_DEBUG ("last plane #%u: offset: %" G_GSIZE_FORMAT " size: %"
+ G_GSIZE_FORMAT " => frame size minus extra padding: %" G_GSIZE_FORMAT,
+ last_plane, last_plane_offset, last_plane_size,
+ GST_VIDEO_INFO_SIZE (info));
+}
diff --git a/gst/rawparse/gstrawvideoparse.h b/gst/rawparse/gstrawvideoparse.h
new file mode 100644
index 0000000..32605a6
--- /dev/null
+++ b/gst/rawparse/gstrawvideoparse.h
@@ -0,0 +1,118 @@
+/* GStreamer
+ * Copyright (C) <2016> Carlos Rafael Giani <dv at pseudoterminal dot org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GST_RAW_VIDEO_PARSE_H__
+#define __GST_RAW_VIDEO_PARSE_H__
+
+#include <gst/gst.h>
+#include <gst/video/video.h>
+#include "gstrawbaseparse.h"
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_RAW_VIDEO_PARSE \
+ (gst_raw_video_parse_get_type())
+#define GST_RAW_VIDEO_PARSE(obj) \
+ (G_TYPE_CHECK_INSTANCE_CAST((obj), GST_TYPE_RAW_VIDEO_PARSE, GstRawVideoParse))
+#define GST_RAW_VIDEO_PARSE_CAST(obj) \
+ ((GstRawVideoParse *)(obj))
+#define GST_RAW_VIDEO_PARSE_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_CAST((klass), GST_TYPE_RAW_VIDEO_PARSE, GstRawVideoParseClass))
+#define GST_IS_RAW_VIDEO_PARSE(obj) \
+ (G_TYPE_CHECK_INSTANCE_TYPE((obj), GST_TYPE_RAW_VIDEO_PARSE))
+#define GST_IS_RAW_VIDEO_PARSE_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_TYPE((klass), GST_TYPE_RAW_VIDEO_PARSE))
+
+
+typedef struct _GstRawVideoParseConfig GstRawVideoParseConfig;
+typedef struct _GstRawVideoParse GstRawVideoParse;
+typedef struct _GstRawVideoParseClass GstRawVideoParseClass;
+
+
+/* Contains information about the video frame format. */
+struct _GstRawVideoParseConfig
+{
+ /* If TRUE, then this configuration is ready to use */
+ gboolean ready;
+
+ /* FIXME: These values should not be necessary, since there's
+ * GstVideoInfo. However, setting these values in the video
+ * info independently is currently difficult. For example,
+ * setting the video format requires the gst_video_info_set_format()
+ * function, but this function also overwrites plane strides
+ * and offsets. */
+ gint width, height;
+ GstVideoFormat format;
+ gint pixel_aspect_ratio_n, pixel_aspect_ratio_d;
+ gint framerate_n, framerate_d;
+ gboolean interlaced;
+ gsize plane_offsets[GST_VIDEO_MAX_PLANES];
+ gint plane_strides[GST_VIDEO_MAX_PLANES];
+
+ /* If TRUE, then TFF flags are added to outgoing buffers and
+ * their video metadata */
+ gboolean top_field_first;
+
+ /* Distance between the start of each frame, in bytes. If this value
+ * is larger than the actual size of a frame, then the extra bytes
+ * are skipped. For example, with frames that have 115200 bytes, a
+ * frame_stride value of 120000 means that 4800 trailing bytes are
+ * skipped after the 115200 frame bytes. This is useful to skip
+ * metadata in between frames. */
+ guint frame_stride;
+
+ GstVideoInfo info;
+
+ gboolean custom_plane_strides;
+};
+
+
+struct _GstRawVideoParse
+{
+ GstRawBaseParse parent;
+
+ /*< private > */
+
+ /* Configuration controlled by the object properties. Its ready value
+ * is set to TRUE from the start, so it can be used right away.
+ */
+ GstRawVideoParseConfig properties_config;
+ /* Configuration controlled by the sink caps. Its ready value is
+ * initially set to FALSE until valid sink caps come in. It is set to
+ * FALSE again when the stream-start event is observed.
+ */
+ GstRawVideoParseConfig sink_caps_config;
+ /* Currently active configuration. Points either to properties_config
+ * or to sink_caps_config. This is never NULL. */
+ GstRawVideoParseConfig *current_config;
+};
+
+
+struct _GstRawVideoParseClass
+{
+ GstRawBaseParseClass parent_class;
+};
+
+
+GType gst_raw_video_parse_get_type (void);
+
+
+G_END_DECLS
+
+#endif
diff --git a/gst/rawparse/gstunalignedaudioparse.c b/gst/rawparse/gstunalignedaudioparse.c
index 62a83f3..8847e1f 100644
--- a/gst/rawparse/gstunalignedaudioparse.c
+++ b/gst/rawparse/gstunalignedaudioparse.c
@@ -96,7 +96,7 @@
GstPad *ghostpad;
unaligned_audio_parse->inner_parser =
- gst_element_factory_make ("audioparse", "inner_parser");
+ gst_element_factory_make ("rawaudioparse", "inner_parser");
g_assert (unaligned_audio_parse->inner_parser != NULL);
g_object_set (G_OBJECT (unaligned_audio_parse->inner_parser),
diff --git a/gst/rawparse/gstunalignedvideoparse.c b/gst/rawparse/gstunalignedvideoparse.c
new file mode 100644
index 0000000..d6e8cf3
--- /dev/null
+++ b/gst/rawparse/gstunalignedvideoparse.c
@@ -0,0 +1,124 @@
+/* GStreamer
+ * Copyright (C) 2016 Carlos Rafael Giani <dv@pseudoterminal.org>
+ *
+ * gstunalignedvideoparse.c:
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#include <string.h>
+#include <stdio.h>
+#include <gst/gst.h>
+#include <gst/video/video.h>
+#include "gstunalignedvideoparse.h"
+#include "unalignedvideo.h"
+
+
+GST_DEBUG_CATEGORY (unaligned_video_parse_debug);
+#define GST_CAT_DEFAULT unaligned_video_parse_debug
+
+
+struct _GstUnalignedVideoParse
+{
+ GstBin parent;
+ GstElement *inner_parser;
+};
+
+
+struct _GstUnalignedVideoParseClass
+{
+ GstBinClass parent_class;
+};
+
+
+static GstStaticPadTemplate static_sink_template =
+GST_STATIC_PAD_TEMPLATE ("sink",
+ GST_PAD_SINK,
+ GST_PAD_ALWAYS,
+ GST_STATIC_CAPS (GST_UNALIGNED_RAW_VIDEO_CAPS)
+ );
+
+
+static GstStaticPadTemplate static_src_template =
+GST_STATIC_PAD_TEMPLATE ("src",
+ GST_PAD_SRC,
+ GST_PAD_ALWAYS,
+ GST_STATIC_CAPS (GST_VIDEO_CAPS_MAKE (GST_VIDEO_FORMATS_ALL))
+ );
+
+
+
+
+G_DEFINE_TYPE (GstUnalignedVideoParse, gst_unaligned_video_parse, GST_TYPE_BIN);
+
+
+static void
+gst_unaligned_video_parse_class_init (GstUnalignedVideoParseClass * klass)
+{
+ GstElementClass *element_class;
+
+ GST_DEBUG_CATEGORY_INIT (unaligned_video_parse_debug, "unalignedvideoparse",
+ 0, "Unaligned raw video parser");
+
+ element_class = GST_ELEMENT_CLASS (klass);
+
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&static_sink_template));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&static_src_template));
+
+ gst_element_class_set_static_metadata (element_class,
+ "unalignedvideoparse",
+ "Codec/Parser/Bin/Video",
+ "Parse unaligned raw video data",
+ "Carlos Rafael Giani <dv@pseudoterminal.org>");
+}
+
+
+static void
+gst_unaligned_video_parse_init (GstUnalignedVideoParse * unaligned_video_parse)
+{
+ GstPad *inner_pad;
+ GstPad *ghostpad;
+
+ unaligned_video_parse->inner_parser =
+ gst_element_factory_make ("rawvideoparse", "inner_parser");
+ g_assert (unaligned_video_parse->inner_parser != NULL);
+
+ g_object_set (G_OBJECT (unaligned_video_parse->inner_parser),
+ "use-sink-caps", TRUE, NULL);
+
+ gst_bin_add (GST_BIN (unaligned_video_parse),
+ unaligned_video_parse->inner_parser);
+
+ inner_pad =
+ gst_element_get_static_pad (unaligned_video_parse->inner_parser, "sink");
+ ghostpad =
+ gst_ghost_pad_new_from_template ("sink", inner_pad,
+ gst_element_class_get_pad_template (GST_ELEMENT_GET_CLASS
+ (unaligned_video_parse), "sink"));
+ gst_element_add_pad (GST_ELEMENT (unaligned_video_parse), ghostpad);
+ gst_object_unref (GST_OBJECT (inner_pad));
+
+ inner_pad = gst_element_get_static_pad (unaligned_video_parse->inner_parser,
+ "src");
+ ghostpad =
+ gst_ghost_pad_new_from_template ("src", inner_pad,
+ gst_element_class_get_pad_template (GST_ELEMENT_GET_CLASS
+ (unaligned_video_parse), "src"));
+ gst_element_add_pad (GST_ELEMENT (unaligned_video_parse), ghostpad);
+ gst_object_unref (GST_OBJECT (inner_pad));
+}
diff --git a/gst/rawparse/gstunalignedvideoparse.h b/gst/rawparse/gstunalignedvideoparse.h
new file mode 100644
index 0000000..da40ac9
--- /dev/null
+++ b/gst/rawparse/gstunalignedvideoparse.h
@@ -0,0 +1,49 @@
+/* GStreamer
+ * Copyright (C) 2016 Carlos Rafael Giani <dv@pseudoterminal.org>
+ *
+ * gstunalignedvideoparse.h:
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GST_UNALIGNED_VIDEO_PARSE_H___
+#define __GST_UNALIGNED_VIDEO_PARSE_H___
+
+#include <gst/gst.h>
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_UNALIGNED_VIDEO_PARSE \
+ (gst_unaligned_video_parse_get_type())
+#define GST_UNALIGNED_VIDEO_PARSE(obj) \
+ (G_TYPE_CHECK_INSTANCE_CAST((obj), GST_TYPE_UNALIGNED_VIDEO_PARSE, GstUnalignedVideoParse))
+#define GST_UNALIGNED_VIDEO_PARSE_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_CAST((klass), GST_TYPE_UNALIGNED_VIDEO_PARSE, GstUnalignedVideoParseClass))
+#define GST_UNALIGNED_VIDEO_PARSE_CAST(obj) \
+ ((GstUnalignedVideoParse *)(obj))
+#define GST_IS_UNALIGNED_VIDEO_PARSE(obj) \
+ (G_TYPE_CHECK_INSTANCE_TYPE((obj), GST_TYPE_UNALIGNED_VIDEO_PARSE))
+#define GST_IS_UNALIGNED_VIDEO_PARSE_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_TYPE((klass), GST_TYPE_UNALIGNED_VIDEO_PARSE))
+
+typedef struct _GstUnalignedVideoParse GstUnalignedVideoParse;
+typedef struct _GstUnalignedVideoParseClass GstUnalignedVideoParseClass;
+
+GType gst_unaligned_video_parse_get_type (void);
+
+G_END_DECLS
+
+#endif /* __GST_UNALIGNED_VIDEO_PARSE_H___ */
diff --git a/gst/rawparse/gstvideoparse.c b/gst/rawparse/gstvideoparse.c
index 7b5e037..cf5c48e 100644
--- a/gst/rawparse/gstvideoparse.c
+++ b/gst/rawparse/gstvideoparse.c
@@ -23,28 +23,47 @@
* SECTION:element-videoparse
*
* Converts a byte stream into video frames.
+ *
+ * <note>This element is deprecated. Use #GstRawVideoParse instead.</note>
*/
#ifdef HAVE_CONFIG_H
# include "config.h"
#endif
+/* FIXME 0.11: suppress warnings for deprecated API such as g_value_array stuff
+ * for now with newer GLib versions (>= 2.31.0) */
+#define GLIB_DISABLE_DEPRECATION_WARNINGS
+
+#include <gst/gst.h>
+#include <gst/audio/audio.h>
#include "gstvideoparse.h"
+#include "gstrawvideoparse.h"
+
+
+static GstStaticPadTemplate static_sink_template =
+GST_STATIC_PAD_TEMPLATE ("sink",
+ GST_PAD_SINK,
+ GST_PAD_ALWAYS,
+ GST_STATIC_CAPS_ANY);
+
+
+static GstStaticPadTemplate static_src_template =
+GST_STATIC_PAD_TEMPLATE ("src",
+ GST_PAD_SRC,
+ GST_PAD_ALWAYS,
+ GST_STATIC_CAPS ("video/x-raw")
+ );
+
static void gst_video_parse_set_property (GObject * object, guint prop_id,
const GValue * value, GParamSpec * pspec);
static void gst_video_parse_get_property (GObject * object, guint prop_id,
GValue * value, GParamSpec * pspec);
-static GstCaps *gst_video_parse_get_caps (GstRawParse * rp);
-static void gst_video_parse_pre_push_buffer (GstRawParse * rp,
- GstBuffer * buffer);
-static void gst_video_parse_decide_allocation (GstRawParse * rp,
- GstQuery * query);
-
-static void gst_video_parse_update_info (GstVideoParse * vp);
-static gboolean gst_video_parse_deserialize_int_array (const gchar * str,
- gint * dest, guint n_values);
+static GValueArray *gst_video_parse_int_valarray_from_string (const gchar *
+ str);
+static gchar *gst_video_parse_int_valarray_to_string (GValueArray * valarray);
GST_DEBUG_CATEGORY_STATIC (gst_video_parse_debug);
#define GST_CAT_DEFAULT gst_video_parse_debug
@@ -65,23 +84,17 @@
};
#define gst_video_parse_parent_class parent_class
-G_DEFINE_TYPE (GstVideoParse, gst_video_parse, GST_TYPE_RAW_PARSE);
+G_DEFINE_TYPE (GstVideoParse, gst_video_parse, GST_TYPE_BIN);
static void
gst_video_parse_class_init (GstVideoParseClass * klass)
{
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
GstElementClass *gstelement_class = GST_ELEMENT_CLASS (klass);
- GstRawParseClass *rp_class = GST_RAW_PARSE_CLASS (klass);
- GstCaps *caps;
gobject_class->set_property = gst_video_parse_set_property;
gobject_class->get_property = gst_video_parse_get_property;
- rp_class->get_caps = gst_video_parse_get_caps;
- rp_class->pre_push_buffer = gst_video_parse_pre_push_buffer;
- rp_class->decide_allocation = gst_video_parse_decide_allocation;
-
g_object_class_install_property (gobject_class, PROP_FORMAT,
g_param_spec_enum ("format", "Format", "Format of images in raw stream",
GST_TYPE_VIDEO_FORMAT, GST_VIDEO_FORMAT_I420,
@@ -123,15 +136,14 @@
gst_element_class_set_static_metadata (gstelement_class, "Video Parse",
"Filter/Video",
- "Converts stream into video frames",
+ "Converts stream into video frames (deprecated: use rawvideoparse instead)",
"David Schleef <ds@schleef.org>, "
"Sebastian Dröge <sebastian.droege@collabora.co.uk>");
- caps = gst_caps_from_string ("video/x-raw; video/x-bayer");
-
- gst_raw_parse_class_set_src_pad_template (rp_class, caps);
- gst_raw_parse_class_set_multiple_frames_per_buffer (rp_class, FALSE);
- gst_caps_unref (caps);
+ gst_element_class_add_pad_template (gstelement_class,
+ gst_static_pad_template_get (&static_sink_template));
+ gst_element_class_add_pad_template (gstelement_class,
+ gst_static_pad_template_get (&static_src_template));
GST_DEBUG_CATEGORY_INIT (gst_video_parse_debug, "videoparse", 0,
"videoparse element");
@@ -140,14 +152,28 @@
static void
gst_video_parse_init (GstVideoParse * vp)
{
- vp->width = 320;
- vp->height = 240;
- vp->format = GST_VIDEO_FORMAT_I420;
- vp->par_n = 1;
- vp->par_d = 1;
+ GstPad *inner_pad;
+ GstPad *ghostpad;
- gst_raw_parse_set_fps (GST_RAW_PARSE (vp), 25, 1);
- gst_video_parse_update_info (vp);
+ vp->rawvideoparse =
+ gst_element_factory_make ("rawvideoparse", "inner_rawvideoparse");
+ g_assert (vp->rawvideoparse != NULL);
+
+ gst_bin_add (GST_BIN (vp), vp->rawvideoparse);
+
+ inner_pad = gst_element_get_static_pad (vp->rawvideoparse, "sink");
+ ghostpad =
+ gst_ghost_pad_new_from_template ("sink", inner_pad,
+ gst_element_class_get_pad_template (GST_ELEMENT_GET_CLASS (vp), "sink"));
+ gst_element_add_pad (GST_ELEMENT (vp), ghostpad);
+ gst_object_unref (GST_OBJECT (inner_pad));
+
+ inner_pad = gst_element_get_static_pad (vp->rawvideoparse, "src");
+ ghostpad =
+ gst_ghost_pad_new_from_template ("src", inner_pad,
+ gst_element_class_get_pad_template (GST_ELEMENT_GET_CLASS (vp), "src"));
+ gst_element_add_pad (GST_ELEMENT (vp), ghostpad);
+ gst_object_unref (GST_OBJECT (inner_pad));
}
static void
@@ -156,62 +182,83 @@
{
GstVideoParse *vp = GST_VIDEO_PARSE (object);
- g_return_if_fail (!gst_raw_parse_is_negotiated (GST_RAW_PARSE (vp)));
-
switch (prop_id) {
case PROP_FORMAT:
- vp->format = g_value_get_enum (value);
+ g_object_set (G_OBJECT (vp->rawvideoparse), "format",
+ g_value_get_enum (value), NULL);
break;
+
case PROP_WIDTH:
- vp->width = g_value_get_int (value);
+ g_object_set (G_OBJECT (vp->rawvideoparse), "width",
+ g_value_get_int (value), NULL);
break;
+
case PROP_HEIGHT:
- vp->height = g_value_get_int (value);
+ g_object_set (G_OBJECT (vp->rawvideoparse), "height",
+ g_value_get_int (value), NULL);
break;
+
case PROP_FRAMERATE:
- gst_raw_parse_set_fps (GST_RAW_PARSE (vp),
+ g_object_set (G_OBJECT (vp->rawvideoparse), "framerate",
gst_value_get_fraction_numerator (value),
- gst_value_get_fraction_denominator (value));
+ gst_value_get_fraction_denominator (value), NULL);
break;
+
case PROP_PAR:
- vp->par_n = gst_value_get_fraction_numerator (value);
- vp->par_d = gst_value_get_fraction_denominator (value);
+ g_object_set (G_OBJECT (vp->rawvideoparse), "pixel-aspect-ratio",
+ gst_value_get_fraction_numerator (value),
+ gst_value_get_fraction_denominator (value), NULL);
break;
+
case PROP_INTERLACED:
- vp->interlaced = g_value_get_boolean (value);
+ g_object_set (G_OBJECT (vp->rawvideoparse), "interlaced",
+ g_value_get_boolean (value), NULL);
break;
+
case PROP_TOP_FIELD_FIRST:
- vp->top_field_first = g_value_get_boolean (value);
+ g_object_set (G_OBJECT (vp->rawvideoparse), "top-field-first",
+ g_value_get_boolean (value), NULL);
break;
- case PROP_STRIDES:
- if (gst_video_parse_deserialize_int_array (g_value_get_string (value),
- vp->stride, GST_VIDEO_MAX_PLANES)) {
- vp->stride_set = TRUE;
+
+ case PROP_STRIDES:{
+ GValueArray *valarray =
+ gst_video_parse_int_valarray_from_string (g_value_get_string (value));
+
+ if (valarray != NULL) {
+ g_object_set (G_OBJECT (vp->rawvideoparse), "plane-strides",
+ valarray, NULL);
+ g_value_array_free (valarray);
} else {
GST_WARNING_OBJECT (vp, "failed to deserialize given strides");
- vp->stride_set = FALSE;
}
break;
- case PROP_OFFSETS:
- if (gst_video_parse_deserialize_int_array (g_value_get_string (value),
- vp->offset, GST_VIDEO_MAX_PLANES)) {
- vp->offset_set = TRUE;
+ }
+
+ case PROP_OFFSETS:{
+ GValueArray *valarray =
+ gst_video_parse_int_valarray_from_string (g_value_get_string (value));
+
+ if (valarray != NULL) {
+ g_object_set (G_OBJECT (vp->rawvideoparse), "plane-offsets",
+ valarray, NULL);
+ g_value_array_free (valarray);
} else {
- GST_WARNING_OBJECT (vp, "failed to deserialized given offsets");
- vp->offset_set = FALSE;
+ GST_WARNING_OBJECT (vp, "failed to deserialize given offsets");
}
break;
+ }
+
case PROP_FRAMESIZE:
- vp->framesize = g_value_get_uint (value);
+ g_object_set (G_OBJECT (vp->rawvideoparse), "frame-stride",
+ g_value_get_uint (value), NULL);
break;
+
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
}
-
- gst_video_parse_update_info (vp);
}
static void
@@ -221,377 +268,155 @@
GstVideoParse *vp = GST_VIDEO_PARSE (object);
switch (prop_id) {
- case PROP_FORMAT:
- g_value_set_enum (value, vp->format);
+ case PROP_FORMAT:{
+ GstVideoFormat format;
+ g_object_get (G_OBJECT (vp->rawvideoparse), "format", &format, NULL);
+ g_value_set_enum (value, format);
break;
- case PROP_WIDTH:
- g_value_set_int (value, vp->width);
+ }
+
+ case PROP_WIDTH:{
+ gint width;
+ g_object_get (G_OBJECT (vp->rawvideoparse), "width", &width, NULL);
+ g_value_set_int (value, width);
break;
- case PROP_HEIGHT:
- g_value_set_int (value, vp->height);
+ }
+
+ case PROP_HEIGHT:{
+ gint height;
+ g_object_get (G_OBJECT (vp->rawvideoparse), "height", &height, NULL);
+ g_value_set_int (value, height);
break;
+ }
+
case PROP_FRAMERATE:{
gint fps_n, fps_d;
-
- gst_raw_parse_get_fps (GST_RAW_PARSE (vp), &fps_n, &fps_d);
+ g_object_get (G_OBJECT (vp->rawvideoparse), "framerate", &fps_n, &fps_d,
+ NULL);
gst_value_set_fraction (value, fps_n, fps_d);
break;
}
- case PROP_PAR:
- gst_value_set_fraction (value, vp->par_n, vp->par_d);
- break;
- case PROP_INTERLACED:
- g_value_set_boolean (value, vp->interlaced);
- break;
- case PROP_TOP_FIELD_FIRST:
- g_value_set_boolean (value, vp->top_field_first);
- break;
- case PROP_STRIDES:
- {
- gchar *tmp;
- tmp = g_strdup_printf ("%d,%d,%d,%d", vp->info.stride[0],
- vp->info.stride[1], vp->info.stride[2], vp->info.stride[3]);
- g_value_set_string (value, tmp);
- g_free (tmp);
+ case PROP_PAR:{
+ gint par_n, par_d;
+ g_object_get (G_OBJECT (vp->rawvideoparse), "pixel-aspect-ratio", &par_n,
+ &par_d, NULL);
+ gst_value_set_fraction (value, par_n, par_d);
break;
}
- case PROP_OFFSETS:
- {
- gchar *tmp;
- tmp = g_strdup_printf ("%" G_GSIZE_FORMAT ",%" G_GSIZE_FORMAT
- ",%" G_GSIZE_FORMAT ",%" G_GSIZE_FORMAT, vp->info.offset[0],
- vp->info.offset[1], vp->info.offset[2], vp->info.offset[3]);
- g_value_set_string (value, tmp);
- g_free (tmp);
+ case PROP_INTERLACED:{
+ gboolean interlaced;
+ g_object_get (G_OBJECT (vp->rawvideoparse), "interlaced", &interlaced,
+ NULL);
+ g_value_set_boolean (value, interlaced);
break;
}
- case PROP_FRAMESIZE:
- g_value_set_uint (value, vp->info.size);
+
+ case PROP_TOP_FIELD_FIRST:{
+ gboolean top_field_first;
+ g_object_get (G_OBJECT (vp->rawvideoparse), "top-field-first",
+ &top_field_first, NULL);
+ g_value_set_boolean (value, top_field_first);
break;
+ }
+
+ case PROP_STRIDES:{
+ GValueArray *array;
+ g_object_get (G_OBJECT (vp->rawvideoparse), "plane-strides", &array,
+ NULL);
+ g_value_take_string (value,
+ gst_video_parse_int_valarray_to_string (array));
+ break;
+ }
+
+ case PROP_OFFSETS:{
+ GValueArray *array;
+ g_object_get (G_OBJECT (vp->rawvideoparse), "plane-offsets", &array,
+ NULL);
+ g_value_take_string (value,
+ gst_video_parse_int_valarray_to_string (array));
+ break;
+ }
+
+ case PROP_FRAMESIZE:{
+ guint frame_stride;
+ g_object_get (G_OBJECT (vp->rawvideoparse), "frame-stride", &frame_stride,
+ NULL);
+ g_value_set_uint (value, frame_stride);
+ break;
+ }
+
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
}
}
-static gboolean
-gst_video_parse_deserialize_int_array (const gchar * str, gint * dest,
- guint n_values)
+static GValueArray *
+gst_video_parse_int_valarray_from_string (const gchar * str)
{
gchar **strv;
guint length;
guint i;
+ GValueArray *valarray;
+ GValue gvalue = G_VALUE_INIT;
- strv = g_strsplit (str, ",", n_values);
+ if (str == NULL)
+ return NULL;
+
+ strv = g_strsplit (str, ",", GST_VIDEO_MAX_PLANES);
if (strv == NULL)
- return FALSE;
+ return NULL;
length = g_strv_length (strv);
+ valarray = g_value_array_new (length);
+ g_value_init (&gvalue, G_TYPE_UINT);
for (i = 0; i < length; i++) {
gint64 val;
val = g_ascii_strtoll (strv[i], NULL, 10);
if (val < G_MININT || val > G_MAXINT) {
- g_strfreev (strv);
- return FALSE;
+ goto error;
}
- dest[i] = val;
+ g_value_set_uint (&gvalue, val);
+ g_value_array_insert (valarray, i, &gvalue);
}
- /* fill remaining values with 0 */
- for (i = length; i < n_values; i++)
- dest[i] = 0;
-
+finish:
g_strfreev (strv);
+ return valarray;
- return TRUE;
+error:
+ g_value_array_free (valarray);
+ valarray = NULL;
+ goto finish;
}
-static inline gsize
-gst_video_parse_get_plane_size (GstVideoInfo * info, guint plane)
+static gchar *
+gst_video_parse_int_valarray_to_string (GValueArray * valarray)
{
- gsize size = 0;
-
- if (GST_VIDEO_FORMAT_INFO_IS_TILED (info->finfo)) {
- gint tile_width, tile_height, x_tiles, y_tiles;
-
- tile_width = 1 << GST_VIDEO_FORMAT_INFO_TILE_WS (info->finfo);
- tile_height = 1 << GST_VIDEO_FORMAT_INFO_TILE_HS (info->finfo);
- x_tiles = GST_VIDEO_TILE_X_TILES (info->stride[plane]);
- y_tiles = GST_VIDEO_TILE_Y_TILES (info->stride[plane]);
-
- /* plane size is the size of one tile multiplied by the number of tiles */
- size = tile_width * tile_height * x_tiles * y_tiles;
- } else {
- size = info->stride[plane] *
- GST_VIDEO_FORMAT_INFO_SCALE_HEIGHT (info->finfo, plane, info->height);
- }
-
- return size;
-}
-
-
-static gboolean
-gst_video_parse_update_stride (GstVideoParse * vp)
-{
- GstVideoInfo *info = &vp->info;
+ /* holds a 64-bit number as string, which can have max. 20 digits
+ * (with extra char for nullbyte) */
+ gchar stride_str[21];
+ gchar *str = NULL;
guint i;
- /* 1. check that provided strides are greater than the default ones */
- for (i = 0; i < GST_VIDEO_INFO_N_PLANES (info); i++) {
- if (GST_VIDEO_FORMAT_INFO_IS_TILED (info->finfo)) {
- /* for tiled format, make sure there is more tiles than default */
- gint default_x_tiles, default_y_tiles, x_tiles, y_tiles;
+ for (i = 0; i < valarray->n_values; i++) {
+ GValue *gvalue = g_value_array_get_nth (valarray, i);
+ guint val = g_value_get_uint (gvalue);
+ g_snprintf (stride_str, sizeof (stride_str), "%u", val);
- x_tiles = GST_VIDEO_TILE_X_TILES (vp->stride[i]);
- y_tiles = GST_VIDEO_TILE_Y_TILES (vp->stride[i]);
- default_x_tiles = GST_VIDEO_TILE_X_TILES (info->stride[i]);
- default_y_tiles = GST_VIDEO_TILE_Y_TILES (info->stride[i]);
-
- if (x_tiles < default_x_tiles) {
- GST_WARNING_OBJECT (vp,
- "x_tiles for plane %u is too small: got %d, min %d", i, x_tiles,
- default_x_tiles);
- return FALSE;
- }
-
- if (y_tiles < default_y_tiles) {
- GST_WARNING_OBJECT (vp,
- "y_tiles for plane %u is too small: got %d, min %d", i, y_tiles,
- default_y_tiles);
- return FALSE;
- }
+ if (str == NULL) {
+ str = g_strdup (stride_str);
} else {
- if (vp->stride[i] < info->stride[i]) {
- GST_WARNING_OBJECT (vp,
- "stride for plane %u is too small: got %d, min %d", i,
- vp->stride[i], info->stride[i]);
- return FALSE;
- }
+ gchar *new_str = g_strdup_printf ("%s,%s", str, stride_str);
+ g_free (str);
+ str = new_str;
}
}
- /* 2. update stride and plane offsets */
- for (i = 0; i < GST_VIDEO_INFO_N_PLANES (info); i++) {
- if (vp->stride[i] != info->stride[i]) {
- info->stride[i] = vp->stride[i];
-
- if (i > 0) {
- /* update offset to reflect stride change for plane > 0 */
- info->offset[i] = info->offset[i - 1] +
- gst_video_parse_get_plane_size (info, i - 1);
- }
-
- vp->need_videometa = TRUE;
- }
- }
-
- return TRUE;
-}
-
-static gboolean
-gst_video_parse_update_offset (GstVideoParse * vp)
-{
- GstVideoInfo *info = &vp->info;
- guint i;
-
- /* 1. check that provided offsets are greaters than the default ones and are
- * consistent with plane size */
- for (i = 0; i < GST_VIDEO_INFO_N_PLANES (info); i++) {
- gsize min_offset = info->offset[i];
-
- if (i > 0)
- min_offset = MAX (min_offset,
- vp->offset[i - 1] + gst_video_parse_get_plane_size (info, i - 1));
-
- if (vp->offset[i] < min_offset) {
- GST_WARNING_OBJECT (vp,
- "offset for plane %u is too small: got %d, min %" G_GSIZE_FORMAT, i,
- vp->offset[i], min_offset);
- return FALSE;
- }
- }
-
- /* 2. update offsets */
- for (i = 0; i < GST_VIDEO_INFO_N_PLANES (info); i++) {
- if (vp->offset[i] != info->offset[i]) {
- info->offset[i] = vp->offset[i];
- vp->need_videometa = TRUE;
- }
- }
-
- return TRUE;
-}
-
-static void
-gst_video_parse_update_info (GstVideoParse * vp)
-{
- GstVideoInfo *info = &vp->info;
- gint fps_n, fps_d;
- gint framesize;
- guint i;
- gboolean update_size = FALSE;
-
- gst_raw_parse_get_fps (GST_RAW_PARSE (vp), &fps_n, &fps_d);
-
- gst_video_info_init (info);
- gst_video_info_set_format (info, vp->format, vp->width, vp->height);
- info->fps_n = fps_n;
- info->fps_d = fps_d;
- info->par_n = vp->par_n;
- info->par_d = vp->par_d;
- info->interlace_mode = vp->interlaced ?
- GST_VIDEO_INTERLACE_MODE_INTERLEAVED :
- GST_VIDEO_INTERLACE_MODE_PROGRESSIVE;
-
- vp->need_videometa = FALSE;
-
- if (vp->stride_set) {
- if (gst_video_parse_update_stride (vp))
- update_size = TRUE;
- else
- GST_WARNING_OBJECT (vp, "invalid strides set, use default ones");
- }
-
- if (vp->offset_set) {
- if (gst_video_parse_update_offset (vp))
- update_size = TRUE;
- else
- GST_WARNING_OBJECT (vp, "invalid offsets set, use default ones");
- }
-
- if (update_size) {
- framesize = 0;
-
- for (i = 0; i < GST_VIDEO_INFO_N_PLANES (info); i++) {
- gint planesize = info->offset[i];
- planesize += gst_video_parse_get_plane_size (info, i);
-
- if (planesize > framesize)
- framesize = planesize;
- }
-
- info->size = framesize;
- }
-
- if (vp->framesize) {
- /* user requires a specific framesize, just make sure it's bigger than
- * the current one */
-
- if (vp->framesize > vp->info.size)
- vp->info.size = vp->framesize;
- else
- GST_WARNING_OBJECT (vp, "invalid framesize set: got %u, min: %"
- G_GSIZE_FORMAT, vp->framesize, vp->info.size);
- }
-
- GST_DEBUG_OBJECT (vp, "video info: %ux%u, format %s, size %" G_GSIZE_FORMAT
- ", stride {%d,%d,%d,%d}, offset {%" G_GSIZE_FORMAT ",%" G_GSIZE_FORMAT
- ",%" G_GSIZE_FORMAT ",%" G_GSIZE_FORMAT "}",
- GST_VIDEO_INFO_WIDTH (info), GST_VIDEO_INFO_HEIGHT (info),
- GST_VIDEO_INFO_NAME (info), GST_VIDEO_INFO_SIZE (info),
- info->stride[0], info->stride[1], info->stride[2], info->stride[3],
- info->offset[0], info->offset[1], info->offset[2], info->offset[3]);
-
- /* update base class framesize */
- framesize = GST_VIDEO_INFO_SIZE (info);
- gst_raw_parse_set_framesize (GST_RAW_PARSE (vp), framesize);
-}
-
-static GstCaps *
-gst_video_parse_get_caps (GstRawParse * rp)
-{
- GstVideoParse *vp = GST_VIDEO_PARSE (rp);
-
- return gst_video_info_to_caps (&vp->info);
-}
-
-static gboolean
-gst_video_parse_copy_frame (GstVideoParse * vp, GstBuffer * dest,
- GstVideoInfo * dest_info, GstBuffer * src, GstVideoInfo * src_info)
-{
- GstVideoFrame src_frame;
- GstVideoFrame dest_frame;
- gboolean ret;
-
- if (!gst_video_frame_map (&src_frame, src_info, src, GST_MAP_READ)) {
- GST_ERROR_OBJECT (vp, "failed to map src frame");
- return FALSE;
- }
-
- if (!gst_video_frame_map (&dest_frame, dest_info, dest, GST_MAP_WRITE)) {
- GST_ERROR_OBJECT (vp, "failed to map dest frame");
- gst_video_frame_unmap (&src_frame);
- return FALSE;
- }
-
- ret = gst_video_frame_copy (&dest_frame, &src_frame);
-
- gst_video_frame_unmap (&src_frame);
- gst_video_frame_unmap (&dest_frame);
-
- return ret;
-}
-
-static void
-gst_video_parse_pre_push_buffer (GstRawParse * rp, GstBuffer * buffer)
-{
- GstVideoParse *vp = GST_VIDEO_PARSE (rp);
-
- if (vp->do_copy) {
- GstVideoInfo info;
- GstBuffer *outbuf;
-
- gst_video_info_init (&info);
- gst_video_info_set_format (&info, vp->format, vp->width, vp->height);
-
- GST_DEBUG_OBJECT (vp, "copying frame to remove padding");
-
- outbuf = gst_buffer_new_allocate (NULL, GST_VIDEO_INFO_SIZE (&info), NULL);
-
- if (!gst_video_parse_copy_frame (vp, outbuf, &info, buffer, &vp->info))
- GST_WARNING_OBJECT (vp, "failed to copy frame");
-
- gst_buffer_replace_all_memory (buffer, gst_buffer_get_all_memory (outbuf));
- gst_buffer_unref (outbuf);
- } else {
- GstVideoInfo *info = &vp->info;
- GstVideoFrameFlags flags = GST_VIDEO_FRAME_FLAG_NONE;
-
- if (vp->interlaced && vp->top_field_first)
- flags = GST_VIDEO_FRAME_FLAG_TFF;
-
- gst_buffer_add_video_meta_full (buffer, flags, GST_VIDEO_INFO_FORMAT (info),
- GST_VIDEO_INFO_WIDTH (info), GST_VIDEO_INFO_HEIGHT (info),
- GST_VIDEO_INFO_N_PLANES (info), info->offset, info->stride);
- }
-
- if (vp->interlaced) {
- if (vp->top_field_first) {
- GST_BUFFER_FLAG_SET (buffer, GST_VIDEO_BUFFER_FLAG_TFF);
- } else {
- GST_BUFFER_FLAG_UNSET (buffer, GST_VIDEO_BUFFER_FLAG_TFF);
- }
- }
-}
-
-static void
-gst_video_parse_decide_allocation (GstRawParse * rp, GstQuery * query)
-{
- GstVideoParse *vp = GST_VIDEO_PARSE (rp);
- gboolean has_videometa;
-
- has_videometa = gst_query_find_allocation_meta (query,
- GST_VIDEO_META_API_TYPE, NULL);
-
- /* no need to copy if downstream supports videometa or if we don't need
- * them */
- if (has_videometa || !vp->need_videometa)
- return;
-
- vp->do_copy = TRUE;
+ return str;
}
diff --git a/gst/rawparse/gstvideoparse.h b/gst/rawparse/gstvideoparse.h
index dd540c5..c5d8d64 100644
--- a/gst/rawparse/gstvideoparse.h
+++ b/gst/rawparse/gstvideoparse.h
@@ -24,11 +24,6 @@
#define __GST_VIDEO_PARSE_H__
#include <gst/gst.h>
-#include <gst/base/gstbasetransform.h>
-#include <gst/base/gstadapter.h>
-#include <gst/video/video.h>
-
-#include "gstrawparse.h"
#define GST_TYPE_VIDEO_PARSE \
(gst_video_parse_get_type())
@@ -46,29 +41,13 @@
struct _GstVideoParse
{
- GstRawParse parent;
-
- GstVideoInfo info;
- gboolean do_copy;
- gboolean need_videometa;
- gboolean stride_set;
- gboolean offset_set;
-
- /* properties */
- GstVideoFormat format;
- gint width;
- gint height;
- gint par_n, par_d;
- gboolean interlaced;
- gboolean top_field_first;
- gint stride[GST_VIDEO_MAX_PLANES];
- gint offset[GST_VIDEO_MAX_PLANES];
- guint framesize;
+ GstBin parent;
+ GstElement *rawvideoparse;
};
struct _GstVideoParseClass
{
- GstRawParseClass parent_class;
+ GstBinClass parent_class;
};
diff --git a/gst/rawparse/plugin.c b/gst/rawparse/plugin.c
index bb21f77..72b3e49 100644
--- a/gst/rawparse/plugin.c
+++ b/gst/rawparse/plugin.c
@@ -3,7 +3,10 @@
#endif
#include <gst/gst.h>
+#include "gstrawaudioparse.h"
+#include "gstrawvideoparse.h"
#include "gstunalignedaudioparse.h"
+#include "gstunalignedvideoparse.h"
#include "gstaudioparse.h"
#include "gstvideoparse.h"
@@ -18,6 +21,12 @@
gst_audio_parse_get_type ());
ret &= gst_element_register (plugin, "unalignedaudioparse", GST_RANK_MARGINAL,
gst_unaligned_audio_parse_get_type ());
+ ret &= gst_element_register (plugin, "unalignedvideoparse", GST_RANK_MARGINAL,
+ gst_unaligned_video_parse_get_type ());
+ ret &= gst_element_register (plugin, "rawaudioparse", GST_RANK_NONE,
+ gst_raw_audio_parse_get_type ());
+ ret &= gst_element_register (plugin, "rawvideoparse", GST_RANK_NONE,
+ gst_raw_video_parse_get_type ());
return ret;
}
diff --git a/sys/applemedia-nonpublic/bufferfactory.h b/gst/rawparse/unalignedvideo.h
similarity index 61%
copy from sys/applemedia-nonpublic/bufferfactory.h
copy to gst/rawparse/unalignedvideo.h
index 132b953..a5c1005 100644
--- a/sys/applemedia-nonpublic/bufferfactory.h
+++ b/gst/rawparse/unalignedvideo.h
@@ -1,5 +1,7 @@
-/*
- * Copyright (C) 2010 Ole André Vadla Ravnås <oleavr@soundrop.com>
+/* GStreamer
+ * Copyright (C) 2016 Carlos Rafael Giani <dv@pseudoterminal.org>
+ *
+ * unalignedvideo.h:
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
@@ -17,18 +19,17 @@
* Boston, MA 02110-1301, USA.
*/
-#import <Foundation/Foundation.h>
+#ifndef __GST_UNALIGNED_VIDEO_H__
+#define __GST_UNALIGNED_VIDEO_H__
#include <gst/gst.h>
+#include <gst/video/video.h>
-@interface GstAMBufferFactory : NSObject {
- gpointer coreMediaCtx;
-}
+#define GST_UNALIGNED_RAW_VIDEO_CAPS \
+ "video/x-unaligned-raw" \
+ ", format = (string) " GST_VIDEO_FORMATS_ALL \
+ ", width = " GST_VIDEO_SIZE_RANGE \
+ ", height = " GST_VIDEO_SIZE_RANGE \
+ ", framerate = " GST_VIDEO_FPS_RANGE
-- (id)initWithError:(GError **)error;
-- (void)finalize;
-
-- (GstBuffer *)createGstBufferForCoreVideoBuffer:(CFTypeRef)cvbuf;
-- (GstBuffer *)createGstBufferForSampleBuffer:(CFTypeRef)sbuf;
-
-@end
+#endif /* __GST_UNALIGNED_VIDEO_H__ */
diff --git a/gst/removesilence/Makefile.in b/gst/removesilence/Makefile.in
index f6b317a..92298ca 100644
--- a/gst/removesilence/Makefile.in
+++ b/gst/removesilence/Makefile.in
@@ -327,6 +327,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -376,6 +378,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/gst/sdi/Makefile.in b/gst/sdi/Makefile.in
index 345397c..66bdbbc 100644
--- a/gst/sdi/Makefile.in
+++ b/gst/sdi/Makefile.in
@@ -326,6 +326,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -375,6 +377,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/gst/sdp/Makefile.in b/gst/sdp/Makefile.in
index f8c434d..97bf80e 100644
--- a/gst/sdp/Makefile.in
+++ b/gst/sdp/Makefile.in
@@ -327,6 +327,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -376,6 +378,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/gst/segmentclip/Makefile.in b/gst/segmentclip/Makefile.in
index fd77fe3..f17433e 100644
--- a/gst/segmentclip/Makefile.in
+++ b/gst/segmentclip/Makefile.in
@@ -329,6 +329,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -378,6 +380,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/gst/siren/Makefile.in b/gst/siren/Makefile.in
index 402e9ad..bc50677 100644
--- a/gst/siren/Makefile.in
+++ b/gst/siren/Makefile.in
@@ -327,6 +327,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -376,6 +378,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/gst/siren/gstsirendec.c b/gst/siren/gstsirendec.c
index 93aadf0..78338ae 100644
--- a/gst/siren/gstsirendec.c
+++ b/gst/siren/gstsirendec.c
@@ -57,7 +57,7 @@
static gboolean gst_siren_dec_stop (GstAudioDecoder * dec);
static gboolean gst_siren_dec_set_format (GstAudioDecoder * dec,
GstCaps * caps);
-static gboolean gst_siren_dec_parse (GstAudioDecoder * dec,
+static GstFlowReturn gst_siren_dec_parse (GstAudioDecoder * dec,
GstAdapter * adapter, gint * offset, gint * length);
static GstFlowReturn gst_siren_dec_handle_frame (GstAudioDecoder * dec,
GstBuffer * buffer);
diff --git a/gst/smooth/Makefile.in b/gst/smooth/Makefile.in
index eb7c5d6..58e488f 100644
--- a/gst/smooth/Makefile.in
+++ b/gst/smooth/Makefile.in
@@ -325,6 +325,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -374,6 +376,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/gst/speed/Makefile.in b/gst/speed/Makefile.in
index b4a4028..adfb143 100644
--- a/gst/speed/Makefile.in
+++ b/gst/speed/Makefile.in
@@ -325,6 +325,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -374,6 +376,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/gst/stereo/Makefile.in b/gst/stereo/Makefile.in
index 5e47739..1f0f33b 100644
--- a/gst/stereo/Makefile.in
+++ b/gst/stereo/Makefile.in
@@ -325,6 +325,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -374,6 +376,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/gst/subenc/Makefile.in b/gst/subenc/Makefile.in
index 128de90..9ecf901 100644
--- a/gst/subenc/Makefile.in
+++ b/gst/subenc/Makefile.in
@@ -325,6 +325,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -374,6 +376,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/gst/timecode/Makefile.am b/gst/timecode/Makefile.am
new file mode 100644
index 0000000..e819b26
--- /dev/null
+++ b/gst/timecode/Makefile.am
@@ -0,0 +1,10 @@
+plugin_LTLIBRARIES = libgsttimecode.la
+
+libgsttimecode_la_SOURCES = plugin.c gsttimecodestamper.c gsttimecodewait.c
+
+libgsttimecode_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS)
+libgsttimecode_la_LIBADD = $(GST_PLUGINS_BASE_LIBS) -lgstvideo-$(GST_API_VERSION) -lgstaudio-$(GST_API_VERSION) $(GST_BASE_LIBS) $(GST_LIBS) $(LIBM)
+libgsttimecode_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
+libgsttimecode_la_LIBTOOLFLAGS = $(GST_PLUGIN_LIBTOOLFLAGS)
+
+noinst_HEADERS = gsttimecodestamper.h gsttimecodewait.h
diff --git a/sys/applemedia-nonpublic/Makefile.in b/gst/timecode/Makefile.in
similarity index 65%
rename from sys/applemedia-nonpublic/Makefile.in
rename to gst/timecode/Makefile.in
index e6c6a72..67ac87d 100644
--- a/sys/applemedia-nonpublic/Makefile.in
+++ b/gst/timecode/Makefile.in
@@ -90,16 +90,7 @@
build_triplet = @build@
host_triplet = @host@
target_triplet = @target@
-@HAVE_IOS_TRUE@am__append_1 = -fobjc-abi-version=2 -fobjc-legacy-dispatch
-
-#libgstapplemedia_nonpublic_la_SOURCES += \
-# celvideosrc.c \
-# mtapi.c \
-# celapi.c
-@HAVE_IOS_FALSE@am__append_2 = \
-@HAVE_IOS_FALSE@ mioapi.c
-
-subdir = sys/applemedia-nonpublic
+subdir = gst/timecode
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
$(top_srcdir)/common/m4/as-auto-alt.m4 \
@@ -172,33 +163,21 @@
am__installdirs = "$(DESTDIR)$(plugindir)"
LTLIBRARIES = $(plugin_LTLIBRARIES)
am__DEPENDENCIES_1 =
-libgstapplemedia_nonpublic_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \
- $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
-am__libgstapplemedia_nonpublic_la_SOURCES_DIST = plugin.m \
- bufferfactory.m corevideobuffer.c coremediabuffer.c cvapi.c \
- cmapi.c coremediactx.c dynapi.c mioapi.c
-@HAVE_IOS_FALSE@am__objects_1 = \
-@HAVE_IOS_FALSE@ libgstapplemedia_nonpublic_la-mioapi.lo
-am_libgstapplemedia_nonpublic_la_OBJECTS = \
- libgstapplemedia_nonpublic_la-plugin.lo \
- libgstapplemedia_nonpublic_la-bufferfactory.lo \
- libgstapplemedia_nonpublic_la-corevideobuffer.lo \
- libgstapplemedia_nonpublic_la-coremediabuffer.lo \
- libgstapplemedia_nonpublic_la-cvapi.lo \
- libgstapplemedia_nonpublic_la-cmapi.lo \
- libgstapplemedia_nonpublic_la-coremediactx.lo \
- libgstapplemedia_nonpublic_la-dynapi.lo $(am__objects_1)
-libgstapplemedia_nonpublic_la_OBJECTS = \
- $(am_libgstapplemedia_nonpublic_la_OBJECTS)
+libgsttimecode_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_1)
+am_libgsttimecode_la_OBJECTS = libgsttimecode_la-plugin.lo \
+ libgsttimecode_la-gsttimecodestamper.lo \
+ libgsttimecode_la-gsttimecodewait.lo
+libgsttimecode_la_OBJECTS = $(am_libgsttimecode_la_OBJECTS)
AM_V_lt = $(am__v_lt_@AM_V@)
am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
am__v_lt_0 = --silent
am__v_lt_1 =
-libgstapplemedia_nonpublic_la_LINK = $(LIBTOOL) $(AM_V_lt) \
- $(libgstapplemedia_nonpublic_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
- --mode=link $(OBJCLD) \
- $(libgstapplemedia_nonpublic_la_OBJCFLAGS) $(OBJCFLAGS) \
- $(libgstapplemedia_nonpublic_la_LDFLAGS) $(LDFLAGS) -o $@
+libgsttimecode_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+ $(libgsttimecode_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link \
+ $(CCLD) $(libgsttimecode_la_CFLAGS) $(CFLAGS) \
+ $(libgsttimecode_la_LDFLAGS) $(LDFLAGS) -o $@
AM_V_P = $(am__v_P_@AM_V@)
am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
am__v_P_0 = false
@@ -233,26 +212,8 @@
am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
am__v_CCLD_0 = @echo " CCLD " $@;
am__v_CCLD_1 =
-OBJCCOMPILE = $(OBJC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
- $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_OBJCFLAGS) $(OBJCFLAGS)
-LTOBJCCOMPILE = $(LIBTOOL) $(AM_V_lt) $(AM_LIBTOOLFLAGS) \
- $(LIBTOOLFLAGS) --mode=compile $(OBJC) $(DEFS) \
- $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
- $(AM_OBJCFLAGS) $(OBJCFLAGS)
-AM_V_OBJC = $(am__v_OBJC_@AM_V@)
-am__v_OBJC_ = $(am__v_OBJC_@AM_DEFAULT_V@)
-am__v_OBJC_0 = @echo " OBJC " $@;
-am__v_OBJC_1 =
-OBJCLD = $(OBJC)
-OBJCLINK = $(LIBTOOL) $(AM_V_lt) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
- --mode=link $(OBJCLD) $(AM_OBJCFLAGS) $(OBJCFLAGS) \
- $(AM_LDFLAGS) $(LDFLAGS) -o $@
-AM_V_OBJCLD = $(am__v_OBJCLD_@AM_V@)
-am__v_OBJCLD_ = $(am__v_OBJCLD_@AM_DEFAULT_V@)
-am__v_OBJCLD_0 = @echo " OBJCLD " $@;
-am__v_OBJCLD_1 =
-SOURCES = $(libgstapplemedia_nonpublic_la_SOURCES)
-DIST_SOURCES = $(am__libgstapplemedia_nonpublic_la_SOURCES_DIST)
+SOURCES = $(libgsttimecode_la_SOURCES)
+DIST_SOURCES = $(libgsttimecode_la_SOURCES)
am__can_run_installinfo = \
case $$AM_UPDATE_INFO_DIR in \
n|no|NO) false;; \
@@ -367,6 +328,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -416,6 +379,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
@@ -823,64 +788,17 @@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
wayland_scanner = @wayland_scanner@
-plugin_LTLIBRARIES = libgstapplemedia_nonpublic.la
-libgstapplemedia_nonpublic_la_SOURCES = plugin.m bufferfactory.m \
- corevideobuffer.c coremediabuffer.c cvapi.c cmapi.c \
- coremediactx.c dynapi.c $(am__append_2)
-libgstapplemedia_nonpublic_la_CPPFLAGS = \
- -Dgst_dyn_api_get_type=gst_dyn_api_priv_get_type \
- -Dgst_dyn_api_debug=gst_dyn_api_priv_debug \
- -Dgst_dyn_api_new=gst_dyn_api_priv_new \
- -Dgst_core_media_buffer_new=gst_core_media_buffer_priv_new \
- -Dgst_core_media_buffer_get_type=gst_core_media_buffer_priv_get_type \
- -Dgst_core_media_buffer_get_pixel_buffer=gst_core_media_buffer_priv_get_pixel_buffer\
- -Dgst_core_video_buffer_new=gst_core_video_buffer_priv_new \
- -Dgst_core_video_buffer_get_type=gst_core_video_buffer_priv_get_type \
- -Dgst_core_media_ctx_new=gst_core_media_ctx_priv_new \
- -Dgst_core_media_ctx_get_type=gst_core_media_ctx_priv_get_type
-
-libgstapplemedia_nonpublic_la_CFLAGS = \
- $(GST_CFLAGS) \
- $(GST_BASE_CFLAGS) \
- $(GST_PLUGINS_BASE_CFLAGS)
-
-libgstapplemedia_nonpublic_la_OBJCFLAGS = $(GST_OBJCFLAGS) \
- $(GST_BASE_CFLAGS) $(GST_PLUGINS_BASE_CFLAGS) $(am__append_1)
-libgstapplemedia_nonpublic_la_LIBADD = \
- $(GST_BASE_LIBS) \
- $(GST_PLUGINS_BASE_LIBS) \
- -lgstvideo-$(GST_API_VERSION) \
- $(GMODULE_NO_EXPORT_LIBS)
-
-libgstapplemedia_nonpublic_la_LIBTOOLFLAGS = $(GST_PLUGIN_LIBTOOLFLAGS) --tag=CC
-libgstapplemedia_nonpublic_la_LDFLAGS = \
- $(GST_PLUGIN_LDFLAGS) \
- $(GST_BASE_LDFLAGS) \
- $(GST_PLUGINS_BASE_LDFLAGS) \
- -Wl,-framework -Wl,Foundation \
- -Wl,-framework -Wl,CoreFoundation \
- -Wl,-framework -Wl,CoreVideo
-
-noinst_HEADERS = \
- miovideosrc.h \
- miovideodevice.h \
- celvideosrc.h \
- bufferfactory.h \
- corevideobuffer.h \
- coremediabuffer.h \
- coremediactx.h \
- mioapi.h \
- mtapi.h \
- celapi.h \
- cvapi.h \
- cmapi.h \
- dynapi.h \
- dynapi-internal.h
-
+plugin_LTLIBRARIES = libgsttimecode.la
+libgsttimecode_la_SOURCES = plugin.c gsttimecodestamper.c gsttimecodewait.c
+libgsttimecode_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS)
+libgsttimecode_la_LIBADD = $(GST_PLUGINS_BASE_LIBS) -lgstvideo-$(GST_API_VERSION) -lgstaudio-$(GST_API_VERSION) $(GST_BASE_LIBS) $(GST_LIBS) $(LIBM)
+libgsttimecode_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
+libgsttimecode_la_LIBTOOLFLAGS = $(GST_PLUGIN_LIBTOOLFLAGS)
+noinst_HEADERS = gsttimecodestamper.h gsttimecodewait.h
all: all-am
.SUFFIXES:
-.SUFFIXES: .c .lo .m .o .obj
+.SUFFIXES: .c .lo .o .obj
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
@@ -890,9 +808,9 @@
exit 1;; \
esac; \
done; \
- echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu sys/applemedia-nonpublic/Makefile'; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gst/timecode/Makefile'; \
$(am__cd) $(top_srcdir) && \
- $(AUTOMAKE) --gnu sys/applemedia-nonpublic/Makefile
+ $(AUTOMAKE) --gnu gst/timecode/Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
*config.status*) \
@@ -946,8 +864,8 @@
rm -f $${locs}; \
}
-libgstapplemedia_nonpublic.la: $(libgstapplemedia_nonpublic_la_OBJECTS) $(libgstapplemedia_nonpublic_la_DEPENDENCIES) $(EXTRA_libgstapplemedia_nonpublic_la_DEPENDENCIES)
- $(AM_V_OBJCLD)$(libgstapplemedia_nonpublic_la_LINK) -rpath $(plugindir) $(libgstapplemedia_nonpublic_la_OBJECTS) $(libgstapplemedia_nonpublic_la_LIBADD) $(LIBS)
+libgsttimecode.la: $(libgsttimecode_la_OBJECTS) $(libgsttimecode_la_DEPENDENCIES) $(EXTRA_libgsttimecode_la_DEPENDENCIES)
+ $(AM_V_CCLD)$(libgsttimecode_la_LINK) -rpath $(plugindir) $(libgsttimecode_la_OBJECTS) $(libgsttimecode_la_LIBADD) $(LIBS)
mostlyclean-compile:
-rm -f *.$(OBJEXT)
@@ -955,15 +873,9 @@
distclean-compile:
-rm -f *.tab.c
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstapplemedia_nonpublic_la-bufferfactory.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstapplemedia_nonpublic_la-cmapi.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstapplemedia_nonpublic_la-coremediabuffer.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstapplemedia_nonpublic_la-coremediactx.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstapplemedia_nonpublic_la-corevideobuffer.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstapplemedia_nonpublic_la-cvapi.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstapplemedia_nonpublic_la-dynapi.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstapplemedia_nonpublic_la-mioapi.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstapplemedia_nonpublic_la-plugin.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgsttimecode_la-gsttimecodestamper.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgsttimecode_la-gsttimecodewait.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgsttimecode_la-plugin.Plo@am__quote@
.c.o:
@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
@@ -989,92 +901,26 @@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
-libgstapplemedia_nonpublic_la-corevideobuffer.lo: corevideobuffer.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstapplemedia_nonpublic_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgstapplemedia_nonpublic_la_CPPFLAGS) $(CPPFLAGS) $(libgstapplemedia_nonpublic_la_CFLAGS) $(CFLAGS) -MT libgstapplemedia_nonpublic_la-corevideobuffer.lo -MD -MP -MF $(DEPDIR)/libgstapplemedia_nonpublic_la-corevideobuffer.Tpo -c -o libgstapplemedia_nonpublic_la-corevideobuffer.lo `test -f 'corevideobuffer.c' || echo '$(srcdir)/'`corevideobuffer.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstapplemedia_nonpublic_la-corevideobuffer.Tpo $(DEPDIR)/libgstapplemedia_nonpublic_la-corevideobuffer.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='corevideobuffer.c' object='libgstapplemedia_nonpublic_la-corevideobuffer.lo' libtool=yes @AMDEPBACKSLASH@
+libgsttimecode_la-plugin.lo: plugin.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgsttimecode_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsttimecode_la_CFLAGS) $(CFLAGS) -MT libgsttimecode_la-plugin.lo -MD -MP -MF $(DEPDIR)/libgsttimecode_la-plugin.Tpo -c -o libgsttimecode_la-plugin.lo `test -f 'plugin.c' || echo '$(srcdir)/'`plugin.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgsttimecode_la-plugin.Tpo $(DEPDIR)/libgsttimecode_la-plugin.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='plugin.c' object='libgsttimecode_la-plugin.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstapplemedia_nonpublic_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgstapplemedia_nonpublic_la_CPPFLAGS) $(CPPFLAGS) $(libgstapplemedia_nonpublic_la_CFLAGS) $(CFLAGS) -c -o libgstapplemedia_nonpublic_la-corevideobuffer.lo `test -f 'corevideobuffer.c' || echo '$(srcdir)/'`corevideobuffer.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgsttimecode_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsttimecode_la_CFLAGS) $(CFLAGS) -c -o libgsttimecode_la-plugin.lo `test -f 'plugin.c' || echo '$(srcdir)/'`plugin.c
-libgstapplemedia_nonpublic_la-coremediabuffer.lo: coremediabuffer.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstapplemedia_nonpublic_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgstapplemedia_nonpublic_la_CPPFLAGS) $(CPPFLAGS) $(libgstapplemedia_nonpublic_la_CFLAGS) $(CFLAGS) -MT libgstapplemedia_nonpublic_la-coremediabuffer.lo -MD -MP -MF $(DEPDIR)/libgstapplemedia_nonpublic_la-coremediabuffer.Tpo -c -o libgstapplemedia_nonpublic_la-coremediabuffer.lo `test -f 'coremediabuffer.c' || echo '$(srcdir)/'`coremediabuffer.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstapplemedia_nonpublic_la-coremediabuffer.Tpo $(DEPDIR)/libgstapplemedia_nonpublic_la-coremediabuffer.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='coremediabuffer.c' object='libgstapplemedia_nonpublic_la-coremediabuffer.lo' libtool=yes @AMDEPBACKSLASH@
+libgsttimecode_la-gsttimecodestamper.lo: gsttimecodestamper.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgsttimecode_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsttimecode_la_CFLAGS) $(CFLAGS) -MT libgsttimecode_la-gsttimecodestamper.lo -MD -MP -MF $(DEPDIR)/libgsttimecode_la-gsttimecodestamper.Tpo -c -o libgsttimecode_la-gsttimecodestamper.lo `test -f 'gsttimecodestamper.c' || echo '$(srcdir)/'`gsttimecodestamper.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgsttimecode_la-gsttimecodestamper.Tpo $(DEPDIR)/libgsttimecode_la-gsttimecodestamper.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gsttimecodestamper.c' object='libgsttimecode_la-gsttimecodestamper.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstapplemedia_nonpublic_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgstapplemedia_nonpublic_la_CPPFLAGS) $(CPPFLAGS) $(libgstapplemedia_nonpublic_la_CFLAGS) $(CFLAGS) -c -o libgstapplemedia_nonpublic_la-coremediabuffer.lo `test -f 'coremediabuffer.c' || echo '$(srcdir)/'`coremediabuffer.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgsttimecode_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsttimecode_la_CFLAGS) $(CFLAGS) -c -o libgsttimecode_la-gsttimecodestamper.lo `test -f 'gsttimecodestamper.c' || echo '$(srcdir)/'`gsttimecodestamper.c
-libgstapplemedia_nonpublic_la-cvapi.lo: cvapi.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstapplemedia_nonpublic_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgstapplemedia_nonpublic_la_CPPFLAGS) $(CPPFLAGS) $(libgstapplemedia_nonpublic_la_CFLAGS) $(CFLAGS) -MT libgstapplemedia_nonpublic_la-cvapi.lo -MD -MP -MF $(DEPDIR)/libgstapplemedia_nonpublic_la-cvapi.Tpo -c -o libgstapplemedia_nonpublic_la-cvapi.lo `test -f 'cvapi.c' || echo '$(srcdir)/'`cvapi.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstapplemedia_nonpublic_la-cvapi.Tpo $(DEPDIR)/libgstapplemedia_nonpublic_la-cvapi.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='cvapi.c' object='libgstapplemedia_nonpublic_la-cvapi.lo' libtool=yes @AMDEPBACKSLASH@
+libgsttimecode_la-gsttimecodewait.lo: gsttimecodewait.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgsttimecode_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsttimecode_la_CFLAGS) $(CFLAGS) -MT libgsttimecode_la-gsttimecodewait.lo -MD -MP -MF $(DEPDIR)/libgsttimecode_la-gsttimecodewait.Tpo -c -o libgsttimecode_la-gsttimecodewait.lo `test -f 'gsttimecodewait.c' || echo '$(srcdir)/'`gsttimecodewait.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgsttimecode_la-gsttimecodewait.Tpo $(DEPDIR)/libgsttimecode_la-gsttimecodewait.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gsttimecodewait.c' object='libgsttimecode_la-gsttimecodewait.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstapplemedia_nonpublic_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgstapplemedia_nonpublic_la_CPPFLAGS) $(CPPFLAGS) $(libgstapplemedia_nonpublic_la_CFLAGS) $(CFLAGS) -c -o libgstapplemedia_nonpublic_la-cvapi.lo `test -f 'cvapi.c' || echo '$(srcdir)/'`cvapi.c
-
-libgstapplemedia_nonpublic_la-cmapi.lo: cmapi.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstapplemedia_nonpublic_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgstapplemedia_nonpublic_la_CPPFLAGS) $(CPPFLAGS) $(libgstapplemedia_nonpublic_la_CFLAGS) $(CFLAGS) -MT libgstapplemedia_nonpublic_la-cmapi.lo -MD -MP -MF $(DEPDIR)/libgstapplemedia_nonpublic_la-cmapi.Tpo -c -o libgstapplemedia_nonpublic_la-cmapi.lo `test -f 'cmapi.c' || echo '$(srcdir)/'`cmapi.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstapplemedia_nonpublic_la-cmapi.Tpo $(DEPDIR)/libgstapplemedia_nonpublic_la-cmapi.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='cmapi.c' object='libgstapplemedia_nonpublic_la-cmapi.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstapplemedia_nonpublic_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgstapplemedia_nonpublic_la_CPPFLAGS) $(CPPFLAGS) $(libgstapplemedia_nonpublic_la_CFLAGS) $(CFLAGS) -c -o libgstapplemedia_nonpublic_la-cmapi.lo `test -f 'cmapi.c' || echo '$(srcdir)/'`cmapi.c
-
-libgstapplemedia_nonpublic_la-coremediactx.lo: coremediactx.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstapplemedia_nonpublic_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgstapplemedia_nonpublic_la_CPPFLAGS) $(CPPFLAGS) $(libgstapplemedia_nonpublic_la_CFLAGS) $(CFLAGS) -MT libgstapplemedia_nonpublic_la-coremediactx.lo -MD -MP -MF $(DEPDIR)/libgstapplemedia_nonpublic_la-coremediactx.Tpo -c -o libgstapplemedia_nonpublic_la-coremediactx.lo `test -f 'coremediactx.c' || echo '$(srcdir)/'`coremediactx.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstapplemedia_nonpublic_la-coremediactx.Tpo $(DEPDIR)/libgstapplemedia_nonpublic_la-coremediactx.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='coremediactx.c' object='libgstapplemedia_nonpublic_la-coremediactx.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstapplemedia_nonpublic_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgstapplemedia_nonpublic_la_CPPFLAGS) $(CPPFLAGS) $(libgstapplemedia_nonpublic_la_CFLAGS) $(CFLAGS) -c -o libgstapplemedia_nonpublic_la-coremediactx.lo `test -f 'coremediactx.c' || echo '$(srcdir)/'`coremediactx.c
-
-libgstapplemedia_nonpublic_la-dynapi.lo: dynapi.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstapplemedia_nonpublic_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgstapplemedia_nonpublic_la_CPPFLAGS) $(CPPFLAGS) $(libgstapplemedia_nonpublic_la_CFLAGS) $(CFLAGS) -MT libgstapplemedia_nonpublic_la-dynapi.lo -MD -MP -MF $(DEPDIR)/libgstapplemedia_nonpublic_la-dynapi.Tpo -c -o libgstapplemedia_nonpublic_la-dynapi.lo `test -f 'dynapi.c' || echo '$(srcdir)/'`dynapi.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstapplemedia_nonpublic_la-dynapi.Tpo $(DEPDIR)/libgstapplemedia_nonpublic_la-dynapi.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='dynapi.c' object='libgstapplemedia_nonpublic_la-dynapi.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstapplemedia_nonpublic_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgstapplemedia_nonpublic_la_CPPFLAGS) $(CPPFLAGS) $(libgstapplemedia_nonpublic_la_CFLAGS) $(CFLAGS) -c -o libgstapplemedia_nonpublic_la-dynapi.lo `test -f 'dynapi.c' || echo '$(srcdir)/'`dynapi.c
-
-libgstapplemedia_nonpublic_la-mioapi.lo: mioapi.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstapplemedia_nonpublic_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgstapplemedia_nonpublic_la_CPPFLAGS) $(CPPFLAGS) $(libgstapplemedia_nonpublic_la_CFLAGS) $(CFLAGS) -MT libgstapplemedia_nonpublic_la-mioapi.lo -MD -MP -MF $(DEPDIR)/libgstapplemedia_nonpublic_la-mioapi.Tpo -c -o libgstapplemedia_nonpublic_la-mioapi.lo `test -f 'mioapi.c' || echo '$(srcdir)/'`mioapi.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstapplemedia_nonpublic_la-mioapi.Tpo $(DEPDIR)/libgstapplemedia_nonpublic_la-mioapi.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mioapi.c' object='libgstapplemedia_nonpublic_la-mioapi.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstapplemedia_nonpublic_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgstapplemedia_nonpublic_la_CPPFLAGS) $(CPPFLAGS) $(libgstapplemedia_nonpublic_la_CFLAGS) $(CFLAGS) -c -o libgstapplemedia_nonpublic_la-mioapi.lo `test -f 'mioapi.c' || echo '$(srcdir)/'`mioapi.c
-
-.m.o:
-@am__fastdepOBJC_TRUE@ $(AM_V_OBJC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
-@am__fastdepOBJC_TRUE@ $(OBJCCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
-@am__fastdepOBJC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po
-@AMDEP_TRUE@@am__fastdepOBJC_FALSE@ $(AM_V_OBJC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepOBJC_FALSE@ DEPDIR=$(DEPDIR) $(OBJCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepOBJC_FALSE@ $(AM_V_OBJC@am__nodep@)$(OBJCCOMPILE) -c -o $@ $<
-
-.m.obj:
-@am__fastdepOBJC_TRUE@ $(AM_V_OBJC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\
-@am__fastdepOBJC_TRUE@ $(OBJCCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\
-@am__fastdepOBJC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po
-@AMDEP_TRUE@@am__fastdepOBJC_FALSE@ $(AM_V_OBJC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepOBJC_FALSE@ DEPDIR=$(DEPDIR) $(OBJCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepOBJC_FALSE@ $(AM_V_OBJC@am__nodep@)$(OBJCCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
-
-.m.lo:
-@am__fastdepOBJC_TRUE@ $(AM_V_OBJC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\
-@am__fastdepOBJC_TRUE@ $(LTOBJCCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
-@am__fastdepOBJC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo
-@AMDEP_TRUE@@am__fastdepOBJC_FALSE@ $(AM_V_OBJC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepOBJC_FALSE@ DEPDIR=$(DEPDIR) $(OBJCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepOBJC_FALSE@ $(AM_V_OBJC@am__nodep@)$(LTOBJCCOMPILE) -c -o $@ $<
-
-libgstapplemedia_nonpublic_la-plugin.lo: plugin.m
-@am__fastdepOBJC_TRUE@ $(AM_V_OBJC)$(LIBTOOL) $(AM_V_lt) $(libgstapplemedia_nonpublic_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(OBJC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgstapplemedia_nonpublic_la_CPPFLAGS) $(CPPFLAGS) $(libgstapplemedia_nonpublic_la_OBJCFLAGS) $(OBJCFLAGS) -MT libgstapplemedia_nonpublic_la-plugin.lo -MD -MP -MF $(DEPDIR)/libgstapplemedia_nonpublic_la-plugin.Tpo -c -o libgstapplemedia_nonpublic_la-plugin.lo `test -f 'plugin.m' || echo '$(srcdir)/'`plugin.m
-@am__fastdepOBJC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstapplemedia_nonpublic_la-plugin.Tpo $(DEPDIR)/libgstapplemedia_nonpublic_la-plugin.Plo
-@AMDEP_TRUE@@am__fastdepOBJC_FALSE@ $(AM_V_OBJC)source='plugin.m' object='libgstapplemedia_nonpublic_la-plugin.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepOBJC_FALSE@ DEPDIR=$(DEPDIR) $(OBJCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepOBJC_FALSE@ $(AM_V_OBJC@am__nodep@)$(LIBTOOL) $(AM_V_lt) $(libgstapplemedia_nonpublic_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(OBJC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgstapplemedia_nonpublic_la_CPPFLAGS) $(CPPFLAGS) $(libgstapplemedia_nonpublic_la_OBJCFLAGS) $(OBJCFLAGS) -c -o libgstapplemedia_nonpublic_la-plugin.lo `test -f 'plugin.m' || echo '$(srcdir)/'`plugin.m
-
-libgstapplemedia_nonpublic_la-bufferfactory.lo: bufferfactory.m
-@am__fastdepOBJC_TRUE@ $(AM_V_OBJC)$(LIBTOOL) $(AM_V_lt) $(libgstapplemedia_nonpublic_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(OBJC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgstapplemedia_nonpublic_la_CPPFLAGS) $(CPPFLAGS) $(libgstapplemedia_nonpublic_la_OBJCFLAGS) $(OBJCFLAGS) -MT libgstapplemedia_nonpublic_la-bufferfactory.lo -MD -MP -MF $(DEPDIR)/libgstapplemedia_nonpublic_la-bufferfactory.Tpo -c -o libgstapplemedia_nonpublic_la-bufferfactory.lo `test -f 'bufferfactory.m' || echo '$(srcdir)/'`bufferfactory.m
-@am__fastdepOBJC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstapplemedia_nonpublic_la-bufferfactory.Tpo $(DEPDIR)/libgstapplemedia_nonpublic_la-bufferfactory.Plo
-@AMDEP_TRUE@@am__fastdepOBJC_FALSE@ $(AM_V_OBJC)source='bufferfactory.m' object='libgstapplemedia_nonpublic_la-bufferfactory.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepOBJC_FALSE@ DEPDIR=$(DEPDIR) $(OBJCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepOBJC_FALSE@ $(AM_V_OBJC@am__nodep@)$(LIBTOOL) $(AM_V_lt) $(libgstapplemedia_nonpublic_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(OBJC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgstapplemedia_nonpublic_la_CPPFLAGS) $(CPPFLAGS) $(libgstapplemedia_nonpublic_la_OBJCFLAGS) $(OBJCFLAGS) -c -o libgstapplemedia_nonpublic_la-bufferfactory.lo `test -f 'bufferfactory.m' || echo '$(srcdir)/'`bufferfactory.m
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgsttimecode_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsttimecode_la_CFLAGS) $(CFLAGS) -c -o libgsttimecode_la-gsttimecodewait.lo `test -f 'gsttimecodewait.c' || echo '$(srcdir)/'`gsttimecodewait.c
mostlyclean-libtool:
-rm -f *.lo
diff --git a/gst/timecode/gsttimecodestamper.c b/gst/timecode/gsttimecodestamper.c
new file mode 100644
index 0000000..d930289
--- /dev/null
+++ b/gst/timecode/gsttimecodestamper.c
@@ -0,0 +1,419 @@
+/*
+ * GStreamer
+ * Copyright (C) 2016 Vivia Nikolaidou <vivia@toolsonair.com>
+ *
+ * gsttimecodestamper.c
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+/**
+ * SECTION:element-timecodestamper
+ * @short_description: Attach a timecode into incoming video frames
+ *
+ * This element attaches a timecode into every incoming video frame. It starts
+ * counting from the stream time of each segment start, which it converts into
+ * a timecode.
+ *
+ * <refsect2>
+ * <title>Example launch line</title>
+ * |[
+ * gst-launch-1.0 videotestsrc ! timecodestamper ! autovideosink
+ * ]|
+ * </refsect2>
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "gsttimecodestamper.h"
+
+#include <gst/gst.h>
+#include <gst/video/video.h>
+#include <stdlib.h>
+#include <string.h>
+
+GST_DEBUG_CATEGORY_STATIC (timecodestamper_debug);
+#define GST_CAT_DEFAULT timecodestamper_debug
+
+/* GstTimeCodeStamper properties */
+enum
+{
+ PROP_0,
+ PROP_OVERRIDE_EXISTING,
+ PROP_DROP_FRAME,
+ PROP_SOURCE_CLOCK,
+ PROP_DAILY_JAM
+};
+
+#define DEFAULT_OVERRIDE_EXISTING FALSE
+#define DEFAULT_DROP_FRAME FALSE
+#define DEFAULT_SOURCE_CLOCK NULL
+#define DEFAULT_DAILY_JAM NULL
+
+static GstStaticPadTemplate gst_timecodestamper_src_template =
+GST_STATIC_PAD_TEMPLATE ("src",
+ GST_PAD_SRC,
+ GST_PAD_ALWAYS,
+ GST_STATIC_CAPS ("video/x-raw")
+ );
+
+static GstStaticPadTemplate gst_timecodestamper_sink_template =
+GST_STATIC_PAD_TEMPLATE ("sink",
+ GST_PAD_SINK,
+ GST_PAD_ALWAYS,
+ GST_STATIC_CAPS ("video/x-raw")
+ );
+
+static void gst_timecodestamper_set_property (GObject * object, guint prop_id,
+ const GValue * value, GParamSpec * pspec);
+static void gst_timecodestamper_get_property (GObject * object, guint prop_id,
+ GValue * value, GParamSpec * pspec);
+static void gst_timecodestamper_dispose (GObject * object);
+static gboolean gst_timecodestamper_sink_event (GstBaseTransform * trans,
+ GstEvent * event);
+static GstFlowReturn gst_timecodestamper_transform_ip (GstBaseTransform *
+ vfilter, GstBuffer * buffer);
+static gboolean gst_timecodestamper_stop (GstBaseTransform * trans);
+
+G_DEFINE_TYPE (GstTimeCodeStamper, gst_timecodestamper,
+ GST_TYPE_BASE_TRANSFORM);
+
+static void
+gst_timecodestamper_class_init (GstTimeCodeStamperClass * klass)
+{
+ GObjectClass *gobject_class = (GObjectClass *) klass;
+ GstElementClass *element_class = (GstElementClass *) klass;
+ GstBaseTransformClass *trans_class = (GstBaseTransformClass *) klass;
+
+ GST_DEBUG_CATEGORY_INIT (timecodestamper_debug, "timecodestamper", 0,
+ "timecodestamper");
+ gst_element_class_set_static_metadata (element_class, "Timecode stamper",
+ "Filter/Video", "Attaches a timecode meta into each video frame",
+ "Vivia Nikolaidou <vivia@toolsonair.com");
+
+ gobject_class->set_property = gst_timecodestamper_set_property;
+ gobject_class->get_property = gst_timecodestamper_get_property;
+ gobject_class->dispose = gst_timecodestamper_dispose;
+
+ g_object_class_install_property (gobject_class, PROP_OVERRIDE_EXISTING,
+ g_param_spec_boolean ("override-existing", "Override existing timecode",
+ "If set to true, any existing timecode will be overridden",
+ DEFAULT_OVERRIDE_EXISTING,
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+ g_object_class_install_property (gobject_class, PROP_DROP_FRAME,
+ g_param_spec_boolean ("drop-frame", "Override existing timecode",
+ "Use drop-frame timecodes for 29.97 and 59.94 FPS",
+ DEFAULT_DROP_FRAME, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+ g_object_class_install_property (gobject_class, PROP_SOURCE_CLOCK,
+ g_param_spec_object ("source-clock",
+ "Source clock to use for first timecode",
+ "If unset, the timecode will refer to the stream time",
+ GST_TYPE_CLOCK, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+ g_object_class_install_property (gobject_class, PROP_DAILY_JAM,
+ g_param_spec_boxed ("daily-jam",
+ "Daily jam",
+ "The daily jam of the timecode",
+ G_TYPE_DATE_TIME, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&gst_timecodestamper_sink_template));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&gst_timecodestamper_src_template));
+
+ trans_class->sink_event = GST_DEBUG_FUNCPTR (gst_timecodestamper_sink_event);
+ trans_class->stop = GST_DEBUG_FUNCPTR (gst_timecodestamper_stop);
+
+ trans_class->transform_ip =
+ GST_DEBUG_FUNCPTR (gst_timecodestamper_transform_ip);
+}
+
+static void
+gst_timecodestamper_init (GstTimeCodeStamper * timecodestamper)
+{
+ timecodestamper->override_existing = DEFAULT_OVERRIDE_EXISTING;
+ timecodestamper->drop_frame = DEFAULT_DROP_FRAME;
+ timecodestamper->source_clock = DEFAULT_SOURCE_CLOCK;
+ timecodestamper->current_tc = gst_video_time_code_new_empty ();
+ timecodestamper->current_tc->config.latest_daily_jam = DEFAULT_DAILY_JAM;
+}
+
+static void
+gst_timecodestamper_dispose (GObject * object)
+{
+ GstTimeCodeStamper *timecodestamper = GST_TIME_CODE_STAMPER (object);
+
+ if (timecodestamper->current_tc != NULL) {
+ gst_video_time_code_free (timecodestamper->current_tc);
+ timecodestamper->current_tc = NULL;
+ }
+
+ if (timecodestamper->source_clock) {
+ gst_object_unref (timecodestamper->source_clock);
+ timecodestamper->source_clock = NULL;
+ }
+
+ G_OBJECT_CLASS (gst_timecodestamper_parent_class)->dispose (object);
+}
+
+static void
+gst_timecodestamper_set_property (GObject * object, guint prop_id,
+ const GValue * value, GParamSpec * pspec)
+{
+ GstTimeCodeStamper *timecodestamper = GST_TIME_CODE_STAMPER (object);
+
+ switch (prop_id) {
+ case PROP_OVERRIDE_EXISTING:
+ timecodestamper->override_existing = g_value_get_boolean (value);
+ break;
+ case PROP_DROP_FRAME:
+ timecodestamper->drop_frame = g_value_get_boolean (value);
+ break;
+ case PROP_SOURCE_CLOCK:
+ if (timecodestamper->source_clock)
+ gst_object_unref (timecodestamper->source_clock);
+ timecodestamper->source_clock = g_value_dup_object (value);
+ break;
+ case PROP_DAILY_JAM:
+ if (timecodestamper->current_tc->config.latest_daily_jam)
+ g_date_time_unref (timecodestamper->current_tc->
+ config.latest_daily_jam);
+ timecodestamper->current_tc->config.latest_daily_jam =
+ g_value_dup_boxed (value);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+gst_timecodestamper_get_property (GObject * object, guint prop_id,
+ GValue * value, GParamSpec * pspec)
+{
+ GstTimeCodeStamper *timecodestamper = GST_TIME_CODE_STAMPER (object);
+
+ switch (prop_id) {
+ case PROP_OVERRIDE_EXISTING:
+ g_value_set_boolean (value, timecodestamper->override_existing);
+ break;
+ case PROP_DROP_FRAME:
+ g_value_set_boolean (value, timecodestamper->drop_frame);
+ break;
+ case PROP_SOURCE_CLOCK:
+ g_value_set_object (value, timecodestamper->source_clock);
+ break;
+ case PROP_DAILY_JAM:
+ g_value_set_boxed (value,
+ timecodestamper->current_tc->config.latest_daily_jam);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+gst_timecodestamper_set_drop_frame (GstTimeCodeStamper * timecodestamper)
+{
+ if (timecodestamper->drop_frame && timecodestamper->vinfo.fps_d == 1001 &&
+ (timecodestamper->vinfo.fps_n == 30000 ||
+ timecodestamper->vinfo.fps_d == 60000))
+ timecodestamper->current_tc->config.flags |=
+ GST_VIDEO_TIME_CODE_FLAGS_DROP_FRAME;
+ else
+ timecodestamper->current_tc->config.flags &=
+ ~GST_VIDEO_TIME_CODE_FLAGS_DROP_FRAME;
+}
+
+static gboolean
+gst_timecodestamper_stop (GstBaseTransform * trans)
+{
+ GstTimeCodeStamper *timecodestamper = GST_TIME_CODE_STAMPER (trans);
+
+ gst_video_info_init (&timecodestamper->vinfo);
+
+ return TRUE;
+}
+
+/* Must be called with object lock */
+static void
+gst_timecodestamper_reset_timecode (GstTimeCodeStamper * timecodestamper)
+{
+ GDateTime *jam = NULL;
+
+ if (timecodestamper->current_tc->config.latest_daily_jam)
+ jam =
+ g_date_time_ref (timecodestamper->current_tc->config.latest_daily_jam);
+ gst_video_time_code_clear (timecodestamper->current_tc);
+ /* FIXME: What if the buffer doesn't contain both top and bottom fields? */
+ gst_video_time_code_init (timecodestamper->current_tc,
+ timecodestamper->vinfo.fps_n,
+ timecodestamper->vinfo.fps_d,
+ jam,
+ timecodestamper->vinfo.interlace_mode ==
+ GST_VIDEO_INTERLACE_MODE_PROGRESSIVE ? 0 :
+ GST_VIDEO_TIME_CODE_FLAGS_INTERLACED, 0, 0, 0, 0, 0);
+ gst_timecodestamper_set_drop_frame (timecodestamper);
+}
+
+static gboolean
+gst_timecodestamper_sink_event (GstBaseTransform * trans, GstEvent * event)
+{
+ gboolean ret = FALSE;
+ GstTimeCodeStamper *timecodestamper = GST_TIME_CODE_STAMPER (trans);
+
+ GST_DEBUG_OBJECT (trans, "received event %" GST_PTR_FORMAT, event);
+ switch (GST_EVENT_TYPE (event)) {
+ case GST_EVENT_SEGMENT:
+ {
+ GstSegment segment;
+ guint64 frames;
+ gchar *tc_str;
+
+ GST_OBJECT_LOCK (timecodestamper);
+ if (timecodestamper->source_clock != NULL) {
+ GST_OBJECT_UNLOCK (timecodestamper);
+ break;
+ }
+
+ gst_event_copy_segment (event, &segment);
+ if (segment.format != GST_FORMAT_TIME) {
+ GST_OBJECT_UNLOCK (timecodestamper);
+ GST_ERROR_OBJECT (timecodestamper, "Invalid segment format");
+ return FALSE;
+ }
+ if (GST_VIDEO_INFO_FORMAT (&timecodestamper->vinfo) ==
+ GST_VIDEO_FORMAT_UNKNOWN) {
+ GST_ERROR_OBJECT (timecodestamper,
+ "Received segment event without caps");
+ GST_OBJECT_UNLOCK (timecodestamper);
+ return FALSE;
+ }
+ frames =
+ gst_util_uint64_scale (segment.time, timecodestamper->vinfo.fps_n,
+ timecodestamper->vinfo.fps_d * GST_SECOND);
+ gst_timecodestamper_reset_timecode (timecodestamper);
+ gst_video_time_code_add_frames (timecodestamper->current_tc, frames);
+ GST_DEBUG_OBJECT (timecodestamper,
+ "Got %" G_GUINT64_FORMAT " frames when segment time is %"
+ GST_TIME_FORMAT, frames, GST_TIME_ARGS (segment.time));
+ tc_str = gst_video_time_code_to_string (timecodestamper->current_tc);
+ GST_DEBUG_OBJECT (timecodestamper, "New timecode is %s", tc_str);
+ g_free (tc_str);
+ GST_OBJECT_UNLOCK (timecodestamper);
+ break;
+ }
+ case GST_EVENT_CAPS:
+ {
+ GstCaps *caps;
+
+ GST_OBJECT_LOCK (timecodestamper);
+ gst_event_parse_caps (event, &caps);
+ if (!gst_video_info_from_caps (&timecodestamper->vinfo, caps)) {
+ GST_OBJECT_UNLOCK (timecodestamper);
+ return FALSE;
+ }
+ gst_timecodestamper_reset_timecode (timecodestamper);
+ GST_OBJECT_UNLOCK (timecodestamper);
+ break;
+ }
+ default:
+ break;
+ }
+ ret =
+ GST_BASE_TRANSFORM_CLASS (gst_timecodestamper_parent_class)->sink_event
+ (trans, event);
+ return ret;
+}
+
+static GstFlowReturn
+gst_timecodestamper_transform_ip (GstBaseTransform * vfilter,
+ GstBuffer * buffer)
+{
+ GstTimeCodeStamper *timecodestamper = GST_TIME_CODE_STAMPER (vfilter);
+ GstClockTime ref_time;
+
+ GST_OBJECT_LOCK (timecodestamper);
+ if (gst_buffer_get_video_time_code_meta (buffer)
+ && timecodestamper->override_existing == FALSE) {
+ GST_OBJECT_UNLOCK (timecodestamper);
+ return GST_FLOW_OK;
+ }
+ if (timecodestamper->source_clock != NULL) {
+ if (timecodestamper->current_tc->hours == 0
+ && timecodestamper->current_tc->minutes == 0
+ && timecodestamper->current_tc->seconds == 0
+ && timecodestamper->current_tc->frames == 0) {
+ guint64 hours, minutes, seconds, frames;
+ /* Daily jam time */
+
+ ref_time = gst_clock_get_time (timecodestamper->source_clock);
+ ref_time = ref_time % (24 * 60 * 60 * GST_SECOND);
+ hours = ref_time / (GST_SECOND * 60 * 60);
+ ref_time -= hours * GST_SECOND * 60 * 60;
+ minutes = ref_time / (GST_SECOND * 60);
+ ref_time -= minutes * GST_SECOND * 60;
+ seconds = ref_time / GST_SECOND;
+ ref_time -= seconds * GST_SECOND;
+ /* Converting to frames for the whole ref_time might be inaccurate in case
+ * we have a drop frame timecode */
+ frames = gst_util_uint64_scale (ref_time, timecodestamper->vinfo.fps_n,
+ timecodestamper->vinfo.fps_d * GST_SECOND);
+
+ GST_DEBUG_OBJECT (timecodestamper,
+ "Initializing with %" G_GUINT64_FORMAT ":%" G_GUINT64_FORMAT ":%"
+ G_GUINT64_FORMAT ":%" G_GUINT64_FORMAT "", hours, minutes, seconds,
+ frames);
+ gst_video_time_code_init (timecodestamper->current_tc,
+ timecodestamper->vinfo.fps_n,
+ timecodestamper->vinfo.fps_d,
+ NULL,
+ timecodestamper->vinfo.interlace_mode ==
+ GST_VIDEO_INTERLACE_MODE_PROGRESSIVE ? 0 :
+ GST_VIDEO_TIME_CODE_FLAGS_INTERLACED, hours, minutes, seconds, 0, 0);
+ gst_timecodestamper_set_drop_frame (timecodestamper);
+ /* Do not use frames when initializing because maybe we have drop frame */
+ gst_video_time_code_add_frames (timecodestamper->current_tc, frames);
+ }
+ } else if (timecodestamper->source_clock == NULL) {
+ GstClockTime timecode_time;
+
+ timecode_time =
+ gst_video_time_code_nsec_since_daily_jam (timecodestamper->current_tc);
+ ref_time =
+ gst_segment_to_stream_time (&vfilter->segment, GST_FORMAT_TIME,
+ buffer->pts);
+ if (timecode_time != GST_CLOCK_TIME_NONE && ref_time != GST_CLOCK_TIME_NONE
+ && ((timecode_time > ref_time && timecode_time - ref_time > GST_SECOND)
+ || (ref_time > timecode_time
+ && ref_time - timecode_time > GST_SECOND))) {
+ gchar *tc_str =
+ gst_video_time_code_to_string (timecodestamper->current_tc);
+ GST_WARNING_OBJECT (timecodestamper,
+ "Time code %s (stream time %" GST_TIME_FORMAT
+ ") has drifted more than one second from stream time %"
+ GST_TIME_FORMAT, tc_str, GST_TIME_ARGS (timecode_time),
+ GST_TIME_ARGS (ref_time));
+ g_free (tc_str);
+ }
+ }
+ gst_buffer_add_video_time_code_meta (buffer, timecodestamper->current_tc);
+ gst_video_time_code_increment_frame (timecodestamper->current_tc);
+ GST_OBJECT_UNLOCK (timecodestamper);
+ return GST_FLOW_OK;
+}
diff --git a/gst/timecode/gsttimecodestamper.h b/gst/timecode/gsttimecodestamper.h
new file mode 100644
index 0000000..b06912e
--- /dev/null
+++ b/gst/timecode/gsttimecodestamper.h
@@ -0,0 +1,64 @@
+/*
+ * GStreamer
+ * Copyright (C) 2016 Vivia Nikolaidou <vivia@toolsonair.com>
+ *
+ * gsttimecodestamper.h
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GST_TIME_CODE_STAMPER_H__
+#define __GST_TIME_CODE_STAMPER_H__
+
+#include <gst/gst.h>
+#include <gst/video/video.h>
+
+#define GST_TYPE_TIME_CODE_STAMPER (gst_timecodestamper_get_type())
+#define GST_TIME_CODE_STAMPER(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_TIME_CODE_STAMPER,GstTimeCodeStamper))
+#define GST_TIME_CODE_STAMPER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), GST_TYPE_TIME_CODE_STAMPER,GstTimeCodeStamperClass))
+#define GST_TIME_CODE_STAMPER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), GST_TYPE_TIME_CODE_STAMPER,GstTimeCodeStamperClass))
+#define GST_IS_TIME_CODE_STAMPER(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_TIME_CODE_STAMPER))
+#define GST_IS_TIME_CODE_STAMPER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), GST_TYPE_TIME_CODE_STAMPER))
+
+typedef struct _GstTimeCodeStamper GstTimeCodeStamper;
+typedef struct _GstTimeCodeStamperClass GstTimeCodeStamperClass;
+
+/**
+ * GstTimeCodeStamper:
+ *
+ * Opaque data structure.
+ */
+struct _GstTimeCodeStamper
+{
+ GstBaseTransform videofilter;
+
+ /* < private > */
+ gboolean override_existing;
+ gboolean drop_frame;
+ GstVideoTimeCode *current_tc;
+ GstVideoInfo vinfo;
+ GstClock *source_clock;
+};
+
+struct _GstTimeCodeStamperClass
+{
+ GstBaseTransformClass parent_class;
+};
+
+GType gst_timecodestamper_get_type (void);
+
+G_END_DECLS
+#endif /* __GST_TIME_CODE_STAMPER_H__ */
diff --git a/gst/timecode/gsttimecodewait.c b/gst/timecode/gsttimecodewait.c
new file mode 100644
index 0000000..6a8cd4a
--- /dev/null
+++ b/gst/timecode/gsttimecodewait.c
@@ -0,0 +1,639 @@
+/*
+ * GStreamer
+ * Copyright (C) 2016 Vivia Nikolaidou <vivia@toolsonair.com>
+ *
+ * Based on gstvideoframe-audiolevel.c:
+ * Copyright (C) 2015 Vivia Nikolaidou <vivia@toolsonair.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+/**
+ * SECTION:element-timecodewait
+ *
+ * This element acts like a synchronized audio/video "level". It gathers
+ * all audio buffers sent between two video frames, and then sends a message
+ * that contains the RMS value of all samples for these buffers.
+ *
+ * <refsect2>
+ * <title>Example launch line</title>
+ * |[
+ * gst-launch-1.0 filesrc location="my_file" ! decodebin name=d ! "audio/x-raw" ! timecodewait name=l target-timecode-str="00:00:04:00" ! autoaudiosink d. ! "video/x-raw" ! timecodestamper ! l. l. ! queue ! timeoverlay time-mode=time-code ! autovideosink
+ * </refsect2>
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "gsttimecodewait.h"
+
+#define GST_CAT_DEFAULT gst_timecodewait_debug
+GST_DEBUG_CATEGORY_STATIC (GST_CAT_DEFAULT);
+
+static GstStaticPadTemplate audio_sink_template =
+GST_STATIC_PAD_TEMPLATE ("asink",
+ GST_PAD_SINK,
+ GST_PAD_ALWAYS,
+ GST_STATIC_CAPS ("audio/x-raw")
+ );
+
+static GstStaticPadTemplate audio_src_template =
+GST_STATIC_PAD_TEMPLATE ("asrc",
+ GST_PAD_SRC,
+ GST_PAD_ALWAYS,
+ GST_STATIC_CAPS ("audio/x-raw")
+ );
+
+static GstStaticPadTemplate video_sink_template =
+GST_STATIC_PAD_TEMPLATE ("vsink",
+ GST_PAD_SINK,
+ GST_PAD_ALWAYS,
+ GST_STATIC_CAPS ("video/x-raw")
+ );
+
+static GstStaticPadTemplate video_src_template =
+GST_STATIC_PAD_TEMPLATE ("vsrc",
+ GST_PAD_SRC,
+ GST_PAD_ALWAYS,
+ GST_STATIC_CAPS ("video/x-raw")
+ );
+
+#define parent_class gst_timecodewait_parent_class
+G_DEFINE_TYPE (GstTimeCodeWait, gst_timecodewait, GST_TYPE_ELEMENT);
+
+enum
+{
+ PROP_0,
+ PROP_TARGET_TIME_CODE,
+ PROP_TARGET_TIME_CODE_STRING
+};
+
+#define DEFAULT_TARGET_TIMECODE_STR "00:00:00:00"
+
+static void gst_timecodewait_set_property (GObject * object,
+ guint prop_id, const GValue * value, GParamSpec * pspec);
+static void gst_timecodewait_get_property (GObject * object,
+ guint prop_id, GValue * value, GParamSpec * pspec);
+
+static GstFlowReturn gst_timecodewait_asink_chain (GstPad * pad,
+ GstObject * parent, GstBuffer * inbuf);
+static GstFlowReturn gst_timecodewait_vsink_chain (GstPad * pad,
+ GstObject * parent, GstBuffer * inbuf);
+static gboolean gst_timecodewait_asink_event (GstPad * pad,
+ GstObject * parent, GstEvent * event);
+static gboolean gst_timecodewait_vsink_event (GstPad * pad,
+ GstObject * parent, GstEvent * event);
+static GstIterator *gst_timecodewait_iterate_internal_links (GstPad *
+ pad, GstObject * parent);
+
+static void gst_timecodewait_finalize (GObject * gobject);
+
+static GstStateChangeReturn gst_timecodewait_change_state (GstElement *
+ element, GstStateChange transition);
+
+static void
+gst_timecodewait_class_init (GstTimeCodeWaitClass * klass)
+{
+ GstElementClass *gstelement_class;
+ GObjectClass *gobject_class = (GObjectClass *) klass;
+
+ GST_DEBUG_CATEGORY_INIT (gst_timecodewait_debug,
+ "timecodewait", 0, "timecodewait");
+
+ gstelement_class = (GstElementClass *) klass;
+
+ gst_element_class_set_static_metadata (gstelement_class,
+ "Timecode Wait", "Filter/Audio/Video",
+ "Drops all audio/video until a specific timecode has been reached",
+ "Vivia Nikolaidou <vivia@toolsonair.com>");
+
+ gobject_class->set_property = gst_timecodewait_set_property;
+ gobject_class->get_property = gst_timecodewait_get_property;
+
+ g_object_class_install_property (gobject_class, PROP_TARGET_TIME_CODE_STRING,
+ g_param_spec_string ("target-timecode-string", "Target timecode (string)",
+ "Timecode to wait for (string). Must take the form 00:00:00:00",
+ DEFAULT_TARGET_TIMECODE_STR,
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+ g_object_class_install_property (gobject_class, PROP_TARGET_TIME_CODE,
+ g_param_spec_boxed ("target-timecode", "Target timecode (object)",
+ "Timecode to wait for (object)",
+ GST_TYPE_VIDEO_TIME_CODE,
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+ gobject_class->finalize = gst_timecodewait_finalize;
+ gstelement_class->change_state = gst_timecodewait_change_state;
+
+ gst_element_class_add_static_pad_template (gstelement_class,
+ &audio_src_template);
+ gst_element_class_add_static_pad_template (gstelement_class,
+ &audio_sink_template);
+
+ gst_element_class_add_static_pad_template (gstelement_class,
+ &video_src_template);
+ gst_element_class_add_static_pad_template (gstelement_class,
+ &video_sink_template);
+}
+
+static void
+gst_timecodewait_init (GstTimeCodeWait * self)
+{
+ self->asinkpad =
+ gst_pad_new_from_static_template (&audio_sink_template, "asink");
+ gst_pad_set_chain_function (self->asinkpad,
+ GST_DEBUG_FUNCPTR (gst_timecodewait_asink_chain));
+ gst_pad_set_event_function (self->asinkpad,
+ GST_DEBUG_FUNCPTR (gst_timecodewait_asink_event));
+ gst_pad_set_iterate_internal_links_function (self->asinkpad,
+ GST_DEBUG_FUNCPTR (gst_timecodewait_iterate_internal_links));
+ gst_element_add_pad (GST_ELEMENT (self), self->asinkpad);
+
+ self->vsinkpad =
+ gst_pad_new_from_static_template (&video_sink_template, "vsink");
+ gst_pad_set_chain_function (self->vsinkpad,
+ GST_DEBUG_FUNCPTR (gst_timecodewait_vsink_chain));
+ gst_pad_set_event_function (self->vsinkpad,
+ GST_DEBUG_FUNCPTR (gst_timecodewait_vsink_event));
+ gst_pad_set_iterate_internal_links_function (self->vsinkpad,
+ GST_DEBUG_FUNCPTR (gst_timecodewait_iterate_internal_links));
+ gst_element_add_pad (GST_ELEMENT (self), self->vsinkpad);
+
+ self->asrcpad =
+ gst_pad_new_from_static_template (&audio_src_template, "asrc");
+ gst_pad_set_iterate_internal_links_function (self->asrcpad,
+ GST_DEBUG_FUNCPTR (gst_timecodewait_iterate_internal_links));
+ gst_element_add_pad (GST_ELEMENT (self), self->asrcpad);
+
+ self->vsrcpad =
+ gst_pad_new_from_static_template (&video_src_template, "vsrc");
+ gst_pad_set_iterate_internal_links_function (self->vsrcpad,
+ GST_DEBUG_FUNCPTR (gst_timecodewait_iterate_internal_links));
+ gst_element_add_pad (GST_ELEMENT (self), self->vsrcpad);
+
+ GST_PAD_SET_PROXY_CAPS (self->asinkpad);
+ GST_PAD_SET_PROXY_ALLOCATION (self->asinkpad);
+
+ GST_PAD_SET_PROXY_CAPS (self->asrcpad);
+ GST_PAD_SET_PROXY_SCHEDULING (self->asrcpad);
+
+ GST_PAD_SET_PROXY_CAPS (self->vsinkpad);
+ GST_PAD_SET_PROXY_ALLOCATION (self->vsinkpad);
+
+ GST_PAD_SET_PROXY_CAPS (self->vsrcpad);
+ GST_PAD_SET_PROXY_SCHEDULING (self->vsrcpad);
+
+ self->running_time_of_timecode = GST_CLOCK_TIME_NONE;
+
+ self->video_eos_flag = FALSE;
+ self->audio_flush_flag = FALSE;
+ self->shutdown_flag = FALSE;
+ self->from_string = FALSE;
+ self->tc = gst_video_time_code_new_empty ();
+
+ g_mutex_init (&self->mutex);
+ g_cond_init (&self->cond);
+}
+
+static GstStateChangeReturn
+gst_timecodewait_change_state (GstElement * element, GstStateChange transition)
+{
+ GstStateChangeReturn ret;
+ GstTimeCodeWait *self = GST_TIMECODEWAIT (element);
+
+ switch (transition) {
+ case GST_STATE_CHANGE_PAUSED_TO_READY:
+ g_mutex_lock (&self->mutex);
+ self->shutdown_flag = TRUE;
+ g_cond_signal (&self->cond);
+ g_mutex_unlock (&self->mutex);
+ break;
+ case GST_STATE_CHANGE_READY_TO_PAUSED:
+ g_mutex_lock (&self->mutex);
+ self->shutdown_flag = FALSE;
+ self->video_eos_flag = FALSE;
+ self->audio_flush_flag = FALSE;
+ g_mutex_unlock (&self->mutex);
+ default:
+ break;
+ }
+
+ ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition);
+
+ switch (transition) {
+ case GST_STATE_CHANGE_PAUSED_TO_READY:
+ g_mutex_lock (&self->mutex);
+ self->running_time_of_timecode = GST_CLOCK_TIME_NONE;
+ gst_segment_init (&self->asegment, GST_FORMAT_UNDEFINED);
+ self->asegment.position = GST_CLOCK_TIME_NONE;
+ gst_segment_init (&self->vsegment, GST_FORMAT_UNDEFINED);
+ self->vsegment.position = GST_CLOCK_TIME_NONE;
+ g_mutex_unlock (&self->mutex);
+ break;
+ default:
+ break;
+ }
+
+ return ret;
+}
+
+static void
+gst_timecodewait_finalize (GObject * object)
+{
+ GstTimeCodeWait *self = GST_TIMECODEWAIT (object);
+
+ if (self->tc) {
+ gst_video_time_code_free (self->tc);
+ self->tc = NULL;
+ }
+
+ g_mutex_clear (&self->mutex);
+ g_cond_clear (&self->cond);
+
+ G_OBJECT_CLASS (parent_class)->finalize (object);
+}
+
+static void
+gst_timecodewait_get_property (GObject * object, guint prop_id,
+ GValue * value, GParamSpec * pspec)
+{
+ GstTimeCodeWait *self = GST_TIMECODEWAIT (object);
+
+ switch (prop_id) {
+ case PROP_TARGET_TIME_CODE_STRING:{
+ if (self->tc)
+ g_value_take_string (value, gst_video_time_code_to_string (self->tc));
+ else
+ g_value_set_string (value, DEFAULT_TARGET_TIMECODE_STR);
+ break;
+ }
+ case PROP_TARGET_TIME_CODE:{
+ g_value_set_boxed (value, self->tc);
+ break;
+ }
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+gst_timecodewait_set_property (GObject * object, guint prop_id,
+ const GValue * value, GParamSpec * pspec)
+{
+ GstTimeCodeWait *self = GST_TIMECODEWAIT (object);
+
+ switch (prop_id) {
+ case PROP_TARGET_TIME_CODE_STRING:{
+ gchar **parts;
+ const gchar *tc_str;
+ guint hours, minutes, seconds, frames;
+
+ tc_str = g_value_get_string (value);
+ parts = g_strsplit (tc_str, ":", 4);
+ if (!parts || parts[3] == NULL) {
+ GST_ERROR_OBJECT (self,
+ "Error: Could not parse timecode %s. Please input a timecode in the form 00:00:00:00",
+ tc_str);
+ g_strfreev (parts);
+ return;
+ }
+ hours = g_ascii_strtoll (parts[0], NULL, 10);
+ minutes = g_ascii_strtoll (parts[1], NULL, 10);
+ seconds = g_ascii_strtoll (parts[2], NULL, 10);
+ frames = g_ascii_strtoll (parts[3], NULL, 10);
+ gst_video_time_code_init (self->tc, 0, 1, NULL, 0, hours, minutes,
+ seconds, frames, 0);
+ if (self->vinfo.finfo != NULL) {
+ self->tc->config.fps_n = self->vinfo.fps_n;
+ self->tc->config.fps_d = self->vinfo.fps_d;
+ }
+ self->from_string = TRUE;
+ g_strfreev (parts);
+ break;
+ }
+ case PROP_TARGET_TIME_CODE:{
+ if (self->tc)
+ gst_video_time_code_free (self->tc);
+ self->tc = g_value_dup_boxed (value);
+ self->from_string = FALSE;
+ break;
+ }
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static gboolean
+gst_timecodewait_vsink_event (GstPad * pad, GstObject * parent,
+ GstEvent * event)
+{
+ GstTimeCodeWait *self = GST_TIMECODEWAIT (parent);
+ GST_LOG_OBJECT (pad, "Got %s event", GST_EVENT_TYPE_NAME (event));
+
+ switch (GST_EVENT_TYPE (event)) {
+ case GST_EVENT_SEGMENT:
+ g_mutex_lock (&self->mutex);
+ gst_event_copy_segment (event, &self->vsegment);
+ if (self->vsegment.format != GST_FORMAT_TIME) {
+ GST_ERROR_OBJECT (self, "Invalid segment format");
+ g_mutex_unlock (&self->mutex);
+ gst_event_unref (event);
+ return FALSE;
+ }
+ self->vsegment.position = GST_CLOCK_TIME_NONE;
+ g_mutex_unlock (&self->mutex);
+ break;
+ case GST_EVENT_GAP:
+ gst_event_unref (event);
+ return TRUE;
+ case GST_EVENT_EOS:
+ g_mutex_lock (&self->mutex);
+ self->video_eos_flag = TRUE;
+ g_cond_signal (&self->cond);
+ g_mutex_unlock (&self->mutex);
+ break;
+ case GST_EVENT_FLUSH_START:
+ g_mutex_lock (&self->mutex);
+ gst_segment_init (&self->vsegment, GST_FORMAT_UNDEFINED);
+ g_cond_signal (&self->cond);
+ g_mutex_unlock (&self->mutex);
+ self->vsegment.position = GST_CLOCK_TIME_NONE;
+ break;
+ case GST_EVENT_CAPS:{
+ GstCaps *caps;
+ gst_event_parse_caps (event, &caps);
+ GST_DEBUG_OBJECT (self, "Got caps %" GST_PTR_FORMAT, caps);
+ if (!gst_video_info_from_caps (&self->vinfo, caps)) {
+ gst_event_unref (event);
+ return FALSE;
+ }
+ g_mutex_lock (&self->mutex);
+ if (self->from_string) {
+ self->tc->config.fps_n = self->vinfo.fps_n;
+ self->tc->config.fps_d = self->vinfo.fps_d;
+ }
+ g_mutex_unlock (&self->mutex);
+ break;
+ }
+ default:
+ break;
+ }
+ return gst_pad_event_default (pad, parent, event);
+}
+
+static gboolean
+gst_timecodewait_asink_event (GstPad * pad, GstObject * parent,
+ GstEvent * event)
+{
+ GstTimeCodeWait *self = GST_TIMECODEWAIT (parent);
+ GST_LOG_OBJECT (pad, "Got %s event", GST_EVENT_TYPE_NAME (event));
+
+ switch (GST_EVENT_TYPE (event)) {
+ case GST_EVENT_SEGMENT:
+ g_mutex_lock (&self->mutex);
+ self->running_time_of_timecode = GST_CLOCK_TIME_NONE;
+ gst_event_copy_segment (event, &self->asegment);
+ if (self->asegment.format != GST_FORMAT_TIME) {
+ GST_ERROR_OBJECT (self, "Invalid segment format");
+ g_mutex_unlock (&self->mutex);
+ return FALSE;
+ }
+ self->asegment.position = GST_CLOCK_TIME_NONE;
+ g_mutex_unlock (&self->mutex);
+ break;
+ case GST_EVENT_FLUSH_START:
+ g_mutex_lock (&self->mutex);
+ self->audio_flush_flag = TRUE;
+ g_cond_signal (&self->cond);
+ g_mutex_unlock (&self->mutex);
+ break;
+ case GST_EVENT_FLUSH_STOP:
+ g_mutex_lock (&self->mutex);
+ self->audio_flush_flag = FALSE;
+ self->running_time_of_timecode = GST_CLOCK_TIME_NONE;
+ gst_segment_init (&self->asegment, GST_FORMAT_UNDEFINED);
+ self->asegment.position = GST_CLOCK_TIME_NONE;
+ g_mutex_unlock (&self->mutex);
+ break;
+ case GST_EVENT_CAPS:{
+ GstCaps *caps;
+ gst_event_parse_caps (event, &caps);
+ GST_DEBUG_OBJECT (self, "Got caps %" GST_PTR_FORMAT, caps);
+ g_mutex_lock (&self->mutex);
+ if (!gst_audio_info_from_caps (&self->ainfo, caps)) {
+ g_mutex_unlock (&self->mutex);
+ return FALSE;
+ }
+ self->running_time_of_timecode = GST_CLOCK_TIME_NONE;
+ g_mutex_unlock (&self->mutex);
+ break;
+ }
+ default:
+ break;
+ }
+
+ return gst_pad_event_default (pad, parent, event);
+}
+
+static GstFlowReturn
+gst_timecodewait_vsink_chain (GstPad * pad, GstObject * parent,
+ GstBuffer * inbuf)
+{
+ GstClockTime timestamp;
+ GstTimeCodeWait *self = GST_TIMECODEWAIT (parent);
+ GstClockTime duration;
+ GstVideoTimeCode *tc = NULL;
+ GstVideoTimeCodeMeta *tc_meta;
+
+ timestamp = GST_BUFFER_TIMESTAMP (inbuf);
+ if (timestamp == GST_CLOCK_TIME_NONE) {
+ gst_buffer_unref (inbuf);
+ return GST_FLOW_ERROR;
+ }
+ g_mutex_lock (&self->mutex);
+ self->vsegment.position = timestamp;
+ duration = GST_BUFFER_DURATION (inbuf);
+ if (duration != GST_CLOCK_TIME_NONE)
+ self->vsegment.position += duration;
+ tc_meta = gst_buffer_get_video_time_code_meta (inbuf);
+ if (tc_meta)
+ tc = &tc_meta->tc;
+ if (self->tc != NULL && tc != NULL) {
+ if (gst_video_time_code_compare (tc, self->tc) < 0
+ && self->running_time_of_timecode == GST_CLOCK_TIME_NONE) {
+ GST_DEBUG_OBJECT (self, "Timecode not yet reached, ignoring frame");
+ gst_buffer_unref (inbuf);
+ inbuf = NULL;
+ } else if (self->running_time_of_timecode == GST_CLOCK_TIME_NONE) {
+ GST_INFO_OBJECT (self, "Target timecode reached at %" GST_TIME_FORMAT,
+ GST_TIME_ARGS (self->vsegment.position));
+ self->running_time_of_timecode =
+ gst_segment_to_running_time (&self->vsegment, GST_FORMAT_TIME,
+ self->vsegment.position);
+ }
+ }
+ g_cond_signal (&self->cond);
+ g_mutex_unlock (&self->mutex);
+ if (inbuf)
+ return gst_pad_push (self->vsrcpad, inbuf);
+ else
+ return GST_FLOW_OK;
+}
+
+/*
+ * assumes sign1 and sign2 are either 1 or -1
+ * returns 0 if sign1*num1 == sign2*num2
+ * -1 if sign1*num1 < sign2*num2
+ * 1 if sign1*num1 > sign2*num2
+ */
+static gint
+gst_timecodewait_compare_guint64_with_signs (gint sign1,
+ guint64 num1, gint sign2, guint64 num2)
+{
+ if (sign1 != sign2)
+ return sign1;
+ else if (num1 == num2)
+ return 0;
+ else
+ return num1 > num2 ? sign1 : -sign1;
+}
+
+static GstFlowReturn
+gst_timecodewait_asink_chain (GstPad * pad, GstObject * parent,
+ GstBuffer * inbuf)
+{
+ GstClockTime timestamp;
+ GstTimeCodeWait *self = GST_TIMECODEWAIT (parent);
+ GstClockTime current_running_time;
+ GstClockTime video_running_time = GST_CLOCK_TIME_NONE;
+ GstClockTime duration;
+ GstClockTime running_time_at_end = GST_CLOCK_TIME_NONE;
+ gint asign, vsign = 1, esign = 1;
+
+ timestamp = GST_BUFFER_TIMESTAMP (inbuf);
+ if (timestamp == GST_CLOCK_TIME_NONE) {
+ gst_buffer_unref (inbuf);
+ return GST_FLOW_ERROR;
+ }
+ g_mutex_lock (&self->mutex);
+ self->asegment.position = timestamp;
+ asign =
+ gst_segment_to_running_time_full (&self->asegment, GST_FORMAT_TIME,
+ self->asegment.position, ¤t_running_time);
+ if (asign == 0) {
+ g_mutex_unlock (&self->mutex);
+ gst_buffer_unref (inbuf);
+ GST_ERROR_OBJECT (self, "Could not get current running time");
+ return GST_FLOW_ERROR;
+ }
+ if (self->vsegment.format == GST_FORMAT_TIME) {
+ vsign =
+ gst_segment_to_running_time_full (&self->vsegment, GST_FORMAT_TIME,
+ self->vsegment.position, &video_running_time);
+ if (vsign == 0) {
+ video_running_time = GST_CLOCK_TIME_NONE;
+ }
+ }
+ while (!(self->video_eos_flag || self->audio_flush_flag
+ || self->shutdown_flag) && (video_running_time == GST_CLOCK_TIME_NONE
+ || gst_timecodewait_compare_guint64_with_signs (asign,
+ current_running_time, vsign, video_running_time) == 1)
+ && self->running_time_of_timecode == GST_CLOCK_TIME_NONE) {
+ g_cond_wait (&self->cond, &self->mutex);
+ vsign =
+ gst_segment_to_running_time_full (&self->vsegment, GST_FORMAT_TIME,
+ self->vsegment.position, &video_running_time);
+ if (vsign == 0) {
+ video_running_time = GST_CLOCK_TIME_NONE;
+ }
+ }
+ if (self->audio_flush_flag || self->shutdown_flag) {
+ GST_DEBUG_OBJECT (self, "Shutting down, ignoring frame");
+ gst_buffer_unref (inbuf);
+ return GST_FLOW_FLUSHING;
+ }
+ duration = GST_BUFFER_DURATION (inbuf);
+ if (duration != GST_CLOCK_TIME_NONE) {
+ esign =
+ gst_segment_to_running_time_full (&self->asegment, GST_FORMAT_TIME,
+ self->asegment.position + duration, &running_time_at_end);
+ if (esign == 0) {
+ g_mutex_unlock (&self->mutex);
+ GST_ERROR_OBJECT (self, "Could not get running time at end");
+ gst_buffer_unref (inbuf);
+ return GST_FLOW_ERROR;
+ }
+ }
+ if (self->running_time_of_timecode == GST_CLOCK_TIME_NONE
+ || gst_timecodewait_compare_guint64_with_signs (esign,
+ running_time_at_end, 1, self->running_time_of_timecode) == -1) {
+ GST_DEBUG_OBJECT (self,
+ "Dropped an audio buf at %" GST_TIME_FORMAT " with timecode %"
+ GST_TIME_FORMAT " video timecode %" GST_TIME_FORMAT,
+ GST_TIME_ARGS (current_running_time),
+ GST_TIME_ARGS (self->running_time_of_timecode),
+ GST_TIME_ARGS (video_running_time));
+ gst_buffer_unref (inbuf);
+ inbuf = NULL;
+ } else if (current_running_time < self->running_time_of_timecode
+ && running_time_at_end > self->running_time_of_timecode) {
+ GstSegment asegment2 = self->asegment;
+
+ gst_segment_set_running_time (&asegment2, GST_FORMAT_TIME,
+ self->running_time_of_timecode);
+ inbuf =
+ gst_audio_buffer_clip (inbuf, &asegment2, self->ainfo.rate,
+ self->ainfo.bpf);
+ }
+ g_mutex_unlock (&self->mutex);
+ if (inbuf)
+ return gst_pad_push (self->asrcpad, inbuf);
+ else
+ return GST_FLOW_OK;
+}
+
+static GstIterator *
+gst_timecodewait_iterate_internal_links (GstPad * pad, GstObject * parent)
+{
+ GstIterator *it = NULL;
+ GstPad *opad;
+ GValue val = G_VALUE_INIT;
+ GstTimeCodeWait *self = GST_TIMECODEWAIT (parent);
+
+ if (self->asinkpad == pad)
+ opad = gst_object_ref (self->asrcpad);
+ else if (self->asrcpad == pad)
+ opad = gst_object_ref (self->asinkpad);
+ else if (self->vsinkpad == pad)
+ opad = gst_object_ref (self->vsrcpad);
+ else if (self->vsrcpad == pad)
+ opad = gst_object_ref (self->vsinkpad);
+ else
+ goto out;
+
+ g_value_init (&val, GST_TYPE_PAD);
+ g_value_set_object (&val, opad);
+ it = gst_iterator_new_single (GST_TYPE_PAD, &val);
+ g_value_unset (&val);
+
+ gst_object_unref (opad);
+
+out:
+ return it;
+}
diff --git a/gst/timecode/gsttimecodewait.h b/gst/timecode/gsttimecodewait.h
new file mode 100644
index 0000000..cdb2525
--- /dev/null
+++ b/gst/timecode/gsttimecodewait.h
@@ -0,0 +1,70 @@
+/*
+ * GStreamer
+ * Copyright (C) 2016 Vivia Nikolaidou <vivia@toolsonair.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GST_TIMECODEWAIT_H__
+#define __GST_TIMECODEWAIT_H__
+
+#include <gst/gst.h>
+#include <gst/audio/audio.h>
+#include <gst/video/video.h>
+
+G_BEGIN_DECLS
+#define GST_TYPE_TIMECODEWAIT (gst_timecodewait_get_type())
+#define GST_TIMECODEWAIT(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_TIMECODEWAIT,GstTimeCodeWait))
+#define GST_IS_TIMECODEWAIT(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_TIMECODEWAIT))
+#define GST_TIMECODEWAIT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass) ,GST_TYPE_TIMECODEWAIT,GstTimeCodeWaitClass))
+#define GST_IS_TIMECODEWAIT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass) ,GST_TYPE_TIMECODEWAIT))
+#define GST_TIMECODEWAIT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj) ,GST_TYPE_TIMECODEWAIT,GstTimeCodeWaitClass))
+typedef struct _GstTimeCodeWait GstTimeCodeWait;
+typedef struct _GstTimeCodeWaitClass GstTimeCodeWaitClass;
+
+struct _GstTimeCodeWait
+{
+ GstElement parent;
+
+ GstVideoTimeCode *tc;
+ gboolean from_string;
+
+ GstPad *asrcpad, *asinkpad, *vsrcpad, *vsinkpad;
+
+ GstAudioInfo ainfo;
+ GstVideoInfo vinfo;
+
+ GstSegment asegment, vsegment;
+
+ GstClockTime running_time_of_timecode;
+
+ gboolean video_eos_flag;
+ gboolean audio_flush_flag;
+ gboolean shutdown_flag;
+
+ GCond cond;
+ GMutex mutex;
+};
+
+struct _GstTimeCodeWaitClass
+{
+ GstElementClass parent_class;
+};
+
+GType gst_timecodewait_get_type (void);
+
+G_END_DECLS
+#endif /* __GST_TIMECODEWAIT_H__ */
diff --git a/gst/timecode/plugin.c b/gst/timecode/plugin.c
new file mode 100644
index 0000000..8bfcbe9
--- /dev/null
+++ b/gst/timecode/plugin.c
@@ -0,0 +1,48 @@
+/*
+ * GStreamer
+ * Copyright (C) 2016 Vivia Nikolaidou <vivia@toolsonair.com>
+ *
+ * plugin.c
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "gsttimecodestamper.h"
+#include "gsttimecodewait.h"
+
+static gboolean
+plugin_init (GstPlugin * plugin)
+{
+ gboolean ret;
+
+ ret = gst_element_register (plugin, "timecodestamper", GST_RANK_NONE,
+ GST_TYPE_TIME_CODE_STAMPER);
+
+ ret &= gst_element_register (plugin, "timecodewait", GST_RANK_NONE,
+ GST_TYPE_TIMECODEWAIT);
+
+ return ret;
+}
+
+GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
+ GST_VERSION_MINOR,
+ timecode,
+ "Timecode-related elements",
+ plugin_init, VERSION, GST_LICENSE, GST_PACKAGE_NAME, GST_PACKAGE_ORIGIN);
diff --git a/gst/tta/Makefile.in b/gst/tta/Makefile.in
index d0c8910..ff23ce4 100644
--- a/gst/tta/Makefile.in
+++ b/gst/tta/Makefile.in
@@ -326,6 +326,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -375,6 +377,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/gst/tta/gstttaparse.c b/gst/tta/gstttaparse.c
index 5479350..485a197 100644
--- a/gst/tta/gstttaparse.c
+++ b/gst/tta/gstttaparse.c
@@ -468,9 +468,7 @@
if (ret == GST_FLOW_UNEXPECTED) {
gst_pad_push_event (ttaparse->srcpad, gst_event_new_eos ());
} else if (ret < GST_FLOW_UNEXPECTED || ret == GST_FLOW_NOT_LINKED) {
- GST_ELEMENT_ERROR (ttaparse, STREAM, FAILED,
- ("Internal data stream error."),
- ("streaming stopped, reason %s", gst_flow_get_name (ret)));
+ GST_ELEMENT_FLOW_ERROR (ttaparse, ret);
gst_pad_push_event (ttaparse->srcpad, gst_event_new_eos ());
}
}
diff --git a/gst/videofilters/Makefile.in b/gst/videofilters/Makefile.in
index 1554116..aa6b34f 100644
--- a/gst/videofilters/Makefile.in
+++ b/gst/videofilters/Makefile.in
@@ -331,6 +331,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -380,6 +382,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/gst/videoframe_audiolevel/Makefile.in b/gst/videoframe_audiolevel/Makefile.in
index c1f0304..1e3ac7f 100644
--- a/gst/videoframe_audiolevel/Makefile.in
+++ b/gst/videoframe_audiolevel/Makefile.in
@@ -328,6 +328,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -377,6 +379,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/gst/videomeasure/Makefile.in b/gst/videomeasure/Makefile.in
index 32add82..37c0295 100644
--- a/gst/videomeasure/Makefile.in
+++ b/gst/videomeasure/Makefile.in
@@ -329,6 +329,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -378,6 +380,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/gst/videoparsers/Makefile.in b/gst/videoparsers/Makefile.in
index 3a9327a..26339c0 100644
--- a/gst/videoparsers/Makefile.in
+++ b/gst/videoparsers/Makefile.in
@@ -339,6 +339,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -388,6 +390,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/gst/videoparsers/gsth264parse.c b/gst/videoparsers/gsth264parse.c
index e09fd99..095a645 100644
--- a/gst/videoparsers/gsth264parse.c
+++ b/gst/videoparsers/gsth264parse.c
@@ -1635,7 +1635,12 @@
profile = "scalable-baseline";
break;
case 86:
- profile = "scalable-high";
+ if (sps->constraint_set3_flag)
+ profile = "scalable-high-intra";
+ else if (sps->constraint_set5_flag)
+ profile = "scalable-constrained-high";
+ else
+ profile = "scalable-high";
break;
default:
return NULL;
diff --git a/gst/videoparsers/gstjpeg2000parse.c b/gst/videoparsers/gstjpeg2000parse.c
index 9388771..13fee2c 100644
--- a/gst/videoparsers/gstjpeg2000parse.c
+++ b/gst/videoparsers/gstjpeg2000parse.c
@@ -443,7 +443,7 @@
} else {
parsed_sampling =
(numcomps ==
- 4) ? GST_JPEG2000_SAMPLING_RGBA : GST_JPEG2000_COLORSPACE_RGB;
+ 4) ? GST_JPEG2000_SAMPLING_RGBA : GST_JPEG2000_SAMPLING_RGB;
}
} else {
if (gst_jpeg2000_sampling_is_mono (sink_sampling)) {
diff --git a/gst/videosignal/Makefile.in b/gst/videosignal/Makefile.in
index 54fe672..d0aba62 100644
--- a/gst/videosignal/Makefile.in
+++ b/gst/videosignal/Makefile.in
@@ -326,6 +326,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -375,6 +377,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/gst/vmnc/Makefile.in b/gst/vmnc/Makefile.in
index 1d80e67..a760253 100644
--- a/gst/vmnc/Makefile.in
+++ b/gst/vmnc/Makefile.in
@@ -325,6 +325,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -374,6 +376,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/gst/y4m/Makefile.in b/gst/y4m/Makefile.in
index e861810..7d1ef95 100644
--- a/gst/y4m/Makefile.in
+++ b/gst/y4m/Makefile.in
@@ -325,6 +325,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -374,6 +376,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/gst/yadif/Makefile.in b/gst/yadif/Makefile.in
index 4a54932..88e95c6 100644
--- a/gst/yadif/Makefile.in
+++ b/gst/yadif/Makefile.in
@@ -323,6 +323,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -372,6 +374,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/ltmain.sh b/ltmain.sh
index 147d758..a736cf9 100644
--- a/ltmain.sh
+++ b/ltmain.sh
@@ -31,7 +31,7 @@
PROGRAM=libtool
PACKAGE=libtool
-VERSION="2.4.6 Debian-2.4.6-0.1"
+VERSION="2.4.6 Debian-2.4.6-2"
package_revision=2.4.6
@@ -2068,7 +2068,7 @@
compiler: $LTCC
compiler flags: $LTCFLAGS
linker: $LD (gnu? $with_gnu_ld)
- version: $progname (GNU libtool) 2.4.6
+ version: $progname $scriptversion Debian-2.4.6-2
automake: `($AUTOMAKE --version) 2>/dev/null |$SED 1q`
autoconf: `($AUTOCONF --version) 2>/dev/null |$SED 1q`
diff --git a/m4/Makefile.in b/m4/Makefile.in
index 33f94dd..d6b28b9 100644
--- a/m4/Makefile.in
+++ b/m4/Makefile.in
@@ -239,6 +239,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -288,6 +290,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/m4/libtool.m4 b/m4/libtool.m4
index 10ab284..ee80844 100644
--- a/m4/libtool.m4
+++ b/m4/libtool.m4
@@ -728,7 +728,6 @@
cat <<_LT_EOF >> "$cfgfile"
#! $SHELL
# Generated automatically by $as_me ($PACKAGE) $VERSION
-# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
# NOTE: Changes made to this file will be lost: look at ltmain.sh.
# Provide generalized library-building support services.
diff --git a/pkgconfig/Makefile.in b/pkgconfig/Makefile.in
index af727b5..b56e542 100644
--- a/pkgconfig/Makefile.in
+++ b/pkgconfig/Makefile.in
@@ -301,6 +301,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -350,6 +352,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/pkgconfig/gstreamer-gl.pc.in b/pkgconfig/gstreamer-gl.pc.in
index 5589e2a..112ce21 100644
--- a/pkgconfig/gstreamer-gl.pc.in
+++ b/pkgconfig/gstreamer-gl.pc.in
@@ -10,4 +10,4 @@
Requires: gstreamer-base-@GST_API_VERSION@ gstreamer-@GST_API_VERSION@
Libs: -L${libdir} -lgstgl-@GST_API_VERSION@ @GL_LIBS@
-Cflags: -I${includedir} @GL_CFLAGS@
+Cflags: -I${includedir} -I${libdir}/gstreamer-@GST_API_VERSION@/include @GL_CFLAGS@
diff --git a/po/af.gmo b/po/af.gmo
index 11b3633..434b581 100644
--- a/po/af.gmo
+++ b/po/af.gmo
Binary files differ
diff --git a/po/af.po b/po/af.po
index f27267b..91329b9 100644
--- a/po/af.po
+++ b/po/af.po
@@ -7,7 +7,7 @@
msgstr ""
"Project-Id-Version: gst-plugins 0.7.6\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-07-06 11:51+0300\n"
+"POT-Creation-Date: 2016-09-01 11:24+0300\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"
@@ -69,9 +69,6 @@
msgid "Could not start sndio"
msgstr "Kon nie skryf na lêer \"%s\" nie."
-msgid "Internal data flow error."
-msgstr ""
-
msgid "Generated file has a larger preroll time than its streams duration"
msgstr ""
@@ -91,10 +88,10 @@
msgid "Failed to get fragment URL."
msgstr ""
-msgid "Internal data stream error."
+msgid "Couldn't download fragments"
msgstr ""
-msgid "Couldn't download fragments"
+msgid "Internal data stream error."
msgstr ""
#, fuzzy
diff --git a/po/az.gmo b/po/az.gmo
index 6167267..8f5c9af 100644
--- a/po/az.gmo
+++ b/po/az.gmo
Binary files differ
diff --git a/po/az.po b/po/az.po
index af87a1f..789ba97 100644
--- a/po/az.po
+++ b/po/az.po
@@ -7,7 +7,7 @@
msgstr ""
"Project-Id-Version: gst-plugins-0.8.0\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-07-06 11:51+0300\n"
+"POT-Creation-Date: 2016-09-01 11:24+0300\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"
@@ -70,9 +70,6 @@
msgid "Could not start sndio"
msgstr "\"%s\" faylına yazıla bilmədi."
-msgid "Internal data flow error."
-msgstr ""
-
msgid "Generated file has a larger preroll time than its streams duration"
msgstr ""
@@ -92,10 +89,10 @@
msgid "Failed to get fragment URL."
msgstr ""
-msgid "Internal data stream error."
+msgid "Couldn't download fragments"
msgstr ""
-msgid "Couldn't download fragments"
+msgid "Internal data stream error."
msgstr ""
#, fuzzy
diff --git a/po/bg.gmo b/po/bg.gmo
index 928df85..47546c5 100644
--- a/po/bg.gmo
+++ b/po/bg.gmo
Binary files differ
diff --git a/po/bg.po b/po/bg.po
index a5f8f1d..6608f03 100644
--- a/po/bg.po
+++ b/po/bg.po
@@ -8,7 +8,7 @@
msgstr ""
"Project-Id-Version: gst-plugins-bad 1.7.2\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-07-06 11:51+0300\n"
+"POT-Creation-Date: 2016-09-01 11:24+0300\n"
"PO-Revision-Date: 2016-02-21 21:03+0200\n"
"Last-Translator: Alexander Shopov <ash@kambanaria.org>\n"
"Language-Team: Bulgarian <dict@ludost.net>\n"
@@ -68,9 +68,6 @@
msgid "Could not start sndio"
msgstr "Не може да се стартира sndio"
-msgid "Internal data flow error."
-msgstr "Вътрешна грешка в потока на данни."
-
msgid "Generated file has a larger preroll time than its streams duration"
msgstr ""
"Генерираният файл е с по-дълго време за буфериране отколкото е самата му "
@@ -92,12 +89,12 @@
msgid "Failed to get fragment URL."
msgstr "Неуспешно получаване на адреса на фрагмента."
-msgid "Internal data stream error."
-msgstr "Вътрешна грешка в потока на данни."
-
msgid "Couldn't download fragments"
msgstr "Фрагментите не могат да бъдат свалени"
+msgid "Internal data stream error."
+msgstr "Вътрешна грешка в потока на данни."
+
msgid "No file name specified for writing."
msgstr "Не е указано име на файл за запис."
@@ -164,3 +161,6 @@
msgstr ""
"Файлът с настройките на цифровото видеоръзпръскване (DVB) не съдържа никакви "
"канали"
+
+#~ msgid "Internal data flow error."
+#~ msgstr "Вътрешна грешка в потока на данни."
diff --git a/po/ca.gmo b/po/ca.gmo
index 814b45b..959a293 100644
--- a/po/ca.gmo
+++ b/po/ca.gmo
Binary files differ
diff --git a/po/ca.po b/po/ca.po
index 309de63..eb6e274 100644
--- a/po/ca.po
+++ b/po/ca.po
@@ -9,7 +9,7 @@
msgstr ""
"Project-Id-Version: gst-plugins-bad 0.10.21.2\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-07-06 11:51+0300\n"
+"POT-Creation-Date: 2016-09-01 11:24+0300\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"
@@ -72,9 +72,6 @@
msgid "Could not start sndio"
msgstr "No s'ha pogut llegir el DVD."
-msgid "Internal data flow error."
-msgstr "S'ha produït un error intern de flux de dades."
-
msgid "Generated file has a larger preroll time than its streams duration"
msgstr ""
@@ -94,12 +91,12 @@
msgid "Failed to get fragment URL."
msgstr ""
-msgid "Internal data stream error."
-msgstr "S'ha produït un error intern de flux de dades."
-
msgid "Couldn't download fragments"
msgstr ""
+msgid "Internal data stream error."
+msgstr "S'ha produït un error intern de flux de dades."
+
msgid "No file name specified for writing."
msgstr "No s'ha especificat cap nom de fitxer per a l'escriptura."
@@ -157,5 +154,8 @@
msgid "DVB channel configuration file doesn't contain any channels"
msgstr ""
+#~ msgid "Internal data flow error."
+#~ msgstr "S'ha produït un error intern de flux de dades."
+
#~ msgid "Could not write to file \"%s\"."
#~ msgstr "No s'ha pogut escriure al fitxer «%s»."
diff --git a/po/cs.gmo b/po/cs.gmo
index 9e4fd8f..27a4312 100644
--- a/po/cs.gmo
+++ b/po/cs.gmo
Binary files differ
diff --git a/po/cs.po b/po/cs.po
index 378a991..5f0b918 100644
--- a/po/cs.po
+++ b/po/cs.po
@@ -11,7 +11,7 @@
msgstr ""
"Project-Id-Version: gst-plugins-bad 1.6.0\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-07-06 11:51+0300\n"
+"POT-Creation-Date: 2016-09-01 11:24+0300\n"
"PO-Revision-Date: 2015-10-15 20:54+0200\n"
"Last-Translator: Marek Černocký <marek@manet.cz>\n"
"Language-Team: Czech <translation-team-cs@lists.sourceforge.net>\n"
@@ -72,9 +72,6 @@
msgid "Could not start sndio"
msgstr "Nelze spustit sndio"
-msgid "Internal data flow error."
-msgstr "Vnitřní chyba datového toku."
-
msgid "Generated file has a larger preroll time than its streams duration"
msgstr ""
"Vygenerovaný soubor má delší čas videa vloženého před začátek (preroll) než "
@@ -98,12 +95,12 @@
msgid "Failed to get fragment URL."
msgstr "Selhalo získání adresy URL fragmentu."
-msgid "Internal data stream error."
-msgstr "Chyba proudu vnitřních dat."
-
msgid "Couldn't download fragments"
msgstr "Nelze stáhnout fragmenty"
+msgid "Internal data stream error."
+msgstr "Chyba proudu vnitřních dat."
+
msgid "No file name specified for writing."
msgstr "K zápisu nebyl zadán žádný název souboru."
@@ -163,6 +160,9 @@
msgid "DVB channel configuration file doesn't contain any channels"
msgstr "Soubor s nastavením kanálů DVB neobsahuje žádné kanály"
+#~ msgid "Internal data flow error."
+#~ msgstr "Vnitřní chyba datového toku."
+
#~ msgid "default GStreamer sound events audiosink"
#~ msgstr "výchozí zvukový cíl GStreamer pro zvukové události"
diff --git a/po/da.gmo b/po/da.gmo
index 20e527b..2a19704 100644
--- a/po/da.gmo
+++ b/po/da.gmo
Binary files differ
diff --git a/po/da.po b/po/da.po
index 44bb1cc..216fcdb 100644
--- a/po/da.po
+++ b/po/da.po
@@ -8,7 +8,7 @@
msgstr ""
"Project-Id-Version: gst-plugins-bad-1.6.0\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-07-06 11:51+0300\n"
+"POT-Creation-Date: 2016-09-01 11:24+0300\n"
"PO-Revision-Date: 2015-12-05 11:28+0200\n"
"Last-Translator: Joe Hansen <joedalton2@yahoo.dk>\n"
"Language-Team: Danish <dansk@dansk-gruppen.dk>\n"
@@ -67,9 +67,6 @@
msgid "Could not start sndio"
msgstr "Kunne ikke starte sndio"
-msgid "Internal data flow error."
-msgstr "Intern datastrømfejl."
-
# pre-roll. The name of an online video commercial that appears prior to an online video,
# http://en.wiktionary.org/wiki/preroll
msgid "Generated file has a larger preroll time than its streams duration"
@@ -91,12 +88,12 @@
msgid "Failed to get fragment URL."
msgstr "Kunne ikke indhente fragmentadresse."
-msgid "Internal data stream error."
-msgstr "Intern datastrømfejl."
-
msgid "Couldn't download fragments"
msgstr "Kunne ikke hente fragmenter"
+msgid "Internal data stream error."
+msgstr "Intern datastrømfejl."
+
msgid "No file name specified for writing."
msgstr "Intet filnavn er angivet til skrivning."
@@ -155,6 +152,9 @@
msgid "DVB channel configuration file doesn't contain any channels"
msgstr "DVB-kanalens konfigurationsfil indeholder ikke nogen kanaler"
+#~ msgid "Internal data flow error."
+#~ msgstr "Intern datastrømfejl."
+
#~ msgid "default GStreamer sound events audiosink"
#~ msgstr "standardlydkanal for GStreamers lydhændelser"
diff --git a/po/de.gmo b/po/de.gmo
index 4b15447..689fbf0 100644
--- a/po/de.gmo
+++ b/po/de.gmo
Binary files differ
diff --git a/po/de.po b/po/de.po
index 1d773e6..0f8fc53 100644
--- a/po/de.po
+++ b/po/de.po
@@ -8,7 +8,7 @@
msgstr ""
"Project-Id-Version: gst-plugins-bad 1.6.0\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-07-06 11:51+0300\n"
+"POT-Creation-Date: 2016-09-01 11:24+0300\n"
"PO-Revision-Date: 2015-10-21 00:15+0200\n"
"Last-Translator: Christian Kirbach <christian.kirbach@gmail.com>\n"
"Language-Team: German <translation-team-de@lists.sourceforge.net>\n"
@@ -71,9 +71,6 @@
msgid "Could not start sndio"
msgstr "sndio konnten nicht gestartet werden"
-msgid "Internal data flow error."
-msgstr "Interner Datenstromfehler."
-
msgid "Generated file has a larger preroll time than its streams duration"
msgstr ""
"Die erzeugte Datei hat eine größere Vorlaufzeit als die Dauer ihres "
@@ -98,12 +95,12 @@
msgid "Failed to get fragment URL."
msgstr "Ermitteln der Fragment-Adresse schlug fehl."
-msgid "Internal data stream error."
-msgstr "Interner Datenstromfehler."
-
msgid "Couldn't download fragments"
msgstr "Fragmente konnten nicht heruntergeladen werden"
+msgid "Internal data stream error."
+msgstr "Interner Datenstromfehler."
+
msgid "No file name specified for writing."
msgstr "Kein Dateiname zum Schreiben angegeben."
@@ -165,6 +162,9 @@
msgid "DVB channel configuration file doesn't contain any channels"
msgstr "DVB Kanal-Konfigurationsdatei enthält keine Kanäle"
+#~ msgid "Internal data flow error."
+#~ msgstr "Interner Datenstromfehler."
+
#~ msgid "default GStreamer sound events audiosink"
#~ msgstr "Voreingestellte GStreamer Tonereignis-Audioziel"
diff --git a/po/el.gmo b/po/el.gmo
index 959cf7e..2a42ab7 100644
--- a/po/el.gmo
+++ b/po/el.gmo
Binary files differ
diff --git a/po/el.po b/po/el.po
index 65e1597..fe2fbb4 100644
--- a/po/el.po
+++ b/po/el.po
@@ -9,7 +9,7 @@
msgstr ""
"Project-Id-Version: gst-plugins-bad 0.10.21.2\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-07-06 11:51+0300\n"
+"POT-Creation-Date: 2016-09-01 11:24+0300\n"
"PO-Revision-Date: 2012-05-05 19:17+0100\n"
"Last-Translator: Savvas Radevic <vicedar@gmail.com>\n"
"Language-Team: Greek <team@lists.gnome.gr>\n"
@@ -73,9 +73,6 @@
msgid "Could not start sndio"
msgstr "Αδυναμία ανάγνωσης δίσκου DVD."
-msgid "Internal data flow error."
-msgstr "Εσωτερικό σφάλμα ροής δεδομένων."
-
msgid "Generated file has a larger preroll time than its streams duration"
msgstr ""
@@ -95,12 +92,12 @@
msgid "Failed to get fragment URL."
msgstr ""
-msgid "Internal data stream error."
-msgstr "Εσωτερικό σφάλμα ροής δεδομένων."
-
msgid "Couldn't download fragments"
msgstr ""
+msgid "Internal data stream error."
+msgstr "Εσωτερικό σφάλμα ροής δεδομένων."
+
msgid "No file name specified for writing."
msgstr "Δεν έχει καθορισθεί όνομα αρχείου για εγγραφή."
@@ -158,5 +155,8 @@
msgid "DVB channel configuration file doesn't contain any channels"
msgstr ""
+#~ msgid "Internal data flow error."
+#~ msgstr "Εσωτερικό σφάλμα ροής δεδομένων."
+
#~ msgid "Could not write to file \"%s\"."
#~ msgstr "Αδυναμία εγγραφής στο αρχείο \"%s\"."
diff --git a/po/en_GB.gmo b/po/en_GB.gmo
index ef22362..e505037 100644
--- a/po/en_GB.gmo
+++ b/po/en_GB.gmo
Binary files differ
diff --git a/po/en_GB.po b/po/en_GB.po
index 798a6df..eaf89f8 100644
--- a/po/en_GB.po
+++ b/po/en_GB.po
@@ -6,7 +6,7 @@
msgstr ""
"Project-Id-Version: gst-plugins 0.8.1\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-07-06 11:51+0300\n"
+"POT-Creation-Date: 2016-09-01 11:24+0300\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"
@@ -68,9 +68,6 @@
msgid "Could not start sndio"
msgstr "Could not write to file \"%s\"."
-msgid "Internal data flow error."
-msgstr ""
-
msgid "Generated file has a larger preroll time than its streams duration"
msgstr ""
@@ -90,10 +87,10 @@
msgid "Failed to get fragment URL."
msgstr ""
-msgid "Internal data stream error."
+msgid "Couldn't download fragments"
msgstr ""
-msgid "Couldn't download fragments"
+msgid "Internal data stream error."
msgstr ""
#, fuzzy
diff --git a/po/eo.gmo b/po/eo.gmo
index f989a06..86cdc6c 100644
--- a/po/eo.gmo
+++ b/po/eo.gmo
Binary files differ
diff --git a/po/eo.po b/po/eo.po
index 84aac86..d02b5eb 100644
--- a/po/eo.po
+++ b/po/eo.po
@@ -7,7 +7,7 @@
msgstr ""
"Project-Id-Version: gst-plugins-bad 0.10.21.2\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-07-06 11:51+0300\n"
+"POT-Creation-Date: 2016-09-01 11:24+0300\n"
"PO-Revision-Date: 2011-06-04 22:18+0200\n"
"Last-Translator: Kristjan SCHMIDT <kristjan.schmidt@googlemail.com>\n"
"Language-Team: Esperanto <translation-team-eo@lists.sourceforge.net>\n"
@@ -70,9 +70,6 @@
msgid "Could not start sndio"
msgstr "Ne eblis legi la DVD-n."
-msgid "Internal data flow error."
-msgstr "Interna datum-flu-eraro."
-
msgid "Generated file has a larger preroll time than its streams duration"
msgstr ""
@@ -92,12 +89,12 @@
msgid "Failed to get fragment URL."
msgstr ""
-msgid "Internal data stream error."
-msgstr "Interna datum-flu-eraro."
-
msgid "Couldn't download fragments"
msgstr ""
+msgid "Internal data stream error."
+msgstr "Interna datum-flu-eraro."
+
msgid "No file name specified for writing."
msgstr "Neniu dosiernomo estas specifite por skribi."
@@ -155,5 +152,8 @@
msgid "DVB channel configuration file doesn't contain any channels"
msgstr ""
+#~ msgid "Internal data flow error."
+#~ msgstr "Interna datum-flu-eraro."
+
#~ msgid "Could not write to file \"%s\"."
#~ msgstr "Ne eblis skribi al dosiero \"%s\"."
diff --git a/po/es.gmo b/po/es.gmo
index ce56311..b291ac1 100644
--- a/po/es.gmo
+++ b/po/es.gmo
Binary files differ
diff --git a/po/es.po b/po/es.po
index 7aa127c..04d3526 100644
--- a/po/es.po
+++ b/po/es.po
@@ -7,7 +7,7 @@
msgstr ""
"Project-Id-Version: gst-plugins-bad 0.10.21.2\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-07-06 11:51+0300\n"
+"POT-Creation-Date: 2016-09-01 11:24+0300\n"
"PO-Revision-Date: 2011-10-02 15:47+0200\n"
"Last-Translator: Jorge González González <aloriel@gmail.com>\n"
"Language-Team: Spanish <es@li.org>\n"
@@ -70,9 +70,6 @@
msgid "Could not start sndio"
msgstr "No se pudo leer el DVD."
-msgid "Internal data flow error."
-msgstr "Error en el flujo de datos interno."
-
msgid "Generated file has a larger preroll time than its streams duration"
msgstr ""
@@ -92,12 +89,12 @@
msgid "Failed to get fragment URL."
msgstr ""
-msgid "Internal data stream error."
-msgstr "Error en el flujo de datos interno."
-
msgid "Couldn't download fragments"
msgstr ""
+msgid "Internal data stream error."
+msgstr "Error en el flujo de datos interno."
+
msgid "No file name specified for writing."
msgstr "No se especificó un nombre de archivo para su escritura."
@@ -156,6 +153,9 @@
msgid "DVB channel configuration file doesn't contain any channels"
msgstr ""
+#~ msgid "Internal data flow error."
+#~ msgstr "Error en el flujo de datos interno."
+
#~ msgid "Could not write to file \"%s\"."
#~ msgstr "No se pudo escribir en el archivo «%s»."
diff --git a/po/eu.gmo b/po/eu.gmo
index 4a954ac..a07d0f2 100644
--- a/po/eu.gmo
+++ b/po/eu.gmo
Binary files differ
diff --git a/po/eu.po b/po/eu.po
index 88d618e..4386c35 100644
--- a/po/eu.po
+++ b/po/eu.po
@@ -8,7 +8,7 @@
msgstr ""
"Project-Id-Version: gst-plugins-bad-0.10.17.2\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-07-06 11:51+0300\n"
+"POT-Creation-Date: 2016-09-01 11:24+0300\n"
"PO-Revision-Date: 2010-03-25 12:30+0100\n"
"Last-Translator: Mikel Olasagasti Uranga <hey_neken@mundurat.net>\n"
"Language-Team: Basque <translation-team-eu@lists.sourceforge.net>\n"
@@ -71,9 +71,6 @@
msgid "Could not start sndio"
msgstr "Ezin izan da DVDaren tituluaren informazioa irakurri."
-msgid "Internal data flow error."
-msgstr "Datu-korrontearen barne-errorea."
-
msgid "Generated file has a larger preroll time than its streams duration"
msgstr ""
@@ -93,12 +90,12 @@
msgid "Failed to get fragment URL."
msgstr ""
-msgid "Internal data stream error."
-msgstr "Datu-korrontearen barne-errorea."
-
msgid "Couldn't download fragments"
msgstr ""
+msgid "Internal data stream error."
+msgstr "Datu-korrontearen barne-errorea."
+
msgid "No file name specified for writing."
msgstr "Ez da fitxategi-izenik zehaztu idazteko."
@@ -156,6 +153,9 @@
msgid "DVB channel configuration file doesn't contain any channels"
msgstr ""
+#~ msgid "Internal data flow error."
+#~ msgstr "Datu-korrontearen barne-errorea."
+
#~ msgid "Could not write to file \"%s\"."
#~ msgstr "Ezin izan da idatzi \"%s\" fitxategian."
diff --git a/po/fi.gmo b/po/fi.gmo
index cc023a9..9cc41dc 100644
--- a/po/fi.gmo
+++ b/po/fi.gmo
Binary files differ
diff --git a/po/fi.po b/po/fi.po
index 1dccd65..ee4c35f 100644
--- a/po/fi.po
+++ b/po/fi.po
@@ -11,7 +11,7 @@
msgstr ""
"Project-Id-Version: gst-plugins-bad 0.10.13.2\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-07-06 11:51+0300\n"
+"POT-Creation-Date: 2016-09-01 11:24+0300\n"
"PO-Revision-Date: 2009-08-12 22:13+0300\n"
"Last-Translator: Tommi Vainikainen <Tommi.Vainikainen@iki.fi>\n"
"Language-Team: Finnish <translation-team-fi@lists.sourceforge.net>\n"
@@ -74,9 +74,6 @@
msgid "Could not start sndio"
msgstr "DVD:n otsikkotietoja ei voitu lukea."
-msgid "Internal data flow error."
-msgstr "Sisäinen tietovirtavirhe."
-
msgid "Generated file has a larger preroll time than its streams duration"
msgstr ""
@@ -96,12 +93,12 @@
msgid "Failed to get fragment URL."
msgstr ""
-msgid "Internal data stream error."
-msgstr "Sisäisen tietovirran virhe."
-
msgid "Couldn't download fragments"
msgstr ""
+msgid "Internal data stream error."
+msgstr "Sisäisen tietovirran virhe."
+
msgid "No file name specified for writing."
msgstr "Kirjoitettavaa tiedostonimeä ei annettu."
@@ -160,6 +157,9 @@
msgid "DVB channel configuration file doesn't contain any channels"
msgstr ""
+#~ msgid "Internal data flow error."
+#~ msgstr "Sisäinen tietovirtavirhe."
+
#~ msgid "Could not write to file \"%s\"."
#~ msgstr "Tiedostoon \"%s\" ei voitu kirjoittaa."
diff --git a/po/fr.gmo b/po/fr.gmo
index 15f9aa6..3fa1fa4 100644
--- a/po/fr.gmo
+++ b/po/fr.gmo
Binary files differ
diff --git a/po/fr.po b/po/fr.po
index da7045f..be2fd9e 100644
--- a/po/fr.po
+++ b/po/fr.po
@@ -9,7 +9,7 @@
msgstr ""
"Project-Id-Version: gst-plugins-bad 1.7.2\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-07-06 11:51+0300\n"
+"POT-Creation-Date: 2016-09-01 11:24+0300\n"
"PO-Revision-Date: 2016-02-20 16:27+0100\n"
"Last-Translator: Stéphane Aulery <lkppo@free.fr>\n"
"Language-Team: French <traduc@traduc.org>\n"
@@ -68,9 +68,6 @@
msgid "Could not start sndio"
msgstr "Impossible de démarrer sndio"
-msgid "Internal data flow error."
-msgstr "Erreur du flux de données interne."
-
msgid "Generated file has a larger preroll time than its streams duration"
msgstr ""
"Le fichier généré a un temps de lancement plus long que la durée du flux"
@@ -93,12 +90,12 @@
msgid "Failed to get fragment URL."
msgstr "Échec de la récupération de l’URL de fragment."
-msgid "Internal data stream error."
-msgstr "Erreur interne de flux de données."
-
msgid "Couldn't download fragments"
msgstr "Impossible de télécharger les fragments"
+msgid "Internal data stream error."
+msgstr "Erreur interne de flux de données."
+
msgid "No file name specified for writing."
msgstr "Aucun nom de fichier indiqué en écriture."
@@ -159,6 +156,9 @@
msgid "DVB channel configuration file doesn't contain any channels"
msgstr "Le fichier de configuration de canal DVB ne contient aucun canal"
+#~ msgid "Internal data flow error."
+#~ msgstr "Erreur du flux de données interne."
+
#~ msgid "default GStreamer sound events audiosink"
#~ msgstr "récepteur audio GStreamer par défaut pour les événements sonores"
diff --git a/po/gl.gmo b/po/gl.gmo
index cedc61a..e73e8af 100644
--- a/po/gl.gmo
+++ b/po/gl.gmo
Binary files differ
diff --git a/po/gl.po b/po/gl.po
index a205cf7..5eb7239 100644
--- a/po/gl.po
+++ b/po/gl.po
@@ -8,7 +8,7 @@
msgstr ""
"Project-Id-Version: gst-plugins-bad 0.10.21.2\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-07-06 11:51+0300\n"
+"POT-Creation-Date: 2016-09-01 11:24+0300\n"
"PO-Revision-Date: 2011-09-05 12:50+0200\n"
"Last-Translator: Fran Dieguez <frandieguez@ubuntu.com>\n"
"Language-Team: Galician <proxecto@trasno.net>\n"
@@ -72,9 +72,6 @@
msgid "Could not start sndio"
msgstr "Non foi posíbel ler o DVD."
-msgid "Internal data flow error."
-msgstr "Produciuse un erro interno no fluxo de datos."
-
msgid "Generated file has a larger preroll time than its streams duration"
msgstr ""
@@ -94,12 +91,12 @@
msgid "Failed to get fragment URL."
msgstr ""
-msgid "Internal data stream error."
-msgstr "Produciuse un erro interno no fluxo de datos."
-
msgid "Couldn't download fragments"
msgstr ""
+msgid "Internal data stream error."
+msgstr "Produciuse un erro interno no fluxo de datos."
+
msgid "No file name specified for writing."
msgstr "Non se especificou ningún nome de ficheiro para a súa escritura."
@@ -157,6 +154,9 @@
msgid "DVB channel configuration file doesn't contain any channels"
msgstr ""
+#~ msgid "Internal data flow error."
+#~ msgstr "Produciuse un erro interno no fluxo de datos."
+
#~ msgid "Could not write to file \"%s\"."
#~ msgstr "Non foi posíbel escribir no ficheiro «%s»."
diff --git a/po/gst-plugins-bad-1.0.pot b/po/gst-plugins-bad-1.0.pot
index d8b99cb..6df5bfa 100644
--- a/po/gst-plugins-bad-1.0.pot
+++ b/po/gst-plugins-bad-1.0.pot
@@ -5,9 +5,9 @@
#, fuzzy
msgid ""
msgstr ""
-"Project-Id-Version: gst-plugins-bad 1.9.1\n"
+"Project-Id-Version: gst-plugins-bad 1.9.2\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-07-06 11:51+0300\n"
+"POT-Creation-Date: 2016-09-01 11:24+0300\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -16,15 +16,15 @@
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"
-#: ext/gl/gstgltestsrc.c:519
+#: ext/gl/gstgltestsrc.c:521
msgid "failed to draw pattern"
msgstr ""
-#: ext/gl/gstgltestsrc.c:520
+#: ext/gl/gstgltestsrc.c:522
msgid "A GL error occured"
msgstr ""
-#: ext/gl/gstgltestsrc.c:526
+#: ext/gl/gstgltestsrc.c:528
msgid "format wasn't negotiated before get function"
msgstr ""
@@ -56,7 +56,7 @@
msgstr ""
#: ext/smoothstreaming/gstmssdemux.c:405
-#: gst-libs/gst/adaptivedemux/gstadaptivedemux.c:674
+#: gst-libs/gst/adaptivedemux/gstadaptivedemux.c:692
msgid "This file contains no playable streams."
msgstr ""
@@ -80,21 +80,17 @@
msgid "Could not start sndio"
msgstr ""
-#: gst/aiff/aiffparse.c:1504
-msgid "Internal data flow error."
-msgstr ""
-
#: gst/asfmux/gstasfmux.c:1831
msgid "Generated file has a larger preroll time than its streams duration"
msgstr ""
-#: gst/camerabin2/camerabingeneral.c:166 gst/camerabin2/gstcamerabin2.c:1876
+#: gst/camerabin2/camerabingeneral.c:166 gst/camerabin2/gstcamerabin2.c:1875
#: gst/camerabin2/gstdigitalzoom.c:282 gst/camerabin2/gstviewfinderbin.c:270
#, c-format
msgid "Missing element '%s' - check your GStreamer installation."
msgstr ""
-#: gst/camerabin2/gstcamerabin2.c:364
+#: gst/camerabin2/gstcamerabin2.c:363
msgid "File location is set to NULL, please set it to a valid filename"
msgstr ""
@@ -102,23 +98,21 @@
msgid "Digitalzoom element couldn't be created"
msgstr ""
-#: gst/dvdspu/gstdvdspu.c:1039
+#: gst/dvdspu/gstdvdspu.c:1041
msgid "Subpicture format was not configured before data flow"
msgstr ""
-#: gst-libs/gst/adaptivedemux/gstadaptivedemux.c:2712
+#: gst-libs/gst/adaptivedemux/gstadaptivedemux.c:3053
msgid "Failed to get fragment URL."
msgstr ""
-#: gst-libs/gst/adaptivedemux/gstadaptivedemux.c:2950
-#: gst-libs/gst/adaptivedemux/gstadaptivedemux.c:3145
-#: gst/mpegtsdemux/mpegtsbase.c:1382 gst/mpegtsdemux/mpegtsbase.c:1386
-#: gst/nuvdemux/gstnuvdemux.c:733
-msgid "Internal data stream error."
+#: gst-libs/gst/adaptivedemux/gstadaptivedemux.c:3404
+msgid "Couldn't download fragments"
msgstr ""
-#: gst-libs/gst/adaptivedemux/gstadaptivedemux.c:3061
-msgid "Couldn't download fragments"
+#: gst-libs/gst/adaptivedemux/gstadaptivedemux.c:3493
+#: gst/mpegtsdemux/mpegtsbase.c:1382
+msgid "Internal data stream error."
msgstr ""
#: gst/videomeasure/gstvideomeasure_collector.c:294
@@ -160,35 +154,35 @@
msgid "Could not open file \"%s\" for reading."
msgstr ""
-#: sys/dvb/parsechannels.c:336
+#: sys/dvb/parsechannels.c:359
msgid "Couldn't find DVB channel configuration file"
msgstr ""
-#: sys/dvb/parsechannels.c:339 sys/dvb/parsechannels.c:495
+#: sys/dvb/parsechannels.c:362 sys/dvb/parsechannels.c:518
#, c-format
msgid "Couldn't load DVB channel configuration file: %s"
msgstr ""
-#: sys/dvb/parsechannels.c:348 sys/dvb/parsechannels.c:780
+#: sys/dvb/parsechannels.c:371 sys/dvb/parsechannels.c:803
#, c-format
msgid "Couldn't find details for DVB channel %s"
msgstr ""
-#: sys/dvb/parsechannels.c:358
+#: sys/dvb/parsechannels.c:381
#, c-format
msgid "No properties for the DVB channel %s"
msgstr ""
-#: sys/dvb/parsechannels.c:368
+#: sys/dvb/parsechannels.c:391
#, c-format
msgid "Failed to set properties for the DVB channel %s"
msgstr ""
-#: sys/dvb/parsechannels.c:492
+#: sys/dvb/parsechannels.c:515
#, c-format
msgid "Couldn't find DVB channel configuration file: %s"
msgstr ""
-#: sys/dvb/parsechannels.c:502
+#: sys/dvb/parsechannels.c:525
msgid "DVB channel configuration file doesn't contain any channels"
msgstr ""
diff --git a/po/hr.gmo b/po/hr.gmo
index 54bbd5c..333eea6 100644
--- a/po/hr.gmo
+++ b/po/hr.gmo
Binary files differ
diff --git a/po/hr.po b/po/hr.po
index 94c54f2..3d0f443 100644
--- a/po/hr.po
+++ b/po/hr.po
@@ -7,7 +7,7 @@
msgstr ""
"Project-Id-Version: gst-plugins-bad 1.7.2\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-07-06 11:51+0300\n"
+"POT-Creation-Date: 2016-09-01 11:24+0300\n"
"PO-Revision-Date: 2016-05-27 12:45-0700\n"
"Last-Translator: Božidar Putanec <bozidarp@yahoo.com>\n"
"Language-Team: Croatian <lokalizacija@linux.hr>\n"
@@ -71,9 +71,6 @@
msgid "Could not start sndio"
msgstr "‘sndio’ nije moguće pokrenuti"
-msgid "Internal data flow error."
-msgstr "Interna greška u protoku podataka."
-
msgid "Generated file has a larger preroll time than its streams duration"
msgstr ""
"U generiranoj datoteci priprema (preroll vrijeme) je duža od ukupnog "
@@ -96,12 +93,12 @@
msgid "Failed to get fragment URL."
msgstr "Nije uspjelo dobiti fragmente adrese URL-a."
-msgid "Internal data stream error."
-msgstr "Interna greška toka (stream) podataka."
-
msgid "Couldn't download fragments"
msgstr "Nije moguće preuzeti fragmente"
+msgid "Internal data stream error."
+msgstr "Interna greška toka (stream) podataka."
+
msgid "No file name specified for writing."
msgstr "Nedostaje naziv (nema ga) datoteke za pisanje."
@@ -162,5 +159,8 @@
msgid "DVB channel configuration file doesn't contain any channels"
msgstr "Konfiguracijska datoteka za DVB kanal ne sadrži nijedan kanal"
+#~ msgid "Internal data flow error."
+#~ msgstr "Interna greška u protoku podataka."
+
#~ msgid "Could not write to file \"%s\"."
#~ msgstr "Ne mogu pisati u datoteku „%s”."
diff --git a/po/hu.gmo b/po/hu.gmo
index 4827a23..63e9c19 100644
--- a/po/hu.gmo
+++ b/po/hu.gmo
Binary files differ
diff --git a/po/hu.po b/po/hu.po
index e5b7e0a..938a8fd 100644
--- a/po/hu.po
+++ b/po/hu.po
@@ -8,7 +8,7 @@
msgstr ""
"Project-Id-Version: gst-plugins-bad 1.6.0\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-07-06 11:51+0300\n"
+"POT-Creation-Date: 2016-09-01 11:24+0300\n"
"PO-Revision-Date: 2015-11-20 23:46+0100\n"
"Last-Translator: Balázs Úr <urbalazs@gmail.com>\n"
"Language-Team: Hungarian <translation-team-hu@lists.sourceforge.net>\n"
@@ -69,9 +69,6 @@
msgid "Could not start sndio"
msgstr "Nem sikerült az sndio indítása"
-msgid "Internal data flow error."
-msgstr "Belső adatfolyamhiba."
-
msgid "Generated file has a larger preroll time than its streams duration"
msgstr ""
"Az előállított fájlnak nagyobb előtekerési ideje van, mint a folyamának "
@@ -95,12 +92,12 @@
msgid "Failed to get fragment URL."
msgstr "Nem sikerült lekérni a töredék URL-t."
-msgid "Internal data stream error."
-msgstr "Belső adatfolyamhiba."
-
msgid "Couldn't download fragments"
msgstr "Nem sikerült letölteni a töredékeket"
+msgid "Internal data stream error."
+msgstr "Belső adatfolyamhiba."
+
msgid "No file name specified for writing."
msgstr "Nincs megadva fájlnév az íráshoz."
@@ -160,6 +157,9 @@
msgid "DVB channel configuration file doesn't contain any channels"
msgstr "A DVB-csatorna beállítófájl nem tartalmaz egyetlen csatornát sem"
+#~ msgid "Internal data flow error."
+#~ msgstr "Belső adatfolyamhiba."
+
#~ msgid "default GStreamer sound events audiosink"
#~ msgstr "alapértelmezett GStreamer hangesemények audiosink"
diff --git a/po/id.gmo b/po/id.gmo
index 35dcac0..9f7eab4 100644
--- a/po/id.gmo
+++ b/po/id.gmo
Binary files differ
diff --git a/po/id.po b/po/id.po
index c05e78a..8c3ea4e 100644
--- a/po/id.po
+++ b/po/id.po
@@ -7,7 +7,7 @@
msgstr ""
"Project-Id-Version: gst-plugins-bad 1.3.2\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-07-06 11:51+0300\n"
+"POT-Creation-Date: 2016-09-01 11:24+0300\n"
"PO-Revision-Date: 2014-05-31 22:16+0700\n"
"Last-Translator: Andhika Padmawan <andhika.padmawan@gmail.com>\n"
"Language-Team: Indonesian <translation-team-id@lists.sourceforge.net>\n"
@@ -67,9 +67,6 @@
msgid "Could not start sndio"
msgstr "Tak dapat memulai sndio"
-msgid "Internal data flow error."
-msgstr "Galat arus data internal."
-
msgid "Generated file has a larger preroll time than its streams duration"
msgstr ""
"Berkas yang dihasilkan memiliki waktu preroll lebih besar daripada durasi "
@@ -91,12 +88,12 @@
msgid "Failed to get fragment URL."
msgstr "Gagal mendapat URL fragmen."
-msgid "Internal data stream error."
-msgstr "Galat arus data internal."
-
msgid "Couldn't download fragments"
msgstr "Tak bisa mengunduh fragmen."
+msgid "Internal data stream error."
+msgstr "Galat arus data internal."
+
msgid "No file name specified for writing."
msgstr "Tak ada nama berkas yang ditentukan untuk ditulis."
@@ -157,6 +154,9 @@
msgid "DVB channel configuration file doesn't contain any channels"
msgstr "Berkas konfigurasi kanal DVB tak memuat kanal apapun"
+#~ msgid "Internal data flow error."
+#~ msgstr "Galat arus data internal."
+
#~ msgid "Couldn't get the Manifest's URI"
#~ msgstr "Tak bisa memperoleh URI Manifes"
diff --git a/po/it.gmo b/po/it.gmo
index 45fd955..d5d5c31 100644
--- a/po/it.gmo
+++ b/po/it.gmo
Binary files differ
diff --git a/po/it.po b/po/it.po
index 471c079..12e711b 100644
--- a/po/it.po
+++ b/po/it.po
@@ -7,7 +7,7 @@
msgstr ""
"Project-Id-Version: gst-plugins-bad 0.10.13.2\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-07-06 11:51+0300\n"
+"POT-Creation-Date: 2016-09-01 11:24+0300\n"
"PO-Revision-Date: 2009-08-14 00:12+0200\n"
"Last-Translator: Luca Ferretti <elle.uca@infinito.it>\n"
"Language-Team: Italian <tp@lists.linux.it>\n"
@@ -68,9 +68,6 @@
msgid "Could not start sndio"
msgstr "Impossibile leggere le informazioni del titolo per il DVD."
-msgid "Internal data flow error."
-msgstr "Errore interno nel flusso di dati."
-
msgid "Generated file has a larger preroll time than its streams duration"
msgstr ""
@@ -90,12 +87,12 @@
msgid "Failed to get fragment URL."
msgstr ""
-msgid "Internal data stream error."
-msgstr "Errore interno nello stream di dati."
-
msgid "Couldn't download fragments"
msgstr ""
+msgid "Internal data stream error."
+msgstr "Errore interno nello stream di dati."
+
msgid "No file name specified for writing."
msgstr "Nessun nome di file specificato per la scrittura."
@@ -153,6 +150,9 @@
msgid "DVB channel configuration file doesn't contain any channels"
msgstr ""
+#~ msgid "Internal data flow error."
+#~ msgstr "Errore interno nel flusso di dati."
+
#~ msgid "Could not write to file \"%s\"."
#~ msgstr "Impossibile scrivere sul file «%s»."
diff --git a/po/ja.gmo b/po/ja.gmo
index 7839bf2..858830d 100644
--- a/po/ja.gmo
+++ b/po/ja.gmo
Binary files differ
diff --git a/po/ja.po b/po/ja.po
index c8b304a..dd4eb9a 100644
--- a/po/ja.po
+++ b/po/ja.po
@@ -6,7 +6,7 @@
msgstr ""
"Project-Id-Version: gst-plugins-bad 0.10.21.2\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-07-06 11:51+0300\n"
+"POT-Creation-Date: 2016-09-01 11:24+0300\n"
"PO-Revision-Date: 2011-04-26 19:38+0900\n"
"Last-Translator: Makoto Kato <makoto.kt@gmail.com>\n"
"Language-Team: Japanese <translation-team-ja@lists.sourceforge.net>\n"
@@ -70,9 +70,6 @@
msgid "Could not start sndio"
msgstr "DVDを読み込むことができませんでした。"
-msgid "Internal data flow error."
-msgstr "内部データフローエラー。"
-
msgid "Generated file has a larger preroll time than its streams duration"
msgstr ""
@@ -92,12 +89,12 @@
msgid "Failed to get fragment URL."
msgstr ""
-msgid "Internal data stream error."
-msgstr "内部データストリームエラー。"
-
msgid "Couldn't download fragments"
msgstr ""
+msgid "Internal data stream error."
+msgstr "内部データストリームエラー。"
+
msgid "No file name specified for writing."
msgstr "書き込み用にファイル名が指定されていません。"
@@ -156,6 +153,9 @@
msgid "DVB channel configuration file doesn't contain any channels"
msgstr ""
+#~ msgid "Internal data flow error."
+#~ msgstr "内部データフローエラー。"
+
#~ msgid "Could not write to file \"%s\"."
#~ msgstr "ファイル \"%s\" へ書き込むことができませんでした。"
diff --git a/po/ky.gmo b/po/ky.gmo
index 3c91f43..0bdc59b 100644
--- a/po/ky.gmo
+++ b/po/ky.gmo
Binary files differ
diff --git a/po/ky.po b/po/ky.po
index 9b05a5f..d7a1074 100644
--- a/po/ky.po
+++ b/po/ky.po
@@ -6,7 +6,7 @@
msgstr ""
"Project-Id-Version: gst-plugins-bad 0.10.5\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-07-06 11:51+0300\n"
+"POT-Creation-Date: 2016-09-01 11:24+0300\n"
"PO-Revision-Date: 2007-11-13 17:16+0600\n"
"Last-Translator: Ilyas Bakirov <just_ilyas@yahoo.com>\n"
"Language-Team: Kirghiz <i18n-team-ky-kyrgyz@lists.sourceforge.net>\n"
@@ -67,9 +67,6 @@
msgid "Could not start sndio"
msgstr ""
-msgid "Internal data flow error."
-msgstr ""
-
msgid "Generated file has a larger preroll time than its streams duration"
msgstr ""
@@ -89,10 +86,10 @@
msgid "Failed to get fragment URL."
msgstr ""
-msgid "Internal data stream error."
+msgid "Couldn't download fragments"
msgstr ""
-msgid "Couldn't download fragments"
+msgid "Internal data stream error."
msgstr ""
msgid "No file name specified for writing."
diff --git a/po/lt.gmo b/po/lt.gmo
index ad45b89..1b113e1 100644
--- a/po/lt.gmo
+++ b/po/lt.gmo
Binary files differ
diff --git a/po/lt.po b/po/lt.po
index f50f38b..1f6c885 100644
--- a/po/lt.po
+++ b/po/lt.po
@@ -6,7 +6,7 @@
msgstr ""
"Project-Id-Version: gst-plugins-bad-0.10.6.3\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-07-06 11:51+0300\n"
+"POT-Creation-Date: 2016-09-01 11:24+0300\n"
"PO-Revision-Date: 2008-05-14 02:13+0300\n"
"Last-Translator: Gintautas Miliauskas <gintas@akl.lt>\n"
"Language-Team: Lithuanian <komp_lt@konferencijos.lt>\n"
@@ -71,10 +71,6 @@
msgid "Could not start sndio"
msgstr "Nepavyko rašyti į failą „%s“."
-#, fuzzy
-msgid "Internal data flow error."
-msgstr "Vidinė duomenų srauto klaida."
-
msgid "Generated file has a larger preroll time than its streams duration"
msgstr ""
@@ -94,12 +90,12 @@
msgid "Failed to get fragment URL."
msgstr ""
-msgid "Internal data stream error."
-msgstr "Vidinė duomenų srauto klaida."
-
msgid "Couldn't download fragments"
msgstr ""
+msgid "Internal data stream error."
+msgstr "Vidinė duomenų srauto klaida."
+
msgid "No file name specified for writing."
msgstr "Nenurodytas failo rašymui pavadinimas."
@@ -157,6 +153,10 @@
msgid "DVB channel configuration file doesn't contain any channels"
msgstr ""
+#, fuzzy
+#~ msgid "Internal data flow error."
+#~ msgstr "Vidinė duomenų srauto klaida."
+
#~ msgid "Could not write to file \"%s\"."
#~ msgstr "Nepavyko rašyti į failą „%s“."
diff --git a/po/lv.gmo b/po/lv.gmo
index 308d904..f1580fa 100644
--- a/po/lv.gmo
+++ b/po/lv.gmo
Binary files differ
diff --git a/po/lv.po b/po/lv.po
index 287242f..e933294 100644
--- a/po/lv.po
+++ b/po/lv.po
@@ -8,7 +8,7 @@
msgstr ""
"Project-Id-Version: gst-plugins-bad 1.2.1\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-07-06 11:51+0300\n"
+"POT-Creation-Date: 2016-09-01 11:24+0300\n"
"PO-Revision-Date: 2014-04-20 15:52+0300\n"
"Last-Translator: Rihards Prieditis <rprieditis@gmail.com>\n"
"Language-Team: Latvian <translation-team-lv@lists.sourceforge.net>\n"
@@ -73,9 +73,6 @@
msgid "Could not start sndio"
msgstr "Nevarēja palaist sndio"
-msgid "Internal data flow error."
-msgstr "Iekšēja datu plūsmas kļūda."
-
msgid "Generated file has a larger preroll time than its streams duration"
msgstr ""
"Izveidotajai datnei ir lielāks pirms-atskaņojuma laiks, kā straumes garums"
@@ -97,12 +94,12 @@
msgid "Failed to get fragment URL."
msgstr "Neizdevās saņemt fragmenta URL."
-msgid "Internal data stream error."
-msgstr "Iekšējās datu plūsmas kļūda."
-
msgid "Couldn't download fragments"
msgstr "Nevarēja lejupielādēt fragmentus"
+msgid "Internal data stream error."
+msgstr "Iekšējās datu plūsmas kļūda."
+
msgid "No file name specified for writing."
msgstr "Ierakstīšanai nav norādīts neviens datnes nosaukums."
@@ -162,6 +159,9 @@
msgid "DVB channel configuration file doesn't contain any channels"
msgstr "DVB kanāla konfigurācijas datne nesatur nevienu kanālu"
+#~ msgid "Internal data flow error."
+#~ msgstr "Iekšēja datu plūsmas kļūda."
+
#~ msgid "Couldn't get the Manifest's URI"
#~ msgstr "Nevarēja saņemt manifesta URI"
diff --git a/po/mt.gmo b/po/mt.gmo
index be30e96..8aefa50 100644
--- a/po/mt.gmo
+++ b/po/mt.gmo
Binary files differ
diff --git a/po/mt.po b/po/mt.po
index e432974..f002ee6 100644
--- a/po/mt.po
+++ b/po/mt.po
@@ -5,7 +5,7 @@
msgstr ""
"Project-Id-Version: gst-plugins-bad-0.10.8.3\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-07-06 11:51+0300\n"
+"POT-Creation-Date: 2016-09-01 11:24+0300\n"
"PO-Revision-Date: 2008-10-26 20:27+0100\n"
"Last-Translator: Michel Bugeja <michelbugeja@rabatmalta.com>\n"
"Language-Team: Maltese <translation-team-mt@lists.sourceforge.net>\n"
@@ -70,9 +70,6 @@
msgid "Could not start sndio"
msgstr "Ma stajtx naqra informazzjoni fuq it-titlu tad-DVD."
-msgid "Internal data flow error."
-msgstr "Internal data flow error."
-
msgid "Generated file has a larger preroll time than its streams duration"
msgstr ""
@@ -92,12 +89,12 @@
msgid "Failed to get fragment URL."
msgstr ""
-msgid "Internal data stream error."
-msgstr "Internal data stream error."
-
msgid "Couldn't download fragments"
msgstr ""
+msgid "Internal data stream error."
+msgstr "Internal data stream error."
+
msgid "No file name specified for writing."
msgstr "L-ebda isem speċifikat biex nikteb."
@@ -156,6 +153,9 @@
msgid "DVB channel configuration file doesn't contain any channels"
msgstr ""
+#~ msgid "Internal data flow error."
+#~ msgstr "Internal data flow error."
+
#~ msgid "Could not write to file \"%s\"."
#~ msgstr "Ma nistax nikteb fil-fajl \"%s\". "
diff --git a/po/nb.gmo b/po/nb.gmo
index a08df95..ebd5fd2 100644
--- a/po/nb.gmo
+++ b/po/nb.gmo
Binary files differ
diff --git a/po/nb.po b/po/nb.po
index 2cccaf1..e508329 100644
--- a/po/nb.po
+++ b/po/nb.po
@@ -8,7 +8,7 @@
msgstr ""
"Project-Id-Version: gst-plugins-bad 1.6.0\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-07-06 11:51+0300\n"
+"POT-Creation-Date: 2016-09-01 11:24+0300\n"
"PO-Revision-Date: 2015-12-22 21:08+0100\n"
"Last-Translator: Johnny A. Solbu <johnny@solbu.net>\n"
"Language-Team: Norwegian Bokmaal <i18n-nb@lister.ping.uio.no>\n"
@@ -68,9 +68,6 @@
msgid "Could not start sndio"
msgstr "Kunne ikke starte sndio"
-msgid "Internal data flow error."
-msgstr "Intern feil i datastrøm."
-
msgid "Generated file has a larger preroll time than its streams duration"
msgstr "Genererte filen har en større preroll tid enn strømmens varighet"
@@ -91,12 +88,12 @@
msgid "Failed to get fragment URL."
msgstr "Klarte ikke å hente fragment-nettadresse."
-msgid "Internal data stream error."
-msgstr "Intern feil i datastrøm."
-
msgid "Couldn't download fragments"
msgstr "Kunne ikke laste ned fragmenter"
+msgid "Internal data stream error."
+msgstr "Intern feil i datastrøm."
+
msgid "No file name specified for writing."
msgstr "Ingen filnavn oppgitt for skriving."
@@ -154,6 +151,9 @@
msgid "DVB channel configuration file doesn't contain any channels"
msgstr "DVB-kanalkonfigurasjonsfilen inneholder ingen kanaler"
+#~ msgid "Internal data flow error."
+#~ msgstr "Intern feil i datastrøm."
+
#~ msgid "default GStreamer sound events audiosink"
#~ msgstr "standard GStreamer lydhendelser-audiosink"
diff --git a/po/nl.gmo b/po/nl.gmo
index 4b9c60f..be0c758 100644
--- a/po/nl.gmo
+++ b/po/nl.gmo
Binary files differ
diff --git a/po/nl.po b/po/nl.po
index a1a1ba8..91e1b2e 100644
--- a/po/nl.po
+++ b/po/nl.po
@@ -7,7 +7,7 @@
msgstr ""
"Project-Id-Version: gst-plugins-bad 1.7.2\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-07-06 11:51+0300\n"
+"POT-Creation-Date: 2016-09-01 11:24+0300\n"
"PO-Revision-Date: 2016-02-20 12:35+0100\n"
"Last-Translator: Freek de Kruijf <f.de.kruijf@gmail.com>\n"
"Language-Team: Dutch <vertaling@vrijschrift.org>\n"
@@ -68,9 +68,6 @@
msgid "Could not start sndio"
msgstr "Kon sndio niet starten"
-msgid "Internal data flow error."
-msgstr "Interne fout met gegevensdoorvoer."
-
msgid "Generated file has a larger preroll time than its streams duration"
msgstr ""
"Gegenereerd bestand heeft een grotere voorlooptijd dan de duur van zijn "
@@ -94,12 +91,12 @@
msgid "Failed to get fragment URL."
msgstr "Verkrijgen van de URL van het fragment is mislukt."
-msgid "Internal data stream error."
-msgstr "Interne fout in gegevensstroom."
-
msgid "Couldn't download fragments"
msgstr "Kan fragmenten niet downloaden"
+msgid "Internal data stream error."
+msgstr "Interne fout in gegevensstroom."
+
msgid "No file name specified for writing."
msgstr "Geen bestandsnaam gespecificeerd voor de uitvoer."
@@ -159,6 +156,9 @@
msgid "DVB channel configuration file doesn't contain any channels"
msgstr "Het instellingenbestand van het DVB-kanaal bevat geen kanalen"
+#~ msgid "Internal data flow error."
+#~ msgstr "Interne fout met gegevensdoorvoer."
+
#~ msgid "default GStreamer sound events audiosink"
#~ msgstr "standaard GStreamer audiosink voor geluidsgebeurtenissen"
diff --git a/po/or.gmo b/po/or.gmo
index 7411476..752eaca 100644
--- a/po/or.gmo
+++ b/po/or.gmo
Binary files differ
diff --git a/po/or.po b/po/or.po
index 7cd5f7c..a4eaf9b 100644
--- a/po/or.po
+++ b/po/or.po
@@ -8,7 +8,7 @@
msgstr ""
"Project-Id-Version: gst-plugins-0.8.3\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-07-06 11:51+0300\n"
+"POT-Creation-Date: 2016-09-01 11:24+0300\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"
@@ -70,9 +70,6 @@
msgid "Could not start sndio"
msgstr "\"%s\" ଫାଇଲ ଲେଖିହେଲା ନାହିଁ."
-msgid "Internal data flow error."
-msgstr ""
-
msgid "Generated file has a larger preroll time than its streams duration"
msgstr ""
@@ -92,10 +89,10 @@
msgid "Failed to get fragment URL."
msgstr ""
-msgid "Internal data stream error."
+msgid "Couldn't download fragments"
msgstr ""
-msgid "Couldn't download fragments"
+msgid "Internal data stream error."
msgstr ""
#, fuzzy
diff --git a/po/pl.gmo b/po/pl.gmo
index a39855f..dfc47bb 100644
--- a/po/pl.gmo
+++ b/po/pl.gmo
Binary files differ
diff --git a/po/pl.po b/po/pl.po
index 398bdfc..2888657 100644
--- a/po/pl.po
+++ b/po/pl.po
@@ -6,7 +6,7 @@
msgstr ""
"Project-Id-Version: gst-plugins-bad 1.6.0\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-07-06 11:51+0300\n"
+"POT-Creation-Date: 2016-09-01 11:24+0300\n"
"PO-Revision-Date: 2015-10-15 20:50+0200\n"
"Last-Translator: Jakub Bogusz <qboosh@pld-linux.org>\n"
"Language-Team: Polish <translation-team-pl@lists.sourceforge.net>\n"
@@ -65,9 +65,6 @@
msgid "Could not start sndio"
msgstr "Nie udało się uruchomić sndio"
-msgid "Internal data flow error."
-msgstr "Błąd wewnętrzny przepływu danych."
-
msgid "Generated file has a larger preroll time than its streams duration"
msgstr ""
"Wygenerowany plik ma dłuższy czas rozbiegówki niż czas trwania strumieni"
@@ -89,12 +86,12 @@
msgid "Failed to get fragment URL."
msgstr "Nie udało się uzyskać URL-a fragmentu."
-msgid "Internal data stream error."
-msgstr "Błąd wewnętrzny strumienia danych."
-
msgid "Couldn't download fragments"
msgstr "Nie udało się pobrać fragmentów"
+msgid "Internal data stream error."
+msgstr "Błąd wewnętrzny strumienia danych."
+
msgid "No file name specified for writing."
msgstr "Nie określono nazwy pliku do zapisu."
@@ -155,6 +152,9 @@
msgid "DVB channel configuration file doesn't contain any channels"
msgstr "Plik konfiguracyjny kanałów DVB nie zawiera żadnych kanałów"
+#~ msgid "Internal data flow error."
+#~ msgstr "Błąd wewnętrzny przepływu danych."
+
#~ msgid "default GStreamer sound events audiosink"
#~ msgstr "domyślny element GStreamera pochłaniający zdarzenia dźwiękowe"
diff --git a/po/pt_BR.gmo b/po/pt_BR.gmo
index 3ee0c5d..dfa910d 100644
--- a/po/pt_BR.gmo
+++ b/po/pt_BR.gmo
Binary files differ
diff --git a/po/pt_BR.po b/po/pt_BR.po
index 7de69cc..6cb4621 100644
--- a/po/pt_BR.po
+++ b/po/pt_BR.po
@@ -8,7 +8,7 @@
msgstr ""
"Project-Id-Version: gst-plugins-bad-1.7.2\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-07-06 11:51+0300\n"
+"POT-Creation-Date: 2016-09-01 11:24+0300\n"
"PO-Revision-Date: 2016-05-06 16:02-0300\n"
"Last-Translator: Fabrício Godoy <skarllot@gmail.com>\n"
"Language-Team: Brazilian Portuguese <ldpbr-translation@lists.sourceforge."
@@ -69,9 +69,6 @@
msgid "Could not start sndio"
msgstr "Não foi possível iniciar o sndio"
-msgid "Internal data flow error."
-msgstr "Erro interno de fluxo de dados."
-
msgid "Generated file has a larger preroll time than its streams duration"
msgstr ""
"O arquivo gerado tem um tempo de preparação maior que a sua duração de fluxo"
@@ -94,12 +91,12 @@
msgid "Failed to get fragment URL."
msgstr "Falha ao obter um fragmento de URL."
-msgid "Internal data stream error."
-msgstr "Erro interno de fluxo de dados."
-
msgid "Couldn't download fragments"
msgstr "Não foi possível baixar os fragmentos"
+msgid "Internal data stream error."
+msgstr "Erro interno de fluxo de dados."
+
msgid "No file name specified for writing."
msgstr "Nenhum nome de arquivo especificado para gravação."
@@ -162,6 +159,9 @@
msgid "DVB channel configuration file doesn't contain any channels"
msgstr "O arquivo de configuração de canal DVB não contém nenhum canal"
+#~ msgid "Internal data flow error."
+#~ msgstr "Erro interno de fluxo de dados."
+
#~ msgid "default GStreamer sound events audiosink"
#~ msgstr "audiosink do GStreamer pré-definido para eventos de som"
diff --git a/po/ro.gmo b/po/ro.gmo
index 9e47748..9e988e6 100644
--- a/po/ro.gmo
+++ b/po/ro.gmo
Binary files differ
diff --git a/po/ro.po b/po/ro.po
index e96f5ad..970fd2a 100644
--- a/po/ro.po
+++ b/po/ro.po
@@ -5,7 +5,7 @@
msgstr ""
"Project-Id-Version: gst-plugins-bad 0.10.18.2\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-07-06 11:51+0300\n"
+"POT-Creation-Date: 2016-09-01 11:24+0300\n"
"PO-Revision-Date: 2010-08-16 03:11+0300\n"
"Last-Translator: Lucian Adrian Grijincu <lucian.grijincu@gmail.com>\n"
"Language-Team: Romanian <translation-team-ro@lists.sourceforge.net>\n"
@@ -69,9 +69,6 @@
msgid "Could not start sndio"
msgstr "Nu s-au putut citi informațiile despre titlu pentru DVD."
-msgid "Internal data flow error."
-msgstr "Eroare internă de flux al datelor."
-
msgid "Generated file has a larger preroll time than its streams duration"
msgstr ""
@@ -91,12 +88,12 @@
msgid "Failed to get fragment URL."
msgstr ""
-msgid "Internal data stream error."
-msgstr "Eroare internă a fluxului de date."
-
msgid "Couldn't download fragments"
msgstr ""
+msgid "Internal data stream error."
+msgstr "Eroare internă a fluxului de date."
+
msgid "No file name specified for writing."
msgstr "Niciun nume de fișier specificat pentru scriere."
@@ -154,5 +151,8 @@
msgid "DVB channel configuration file doesn't contain any channels"
msgstr ""
+#~ msgid "Internal data flow error."
+#~ msgstr "Eroare internă de flux al datelor."
+
#~ msgid "Could not write to file \"%s\"."
#~ msgstr "Nu s-a putut scrie în fișierul „%s”."
diff --git a/po/ru.gmo b/po/ru.gmo
index 967c791..0586158 100644
--- a/po/ru.gmo
+++ b/po/ru.gmo
Binary files differ
diff --git a/po/ru.po b/po/ru.po
index 35eb3aa..c4a18a4 100644
--- a/po/ru.po
+++ b/po/ru.po
@@ -8,7 +8,7 @@
msgstr ""
"Project-Id-Version: gst-plugins-bad 1.6.0\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-07-06 11:51+0300\n"
+"POT-Creation-Date: 2016-09-01 11:24+0300\n"
"PO-Revision-Date: 2015-10-18 13:40+0300\n"
"Last-Translator: Yuri Kozlov <yuray@komyakino.ru>\n"
"Language-Team: Russian <gnu@d07.ru>\n"
@@ -70,9 +70,6 @@
msgid "Could not start sndio"
msgstr "Не удалось запустить sndio"
-msgid "Internal data flow error."
-msgstr "Внутренняя ошибка передачи данных."
-
msgid "Generated file has a larger preroll time than its streams duration"
msgstr ""
"В сгенерированном файле время предпуска (preroll) больше чем длительность "
@@ -94,12 +91,12 @@
msgid "Failed to get fragment URL."
msgstr "Ошибка при получении URL фрагмента."
-msgid "Internal data stream error."
-msgstr "Внутренняя ошибка потока данных."
-
msgid "Couldn't download fragments"
msgstr "Не удалось скачать фрагменты"
+msgid "Internal data stream error."
+msgstr "Внутренняя ошибка потока данных."
+
msgid "No file name specified for writing."
msgstr "Не указано имя файла для записи."
@@ -159,6 +156,9 @@
msgid "DVB channel configuration file doesn't contain any channels"
msgstr "Файл настройки каналов DVB не содержит каналов"
+#~ msgid "Internal data flow error."
+#~ msgstr "Внутренняя ошибка передачи данных."
+
#~ msgid "default GStreamer sound events audiosink"
#~ msgstr "GStreamer audiosink по умолчанию для звуковых событий"
diff --git a/po/sk.gmo b/po/sk.gmo
index c004936..c7f64ff 100644
--- a/po/sk.gmo
+++ b/po/sk.gmo
Binary files differ
diff --git a/po/sk.po b/po/sk.po
index 376710d..fea6121 100644
--- a/po/sk.po
+++ b/po/sk.po
@@ -8,7 +8,7 @@
msgstr ""
"Project-Id-Version: gst-plugins-bad 1.7.2\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-07-06 11:51+0300\n"
+"POT-Creation-Date: 2016-09-01 11:24+0300\n"
"PO-Revision-Date: 2016-05-20 12:33+0100\n"
"Last-Translator: Peter Tuhársky <tuharsky@misbb.sk>\n"
"Language-Team: Slovak <sk-i18n@lists.linux.sk>\n"
@@ -70,9 +70,6 @@
msgid "Could not start sndio"
msgstr "Nepodarilo sa spustiť sndio"
-msgid "Internal data flow error."
-msgstr "Vnútorná chyba prúdu údajov."
-
msgid "Generated file has a larger preroll time than its streams duration"
msgstr ""
"Vytvorený súbor má väčší prerolovací čas než je trvanie jeho prúdu údajov"
@@ -95,12 +92,12 @@
msgid "Failed to get fragment URL."
msgstr "Nepodarilo sa získať URL fragmentu."
-msgid "Internal data stream error."
-msgstr "Vnútorná chyba prúdu údajov."
-
msgid "Couldn't download fragments"
msgstr "Nepodarilo sa získať fragmenty"
+msgid "Internal data stream error."
+msgstr "Vnútorná chyba prúdu údajov."
+
msgid "No file name specified for writing."
msgstr "Nebolo zadané žiadne meno súboru pre zápis."
@@ -160,6 +157,9 @@
msgid "DVB channel configuration file doesn't contain any channels"
msgstr "Konfiguračný súbor DVB kanála neobsahuje žiadne kanály"
+#~ msgid "Internal data flow error."
+#~ msgstr "Vnútorná chyba prúdu údajov."
+
#~ msgid "Couldn't get the Manifest's URI"
#~ msgstr "Nepodarilo sa získať URI Manifestu"
diff --git a/po/sl.gmo b/po/sl.gmo
index 5d98ad1..19adc55 100644
--- a/po/sl.gmo
+++ b/po/sl.gmo
Binary files differ
diff --git a/po/sl.po b/po/sl.po
index f448710..b37d1cc 100644
--- a/po/sl.po
+++ b/po/sl.po
@@ -8,7 +8,7 @@
msgstr ""
"Project-Id-Version: gst-plugins-bad 0.10.21.2\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-07-06 11:51+0300\n"
+"POT-Creation-Date: 2016-09-01 11:24+0300\n"
"PO-Revision-Date: 2011-04-26 15:21+0100\n"
"Last-Translator: Klemen Košir <klemen.kosir@gmx.com>\n"
"Language-Team: Slovenian <translation-team-sl@lists.sourceforge.net>\n"
@@ -75,9 +75,6 @@
msgid "Could not start sndio"
msgstr "DVD-ja ni mogoče prebrati."
-msgid "Internal data flow error."
-msgstr "Notranja napaka pretočnosti podatkov."
-
msgid "Generated file has a larger preroll time than its streams duration"
msgstr ""
@@ -97,12 +94,12 @@
msgid "Failed to get fragment URL."
msgstr ""
-msgid "Internal data stream error."
-msgstr "Notranja napaka pretoka podatkov."
-
msgid "Couldn't download fragments"
msgstr ""
+msgid "Internal data stream error."
+msgstr "Notranja napaka pretoka podatkov."
+
msgid "No file name specified for writing."
msgstr "Ni navedenega imena datoteke za pisanje."
@@ -160,6 +157,9 @@
msgid "DVB channel configuration file doesn't contain any channels"
msgstr ""
+#~ msgid "Internal data flow error."
+#~ msgstr "Notranja napaka pretočnosti podatkov."
+
#~ msgid "Could not write to file \"%s\"."
#~ msgstr "V datoteko \"%s\" ni mogoče pisati."
diff --git a/po/sq.gmo b/po/sq.gmo
index 3aa0c60..78d5a40 100644
--- a/po/sq.gmo
+++ b/po/sq.gmo
Binary files differ
diff --git a/po/sq.po b/po/sq.po
index ece9068..cd3c734 100644
--- a/po/sq.po
+++ b/po/sq.po
@@ -6,7 +6,7 @@
msgstr ""
"Project-Id-Version: gst-plugins-bad 0.10.7.2\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-07-06 11:51+0300\n"
+"POT-Creation-Date: 2016-09-01 11:24+0300\n"
"PO-Revision-Date: 2008-08-15 16:07+0200\n"
"Last-Translator: Laurent Dhima <laurenti@alblinux.net>\n"
"Language-Team: Albanian <translation-team-sq@lists.sourceforge.net>\n"
@@ -68,10 +68,6 @@
msgid "Could not start sndio"
msgstr "I pamundur shkrimi tek file \"%s\"."
-#, fuzzy
-msgid "Internal data flow error."
-msgstr "Gabim i brendshëm tek stream i të dhënave."
-
msgid "Generated file has a larger preroll time than its streams duration"
msgstr ""
@@ -91,12 +87,12 @@
msgid "Failed to get fragment URL."
msgstr ""
-msgid "Internal data stream error."
-msgstr "Gabim i brendshëm tek stream i të dhënave."
-
msgid "Couldn't download fragments"
msgstr ""
+msgid "Internal data stream error."
+msgstr "Gabim i brendshëm tek stream i të dhënave."
+
msgid "No file name specified for writing."
msgstr "Asnjë emër file specifikuar për shkrim."
@@ -154,6 +150,10 @@
msgid "DVB channel configuration file doesn't contain any channels"
msgstr ""
+#, fuzzy
+#~ msgid "Internal data flow error."
+#~ msgstr "Gabim i brendshëm tek stream i të dhënave."
+
#~ msgid "Could not write to file \"%s\"."
#~ msgstr "I pamundur shkrimi tek file \"%s\"."
diff --git a/po/sr.gmo b/po/sr.gmo
index 609d562..871b3af 100644
--- a/po/sr.gmo
+++ b/po/sr.gmo
Binary files differ
diff --git a/po/sr.po b/po/sr.po
index 7c6f7fa..dc12f85 100644
--- a/po/sr.po
+++ b/po/sr.po
@@ -7,7 +7,7 @@
msgstr ""
"Project-Id-Version: gst-plugins-bad-1.6.0\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-07-06 11:51+0300\n"
+"POT-Creation-Date: 2016-09-01 11:24+0300\n"
"PO-Revision-Date: 2015-12-24 11:34+0200\n"
"Last-Translator: Мирослав Николић <miroslavnikolic@rocketmail.com>\n"
"Language-Team: Serbian <(nothing)>\n"
@@ -68,9 +68,6 @@
msgid "Could not start sndio"
msgstr "Не могу да покренем улаз/излаз звука"
-msgid "Internal data flow error."
-msgstr "Унутрашња грешка протока података."
-
msgid "Generated file has a larger preroll time than its streams duration"
msgstr "Створена датотека има дуже време припреме од трајања њеног тока"
@@ -91,12 +88,12 @@
msgid "Failed to get fragment URL."
msgstr "Нисам успео да добијем адресу одломка."
-msgid "Internal data stream error."
-msgstr "Унутрашња грешка тока података."
-
msgid "Couldn't download fragments"
msgstr "Не могу да преузмем одломке"
+msgid "Internal data stream error."
+msgstr "Унутрашња грешка тока података."
+
msgid "No file name specified for writing."
msgstr "Није наведен назив датотеке за упис."
@@ -156,6 +153,9 @@
msgid "DVB channel configuration file doesn't contain any channels"
msgstr "Датотека подешавања ДВБ канала не садржи ниједан канал"
+#~ msgid "Internal data flow error."
+#~ msgstr "Унутрашња грешка протока података."
+
#~ msgid "default GStreamer sound events audiosink"
#~ msgstr "основни аудио усклађивач звучних догађаја Гстримера"
diff --git a/po/sv.gmo b/po/sv.gmo
index cfd1a2d..6a39cde 100644
--- a/po/sv.gmo
+++ b/po/sv.gmo
Binary files differ
diff --git a/po/sv.po b/po/sv.po
index d255206..3569469 100644
--- a/po/sv.po
+++ b/po/sv.po
@@ -8,7 +8,7 @@
msgstr ""
"Project-Id-Version: gst-plugins-bad 1.6.0\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-07-06 11:51+0300\n"
+"POT-Creation-Date: 2016-09-01 11:24+0300\n"
"PO-Revision-Date: 2015-11-01 00:48+0100\n"
"Last-Translator: Sebastian Rasmussen <sebras@gmail.com>\n"
"Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n"
@@ -68,9 +68,6 @@
msgid "Could not start sndio"
msgstr "Kunde ej starta sndio"
-msgid "Internal data flow error."
-msgstr "Internt fel i dataflöde."
-
msgid "Generated file has a larger preroll time than its streams duration"
msgstr "Den genererade filen har en längre förrullningstid än dess strömlängd"
@@ -91,12 +88,12 @@
msgid "Failed to get fragment URL."
msgstr "Misslyckades att hämta fragment-URL"
-msgid "Internal data stream error."
-msgstr "Internt fel i dataström."
-
msgid "Couldn't download fragments"
msgstr "Kunde ej ladda ner fragment"
+msgid "Internal data stream error."
+msgstr "Internt fel i dataström."
+
msgid "No file name specified for writing."
msgstr "Inget filnamn angavs för skrivning."
@@ -260,6 +257,9 @@
#~ msgid "Describes the selected visualization element."
#~ msgstr "Beskriver det valda visualiseringselementet."
+#~ msgid "Internal data flow error."
+#~ msgstr "Internt fel i dataflöde."
+
#~ msgid "Couldn't get the Manifest's URI"
#~ msgstr "Kunde ej hämta manifestets URI"
diff --git a/po/tr.gmo b/po/tr.gmo
index d98a6a2..351cef8 100644
--- a/po/tr.gmo
+++ b/po/tr.gmo
Binary files differ
diff --git a/po/tr.po b/po/tr.po
index ebd6553..c08c42f 100644
--- a/po/tr.po
+++ b/po/tr.po
@@ -7,7 +7,7 @@
msgstr ""
"Project-Id-Version: gst-plugins-bad-1.4.1\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-07-06 11:51+0300\n"
+"POT-Creation-Date: 2016-09-01 11:24+0300\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"
@@ -68,9 +68,6 @@
msgid "Could not start sndio"
msgstr "Sndio başlatılamadı"
-msgid "Internal data flow error."
-msgstr "İç veri akış hatası."
-
msgid "Generated file has a larger preroll time than its streams duration"
msgstr ""
"Oluşturlmuş dosya, akışlarının süresinden daha büyük preroll zamanına sahip"
@@ -93,12 +90,12 @@
msgid "Failed to get fragment URL."
msgstr "Parça adresi alınamadı."
-msgid "Internal data stream error."
-msgstr "İç veri akım hatası."
-
msgid "Couldn't download fragments"
msgstr "Parçalar indirilemedi"
+msgid "Internal data stream error."
+msgstr "İç veri akım hatası."
+
msgid "No file name specified for writing."
msgstr "Yazmak için dosya adı belirtilmedi."
@@ -156,6 +153,9 @@
msgid "DVB channel configuration file doesn't contain any channels"
msgstr "DVB kanal yapılandırma dosyası herhangi bir kanal içermiyor"
+#~ msgid "Internal data flow error."
+#~ msgstr "İç veri akış hatası."
+
#~ msgid "Couldn't get the Manifest's URI"
#~ msgstr "Manifest URI alınamadı"
diff --git a/po/uk.gmo b/po/uk.gmo
index 9d8d2f8..0e91a5b 100644
--- a/po/uk.gmo
+++ b/po/uk.gmo
Binary files differ
diff --git a/po/uk.po b/po/uk.po
index cba3fad..93c6b85 100644
--- a/po/uk.po
+++ b/po/uk.po
@@ -8,7 +8,7 @@
msgstr ""
"Project-Id-Version: gst-plugins-bad 1.6.0\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-07-06 11:51+0300\n"
+"POT-Creation-Date: 2016-09-01 11:24+0300\n"
"PO-Revision-Date: 2015-10-15 20:44+0300\n"
"Last-Translator: Yuri Chornoivan <yurchor@ukr.net>\n"
"Language-Team: Ukrainian <translation-team-uk@lists.sourceforge.net>\n"
@@ -70,9 +70,6 @@
msgid "Could not start sndio"
msgstr "Не вдалося задіяти sndio"
-msgid "Internal data flow error."
-msgstr "Помилка внутрішнього перенесення даних."
-
msgid "Generated file has a larger preroll time than its streams duration"
msgstr ""
"Створений файл має більше значення випереджувального просування даних ніж "
@@ -97,12 +94,12 @@
msgid "Failed to get fragment URL."
msgstr "Не вдалося отримати адреси фрагмента."
-msgid "Internal data stream error."
-msgstr "Помилка внутрішнього потоку даних."
-
msgid "Couldn't download fragments"
msgstr "Не вдалося отримати фрагменти"
+msgid "Internal data stream error."
+msgstr "Помилка внутрішнього потоку даних."
+
msgid "No file name specified for writing."
msgstr "Не вказано назви файла для запису."
@@ -164,6 +161,9 @@
msgid "DVB channel configuration file doesn't contain any channels"
msgstr "У файлі налаштувань каналів DVB не міститься даних щодо жодного каналу"
+#~ msgid "Internal data flow error."
+#~ msgstr "Помилка внутрішнього перенесення даних."
+
#~ msgid "default GStreamer sound events audiosink"
#~ msgstr "типовий приймач звукових подій GStreamer"
diff --git a/po/vi.gmo b/po/vi.gmo
index 53af1e1..6e77352 100644
--- a/po/vi.gmo
+++ b/po/vi.gmo
Binary files differ
diff --git a/po/vi.po b/po/vi.po
index cd4fe49..2bbb892 100644
--- a/po/vi.po
+++ b/po/vi.po
@@ -8,7 +8,7 @@
msgstr ""
"Project-Id-Version: gst-plugins-bad 1.6.0\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-07-06 11:51+0300\n"
+"POT-Creation-Date: 2016-09-01 11:24+0300\n"
"PO-Revision-Date: 2015-10-16 08:27+0700\n"
"Last-Translator: Trần Ngọc Quân <vnwildman@gmail.com>\n"
"Language-Team: Vietnamese <translation-team-vi@lists.sourceforge.net>\n"
@@ -70,9 +70,6 @@
msgid "Could not start sndio"
msgstr "Không thể khởi chạy sndio"
-msgid "Internal data flow error."
-msgstr "Lỗi tràn luồng dữ liệu nội bộ."
-
msgid "Generated file has a larger preroll time than its streams duration"
msgstr ""
"Tập tin đã tạo có thời gian cuộn trước lớn hơn thời lượng của dòng dữ liệu"
@@ -94,12 +91,12 @@
msgid "Failed to get fragment URL."
msgstr "Gặp lỗi khi lấy URL phân mảnh."
-msgid "Internal data stream error."
-msgstr "Lỗi luồng dữ liệu nội bộ."
-
msgid "Couldn't download fragments"
msgstr "Không thể tải về các phân mảnh"
+msgid "Internal data stream error."
+msgstr "Lỗi luồng dữ liệu nội bộ."
+
msgid "No file name specified for writing."
msgstr "Chưa chỉ định tên tập tin để ghi vào."
@@ -160,6 +157,9 @@
msgid "DVB channel configuration file doesn't contain any channels"
msgstr "Tập tin cấu hình kênh DVB chẳng chứa kênh nào cả"
+#~ msgid "Internal data flow error."
+#~ msgstr "Lỗi tràn luồng dữ liệu nội bộ."
+
#~ msgid "default GStreamer sound events audiosink"
#~ msgstr "các sự kiện âm thanh GStreamer mặc định cho “audiosink”"
diff --git a/po/zh_CN.gmo b/po/zh_CN.gmo
index 32ac8a5..fe5e55d 100644
--- a/po/zh_CN.gmo
+++ b/po/zh_CN.gmo
Binary files differ
diff --git a/po/zh_CN.po b/po/zh_CN.po
index 265bc13..f861a3a 100644
--- a/po/zh_CN.po
+++ b/po/zh_CN.po
@@ -9,7 +9,7 @@
msgstr ""
"Project-Id-Version: gst-plugins-bad 1.6.0\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-07-06 11:51+0300\n"
+"POT-Creation-Date: 2016-09-01 11:24+0300\n"
"PO-Revision-Date: 2015-10-16 19:27+0800\n"
"Last-Translator: Tianze Wang <zwpwjwtz@126.com>\n"
"Language-Team: Chinese (simplified) <i18n-zh@googlegroups.com>\n"
@@ -67,9 +67,6 @@
msgid "Could not start sndio"
msgstr "无法启动sndio。"
-msgid "Internal data flow error."
-msgstr "内部数据流错误。"
-
msgid "Generated file has a larger preroll time than its streams duration"
msgstr "生成文件的预告片段超过其自身流长度。"
@@ -89,12 +86,12 @@
msgid "Failed to get fragment URL."
msgstr "无法获取片段URL。"
-msgid "Internal data stream error."
-msgstr "内部数据流错误。"
-
msgid "Couldn't download fragments"
msgstr "无法下载片段。"
+msgid "Internal data stream error."
+msgstr "内部数据流错误。"
+
msgid "No file name specified for writing."
msgstr "未指定写入文件名。"
@@ -152,6 +149,9 @@
msgid "DVB channel configuration file doesn't contain any channels"
msgstr "DVB通道配置文件不包含任何通道"
+#~ msgid "Internal data flow error."
+#~ msgstr "内部数据流错误。"
+
#~ msgid "default GStreamer sound events audiosink"
#~ msgstr "默认GStreamer声音事件的音频汇"
diff --git a/sys/Makefile.am b/sys/Makefile.am
index 9a34006..5365316 100644
--- a/sys/Makefile.am
+++ b/sys/Makefile.am
@@ -11,7 +11,7 @@
endif
if USE_APPLE_MEDIA
-APPLE_MEDIA_DIR=applemedia applemedia-nonpublic
+APPLE_MEDIA_DIR=applemedia
else
APPLE_MEDIA_DIR=
endif
@@ -156,7 +156,7 @@
SUBDIRS = $(ACM_DIR) $(ANDROID_MEDIA_DIR) $(APPLE_MEDIA_DIR) $(AVC_DIR) $(BLUEZ_DIR) $(D3DVIDEOSINK_DIR) $(DECKLINK_DIR) $(DIRECTSOUND_DIR) $(WINKS_DIR) $(DVB_DIR) $(FBDEV_DIR) $(KMS_DIR) $(LINSYS_DIR) $(OPENSLES_DIR) $(PVR_DIR) $(SHM_DIR) $(UVCH264_DIR) $(VCD_DIR) $(VDPAU_DIR) $(WININET_DIR) $(WINSCREENCAP_DIR) $(WASAPI_DIR) $(NVENC_DIR) $(TINYALSA_DIR)
-DIST_SUBDIRS = acmenc acmmp3dec androidmedia applemedia applemedia-nonpublic avc bluez d3dvideosink decklink directsound dvb linsys fbdev kms dshowdecwrapper dshowsrcwrapper dshowvideosink \
+DIST_SUBDIRS = acmenc acmmp3dec androidmedia applemedia avc bluez d3dvideosink decklink directsound dvb linsys fbdev kms dshowdecwrapper dshowsrcwrapper dshowvideosink \
opensles pvr2d shm uvch264 vcd vdpau wasapi wininet winks winscreencap \
nvenc tinyalsa
diff --git a/sys/Makefile.in b/sys/Makefile.in
index 31a0c6b..e309628 100644
--- a/sys/Makefile.in
+++ b/sys/Makefile.in
@@ -304,6 +304,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -353,6 +355,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
@@ -765,7 +769,7 @@
@USE_ANDROID_MEDIA_FALSE@ANDROID_MEDIA_DIR =
@USE_ANDROID_MEDIA_TRUE@ANDROID_MEDIA_DIR = androidmedia
@USE_APPLE_MEDIA_FALSE@APPLE_MEDIA_DIR =
-@USE_APPLE_MEDIA_TRUE@APPLE_MEDIA_DIR = applemedia applemedia-nonpublic
+@USE_APPLE_MEDIA_TRUE@APPLE_MEDIA_DIR = applemedia
@USE_AVC_FALSE@AVC_DIR =
@USE_AVC_TRUE@AVC_DIR = avc
@USE_BLUEZ_FALSE@BLUEZ_DIR =
@@ -821,7 +825,7 @@
@USE_TINYALSA_FALSE@TINYALSA_DIR =
@USE_TINYALSA_TRUE@TINYALSA_DIR = tinyalsa
SUBDIRS = $(ACM_DIR) $(ANDROID_MEDIA_DIR) $(APPLE_MEDIA_DIR) $(AVC_DIR) $(BLUEZ_DIR) $(D3DVIDEOSINK_DIR) $(DECKLINK_DIR) $(DIRECTSOUND_DIR) $(WINKS_DIR) $(DVB_DIR) $(FBDEV_DIR) $(KMS_DIR) $(LINSYS_DIR) $(OPENSLES_DIR) $(PVR_DIR) $(SHM_DIR) $(UVCH264_DIR) $(VCD_DIR) $(VDPAU_DIR) $(WININET_DIR) $(WINSCREENCAP_DIR) $(WASAPI_DIR) $(NVENC_DIR) $(TINYALSA_DIR)
-DIST_SUBDIRS = acmenc acmmp3dec androidmedia applemedia applemedia-nonpublic avc bluez d3dvideosink decklink directsound dvb linsys fbdev kms dshowdecwrapper dshowsrcwrapper dshowvideosink \
+DIST_SUBDIRS = acmenc acmmp3dec androidmedia applemedia avc bluez d3dvideosink decklink directsound dvb linsys fbdev kms dshowdecwrapper dshowsrcwrapper dshowvideosink \
opensles pvr2d shm uvch264 vcd vdpau wasapi wininet winks winscreencap \
nvenc tinyalsa
diff --git a/sys/acmenc/Makefile.in b/sys/acmenc/Makefile.in
index 9f36020..d3666bb 100644
--- a/sys/acmenc/Makefile.in
+++ b/sys/acmenc/Makefile.in
@@ -322,6 +322,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -371,6 +373,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/sys/acmmp3dec/Makefile.in b/sys/acmmp3dec/Makefile.in
index 78cad2b..7a87cef 100644
--- a/sys/acmmp3dec/Makefile.in
+++ b/sys/acmmp3dec/Makefile.in
@@ -322,6 +322,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -371,6 +373,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/sys/androidmedia/Makefile.am b/sys/androidmedia/Makefile.am
index 3bb4ea3..c56eee2 100644
--- a/sys/androidmedia/Makefile.am
+++ b/sys/androidmedia/Makefile.am
@@ -2,6 +2,7 @@
libgstandroidmedia_la_SOURCES = \
gstahcsrc.c \
+ gstahssrc.c \
gstamcaudiodec.c \
gstamc.c \
gstamcsurface.c \
@@ -10,10 +11,12 @@
gstamcvideoenc.c \
gst-android-graphics-imageformat.c \
gst-android-hardware-camera.c \
+ gst-android-hardware-sensor.c \
gstjniutils.c
noinst_HEADERS = \
gstahcsrc.h \
+ gstahssrc.h \
gstamcaudiodec.h \
gstamc-constants.h \
gstamc.h \
@@ -23,6 +26,7 @@
gstamcvideoenc.h \
gst-android-graphics-imageformat.h \
gst-android-hardware-camera.h \
+ gst-android-hardware-sensor.h \
gstjniutils.h
libgstandroidmedia_la_CFLAGS = \
@@ -50,4 +54,5 @@
androidmedia_java_classesdir = $(datadir)/gst-android/ndk-build/androidmedia/
androidmedia_java_classes_DATA = \
org/freedesktop/gstreamer/androidmedia/GstAhcCallback.java \
+ org/freedesktop/gstreamer/androidmedia/GstAhsCallback.java \
org/freedesktop/gstreamer/androidmedia/GstAmcOnFrameAvailableListener.java
diff --git a/sys/androidmedia/Makefile.in b/sys/androidmedia/Makefile.in
index cdf845c..88fda28 100644
--- a/sys/androidmedia/Makefile.in
+++ b/sys/androidmedia/Makefile.in
@@ -170,6 +170,7 @@
$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
am_libgstandroidmedia_la_OBJECTS = libgstandroidmedia_la-gstahcsrc.lo \
+ libgstandroidmedia_la-gstahssrc.lo \
libgstandroidmedia_la-gstamcaudiodec.lo \
libgstandroidmedia_la-gstamc.lo \
libgstandroidmedia_la-gstamcsurface.lo \
@@ -178,6 +179,7 @@
libgstandroidmedia_la-gstamcvideoenc.lo \
libgstandroidmedia_la-gst-android-graphics-imageformat.lo \
libgstandroidmedia_la-gst-android-hardware-camera.lo \
+ libgstandroidmedia_la-gst-android-hardware-sensor.lo \
libgstandroidmedia_la-gstjniutils.lo
libgstandroidmedia_la_OBJECTS = $(am_libgstandroidmedia_la_OBJECTS)
AM_V_lt = $(am__v_lt_@AM_V@)
@@ -339,6 +341,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -388,6 +392,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
@@ -798,6 +804,7 @@
plugin_LTLIBRARIES = libgstandroidmedia.la
libgstandroidmedia_la_SOURCES = \
gstahcsrc.c \
+ gstahssrc.c \
gstamcaudiodec.c \
gstamc.c \
gstamcsurface.c \
@@ -806,10 +813,12 @@
gstamcvideoenc.c \
gst-android-graphics-imageformat.c \
gst-android-hardware-camera.c \
+ gst-android-hardware-sensor.c \
gstjniutils.c
noinst_HEADERS = \
gstahcsrc.h \
+ gstahssrc.h \
gstamcaudiodec.h \
gstamc-constants.h \
gstamc.h \
@@ -819,6 +828,7 @@
gstamcvideoenc.h \
gst-android-graphics-imageformat.h \
gst-android-hardware-camera.h \
+ gst-android-hardware-sensor.h \
gstjniutils.h
libgstandroidmedia_la_CFLAGS = \
@@ -846,6 +856,7 @@
androidmedia_java_classesdir = $(datadir)/gst-android/ndk-build/androidmedia/
androidmedia_java_classes_DATA = \
org/freedesktop/gstreamer/androidmedia/GstAhcCallback.java \
+ org/freedesktop/gstreamer/androidmedia/GstAhsCallback.java \
org/freedesktop/gstreamer/androidmedia/GstAmcOnFrameAvailableListener.java
all: all-am
@@ -928,7 +939,9 @@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstandroidmedia_la-gst-android-graphics-imageformat.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstandroidmedia_la-gst-android-hardware-camera.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstandroidmedia_la-gst-android-hardware-sensor.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstandroidmedia_la-gstahcsrc.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstandroidmedia_la-gstahssrc.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstandroidmedia_la-gstamc.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstandroidmedia_la-gstamcaudiodec.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstandroidmedia_la-gstamcsurface.Plo@am__quote@
@@ -968,6 +981,13 @@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstandroidmedia_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstandroidmedia_la_CFLAGS) $(CFLAGS) -c -o libgstandroidmedia_la-gstahcsrc.lo `test -f 'gstahcsrc.c' || echo '$(srcdir)/'`gstahcsrc.c
+libgstandroidmedia_la-gstahssrc.lo: gstahssrc.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstandroidmedia_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstandroidmedia_la_CFLAGS) $(CFLAGS) -MT libgstandroidmedia_la-gstahssrc.lo -MD -MP -MF $(DEPDIR)/libgstandroidmedia_la-gstahssrc.Tpo -c -o libgstandroidmedia_la-gstahssrc.lo `test -f 'gstahssrc.c' || echo '$(srcdir)/'`gstahssrc.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstandroidmedia_la-gstahssrc.Tpo $(DEPDIR)/libgstandroidmedia_la-gstahssrc.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstahssrc.c' object='libgstandroidmedia_la-gstahssrc.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstandroidmedia_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstandroidmedia_la_CFLAGS) $(CFLAGS) -c -o libgstandroidmedia_la-gstahssrc.lo `test -f 'gstahssrc.c' || echo '$(srcdir)/'`gstahssrc.c
+
libgstandroidmedia_la-gstamcaudiodec.lo: gstamcaudiodec.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstandroidmedia_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstandroidmedia_la_CFLAGS) $(CFLAGS) -MT libgstandroidmedia_la-gstamcaudiodec.lo -MD -MP -MF $(DEPDIR)/libgstandroidmedia_la-gstamcaudiodec.Tpo -c -o libgstandroidmedia_la-gstamcaudiodec.lo `test -f 'gstamcaudiodec.c' || echo '$(srcdir)/'`gstamcaudiodec.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstandroidmedia_la-gstamcaudiodec.Tpo $(DEPDIR)/libgstandroidmedia_la-gstamcaudiodec.Plo
@@ -1024,6 +1044,13 @@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstandroidmedia_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstandroidmedia_la_CFLAGS) $(CFLAGS) -c -o libgstandroidmedia_la-gst-android-hardware-camera.lo `test -f 'gst-android-hardware-camera.c' || echo '$(srcdir)/'`gst-android-hardware-camera.c
+libgstandroidmedia_la-gst-android-hardware-sensor.lo: gst-android-hardware-sensor.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstandroidmedia_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstandroidmedia_la_CFLAGS) $(CFLAGS) -MT libgstandroidmedia_la-gst-android-hardware-sensor.lo -MD -MP -MF $(DEPDIR)/libgstandroidmedia_la-gst-android-hardware-sensor.Tpo -c -o libgstandroidmedia_la-gst-android-hardware-sensor.lo `test -f 'gst-android-hardware-sensor.c' || echo '$(srcdir)/'`gst-android-hardware-sensor.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstandroidmedia_la-gst-android-hardware-sensor.Tpo $(DEPDIR)/libgstandroidmedia_la-gst-android-hardware-sensor.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gst-android-hardware-sensor.c' object='libgstandroidmedia_la-gst-android-hardware-sensor.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstandroidmedia_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstandroidmedia_la_CFLAGS) $(CFLAGS) -c -o libgstandroidmedia_la-gst-android-hardware-sensor.lo `test -f 'gst-android-hardware-sensor.c' || echo '$(srcdir)/'`gst-android-hardware-sensor.c
+
libgstandroidmedia_la-gstjniutils.lo: gstjniutils.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstandroidmedia_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstandroidmedia_la_CFLAGS) $(CFLAGS) -MT libgstandroidmedia_la-gstjniutils.lo -MD -MP -MF $(DEPDIR)/libgstandroidmedia_la-gstjniutils.Tpo -c -o libgstandroidmedia_la-gstjniutils.lo `test -f 'gstjniutils.c' || echo '$(srcdir)/'`gstjniutils.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstandroidmedia_la-gstjniutils.Tpo $(DEPDIR)/libgstandroidmedia_la-gstjniutils.Plo
diff --git a/sys/androidmedia/gst-android-hardware-camera.c b/sys/androidmedia/gst-android-hardware-camera.c
index c22129f..aa574bd 100644
--- a/sys/androidmedia/gst-android-hardware-camera.c
+++ b/sys/androidmedia/gst-android-hardware-camera.c
@@ -2129,7 +2129,7 @@
GST_DEBUG ("add callback_buffer %p", buffer);
gst_amc_jni_call_void_method (env, &err, self->object,
- android_hardware_camera.addCallbackBuffer, buffer);
+ android_hardware_camera.addCallbackBuffer, buffer);
if (err) {
GST_ERROR ("Failed to call android.hardware.Camera.addCallbackBuffer: %s",
err->message);
@@ -2154,14 +2154,15 @@
org_freedesktop_gstreamer_androidmedia_gstahccallback.constructor,
*((jlong *) & cb), *((jlong *) & user_data));
if (err) {
- GST_ERROR ("Failed to create org.freedesktop.gstreamer.androidmedia.GstAhcCallback object");
+ GST_ERROR
+ ("Failed to create org.freedesktop.gstreamer.androidmedia.GstAhcCallback object");
g_clear_error (&err);
goto done;
}
}
gst_amc_jni_call_void_method (env, &err, self->object,
- android_hardware_camera.autoFocus, object);
+ android_hardware_camera.autoFocus, object);
if (err) {
GST_ERROR ("Failed to call android.hardware.Camera.autoFocus: %s",
err->message);
@@ -2171,7 +2172,7 @@
ret = TRUE;
done:
if (err)
- g_clear_error(&err);
+ g_clear_error (&err);
if (object)
gst_amc_jni_object_local_unref (env, object);
@@ -2185,7 +2186,7 @@
GError *err = NULL;
gst_amc_jni_call_void_method (env, &err, self->object,
- android_hardware_camera.cancelAutoFocus);
+ android_hardware_camera.cancelAutoFocus);
if (err) {
GST_ERROR ("Failed to call android.hardware.Camera.cancelAutoFocus: %s",
err->message);
@@ -2216,7 +2217,7 @@
}
gst_amc_jni_call_static_void_method (env, &err, android_hardware_camera.klass,
- android_hardware_camera.getCameraInfo, camera_id, jcamera_info);
+ android_hardware_camera.getCameraInfo, camera_id, jcamera_info);
if (err) {
GST_ERROR ("Failed to call android.hardware.Camera.getCameraInfo: %s",
err->message);
@@ -2257,7 +2258,7 @@
gint num_cameras;
gst_amc_jni_call_static_int_method (env, &err, android_hardware_camera.klass,
- android_hardware_camera.getNumberOfCameras, &num_cameras);
+ android_hardware_camera.getNumberOfCameras, &num_cameras);
if (err) {
GST_ERROR ("Failed to call android.hardware.Camera.getNumberOfCameras: %s",
err->message);
@@ -2277,7 +2278,7 @@
GstAHCParameters *params = NULL;
gst_amc_jni_call_object_method (env, &err, self->object,
- android_hardware_camera.getParameters, &object);
+ android_hardware_camera.getParameters, &object);
if (err) {
GST_ERROR ("Failed to call android.hardware.Camera.getParameters: %s",
err->message);
@@ -2311,7 +2312,7 @@
GError *err = NULL;
gst_amc_jni_call_void_method (env, &err, self->object,
- android_hardware_camera.lock);
+ android_hardware_camera.lock);
if (err) {
GST_ERROR ("Failed to call android.hardware.Camera.lock: %s", err->message);
g_clear_error (&err);
@@ -2330,11 +2331,10 @@
GstAHCamera *camera = NULL;
gst_amc_jni_call_static_object_method (env, &err,
- android_hardware_camera.klass, android_hardware_camera.open, &object,
- camera_id);
+ android_hardware_camera.klass, android_hardware_camera.open, &object,
+ camera_id);
if (err) {
- GST_ERROR ("Failed to call android.hardware.Camera.open: %s",
- err->message);
+ GST_ERROR ("Failed to call android.hardware.Camera.open: %s", err->message);
g_clear_error (&err);
goto done;
}
@@ -2362,7 +2362,7 @@
GError *err = NULL;
gst_amc_jni_call_void_method (env, &err, self->object,
- android_hardware_camera.reconnect);
+ android_hardware_camera.reconnect);
if (err) {
GST_ERROR ("Failed to call android.hardware.Camera.reconnect: %s",
err->message);
@@ -2380,7 +2380,7 @@
GError *err = NULL;
gst_amc_jni_call_void_method (env, &err, self->object,
- android_hardware_camera.release);
+ android_hardware_camera.release);
if (err) {
GST_ERROR ("Failed to call android.hardware.Camera.release: %s",
err->message);
@@ -2405,7 +2405,7 @@
GError *err = NULL;
gst_amc_jni_call_void_method (env, &err, self->object,
- android_hardware_camera.setParameters, params->object);
+ android_hardware_camera.setParameters, params->object);
if (err) {
GST_ERROR ("Failed to call android.hardware.Camera.setParameters: %s",
err->message);
@@ -2433,14 +2433,15 @@
org_freedesktop_gstreamer_androidmedia_gstahccallback.constructor,
*((jlong *) & cb), *((jlong *) & user_data));
if (err) {
- GST_ERROR ("Failed to create org.freedesktop.gstreamer.androidmedia.GstAhcCallback object");
+ GST_ERROR
+ ("Failed to create org.freedesktop.gstreamer.androidmedia.GstAhcCallback object");
g_clear_error (&err);
goto done;
}
}
gst_amc_jni_call_void_method (env, &err, self->object,
- android_hardware_camera.setErrorCallback, object);
+ android_hardware_camera.setErrorCallback, object);
if (err) {
GST_ERROR ("Failed to call android.hardware.Camera.setErrorCallback: %s",
err->message);
@@ -2474,16 +2475,18 @@
org_freedesktop_gstreamer_androidmedia_gstahccallback.constructor,
*((jlong *) & cb), *((jlong *) & user_data));
if (err) {
- GST_ERROR ("Failed to create org.freedesktop.gstreamer.androidmedia.GstAhcCallback object");
+ GST_ERROR
+ ("Failed to create org.freedesktop.gstreamer.androidmedia.GstAhcCallback object");
g_clear_error (&err);
goto done;
}
}
gst_amc_jni_call_void_method (env, &err, self->object,
- android_hardware_camera.setPreviewCallbackWithBuffer, object);
+ android_hardware_camera.setPreviewCallbackWithBuffer, object);
if (err) {
- GST_ERROR ("Failed to call android.hardware.Camera.setPreviewCallbackWithBuffer: %s",
+ GST_ERROR
+ ("Failed to call android.hardware.Camera.setPreviewCallbackWithBuffer: %s",
err->message);
goto done;
}
@@ -2506,7 +2509,7 @@
GError *err = NULL;
gst_amc_jni_call_void_method (env, &err, self->object,
- android_hardware_camera.setPreviewTexture, surfaceTexture->jobject);
+ android_hardware_camera.setPreviewTexture, surfaceTexture->jobject);
if (err) {
GST_ERROR ("Failed to call android.hardware.Camera.setPreviewTexture: %s",
err->message);
@@ -2521,7 +2524,7 @@
GError *err = NULL;
gst_amc_jni_call_void_method (env, &err, self->object,
- android_hardware_camera.startPreview);
+ android_hardware_camera.startPreview);
if (err) {
GST_ERROR ("Failed to call android.hardware.Camera.startPreview: %s",
err->message);
@@ -2539,7 +2542,7 @@
GError *err = NULL;
gst_amc_jni_call_void_method (env, &err, self->object,
- android_hardware_camera.startSmoothZoom, value);
+ android_hardware_camera.startSmoothZoom, value);
if (err) {
GST_ERROR ("Failed to call android.hardware.Camera.startSmoothZoom: %s",
err->message);
@@ -2557,7 +2560,7 @@
GError *err = NULL;
gst_amc_jni_call_void_method (env, &err, self->object,
- android_hardware_camera.stopPreview);
+ android_hardware_camera.stopPreview);
if (err) {
GST_ERROR ("Failed to call android.hardware.Camera.stopPreview: %s",
err->message);
@@ -2575,7 +2578,7 @@
GError *err = NULL;
gst_amc_jni_call_void_method (env, &err, self->object,
- android_hardware_camera.stopSmoothZoom);
+ android_hardware_camera.stopSmoothZoom);
if (err) {
GST_ERROR ("Failed to call android.hardware.Camera.stopSmoothZoom: %s",
err->message);
@@ -2593,7 +2596,7 @@
GError *err = NULL;
gst_amc_jni_call_void_method (env, &err, self->object,
- android_hardware_camera.unlock);
+ android_hardware_camera.unlock);
if (err) {
GST_ERROR ("Failed to call android.hardware.Camera.unlock: %s",
err->message);
@@ -3034,7 +3037,7 @@
gchar *ret = NULL;
gst_amc_jni_call_object_method (env, &err, self->object,
- android_hardware_camera_parameters.flatten, &v_str);
+ android_hardware_camera_parameters.flatten, &v_str);
if (err) {
GST_ERROR ("Failed to call android.hardware.Camera.Parameters.flatten: %s",
err->message);
@@ -3069,9 +3072,10 @@
jstring antibanding;
gst_amc_jni_call_object_method (env, &err, self->object,
- android_hardware_camera_parameters.getAntibanding, &antibanding);
+ android_hardware_camera_parameters.getAntibanding, &antibanding);
if (err) {
- GST_ERROR ("Failed to call android.hardware.Camera.Parameters.getAntibanding: %s",
+ GST_ERROR
+ ("Failed to call android.hardware.Camera.Parameters.getAntibanding: %s",
err->message);
g_clear_error (&err);
return NULL;
@@ -3094,9 +3098,10 @@
jstring color_effect;
gst_amc_jni_call_object_method (env, &err, self->object,
- android_hardware_camera_parameters.getColorEffect, &color_effect);
+ android_hardware_camera_parameters.getColorEffect, &color_effect);
if (err) {
- GST_ERROR ("Failed to call android.hardware.Camera.Parameters.getColorEffect: %s",
+ GST_ERROR
+ ("Failed to call android.hardware.Camera.Parameters.getColorEffect: %s",
err->message);
g_clear_error (&err);
return NULL;
@@ -3118,9 +3123,10 @@
gint ev;
gst_amc_jni_call_int_method (env, &err, self->object,
- android_hardware_camera_parameters.getExposureCompensation, &ev);
+ android_hardware_camera_parameters.getExposureCompensation, &ev);
if (err) {
- GST_ERROR ("Failed to call android.hardware.Camera.Parameters.getExposureCompensation: %s",
+ GST_ERROR
+ ("Failed to call android.hardware.Camera.Parameters.getExposureCompensation: %s",
err->message);
g_clear_error (&err);
return -1;
@@ -3137,9 +3143,10 @@
gfloat step;
gst_amc_jni_call_float_method (env, &err, self->object,
- android_hardware_camera_parameters.getExposureCompensationStep, &step);
+ android_hardware_camera_parameters.getExposureCompensationStep, &step);
if (err) {
- GST_ERROR ("Failed to call android.hardware.Camera.Parameters.getExposureCompensationStep: %s",
+ GST_ERROR
+ ("Failed to call android.hardware.Camera.Parameters.getExposureCompensationStep: %s",
err->message);
g_clear_error (&err);
return 0.0;
@@ -3157,9 +3164,10 @@
jstring flash_mode;
gst_amc_jni_call_object_method (env, &err, self->object,
- android_hardware_camera_parameters.getFlashMode, &flash_mode);
+ android_hardware_camera_parameters.getFlashMode, &flash_mode);
if (err) {
- GST_ERROR ("Failed to call android.hardware.Camera.Parameters.getFlashMode: %s",
+ GST_ERROR
+ ("Failed to call android.hardware.Camera.Parameters.getFlashMode: %s",
err->message);
g_clear_error (&err);
return NULL;
@@ -3181,9 +3189,10 @@
gfloat length;
gst_amc_jni_call_float_method (env, &err, self->object,
- android_hardware_camera_parameters.getFocalLength, &length);
+ android_hardware_camera_parameters.getFocalLength, &length);
if (err) {
- GST_ERROR ("Failed to call android.hardware.Camera.Parameters.getFocalLength: %s",
+ GST_ERROR
+ ("Failed to call android.hardware.Camera.Parameters.getFocalLength: %s",
err->message);
g_clear_error (&err);
return 0.0;
@@ -3201,9 +3210,10 @@
jstring focus_mode;
gst_amc_jni_call_object_method (env, &err, self->object,
- android_hardware_camera_parameters.getFocusMode, &focus_mode);
+ android_hardware_camera_parameters.getFocusMode, &focus_mode);
if (err) {
- GST_ERROR ("Failed to call android.hardware.Camera.Parameters.getFocusMode: %s",
+ GST_ERROR
+ ("Failed to call android.hardware.Camera.Parameters.getFocusMode: %s",
err->message);
g_clear_error (&err);
return NULL;
@@ -3225,9 +3235,10 @@
gfloat angle;
gst_amc_jni_call_float_method (env, &err, self->object,
- android_hardware_camera_parameters.getHorizontalViewAngle, &angle);
+ android_hardware_camera_parameters.getHorizontalViewAngle, &angle);
if (err) {
- GST_ERROR ("Failed to call android.hardware.Camera.Parameters.getHorizontalViewAngle: %s",
+ GST_ERROR
+ ("Failed to call android.hardware.Camera.Parameters.getHorizontalViewAngle: %s",
err->message);
g_clear_error (&err);
return 0.0;
@@ -3244,9 +3255,10 @@
gint max;
gst_amc_jni_call_int_method (env, &err, self->object,
- android_hardware_camera_parameters.getMaxExposureCompensation, &max);
+ android_hardware_camera_parameters.getMaxExposureCompensation, &max);
if (err) {
- GST_ERROR ("Failed to call android.hardware.Camera.Parameters.getMaxExposureCompensation: %s",
+ GST_ERROR
+ ("Failed to call android.hardware.Camera.Parameters.getMaxExposureCompensation: %s",
err->message);
g_clear_error (&err);
return 0;
@@ -3263,9 +3275,10 @@
gint max;
gst_amc_jni_call_int_method (env, &err, self->object,
- android_hardware_camera_parameters.getMaxZoom, &max);
+ android_hardware_camera_parameters.getMaxZoom, &max);
if (err) {
- GST_ERROR ("Failed to call android.hardware.Camera.Parameters.getMaxZoom: %s",
+ GST_ERROR
+ ("Failed to call android.hardware.Camera.Parameters.getMaxZoom: %s",
err->message);
g_clear_error (&err);
return -1;
@@ -3282,9 +3295,10 @@
gint min;
gst_amc_jni_call_int_method (env, &err, self->object,
- android_hardware_camera_parameters.getMinExposureCompensation, &min);
+ android_hardware_camera_parameters.getMinExposureCompensation, &min);
if (err) {
- GST_ERROR ("Failed to call android.hardware.Camera.Parameters.getMinExposureCompensation: %s",
+ GST_ERROR
+ ("Failed to call android.hardware.Camera.Parameters.getMinExposureCompensation: %s",
err->message);
g_clear_error (&err);
return 0;
@@ -3301,9 +3315,10 @@
gint format;
gst_amc_jni_call_int_method (env, &err, self->object,
- android_hardware_camera_parameters.getPreviewFormat, &format);
+ android_hardware_camera_parameters.getPreviewFormat, &format);
if (err) {
- GST_ERROR ("Failed to call android.hardware.Camera.Parameters.getPreviewFormat: %s",
+ GST_ERROR
+ ("Failed to call android.hardware.Camera.Parameters.getPreviewFormat: %s",
err->message);
g_clear_error (&err);
return 0;
@@ -3330,9 +3345,10 @@
}
gst_amc_jni_call_void_method (env, &err, self->object,
- android_hardware_camera_parameters.getPreviewFpsRange, range);
+ android_hardware_camera_parameters.getPreviewFpsRange, range);
if (err) {
- GST_ERROR ("Failed to call android.hardware.Camera.Parameters.getPreviewFpsRange: %s",
+ GST_ERROR
+ ("Failed to call android.hardware.Camera.Parameters.getPreviewFpsRange: %s",
err->message);
goto done;
}
@@ -3369,9 +3385,10 @@
GstAHCSize *size = NULL;
gst_amc_jni_call_object_method (env, &err, self->object,
- android_hardware_camera_parameters.getPreviewSize, &jsize);
+ android_hardware_camera_parameters.getPreviewSize, &jsize);
if (err) {
- GST_ERROR ("Failed to call android.hardware.Camera.Parameters.getPreviewSize: %s",
+ GST_ERROR
+ ("Failed to call android.hardware.Camera.Parameters.getPreviewSize: %s",
err->message);
goto done;
}
@@ -3415,9 +3432,10 @@
jstring scene_mode;
gst_amc_jni_call_object_method (env, &err, self->object,
- android_hardware_camera_parameters.getSceneMode, &scene_mode);
+ android_hardware_camera_parameters.getSceneMode, &scene_mode);
if (err) {
- GST_ERROR ("Failed to call android.hardware.Camera.Parameters.getSceneMode: %s",
+ GST_ERROR
+ ("Failed to call android.hardware.Camera.Parameters.getSceneMode: %s",
err->message);
g_clear_error (&err);
return NULL;
@@ -3440,9 +3458,10 @@
GList *ret = NULL;
gst_amc_jni_call_object_method (env, &err, self->object,
- android_hardware_camera_parameters.getSupportedAntibanding, &list);
+ android_hardware_camera_parameters.getSupportedAntibanding, &list);
if (err) {
- GST_ERROR ("Failed to call android.hardware.Camera.Parameters.getSupportedAntibanding: %s",
+ GST_ERROR
+ ("Failed to call android.hardware.Camera.Parameters.getSupportedAntibanding: %s",
err->message);
g_clear_error (&err);
return NULL;
@@ -3486,9 +3505,10 @@
GList *ret = NULL;
gst_amc_jni_call_object_method (env, &err, self->object,
- android_hardware_camera_parameters.getSupportedColorEffects, &list);
+ android_hardware_camera_parameters.getSupportedColorEffects, &list);
if (err) {
- GST_ERROR ("Failed to call android.hardware.Camera.Parameters.getSupportedColorEffects: %s",
+ GST_ERROR
+ ("Failed to call android.hardware.Camera.Parameters.getSupportedColorEffects: %s",
err->message);
g_clear_error (&err);
return NULL;
@@ -3532,9 +3552,10 @@
GList *ret = NULL;
gst_amc_jni_call_object_method (env, &err, self->object,
- android_hardware_camera_parameters.getSupportedFlashModes, &list);
+ android_hardware_camera_parameters.getSupportedFlashModes, &list);
if (err) {
- GST_ERROR ("Failed to call android.hardware.Camera.Parameters.getSupportedFlashModes: %s",
+ GST_ERROR
+ ("Failed to call android.hardware.Camera.Parameters.getSupportedFlashModes: %s",
err->message);
g_clear_error (&err);
return NULL;
@@ -3578,9 +3599,10 @@
GList *ret = NULL;
gst_amc_jni_call_object_method (env, &err, self->object,
- android_hardware_camera_parameters.getSupportedFocusModes, &list);
+ android_hardware_camera_parameters.getSupportedFocusModes, &list);
if (err) {
- GST_ERROR ("Failed to call android.hardware.Camera.Parameters.getSupportedFocusModes: %s",
+ GST_ERROR
+ ("Failed to call android.hardware.Camera.Parameters.getSupportedFocusModes: %s",
err->message);
g_clear_error (&err);
return NULL;
@@ -3624,9 +3646,10 @@
GList *ret = NULL;
gst_amc_jni_call_object_method (env, &err, self->object,
- android_hardware_camera_parameters.getSupportedPreviewFormats, &list);
+ android_hardware_camera_parameters.getSupportedPreviewFormats, &list);
if (err) {
- GST_ERROR ("Failed to call android.hardware.Camera.Parameters.getSupportedPreviewFormats: %s",
+ GST_ERROR
+ ("Failed to call android.hardware.Camera.Parameters.getSupportedPreviewFormats: %s",
err->message);
g_clear_error (&err);
return NULL;
@@ -3670,9 +3693,10 @@
GList *ret = NULL;
gst_amc_jni_call_object_method (env, &err, self->object,
- android_hardware_camera_parameters.getSupportedPreviewFpsRange, &list);
+ android_hardware_camera_parameters.getSupportedPreviewFpsRange, &list);
if (err) {
- GST_ERROR ("Failed to call android.hardware.Camera.Parameters.getSupportedPreviewFpsRange: %s",
+ GST_ERROR
+ ("Failed to call android.hardware.Camera.Parameters.getSupportedPreviewFpsRange: %s",
err->message);
g_clear_error (&err);
return NULL;
@@ -3718,9 +3742,10 @@
GList *ret = NULL;
gst_amc_jni_call_object_method (env, &err, self->object,
- android_hardware_camera_parameters.getSupportedPreviewSizes, &list);
+ android_hardware_camera_parameters.getSupportedPreviewSizes, &list);
if (err) {
- GST_ERROR ("Failed to call android.hardware.Camera.Parameters.getSupportedPreviewSizes: %s",
+ GST_ERROR
+ ("Failed to call android.hardware.Camera.Parameters.getSupportedPreviewSizes: %s",
err->message);
g_clear_error (&err);
return NULL;
@@ -3770,9 +3795,10 @@
GList *ret = NULL;
gst_amc_jni_call_object_method (env, &err, self->object,
- android_hardware_camera_parameters.getSupportedSceneModes, &list);
+ android_hardware_camera_parameters.getSupportedSceneModes, &list);
if (err) {
- GST_ERROR ("Failed to call android.hardware.Camera.Parameters.getSupportedSceneModes: %s",
+ GST_ERROR
+ ("Failed to call android.hardware.Camera.Parameters.getSupportedSceneModes: %s",
err->message);
g_clear_error (&err);
return NULL;
@@ -3816,9 +3842,10 @@
GList *ret = NULL;
gst_amc_jni_call_object_method (env, &err, self->object,
- android_hardware_camera_parameters.getSupportedWhiteBalance, &list);
+ android_hardware_camera_parameters.getSupportedWhiteBalance, &list);
if (err) {
- GST_ERROR ("Failed to call android.hardware.Camera.Parameters.getSupportedWhiteBalance: %s",
+ GST_ERROR
+ ("Failed to call android.hardware.Camera.Parameters.getSupportedWhiteBalance: %s",
err->message);
g_clear_error (&err);
return NULL;
@@ -3861,9 +3888,10 @@
gfloat angle;
gst_amc_jni_call_float_method (env, &err, self->object,
- android_hardware_camera_parameters.getVerticalViewAngle, &angle);
+ android_hardware_camera_parameters.getVerticalViewAngle, &angle);
if (err) {
- GST_ERROR ("Failed to call android.hardware.Camera.Parameters.getVerticalViewAngle: %s",
+ GST_ERROR
+ ("Failed to call android.hardware.Camera.Parameters.getVerticalViewAngle: %s",
err->message);
g_clear_error (&err);
return 0.0;
@@ -3880,9 +3908,10 @@
gboolean ret;
gst_amc_jni_call_boolean_method (env, &err, self->object,
- android_hardware_camera_parameters.getVideoStabilization, &ret);
+ android_hardware_camera_parameters.getVideoStabilization, &ret);
if (err) {
- GST_ERROR ("Failed to call android.hardware.Camera.Parameters.getVideoStabilization: %s",
+ GST_ERROR
+ ("Failed to call android.hardware.Camera.Parameters.getVideoStabilization: %s",
err->message);
g_clear_error (&err);
return FALSE;
@@ -3900,9 +3929,10 @@
jstring white_balance;
gst_amc_jni_call_object_method (env, &err, self->object,
- android_hardware_camera_parameters.getWhiteBalance, &white_balance);
+ android_hardware_camera_parameters.getWhiteBalance, &white_balance);
if (err) {
- GST_ERROR ("Failed to call android.hardware.Camera.Parameters.getWhiteBalance: %s",
+ GST_ERROR
+ ("Failed to call android.hardware.Camera.Parameters.getWhiteBalance: %s",
err->message);
g_clear_error (&err);
return NULL;
@@ -3924,7 +3954,7 @@
gint zoom;
gst_amc_jni_call_int_method (env, &err, self->object,
- android_hardware_camera_parameters.getZoom, &zoom);
+ android_hardware_camera_parameters.getZoom, &zoom);
if (err) {
GST_ERROR ("Failed to call android.hardware.Camera.Parameters.getZoom: %s",
err->message);
@@ -3944,9 +3974,10 @@
GList *ret = NULL;
gst_amc_jni_call_object_method (env, &err, self->object,
- android_hardware_camera_parameters.getZoomRatios, &list);
+ android_hardware_camera_parameters.getZoomRatios, &list);
if (err) {
- GST_ERROR ("Failed to call android.hardware.Camera.Parameters.getZoomRatios: %s",
+ GST_ERROR
+ ("Failed to call android.hardware.Camera.Parameters.getZoomRatios: %s",
err->message);
g_clear_error (&err);
return NULL;
@@ -3989,9 +4020,10 @@
gboolean supported;
gst_amc_jni_call_boolean_method (env, &err, self->object,
- android_hardware_camera_parameters.isSmoothZoomSupported, &supported);
+ android_hardware_camera_parameters.isSmoothZoomSupported, &supported);
if (err) {
- GST_ERROR ("Failed to call android.hardware.Camera.Parameters.isSmoothZoomSupported: %s",
+ GST_ERROR
+ ("Failed to call android.hardware.Camera.Parameters.isSmoothZoomSupported: %s",
err->message);
g_clear_error (&err);
return FALSE;
@@ -4008,10 +4040,11 @@
gboolean supported;
gst_amc_jni_call_boolean_method (env, &err, self->object,
- android_hardware_camera_parameters.isVideoStabilizationSupported,
- &supported);
+ android_hardware_camera_parameters.isVideoStabilizationSupported,
+ &supported);
if (err) {
- GST_ERROR ("Failed to call android.hardware.Camera.Parameters.isVideoStabilizationSupported: %s",
+ GST_ERROR
+ ("Failed to call android.hardware.Camera.Parameters.isVideoStabilizationSupported: %s",
err->message);
g_clear_error (&err);
return FALSE;
@@ -4028,9 +4061,10 @@
gboolean supported;
gst_amc_jni_call_boolean_method (env, &err, self->object,
- android_hardware_camera_parameters.isZoomSupported, &supported);
+ android_hardware_camera_parameters.isZoomSupported, &supported);
if (err) {
- GST_ERROR ("Failed to call android.hardware.Camera.Parameters.isZoomSupported: %s",
+ GST_ERROR
+ ("Failed to call android.hardware.Camera.Parameters.isZoomSupported: %s",
err->message);
g_clear_error (&err);
return FALSE;
@@ -4052,9 +4086,10 @@
return FALSE;
gst_amc_jni_call_void_method (env, &err, self->object,
- android_hardware_camera_parameters.setAntibanding, antibanding);
+ android_hardware_camera_parameters.setAntibanding, antibanding);
if (err) {
- GST_ERROR ("Failed to call android.hardware.Camera.Parameters.setAntibanding: %s",
+ GST_ERROR
+ ("Failed to call android.hardware.Camera.Parameters.setAntibanding: %s",
err->message);
g_clear_error (&err);
return FALSE;
@@ -4076,9 +4111,10 @@
return FALSE;
gst_amc_jni_call_void_method (env, &err, self->object,
- android_hardware_camera_parameters.setColorEffect, color_effect);
+ android_hardware_camera_parameters.setColorEffect, color_effect);
if (err) {
- GST_ERROR ("Failed to call android.hardware.Camera.Parameters.setColorEffect: %s",
+ GST_ERROR
+ ("Failed to call android.hardware.Camera.Parameters.setColorEffect: %s",
err->message);
g_clear_error (&err);
return FALSE;
@@ -4095,9 +4131,10 @@
GError *err = NULL;
gst_amc_jni_call_void_method (env, &err, self->object,
- android_hardware_camera_parameters.setExposureCompensation, value);
+ android_hardware_camera_parameters.setExposureCompensation, value);
if (err) {
- GST_ERROR ("Failed to call android.hardware.Camera.Parameters.setExposureCompensation: %s",
+ GST_ERROR
+ ("Failed to call android.hardware.Camera.Parameters.setExposureCompensation: %s",
err->message);
g_clear_error (&err);
return FALSE;
@@ -4118,9 +4155,10 @@
return FALSE;
gst_amc_jni_call_void_method (env, &err, self->object,
- android_hardware_camera_parameters.setFlashMode, flash_mode);
+ android_hardware_camera_parameters.setFlashMode, flash_mode);
if (err) {
- GST_ERROR ("Failed to call android.hardware.Camera.Parameters.setFlashMode: %s",
+ GST_ERROR
+ ("Failed to call android.hardware.Camera.Parameters.setFlashMode: %s",
err->message);
g_clear_error (&err);
return FALSE;
@@ -4141,9 +4179,10 @@
return FALSE;
gst_amc_jni_call_void_method (env, &err, self->object,
- android_hardware_camera_parameters.setFocusMode, focus_mode);
+ android_hardware_camera_parameters.setFocusMode, focus_mode);
if (err) {
- GST_ERROR ("Failed to call android.hardware.Camera.Parameters.setFocusMode: %s",
+ GST_ERROR
+ ("Failed to call android.hardware.Camera.Parameters.setFocusMode: %s",
err->message);
g_clear_error (&err);
return FALSE;
@@ -4159,9 +4198,10 @@
GError *err = NULL;
gst_amc_jni_call_void_method (env, &err, self->object,
- android_hardware_camera_parameters.setPreviewFormat, format);
+ android_hardware_camera_parameters.setPreviewFormat, format);
if (err) {
- GST_ERROR ("Failed to call android.hardware.Camera.Parameters.setPreviewFormat: %s",
+ GST_ERROR
+ ("Failed to call android.hardware.Camera.Parameters.setPreviewFormat: %s",
err->message);
g_clear_error (&err);
return FALSE;
@@ -4178,9 +4218,10 @@
GError *err = NULL;
gst_amc_jni_call_void_method (env, &err, self->object,
- android_hardware_camera_parameters.setPreviewFpsRange, min, max);
+ android_hardware_camera_parameters.setPreviewFpsRange, min, max);
if (err) {
- GST_ERROR ("Failed to call android.hardware.Camera.Parameters.setPreviewFpsRange: %s",
+ GST_ERROR
+ ("Failed to call android.hardware.Camera.Parameters.setPreviewFpsRange: %s",
err->message);
g_clear_error (&err);
return FALSE;
@@ -4197,9 +4238,10 @@
GError *err = NULL;
gst_amc_jni_call_void_method (env, &err, self->object,
- android_hardware_camera_parameters.setPreviewSize, width, height);
+ android_hardware_camera_parameters.setPreviewSize, width, height);
if (err) {
- GST_ERROR ("Failed to call android.hardware.Camera.Parameters.setPreviewSize: %s",
+ GST_ERROR
+ ("Failed to call android.hardware.Camera.Parameters.setPreviewSize: %s",
err->message);
g_clear_error (&err);
return FALSE;
@@ -4220,9 +4262,10 @@
return FALSE;
gst_amc_jni_call_void_method (env, &err, self->object,
- android_hardware_camera_parameters.setSceneMode, scene_mode);
+ android_hardware_camera_parameters.setSceneMode, scene_mode);
if (err) {
- GST_ERROR ("Failed to call android.hardware.Camera.Parameters.setSceneMode: %s",
+ GST_ERROR
+ ("Failed to call android.hardware.Camera.Parameters.setSceneMode: %s",
err->message);
g_clear_error (&err);
return FALSE;
@@ -4240,9 +4283,10 @@
GError *err = NULL;
gst_amc_jni_call_void_method (env, &err, self->object,
- android_hardware_camera_parameters.setVideoStabilization, toggle);
+ android_hardware_camera_parameters.setVideoStabilization, toggle);
if (err) {
- GST_ERROR ("Failed to call android.hardware.Camera.Parameters.setVideoStabilization: %s",
+ GST_ERROR
+ ("Failed to call android.hardware.Camera.Parameters.setVideoStabilization: %s",
err->message);
g_clear_error (&err);
return FALSE;
@@ -4264,9 +4308,10 @@
return FALSE;
gst_amc_jni_call_void_method (env, &err, self->object,
- android_hardware_camera_parameters.setWhiteBalance, white_balance);
+ android_hardware_camera_parameters.setWhiteBalance, white_balance);
if (err) {
- GST_ERROR ("Failed to call android.hardware.Camera.Parameters.setWhiteBalance: %s",
+ GST_ERROR
+ ("Failed to call android.hardware.Camera.Parameters.setWhiteBalance: %s",
err->message);
g_clear_error (&err);
return FALSE;
@@ -4282,7 +4327,7 @@
GError *err = NULL;
gst_amc_jni_call_void_method (env, &err, self->object,
- android_hardware_camera_parameters.setZoom, value);
+ android_hardware_camera_parameters.setZoom, value);
if (err) {
GST_ERROR ("Failed to call android.hardware.Camera.Parameters.setZoom: %s",
err->message);
@@ -4306,9 +4351,10 @@
return FALSE;
gst_amc_jni_call_void_method (env, &err, self->object,
- android_hardware_camera_parameters.unflatten, v_str);
+ android_hardware_camera_parameters.unflatten, v_str);
if (err) {
- GST_ERROR ("Failed to call android.hardware.Camera.Parameters.unflatten: %s",
+ GST_ERROR
+ ("Failed to call android.hardware.Camera.Parameters.unflatten: %s",
err->message);
g_clear_error (&err);
ret = FALSE;
diff --git a/sys/androidmedia/gst-android-hardware-sensor.c b/sys/androidmedia/gst-android-hardware-sensor.c
new file mode 100644
index 0000000..862e9fb
--- /dev/null
+++ b/sys/androidmedia/gst-android-hardware-sensor.c
@@ -0,0 +1,834 @@
+/*
+ * Copyright (C) 2016 SurroundIO
+ * Author: Martin Kelly <martin@surround.io>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ *
+ * The UNION_CAST macro is copyright:
+ * Copyright (C) 2008-2016 Matt Gallagher ( http://cocoawithlove.com ).
+ * All rights reserved.
+ * Permission to use, copy, modify, and/or distribute this software for any purpose
+ * with or without fee is hereby granted, provided that the above copyright notice
+ * and this permission notice appear in all copies.
+
+ * THE SOFTWARE IS PROVIDED “AS IS” AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
+ * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
+ * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
+ * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
+ * THIS SOFTWARE.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <glib.h>
+#include <gmodule.h>
+
+#include "gstjniutils.h"
+#include "gst-android-hardware-sensor.h"
+
+static jobject (*gst_android_get_application_context) (void) = NULL;
+
+GST_DEBUG_CATEGORY_STATIC (ahs_debug);
+#define GST_CAT_DEFAULT ahs_debug
+
+/*
+ * See:
+ * http://www.cocoawithlove.com/2008/04/using-pointers-to-recast-in-c-is-bad.html
+ * for details.
+ */
+#define UNION_CAST(x, destType) \
+ (((union {__typeof__(x) a; destType b;})x).b)
+
+static struct
+{
+ jclass klass;
+ jstring SENSOR_SERVICE;
+ jmethodID getSystemService;
+} android_content_context = {
+0};
+
+static struct
+{
+ jclass klass;
+ jfieldID accuracy;
+ jfieldID values;
+} android_hardware_sensor_event = {
+0};
+
+static struct
+{
+ jclass klass;
+ jmethodID getDefaultSensor;;
+ jmethodID registerListener;
+ jmethodID unregisterListener;
+} android_hardware_sensor_manager = {
+0};
+
+static struct
+{
+ jclass klass;
+ jmethodID constructor;
+} org_freedesktop_gstreamer_androidmedia_gstahscallback = {
+0};
+
+GHashTable *sensor_sizes = NULL;
+static void
+gst_ah_sensor_sensor_sizes_init (void)
+{
+ gint i;
+ static struct
+ {
+ gint type;
+ gsize size;
+ } types[] = {
+ {
+ AHS_SENSOR_TYPE_ACCELEROMETER, sizeof (GstAHSAccelerometerValues)}
+ , {
+ AHS_SENSOR_TYPE_AMBIENT_TEMPERATURE,
+ sizeof (GstAHSAmbientTemperatureValues)}
+ , {
+ AHS_SENSOR_TYPE_GAME_ROTATION_VECTOR,
+ sizeof (GstAHSGameRotationVectorValues)}
+ , {
+ AHS_SENSOR_TYPE_GEOMAGNETIC_ROTATION_VECTOR,
+ sizeof (GstAHSGeomagneticRotationVectorValues)}
+ , {
+ AHS_SENSOR_TYPE_GRAVITY, sizeof (GstAHSGravityValues)}
+ , {
+ AHS_SENSOR_TYPE_GYROSCOPE, sizeof (GstAHSGyroscopeValues)}
+ , {
+ AHS_SENSOR_TYPE_GYROSCOPE_UNCALIBRATED,
+ sizeof (GstAHSGyroscopeUncalibratedValues)}
+ , {
+ AHS_SENSOR_TYPE_HEART_RATE, sizeof (GstAHSHeartRateValues)}
+ , {
+ AHS_SENSOR_TYPE_LIGHT, sizeof (GstAHSLightValues)}
+ , {
+ AHS_SENSOR_TYPE_LINEAR_ACCELERATION,
+ sizeof (GstAHSLinearAccelerationValues)}
+ , {
+ AHS_SENSOR_TYPE_MAGNETIC_FIELD, sizeof (GstAHSMagneticFieldValues)}
+ , {
+ AHS_SENSOR_TYPE_MAGNETIC_FIELD_UNCALIBRATED,
+ sizeof (GstAHSMagneticFieldUncalibratedValues)}
+ , {
+ AHS_SENSOR_TYPE_ORIENTATION, sizeof (GstAHSOrientationValues)}
+ , {
+ AHS_SENSOR_TYPE_PRESSURE, sizeof (GstAHSPressureValues)}
+ , {
+ AHS_SENSOR_TYPE_PROXIMITY, sizeof (GstAHSProximityValues)}
+ , {
+ AHS_SENSOR_TYPE_RELATIVE_HUMIDITY, sizeof (GstAHSRelativeHumidityValues)}
+ , {
+ AHS_SENSOR_TYPE_ROTATION_VECTOR, sizeof (GstAHSRotationVectorValues)}
+ , {
+ AHS_SENSOR_TYPE_STEP_COUNTER, sizeof (GstAHSStepCounterValues)}
+ , {
+ AHS_SENSOR_TYPE_STEP_DETECTOR, sizeof (GstAHSStepDetectorValues)}
+ ,};
+
+ g_assert_null (sensor_sizes);
+
+ sensor_sizes = g_hash_table_new (g_int_hash, g_int_equal);
+ for (i = 0; i < G_N_ELEMENTS (types); i++)
+ g_hash_table_insert (sensor_sizes, &types[i].type, &types[i].size);
+}
+
+static void
+gst_ah_sensor_sensor_sizes_deinit (void)
+{
+ g_assert_nonnull (sensor_sizes);
+
+ g_hash_table_unref (sensor_sizes);
+ sensor_sizes = NULL;
+}
+
+gsize
+gst_ah_sensor_get_sensor_data_size (gint sensor_type)
+{
+ return *((gsize *) g_hash_table_lookup (sensor_sizes, &sensor_type));
+}
+
+static void
+gst_ah_sensor_on_sensor_changed (JNIEnv * env, jclass klass,
+ jobject sensor_event, jlong callback, jlong user_data)
+{
+ GstAHSensorCallback cb = (GstAHSensorCallback) (gsize) callback;
+
+ if (cb)
+ cb (sensor_event, (gpointer) (gsize) user_data);
+}
+
+static void
+gst_ah_sensor_on_accuracy_changed (JNIEnv * env, jclass klass,
+ jobject sensor, jint accuracy, jlong callback, jlong user_data)
+{
+ GstAHSAccuracyCallback cb = (GstAHSAccuracyCallback) (gsize) callback;
+
+ if (cb)
+ cb (sensor, accuracy, (gpointer) (gsize) user_data);
+}
+
+static gboolean natives_registered = FALSE;
+
+static JNINativeMethod native_methods[] = {
+ {(gchar *) "gst_ah_sensor_on_sensor_changed",
+ (gchar *) "(Landroid/hardware/SensorEvent;JJ)V",
+ (void *) gst_ah_sensor_on_sensor_changed},
+ {(gchar *) "gst_ah_sensor_on_accuracy_changed",
+ (gchar *) "(Landroid/hardware/Sensor;IJJ)V",
+ (void *) gst_ah_sensor_on_accuracy_changed}
+};
+
+static gboolean
+_init_classes (void)
+{
+ gint32 delay;
+ JNIEnv *env = gst_amc_jni_get_env ();
+ GError *err = NULL;
+ jclass klass;
+ jfieldID fieldID;
+ GModule *module;
+ gboolean success;
+ gint32 type;
+
+ /*
+ * Lookup the Android function to get an Android context. This function will
+ * be provided when the plugin is built via ndk-build.
+ */
+ module = g_module_open (NULL, G_MODULE_BIND_LOCAL);
+ if (!module)
+ goto failed;
+ success = g_module_symbol (module, "gst_android_get_application_context",
+ (gpointer *) & gst_android_get_application_context);
+ if (!success || !gst_android_get_application_context)
+ goto failed;
+ g_module_close (module);
+
+ /* android.content.Context */
+ klass = android_content_context.klass = gst_amc_jni_get_class (env, &err,
+ "android/content/Context");
+ if (!klass)
+ goto failed;
+ android_content_context.getSystemService =
+ gst_amc_jni_get_method_id (env, &err, klass, "getSystemService",
+ "(Ljava/lang/String;)Ljava/lang/Object;");
+ if (!android_content_context.getSystemService)
+ goto failed;
+
+ fieldID =
+ gst_amc_jni_get_static_field_id (env, &err, klass, "SENSOR_SERVICE",
+ "Ljava/lang/String;");
+ if (!fieldID)
+ goto failed;
+ if (!gst_amc_jni_get_static_object_field (env, &err, klass, fieldID,
+ &android_content_context.SENSOR_SERVICE))
+ goto failed;
+ android_content_context.SENSOR_SERVICE =
+ gst_amc_jni_object_make_global (env,
+ android_content_context.SENSOR_SERVICE);
+ if (!android_content_context.SENSOR_SERVICE)
+ goto failed;
+
+ /* android.hardware.SensorEvent */
+ klass = android_hardware_sensor_event.klass =
+ gst_amc_jni_get_class (env, &err, "android/hardware/SensorEvent");
+ if (!klass)
+ goto failed;
+ android_hardware_sensor_event.accuracy =
+ gst_amc_jni_get_field_id (env, &err, klass, "accuracy", "I");
+ if (!android_hardware_sensor_event.accuracy)
+ goto failed;
+ android_hardware_sensor_event.values =
+ gst_amc_jni_get_field_id (env, &err, klass, "values", "[F");
+ if (!android_hardware_sensor_event.values)
+ goto failed;
+
+ /* android.hardware.SensorManager */
+ klass = android_hardware_sensor_manager.klass =
+ gst_amc_jni_get_class (env, &err, "android/hardware/SensorManager");
+ if (!klass)
+ goto failed;
+ android_hardware_sensor_manager.getDefaultSensor =
+ gst_amc_jni_get_method_id (env, &err, klass,
+ "getDefaultSensor", "(I)Landroid/hardware/Sensor;");
+ if (!android_hardware_sensor_manager.getDefaultSensor)
+ goto failed;
+ android_hardware_sensor_manager.registerListener =
+ gst_amc_jni_get_method_id (env, &err, klass,
+ "registerListener",
+ "(Landroid/hardware/SensorEventListener;Landroid/hardware/Sensor;I)Z");
+ if (!android_hardware_sensor_manager.registerListener)
+ goto failed;
+ android_hardware_sensor_manager.unregisterListener =
+ gst_amc_jni_get_method_id (env, &err, klass,
+ "unregisterListener", "(Landroid/hardware/SensorEventListener;)V");
+ if (!android_hardware_sensor_manager.unregisterListener)
+ goto failed;
+
+ fieldID =
+ gst_amc_jni_get_static_field_id (env, &err, klass, "SENSOR_DELAY_FASTEST",
+ "I");
+ if (!fieldID)
+ goto failed;
+ if (!gst_amc_jni_get_static_int_field (env, &err, klass, fieldID, &delay))
+ goto failed;
+ if (delay != AHS_SENSOR_DELAY_FASTEST) {
+ GST_ERROR ("SENSOR_DELAY_FASTEST has changed value");
+ goto failed;
+ }
+
+ fieldID =
+ gst_amc_jni_get_static_field_id (env, &err, klass, "SENSOR_DELAY_GAME",
+ "I");
+ if (!fieldID)
+ goto failed;
+ if (!gst_amc_jni_get_static_int_field (env, &err, klass, fieldID, &delay))
+ goto failed;
+ if (delay != AHS_SENSOR_DELAY_GAME) {
+ GST_ERROR ("SENSOR_DELAY_GAME has changed value");
+ goto failed;
+ }
+
+ fieldID =
+ gst_amc_jni_get_static_field_id (env, &err, klass, "SENSOR_DELAY_NORMAL",
+ "I");
+ if (!fieldID)
+ goto failed;
+ if (!gst_amc_jni_get_static_int_field (env, &err, klass, fieldID, &delay))
+ goto failed;
+ if (delay != AHS_SENSOR_DELAY_NORMAL) {
+ GST_ERROR ("SENSOR_DELAY_NORMAL has changed value");
+ goto failed;
+ }
+
+ fieldID =
+ gst_amc_jni_get_static_field_id (env, &err, klass, "SENSOR_DELAY_UI",
+ "I");
+ if (!fieldID)
+ goto failed;
+ if (!gst_amc_jni_get_static_int_field (env, &err, klass, fieldID, &delay))
+ goto failed;
+ if (delay != AHS_SENSOR_DELAY_UI) {
+ GST_ERROR ("SENSOR_DELAY_UI has changed value");
+ goto failed;
+ }
+
+ /* android.hardware.Sensor */
+ klass = gst_amc_jni_get_class (env, &err, "android/hardware/Sensor");
+ if (!klass)
+ goto failed;
+
+ fieldID =
+ gst_amc_jni_get_static_field_id (env, &err, klass, "TYPE_ACCELEROMETER",
+ "I");
+ if (!fieldID)
+ goto failed;
+ if (!gst_amc_jni_get_static_int_field (env, &err, klass, fieldID, &type))
+ goto failed;
+ if (type != AHS_SENSOR_TYPE_ACCELEROMETER) {
+ GST_ERROR ("TYPE_ACCELEROMETER has changed value");
+ goto failed;
+ }
+
+ fieldID = gst_amc_jni_get_static_field_id (env, &err, klass,
+ "TYPE_AMBIENT_TEMPERATURE", "I");
+ if (!fieldID)
+ goto failed;
+ if (!gst_amc_jni_get_static_int_field (env, &err, klass, fieldID, &type))
+ goto failed;
+ if (type != AHS_SENSOR_TYPE_AMBIENT_TEMPERATURE) {
+ GST_ERROR ("TYPE_AMBIENT_TEMPERATURE has changed value");
+ goto failed;
+ }
+
+ fieldID = gst_amc_jni_get_static_field_id (env, &err, klass,
+ "TYPE_GAME_ROTATION_VECTOR", "I");
+ if (!fieldID)
+ goto failed;
+ if (!gst_amc_jni_get_static_int_field (env, &err, klass, fieldID, &type))
+ goto failed;
+ if (type != AHS_SENSOR_TYPE_GAME_ROTATION_VECTOR) {
+ GST_ERROR ("TYPE_GAME_ROTATION_VECTOR has changed value");
+ goto failed;
+ }
+
+ fieldID = gst_amc_jni_get_static_field_id (env, &err, klass,
+ "TYPE_GEOMAGNETIC_ROTATION_VECTOR", "I");
+ if (!fieldID)
+ goto failed;
+ if (!gst_amc_jni_get_static_int_field (env, &err, klass, fieldID, &type))
+ goto failed;
+ if (type != AHS_SENSOR_TYPE_GEOMAGNETIC_ROTATION_VECTOR) {
+ GST_ERROR ("TYPE_GEOMAGNETIC_ROTATION_VECTOR has changed value");
+ goto failed;
+ }
+
+ fieldID =
+ gst_amc_jni_get_static_field_id (env, &err, klass, "TYPE_GRAVITY", "I");
+ if (!fieldID)
+ goto failed;
+ if (!gst_amc_jni_get_static_int_field (env, &err, klass, fieldID, &type))
+ goto failed;
+ if (type != AHS_SENSOR_TYPE_GRAVITY) {
+ GST_ERROR ("TYPE_GRAVITY has changed value");
+ goto failed;
+ }
+
+ fieldID =
+ gst_amc_jni_get_static_field_id (env, &err, klass, "TYPE_GYROSCOPE", "I");
+ if (!fieldID)
+ goto failed;
+ if (!gst_amc_jni_get_static_int_field (env, &err, klass, fieldID, &type))
+ goto failed;
+ if (type != AHS_SENSOR_TYPE_GYROSCOPE) {
+ GST_ERROR ("TYPE_GYROSCOPE has changed value");
+ goto failed;
+ }
+
+ fieldID =
+ gst_amc_jni_get_static_field_id (env, &err, klass,
+ "TYPE_GYROSCOPE_UNCALIBRATED", "I");
+ if (!fieldID)
+ goto failed;
+ if (!gst_amc_jni_get_static_int_field (env, &err, klass, fieldID, &type))
+ goto failed;
+ if (type != AHS_SENSOR_TYPE_GYROSCOPE_UNCALIBRATED) {
+ GST_ERROR ("TYPE_GYROSCOPE_UNCALIBRATED has changed value");
+ goto failed;
+ }
+
+ fieldID =
+ gst_amc_jni_get_static_field_id (env, &err, klass, "TYPE_HEART_RATE",
+ "I");
+ if (!fieldID)
+ goto failed;
+ if (!gst_amc_jni_get_static_int_field (env, &err, klass, fieldID, &type))
+ goto failed;
+ if (type != AHS_SENSOR_TYPE_HEART_RATE) {
+ GST_ERROR ("TYPE_HEART_RATE has changed value");
+ goto failed;
+ }
+
+ fieldID =
+ gst_amc_jni_get_static_field_id (env, &err, klass, "TYPE_LIGHT", "I");
+ if (!fieldID)
+ goto failed;
+ if (!gst_amc_jni_get_static_int_field (env, &err, klass, fieldID, &type))
+ goto failed;
+ if (type != AHS_SENSOR_TYPE_LIGHT) {
+ GST_ERROR ("TYPE_LIGHT has changed value");
+ goto failed;
+ }
+
+ fieldID =
+ gst_amc_jni_get_static_field_id (env, &err, klass,
+ "TYPE_LINEAR_ACCELERATION", "I");
+ if (!fieldID)
+ goto failed;
+ if (!gst_amc_jni_get_static_int_field (env, &err, klass, fieldID, &type))
+ goto failed;
+ if (type != AHS_SENSOR_TYPE_LINEAR_ACCELERATION) {
+ GST_ERROR ("TYPE_LINEAR_ACCELERATION has changed value");
+ goto failed;
+ }
+
+ fieldID =
+ gst_amc_jni_get_static_field_id (env, &err, klass, "TYPE_MAGNETIC_FIELD",
+ "I");
+ if (!fieldID)
+ goto failed;
+ if (!gst_amc_jni_get_static_int_field (env, &err, klass, fieldID, &type))
+ goto failed;
+ if (type != AHS_SENSOR_TYPE_MAGNETIC_FIELD) {
+ GST_ERROR ("TYPE_MAGNETIC_FIELD has changed value");
+ goto failed;
+ }
+
+ fieldID =
+ gst_amc_jni_get_static_field_id (env, &err, klass,
+ "TYPE_MAGNETIC_FIELD_UNCALIBRATED", "I");
+ if (!fieldID)
+ goto failed;
+ if (!gst_amc_jni_get_static_int_field (env, &err, klass, fieldID, &type))
+ goto failed;
+ if (type != AHS_SENSOR_TYPE_MAGNETIC_FIELD_UNCALIBRATED) {
+ GST_ERROR ("TYPE_MAGNETIC_FIELD_UNCALIBRATED has changed value");
+ goto failed;
+ }
+
+ fieldID =
+ gst_amc_jni_get_static_field_id (env, &err, klass, "TYPE_ORIENTATION",
+ "I");
+ if (!fieldID)
+ goto failed;
+ if (!gst_amc_jni_get_static_int_field (env, &err, klass, fieldID, &type))
+ goto failed;
+ if (type != AHS_SENSOR_TYPE_ORIENTATION) {
+ GST_ERROR ("TYPE_ORIENTATION has changed value");
+ goto failed;
+ }
+
+ fieldID =
+ gst_amc_jni_get_static_field_id (env, &err, klass, "TYPE_PRESSURE", "I");
+ if (!fieldID)
+ goto failed;
+ if (!gst_amc_jni_get_static_int_field (env, &err, klass, fieldID, &type))
+ goto failed;
+ if (type != AHS_SENSOR_TYPE_PRESSURE) {
+ GST_ERROR ("TYPE_PRESSURE has changed value");
+ goto failed;
+ }
+
+ fieldID =
+ gst_amc_jni_get_static_field_id (env, &err, klass, "TYPE_PROXIMITY", "I");
+ if (!fieldID)
+ goto failed;
+ if (!gst_amc_jni_get_static_int_field (env, &err, klass, fieldID, &type))
+ goto failed;
+ if (type != AHS_SENSOR_TYPE_PROXIMITY) {
+ GST_ERROR ("TYPE_PROXIMITY has changed value");
+ goto failed;
+ }
+
+ fieldID =
+ gst_amc_jni_get_static_field_id (env, &err, klass,
+ "TYPE_RELATIVE_HUMIDITY", "I");
+ if (!fieldID)
+ goto failed;
+ if (!gst_amc_jni_get_static_int_field (env, &err, klass, fieldID, &type))
+ goto failed;
+ if (type != AHS_SENSOR_TYPE_RELATIVE_HUMIDITY) {
+ GST_ERROR ("TYPE_RELATIVE_HUMIDITY has changed value");
+ goto failed;
+ }
+
+ fieldID =
+ gst_amc_jni_get_static_field_id (env, &err, klass, "TYPE_ROTATION_VECTOR",
+ "I");
+ if (!fieldID)
+ goto failed;
+ if (!gst_amc_jni_get_static_int_field (env, &err, klass, fieldID, &type))
+ goto failed;
+ if (type != AHS_SENSOR_TYPE_ROTATION_VECTOR) {
+ GST_ERROR ("TYPE_ROTATION_VECTOR has changed value");
+ goto failed;
+ }
+
+ fieldID =
+ gst_amc_jni_get_static_field_id (env, &err, klass,
+ "TYPE_SIGNIFICANT_MOTION", "I");
+ if (!fieldID)
+ goto failed;
+ if (!gst_amc_jni_get_static_int_field (env, &err, klass, fieldID, &type))
+ goto failed;
+ if (type != AHS_SENSOR_TYPE_SIGNIFICANT_MOTION) {
+ GST_ERROR ("TYPE_SIGNIFICANT_MOTION has changed value");
+ goto failed;
+ }
+
+ fieldID =
+ gst_amc_jni_get_static_field_id (env, &err, klass, "TYPE_STEP_COUNTER",
+ "I");
+ if (!fieldID)
+ goto failed;
+ if (!gst_amc_jni_get_static_int_field (env, &err, klass, fieldID, &type))
+ goto failed;
+ if (type != AHS_SENSOR_TYPE_STEP_COUNTER) {
+ GST_ERROR ("TYPE_STEP_COUNTER has changed value");
+ goto failed;
+ }
+
+ fieldID =
+ gst_amc_jni_get_static_field_id (env, &err, klass, "TYPE_STEP_DETECTOR",
+ "I");
+ if (!fieldID)
+ goto failed;
+ if (!gst_amc_jni_get_static_int_field (env, &err, klass, fieldID, &type))
+ goto failed;
+ if (type != AHS_SENSOR_TYPE_STEP_DETECTOR) {
+ GST_ERROR ("TYPE_STEP_DETECTOR has changed value");
+ goto failed;
+ }
+
+ /* org.freedesktop.gstreamer.androidmedia.GstAhsCallback */
+ if (!org_freedesktop_gstreamer_androidmedia_gstahscallback.klass) {
+ org_freedesktop_gstreamer_androidmedia_gstahscallback.klass =
+ gst_amc_jni_get_class (env, &err,
+ "org/freedesktop/gstreamer/androidmedia/GstAhsCallback");
+ }
+ if (!org_freedesktop_gstreamer_androidmedia_gstahscallback.klass)
+ goto failed;
+ org_freedesktop_gstreamer_androidmedia_gstahscallback.constructor =
+ gst_amc_jni_get_method_id (env, &err,
+ org_freedesktop_gstreamer_androidmedia_gstahscallback.klass, "<init>",
+ "(JJJ)V");
+ if (!org_freedesktop_gstreamer_androidmedia_gstahscallback.constructor)
+ goto failed;
+
+ if ((*env)->RegisterNatives (env,
+ org_freedesktop_gstreamer_androidmedia_gstahscallback.klass,
+ native_methods, G_N_ELEMENTS (native_methods))) {
+ GST_ERROR ("Failed to register native methods for GstAhsCallback");
+ goto failed;
+ }
+ natives_registered = TRUE;
+
+ return TRUE;
+
+failed:
+ if (err) {
+ GST_ERROR ("Failed to initialize Android classes: %s", err->message);
+ g_clear_error (&err);
+ }
+
+ return FALSE;
+}
+
+gboolean
+gst_android_hardware_sensor_init (void)
+{
+ GST_DEBUG_CATEGORY_INIT (ahs_debug, "ahs", 0,
+ "Android Gstreamer Hardware Sensor");
+ if (!_init_classes ()) {
+ gst_android_hardware_sensor_deinit ();
+ return FALSE;
+ }
+
+ gst_ah_sensor_sensor_sizes_init ();
+
+ return TRUE;
+}
+
+void
+gst_android_hardware_sensor_deinit (void)
+{
+ JNIEnv *env = gst_amc_jni_get_env ();
+
+ if (android_content_context.SENSOR_SERVICE) {
+ gst_amc_jni_object_unref (env, android_content_context.SENSOR_SERVICE);
+ android_content_context.SENSOR_SERVICE = NULL;
+ }
+
+ if (android_content_context.klass) {
+ gst_amc_jni_object_unref (env, android_content_context.klass);
+ android_content_context.klass = NULL;
+ }
+
+ if (android_hardware_sensor_event.klass) {
+ gst_amc_jni_object_unref (env, android_hardware_sensor_event.klass);
+ android_hardware_sensor_event.klass = NULL;
+ }
+
+ if (android_hardware_sensor_manager.klass) {
+ gst_amc_jni_object_unref (env, android_hardware_sensor_manager.klass);
+ android_hardware_sensor_manager.klass = NULL;
+ }
+
+ if (org_freedesktop_gstreamer_androidmedia_gstahscallback.klass) {
+ if (natives_registered) {
+ (*env)->UnregisterNatives (env,
+ org_freedesktop_gstreamer_androidmedia_gstahscallback.klass);
+ natives_registered = FALSE;
+ }
+ gst_amc_jni_object_unref (env,
+ org_freedesktop_gstreamer_androidmedia_gstahscallback.klass);
+ org_freedesktop_gstreamer_androidmedia_gstahscallback.klass = NULL;
+ }
+
+ gst_ah_sensor_sensor_sizes_deinit ();
+}
+
+GstAHSensorManager *
+gst_ah_sensor_get_manager (void)
+{
+ jobject context;
+ GError *err = NULL;
+ JNIEnv *env = gst_amc_jni_get_env ();
+ GstAHSensorManager *manager;
+ jobject object;
+ gboolean success;
+
+ context = gst_android_get_application_context ();
+ success = gst_amc_jni_call_object_method (env, &err, context,
+ android_content_context.getSystemService,
+ &object, android_content_context.SENSOR_SERVICE);
+ if (!success)
+ return NULL;
+
+ object = gst_amc_jni_object_make_global (env, object);
+ if (!object)
+ return NULL;
+
+ manager = g_slice_new (GstAHSensorManager);
+ manager->object = object;
+
+ return manager;
+}
+
+GstAHSensor *
+gst_ah_sensor_get_default_sensor (GstAHSensorManager * self, gint32 sensor_type)
+{
+ JNIEnv *env = gst_amc_jni_get_env ();
+ GError *err = NULL;
+ jobject object;
+ GstAHSensor *sensor;
+
+ if (!gst_amc_jni_call_object_method (env, &err, self->object,
+ android_hardware_sensor_manager.getDefaultSensor,
+ &object, sensor_type))
+ return NULL;
+
+ object = gst_amc_jni_object_make_global (env, object);
+ if (!object)
+ return NULL;
+
+ sensor = g_slice_new (GstAHSensor);
+ sensor->object = object;
+
+ return sensor;
+}
+
+GstAHSensorEventListener *
+gst_ah_sensor_create_listener (GstAHSensorCallback sensor_cb,
+ GstAHSAccuracyCallback accuracy_cb, gpointer user_data)
+{
+ JNIEnv *env = gst_amc_jni_get_env ();
+ GError *err = NULL;
+ GstAHSensorEventListener *listener;
+ jobject object;
+
+ object = gst_amc_jni_new_object (env,
+ &err,
+ TRUE,
+ org_freedesktop_gstreamer_androidmedia_gstahscallback.klass,
+ org_freedesktop_gstreamer_androidmedia_gstahscallback.constructor,
+ UNION_CAST (sensor_cb, jlong),
+ UNION_CAST (accuracy_cb, jlong), UNION_CAST (user_data, jlong));
+ if (err) {
+ GST_ERROR ("Failed to create listener callback class");
+ g_clear_error (&err);
+ return NULL;
+ }
+
+ listener = g_slice_new (GstAHSensorEventListener);
+ listener->object = object;
+
+ return listener;
+}
+
+gboolean
+gst_ah_sensor_register_listener (GstAHSensorManager * self,
+ GstAHSensorEventListener * listener, GstAHSensor * sensor, gint32 delay)
+{
+ JNIEnv *env = gst_amc_jni_get_env ();
+ GError *err = NULL;
+ gboolean success;
+
+ gst_amc_jni_call_boolean_method (env, &err, self->object,
+ android_hardware_sensor_manager.registerListener, &success,
+ listener->object, sensor->object, (jint) delay);
+ if (err) {
+ GST_ERROR
+ ("Failed to call android.hardware.SensorManager.registerListener: %s",
+ err->message);
+ g_clear_error (&err);
+ return FALSE;
+ }
+ listener->registered = TRUE;
+
+ return TRUE;
+}
+
+void
+gst_ah_sensor_unregister_listener (GstAHSensorManager * self,
+ GstAHSensorEventListener * listener)
+{
+ JNIEnv *env = gst_amc_jni_get_env ();
+ GError *err = NULL;
+
+ gst_amc_jni_call_void_method (env, &err, self->object,
+ android_hardware_sensor_manager.unregisterListener, listener->object);
+ if (err) {
+ GST_ERROR
+ ("Failed to call android.hardware.SensorManager.unregisterListener: %s",
+ err->message);
+ g_clear_error (&err);
+ }
+ listener->registered = FALSE;
+}
+
+gboolean
+gst_ah_sensor_populate_event (GstAHSensorEvent * event, jobject event_object,
+ gint size)
+{
+ JNIEnv *env = gst_amc_jni_get_env ();
+ GError *err = NULL;
+ jfloatArray object_array;
+ jfloat *values;
+
+ gst_amc_jni_get_int_field (env, &err,
+ event_object, android_hardware_sensor_event.accuracy, &event->accuracy);
+ if (err) {
+ GST_ERROR ("Failed to get sensor accuracy field: %s", err->message);
+ goto error;
+ }
+
+ gst_amc_jni_get_object_field (env, &err, event_object,
+ android_hardware_sensor_event.values, &object_array);
+ if (err) {
+ GST_ERROR ("Failed to get sensor values field: %s", err->message);
+ goto error;
+ }
+
+ values = (*env)->GetFloatArrayElements (env, object_array, NULL);
+ if (!values) {
+ GST_ERROR ("Failed to get float array elements from object array");
+ gst_amc_jni_object_local_unref (env, object_array);
+ return FALSE;
+ }
+ /* We can't use gst_amc_jni_object_make_global here because we need to call
+ * ReleaseFloatArrayElements before doing a local unref in the failure case,
+ * but gst_amc_jni_object_make_global would unref before we could Release.
+ */
+ event->data.array = gst_amc_jni_object_ref (env, object_array);
+ if (!event->data.array) {
+ (*env)->ReleaseFloatArrayElements (env, object_array, values, JNI_ABORT);
+ gst_amc_jni_object_local_unref (env, object_array);
+ return FALSE;
+ }
+ event->data.values = values;
+ gst_amc_jni_object_local_unref (env, object_array);
+
+ return TRUE;
+
+error:
+ g_clear_error (&err);
+ return FALSE;
+}
+
+void
+gst_ah_sensor_free_sensor_data (GstAHSensorData * data)
+{
+ JNIEnv *env = gst_amc_jni_get_env ();
+
+ (*env)->ReleaseFloatArrayElements (env, data->array, data->values, JNI_ABORT);
+ gst_amc_jni_object_unref (env, data->array);
+}
diff --git a/sys/androidmedia/gst-android-hardware-sensor.h b/sys/androidmedia/gst-android-hardware-sensor.h
new file mode 100644
index 0000000..2dc79dc
--- /dev/null
+++ b/sys/androidmedia/gst-android-hardware-sensor.h
@@ -0,0 +1,156 @@
+/*
+ * Copyright (C) 2016 SurroundIO
+ * Author: Martin Kelly <martin@surround.io>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GST_ANDROID_HARDWARE_SENSOR_H__
+#define __GST_ANDROID_HARDWARE_SENSOR_H__
+
+#include <gst/gst.h>
+#include <jni.h>
+
+#include "gstsensors.h"
+
+G_BEGIN_DECLS
+
+typedef struct GstAHSensor
+{
+ /* < private > */
+ jobject object;
+} GstAHSensor;
+
+typedef struct GstAHSensorData
+{
+ jfloatArray array;
+ gfloat *values;
+} GstAHSensorData;
+
+typedef struct GstAHSensorEvent
+{
+ /*
+ * Note that we don't use the Android event timestamp, as it's not reliable.
+ * See https://code.google.com/p/android/issues/detail?id=7981 for more
+ * details.
+ */
+ gint32 accuracy;
+ GstAHSensorData data;
+} GstAHSensorEvent;
+
+typedef struct GstAHSensorEventListener
+{
+ /* < private > */
+ jobject object;
+
+ gboolean registered;
+} GstAHSensorEventListener;
+
+typedef struct GstAHSensorManager
+{
+ /* < private > */
+ jobject object;
+} GstAHSensorManager;
+
+gint gst_android_sensor_type_from_string (const gchar * type_str);
+
+/* android.hardware.SensorListener onSensorChanged */
+typedef void (*GstAHSensorCallback) (jobject sensor_event, gpointer user_data);
+
+/* android.hardware.SensorListener onAccuracyChanged */
+typedef void (*GstAHSAccuracyCallback) (jobject sensor, gint32 accuracy,
+ gpointer user_data);
+
+gboolean gst_android_hardware_sensor_init (void);
+void gst_android_hardware_sensor_deinit (void);
+
+/*
+ * Example usage (excluding error checking):
+ *
+ * GstAHSensorManager *manager = gst_ah_sensor_get_manager ();
+ * GstAHSensor *sensor =
+ * gst_ah_sensor_get_default_sensor (manager, * sensor_type);
+ * GstAHSensorEventListener *listener =
+ * gst_ah_sensor_create_listener * (change_cb, accuracy_cb, self);
+ * gst_ah_sensor_register_listener (manager, listener, sensor,
+ * SensorDelay_SENSOR_DELAY_NORMAL);
+ */
+GstAHSensorManager *gst_ah_sensor_get_manager (void);
+GstAHSensor *gst_ah_sensor_get_default_sensor (GstAHSensorManager * manager,
+ gint32 sensor_type);
+GstAHSensorEventListener *gst_ah_sensor_create_listener (GstAHSensorCallback
+ sensor_cb, GstAHSAccuracyCallback accuracy_cb, gpointer user_data);
+gboolean gst_ah_sensor_register_listener (GstAHSensorManager * self,
+ GstAHSensorEventListener * listener, GstAHSensor * sensor, gint32 delay);
+void gst_ah_sensor_unregister_listener (GstAHSensorManager * self,
+ GstAHSensorEventListener * listener);
+
+gboolean gst_ah_sensor_populate_event (GstAHSensorEvent * event,
+ jobject event_object, gint size);
+void gst_ah_sensor_free_sensor_data (GstAHSensorData * data);
+
+/*
+ * These constants come from the matching SENSOR_DELAY_* TYPE_* constants found
+ * in the Android documentation:
+ *
+ * SENSOR_DELAY_*:
+ * https://developer.android.com/reference/android/hardware/SensorManager.html
+ *
+ * TYPE_*:
+ * https://developer.android.com/reference/android/hardware/Sensor.html
+ *
+ * They are intended to be passed into the registerListener callback for
+ * listener registration. Note that, although these are hardcoded, we also do
+ * paranoid runtime checks during plugin init to verify that the API values
+ * haven't changed. This is unlikely but seems like a good precaution. When
+ * adding values, please keep the two lists in sync.
+ */
+enum
+{
+ AHS_SENSOR_DELAY_FASTEST = 0,
+ AHS_SENSOR_DELAY_GAME = 1,
+ AHS_SENSOR_DELAY_NORMAL = 3,
+ AHS_SENSOR_DELAY_UI = 2
+};
+
+enum
+{
+ AHS_SENSOR_TYPE_ACCELEROMETER = 0x1,
+ AHS_SENSOR_TYPE_AMBIENT_TEMPERATURE = 0xd,
+ AHS_SENSOR_TYPE_GAME_ROTATION_VECTOR = 0xf,
+ AHS_SENSOR_TYPE_GEOMAGNETIC_ROTATION_VECTOR = 0x14,
+ AHS_SENSOR_TYPE_GRAVITY = 0x9,
+ AHS_SENSOR_TYPE_GYROSCOPE = 0x4,
+ AHS_SENSOR_TYPE_GYROSCOPE_UNCALIBRATED = 0x10,
+ AHS_SENSOR_TYPE_HEART_RATE = 0x15,
+ AHS_SENSOR_TYPE_LIGHT = 0x5,
+ AHS_SENSOR_TYPE_LINEAR_ACCELERATION = 0xa,
+ AHS_SENSOR_TYPE_MAGNETIC_FIELD = 0x2,
+ AHS_SENSOR_TYPE_MAGNETIC_FIELD_UNCALIBRATED = 0xe,
+ AHS_SENSOR_TYPE_ORIENTATION = 0x3,
+ AHS_SENSOR_TYPE_PRESSURE = 0x6,
+ AHS_SENSOR_TYPE_PROXIMITY = 0x8,
+ AHS_SENSOR_TYPE_RELATIVE_HUMIDITY = 0xc,
+ AHS_SENSOR_TYPE_ROTATION_VECTOR = 0xb,
+ AHS_SENSOR_TYPE_SIGNIFICANT_MOTION = 0x11,
+ AHS_SENSOR_TYPE_STEP_COUNTER = 0x13,
+ AHS_SENSOR_TYPE_STEP_DETECTOR = 0x12
+};
+
+gsize gst_ah_sensor_get_sensor_data_size (gint sensor_type);
+
+G_END_DECLS
+#endif /* __GST_ANDROID_HARDWARE_SENSOR_H__ */
diff --git a/sys/androidmedia/gstahssrc.c b/sys/androidmedia/gstahssrc.c
new file mode 100644
index 0000000..88f8282
--- /dev/null
+++ b/sys/androidmedia/gstahssrc.c
@@ -0,0 +1,687 @@
+/* GStreamer android.hardware.Sensor Source
+ * Copyright (C) 2016 SurroundIO
+ * Author: Martin Kelly <martin@surround.io>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+/**
+ * SECTION:element-gstahssrc
+ *
+ * The ahssrc element reads data from Android device sensors
+ * (android.hardware.Sensor).
+ *
+ * <refsect2>
+ * <title>Example launch line</title>
+ * |[
+ * gst-launch -v ahssrc ! fakesink
+ * ]|
+ * Push Android sensor data into a fakesink.
+ * </refsect2>
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <string.h>
+
+#include <gst/gst.h>
+#include <gst/gstclock.h>
+#include <gst/base/gstbasesrc.h>
+#include <gst/base/gstpushsrc.h>
+#include "gstjniutils.h"
+#include "gst-android-hardware-sensor.h"
+#include "gstahssrc.h"
+#include "gstsensors.h"
+
+GST_DEBUG_CATEGORY_STATIC (gst_ahs_src_debug);
+#define GST_CAT_DEFAULT gst_ahs_src_debug
+
+#define parent_class gst_ahs_src_parent_class
+
+/* GObject */
+static void gst_ahs_src_set_property (GObject * object, guint prop_id,
+ const GValue * value, GParamSpec * pspec);
+static void gst_ahs_src_get_property (GObject * object, guint prop_id,
+ GValue * value, GParamSpec * pspec);
+static void gst_ahs_src_dispose (GObject * object);
+
+/* GstBaseSrc */
+static gboolean gst_ahs_src_set_caps (GstBaseSrc * src, GstCaps * caps);
+static gboolean gst_ahs_src_start (GstBaseSrc * src);
+static gboolean gst_ahs_src_stop (GstBaseSrc * src);
+static gboolean gst_ahs_src_get_size (GstBaseSrc * src, guint64 * size);
+static gboolean gst_ahs_src_is_seekable (GstBaseSrc * src);
+static gboolean gst_ahs_src_unlock (GstBaseSrc * src);
+static gboolean gst_ahs_src_unlock_stop (GstBaseSrc * src);
+
+/* GstPushSrc */
+static GstFlowReturn gst_ahs_src_create (GstPushSrc * src, GstBuffer ** buf);
+
+/* GstAHSSrc */
+static void gst_ahs_src_on_sensor_changed (jobject sensor_event,
+ gpointer user_data);
+static void gst_ahs_src_on_accuracy_changed (jobject sensor, gint accuracy,
+ gpointer user_data);
+static gboolean gst_ahs_src_register_callback (GstAHSSrc * self);
+
+enum
+{
+ PROP_0,
+ PROP_SENSOR_DELAY,
+ PROP_ALPHA,
+ PROP_SAMPLE_INTERVAL,
+ PROP_LAST
+};
+
+static GParamSpec *properties[PROP_LAST];
+
+#define GST_AHS_SRC_CAPS_STR GST_SENSOR_CAPS_MAKE (GST_SENSOR_FORMATS_ALL)
+
+static GstStaticPadTemplate gst_ahs_src_template =
+GST_STATIC_PAD_TEMPLATE ("src",
+ GST_PAD_SRC,
+ GST_PAD_ALWAYS,
+ GST_STATIC_CAPS (GST_AHS_SRC_CAPS_STR));
+
+
+G_DEFINE_TYPE_WITH_CODE (GstAHSSrc, gst_ahs_src, GST_TYPE_PUSH_SRC,
+ GST_DEBUG_CATEGORY_INIT (gst_ahs_src_debug, "ahssrc", 0,
+ "Android hardware sensors"));
+
+#define GST_TYPE_AHS_SENSOR_DELAY (gst_ahs_src_get_sensor_delay ())
+static GType
+gst_ahs_src_get_sensor_delay (void)
+{
+ static GType ahs_src_sensor_delay = 0;
+
+ if (!ahs_src_sensor_delay) {
+ static GEnumValue sensor_delay[5];
+ sensor_delay[0].value = AHS_SENSOR_DELAY_FASTEST;
+ sensor_delay[0].value_name = "fastest";
+ sensor_delay[0].value_nick = "fastest";
+ sensor_delay[1].value = AHS_SENSOR_DELAY_GAME;
+ sensor_delay[1].value_name = "game";
+ sensor_delay[1].value_nick = "game";
+ sensor_delay[2].value = AHS_SENSOR_DELAY_NORMAL;
+ sensor_delay[2].value_name = "normal";
+ sensor_delay[2].value_nick = "normal";
+ sensor_delay[3].value = AHS_SENSOR_DELAY_UI;
+ sensor_delay[3].value_name = "ui";
+ sensor_delay[3].value_nick = "ui";
+ sensor_delay[4].value = 0;
+ sensor_delay[4].value_name = NULL;
+ sensor_delay[4].value_nick = NULL;
+
+ ahs_src_sensor_delay =
+ g_enum_register_static ("GstAhsSrcSensorDelay", sensor_delay);
+ }
+
+ return ahs_src_sensor_delay;
+}
+
+#define GST_TYPE_AHS_SENSOR_TYPE (gst_ahs_src_get_sensor_type ())
+static GType
+gst_ahs_src_get_sensor_type (void)
+{
+ static GType ahs_src_sensor_type = 0;
+
+ if (!ahs_src_sensor_type) {
+ static const GEnumValue sensor_types[] = {
+ {AHS_SENSOR_TYPE_ACCELEROMETER, "accelerometer"},
+ {AHS_SENSOR_TYPE_AMBIENT_TEMPERATURE, "ambient-temperature"},
+ {AHS_SENSOR_TYPE_GAME_ROTATION_VECTOR, "game-rotation-vector"},
+ {AHS_SENSOR_TYPE_GEOMAGNETIC_ROTATION_VECTOR,
+ "geomagnetic-rotation-vector"},
+ {AHS_SENSOR_TYPE_GRAVITY, "gravity"},
+ {AHS_SENSOR_TYPE_GYROSCOPE, "gyroscope"},
+ {AHS_SENSOR_TYPE_GYROSCOPE_UNCALIBRATED, "gyroscope-uncalibrated"},
+ {AHS_SENSOR_TYPE_HEART_RATE, "heart-rate"},
+ {AHS_SENSOR_TYPE_LIGHT, "light"},
+ {AHS_SENSOR_TYPE_LINEAR_ACCELERATION, "linear-acceleration"},
+ {AHS_SENSOR_TYPE_MAGNETIC_FIELD, "magnetic-field"},
+ {AHS_SENSOR_TYPE_MAGNETIC_FIELD_UNCALIBRATED,
+ "magnetic-field-uncalibrated"},
+ {AHS_SENSOR_TYPE_ORIENTATION, "orientation"},
+ {AHS_SENSOR_TYPE_PRESSURE, "pressure"},
+ {AHS_SENSOR_TYPE_PROXIMITY, "proximity"},
+ {AHS_SENSOR_TYPE_RELATIVE_HUMIDITY, "relative-humidity"},
+ {AHS_SENSOR_TYPE_ROTATION_VECTOR, "rotation-vector"},
+ {AHS_SENSOR_TYPE_STEP_COUNTER, "step-counter"},
+ {AHS_SENSOR_TYPE_STEP_DETECTOR, "step-detector"},
+ {0, NULL, NULL}
+ };
+
+ ahs_src_sensor_type =
+ g_enum_register_static ("GstAhsSrcSensorType", sensor_types);
+ }
+
+ return ahs_src_sensor_type;
+}
+
+static void
+gst_ahs_src_class_init (GstAHSSrcClass * klass)
+{
+ GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
+ GstBaseSrcClass *base_src_class = GST_BASE_SRC_CLASS (klass);
+ GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
+ GstPushSrcClass *push_src_class = GST_PUSH_SRC_CLASS (klass);
+
+ gobject_class->set_property = gst_ahs_src_set_property;
+ gobject_class->get_property = gst_ahs_src_get_property;
+ gobject_class->dispose = gst_ahs_src_dispose;
+
+ base_src_class->set_caps = GST_DEBUG_FUNCPTR (gst_ahs_src_set_caps);
+ base_src_class->start = GST_DEBUG_FUNCPTR (gst_ahs_src_start);
+ base_src_class->stop = GST_DEBUG_FUNCPTR (gst_ahs_src_stop);
+ base_src_class->get_size = GST_DEBUG_FUNCPTR (gst_ahs_src_get_size);
+ base_src_class->is_seekable = GST_DEBUG_FUNCPTR (gst_ahs_src_is_seekable);
+ base_src_class->unlock = GST_DEBUG_FUNCPTR (gst_ahs_src_unlock);
+ base_src_class->unlock_stop = GST_DEBUG_FUNCPTR (gst_ahs_src_unlock_stop);
+
+ push_src_class->create = GST_DEBUG_FUNCPTR (gst_ahs_src_create);
+
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&gst_ahs_src_template));
+
+ properties[PROP_SENSOR_DELAY] = g_param_spec_enum ("sensor-delay",
+ "Sensor delay", "Configure the sensor rate", GST_TYPE_AHS_SENSOR_DELAY,
+ AHS_SENSOR_DELAY_NORMAL,
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT | G_PARAM_STATIC_STRINGS);
+ g_object_class_install_property (gobject_class, PROP_SENSOR_DELAY,
+ properties[PROP_SENSOR_DELAY]);
+
+ properties[PROP_ALPHA] = g_param_spec_double ("alpha", "Alpha",
+ "Alpha value used for exponential smoothing (between 0.0 and 1.0)", 0.0,
+ 1.0, 0.2, G_PARAM_READWRITE | G_PARAM_CONSTRUCT | G_PARAM_STATIC_STRINGS);
+ g_object_class_install_property (gobject_class, PROP_ALPHA,
+ properties[PROP_ALPHA]);
+
+ properties[PROP_SAMPLE_INTERVAL] = g_param_spec_uint ("sample-interval",
+ "Sample interval",
+ "Sample interval (for interval n, will output a smoothed average every "
+ "nth sample)", 1, G_MAXUINT, 1,
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT | G_PARAM_STATIC_STRINGS);
+ g_object_class_install_property (gobject_class, PROP_SAMPLE_INTERVAL,
+ properties[PROP_SAMPLE_INTERVAL]);
+
+ gst_element_class_set_static_metadata (element_class,
+ "Android hardware sensors", "Source/Sensor/Device",
+ "Source for Android hardware sensor data",
+ "Martin Kelly <martin@surround.io>");
+}
+
+static gboolean
+_data_queue_check_full (GstDataQueue * queue, guint visible,
+ guint bytes, guint64 time, gpointer checkdata)
+{
+ return FALSE;
+}
+
+static void
+gst_ahs_src_init (GstAHSSrc * self)
+{
+ gst_base_src_set_live (GST_BASE_SRC (self), TRUE);
+ gst_base_src_set_format (GST_BASE_SRC (self), GST_FORMAT_TIME);
+ gst_base_src_set_do_timestamp (GST_BASE_SRC (self), FALSE);
+
+ self->sensor_enum_class = g_type_class_ref (GST_TYPE_AHS_SENSOR_TYPE);
+ self->sensor_type_name = NULL;
+
+ self->manager = NULL;
+ self->sensor = NULL;
+ self->listener = NULL;
+ self->callback_registered = FALSE;
+
+ self->queue = gst_data_queue_new (_data_queue_check_full, NULL, NULL, NULL);
+
+ self->previous_time = GST_CLOCK_TIME_NONE;
+ self->sample_index = 0;
+ self->current_sample = NULL;
+}
+
+static void
+gst_ahs_src_dispose (GObject * object)
+{
+ JNIEnv *env = gst_amc_jni_get_env ();
+ GstAHSSrc *self = GST_AHS_SRC (object);
+
+ if (self->manager) {
+ gst_amc_jni_object_unref (env, self->manager->object);
+ g_slice_free (GstAHSensorManager, self->manager);
+ self->manager = NULL;
+ }
+
+ if (self->sensor) {
+ gst_amc_jni_object_unref (env, self->sensor->object);
+ g_slice_free (GstAHSensor, self->sensor);
+ self->sensor = NULL;
+ }
+
+ if (self->listener) {
+ gst_amc_jni_object_unref (env, self->listener->object);
+ g_slice_free (GstAHSensorEventListener, self->listener);
+ self->listener = NULL;
+ }
+
+ if (self->current_sample) {
+ g_free (self->current_sample);
+ self->current_sample = NULL;
+ }
+
+ if (self->sensor_enum_class) {
+ g_type_class_unref (self->sensor_enum_class);
+ self->sensor_enum_class = NULL;
+ }
+
+ if (self->sensor_type_name) {
+ g_free ((gpointer) self->sensor_type_name);
+ self->sensor_type_name = NULL;
+ }
+
+ if (self->queue) {
+ g_object_unref (self->queue);
+ self->queue = NULL;
+ }
+
+ G_OBJECT_CLASS (parent_class)->dispose (object);
+}
+
+static void
+gst_ahs_src_set_property (GObject * object, guint prop_id,
+ const GValue * value, GParamSpec * pspec)
+{
+ GstAHSSrc *self = GST_AHS_SRC (object);
+
+ /*
+ * Take the mutex to protect against callbacks or changes to the properties
+ * that the callback uses (e.g. caps changes).
+ */
+ GST_OBJECT_LOCK (self);
+
+ switch (prop_id) {
+ case PROP_SENSOR_DELAY:
+ self->sensor_delay = g_value_get_enum (value);
+ /*
+ * If we already have a callback running, reregister with the new delay.
+ * Otherwise, wait for the pipeline to start before we register.
+ */
+ if (self->callback_registered)
+ gst_ahs_src_register_callback (self);
+ break;
+ case PROP_ALPHA:
+ self->alpha = g_value_get_double (value);
+ break;
+ case PROP_SAMPLE_INTERVAL:
+ self->sample_interval = g_value_get_uint (value);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+
+ GST_OBJECT_UNLOCK (self);
+}
+
+static void
+gst_ahs_src_get_property (GObject * object, guint prop_id,
+ GValue * value, GParamSpec * pspec)
+{
+ GstAHSSrc *self = GST_AHS_SRC (object);
+
+ switch (prop_id) {
+ case PROP_SENSOR_DELAY:
+ g_value_set_enum (value, self->sensor_delay);
+ case PROP_ALPHA:
+ g_value_set_double (value, self->alpha);
+ break;
+ case PROP_SAMPLE_INTERVAL:
+ g_value_set_uint (value, self->sample_interval);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ }
+}
+
+static gboolean
+gst_ahs_src_register_callback (GstAHSSrc * self)
+{
+ if (self->callback_registered) {
+ gst_ah_sensor_unregister_listener (self->manager, self->listener);
+ self->callback_registered = FALSE;
+ }
+ if (!gst_ah_sensor_register_listener (self->manager, self->listener,
+ self->sensor, self->sensor_delay)) {
+ return FALSE;
+ }
+ self->callback_registered = TRUE;
+
+ return TRUE;
+}
+
+static gboolean
+gst_ahs_src_change_sensor_type (GstAHSSrc * self, const gchar * type_str,
+ gint type)
+{
+ JNIEnv *env = gst_amc_jni_get_env ();
+
+ /* Replace sensor type. */
+ if (self->sensor_type_name)
+ g_free ((gpointer) self->sensor_type_name);
+ self->sensor_type_name = type_str;
+ self->sensor_type = type;
+
+ /* Adjust buffer and buffer size. */
+ self->buffer_size = gst_ah_sensor_get_sensor_data_size (self->sensor_type);
+ g_assert (self->buffer_size != 0);
+ self->sample_length = self->buffer_size / sizeof (*self->current_sample);
+ self->current_sample = g_realloc (self->current_sample, self->buffer_size);
+
+ /* Make sure we have a manager. */
+ if (!self->manager) {
+ self->manager = gst_ah_sensor_get_manager ();
+ if (!self->manager) {
+ GST_ERROR_OBJECT (self, "Failed to get sensor manager");
+ goto error_sensor_type_name;
+ }
+ }
+
+ /* Replace sensor object. */
+ if (self->sensor) {
+ gst_amc_jni_object_unref (env, self->sensor->object);
+ g_slice_free (GstAHSensor, self->sensor);
+ }
+ self->sensor = gst_ah_sensor_get_default_sensor (self->manager,
+ self->sensor_type);
+ if (!self->sensor) {
+ GST_ERROR_OBJECT (self, "Failed to get sensor type %s",
+ self->sensor_type_name);
+ goto error_manager;
+ }
+
+ /* Register for the callback, unregistering first if necessary. */
+ if (!gst_ahs_src_register_callback (self))
+ goto error_sensor;
+
+ return TRUE;
+
+error_sensor:
+ gst_amc_jni_object_unref (env, self->sensor->object);
+ g_slice_free (GstAHSensor, self->sensor);
+ self->sensor = NULL;
+error_manager:
+ gst_amc_jni_object_unref (env, self->manager->object);
+ g_slice_free (GstAHSensorManager, self->manager);
+ self->manager = NULL;
+error_sensor_type_name:
+ g_free ((gpointer) self->sensor_type_name);
+ self->sensor_type_name = NULL;
+ return FALSE;
+}
+
+static gboolean
+gst_ahs_src_set_caps (GstBaseSrc * src, GstCaps * caps)
+{
+ const GstStructure *caps_struct;
+ GstAHSSrc *self = GST_AHS_SRC (src);
+ gboolean success;
+ gint type;
+ const gchar *type_str;
+ GEnumValue *value;
+
+ caps_struct = gst_caps_get_structure (caps, 0);
+ type_str = gst_structure_get_string (caps_struct, "type");
+ value = g_enum_get_value_by_name (self->sensor_enum_class, type_str);
+ if (!value) {
+ GST_ERROR_OBJECT (self, "Failed to lookup sensor type %s", type_str);
+ return FALSE;
+ }
+ type_str = g_strdup (type_str);
+ type = value->value;
+
+ /*
+ * Take the mutex while changing the sensor type in case there are concurrent
+ * callbacks being processed.
+ */
+ GST_OBJECT_LOCK (self);
+ success = gst_ahs_src_change_sensor_type (self, type_str, type);
+ GST_OBJECT_UNLOCK (self);
+
+ if (!success)
+ return FALSE;
+
+ return TRUE;
+}
+
+static gboolean
+gst_ahs_src_start (GstBaseSrc * src)
+{
+ JNIEnv *env = gst_amc_jni_get_env ();
+ GstAHSSrc *self = GST_AHS_SRC (src);
+
+ g_assert_null (self->manager);
+ g_assert_null (self->listener);
+
+ self->manager = gst_ah_sensor_get_manager ();
+ if (!self->manager) {
+ GST_ERROR_OBJECT (self, "Failed to get sensor manager");
+ goto error;
+ }
+
+ self->previous_time = GST_CLOCK_TIME_NONE;
+
+ self->listener = gst_ah_sensor_create_listener (gst_ahs_src_on_sensor_changed,
+ gst_ahs_src_on_accuracy_changed, self);
+ if (!self->listener) {
+ GST_ERROR_OBJECT (self, "Failed to create sensor listener");
+ goto error_manager;
+ }
+
+ return TRUE;
+
+error_manager:
+ gst_amc_jni_object_unref (env, self->manager->object);
+ g_slice_free (GstAHSensorManager, self->manager);
+ self->manager = NULL;
+error:
+ return FALSE;
+}
+
+static gboolean
+gst_ahs_src_stop (GstBaseSrc * src)
+{
+ GstAHSSrc *self = GST_AHS_SRC (src);
+
+ g_assert_nonnull (self->manager);
+ g_assert_nonnull (self->sensor);
+ g_assert_nonnull (self->listener);
+
+ gst_ah_sensor_unregister_listener (self->manager, self->listener);
+ self->previous_time = GST_CLOCK_TIME_NONE;
+
+ return TRUE;
+}
+
+static gboolean
+gst_ahs_src_get_size (GstBaseSrc * src, guint64 * size)
+{
+ GstAHSSrc *self = GST_AHS_SRC (src);
+
+ return self->buffer_size;
+}
+
+static gboolean
+gst_ahs_src_is_seekable (GstBaseSrc * src)
+{
+ return FALSE;
+}
+
+static gboolean
+gst_ahs_src_unlock (GstBaseSrc * src)
+{
+ GstAHSSrc *self = GST_AHS_SRC (src);
+
+ gst_data_queue_set_flushing (self->queue, TRUE);
+
+ return TRUE;
+}
+
+static gboolean
+gst_ahs_src_unlock_stop (GstBaseSrc * src)
+{
+ GstAHSSrc *self = GST_AHS_SRC (src);
+
+ gst_data_queue_set_flushing (self->queue, FALSE);
+
+ return TRUE;
+}
+
+static GstFlowReturn
+gst_ahs_src_create (GstPushSrc * src, GstBuffer ** buffer)
+{
+ GstAHSSrc *self = GST_AHS_SRC (src);
+ GstDataQueueItem *item;
+
+ if (!gst_data_queue_pop (self->queue, &item)) {
+ GST_INFO_OBJECT (self, "data queue is empty");
+ return GST_FLOW_FLUSHING;
+ }
+
+ GST_DEBUG_OBJECT (self, "creating buffer %p->%p", item, item->object);
+
+ *buffer = GST_BUFFER (item->object);
+ g_slice_free (GstDataQueueItem, item);
+
+ return GST_FLOW_OK;
+}
+
+static void
+gst_ahs_src_free_data_queue_item (GstDataQueueItem * item)
+{
+ gst_buffer_unref (GST_BUFFER (item->object));
+ g_slice_free (GstDataQueueItem, item);
+}
+
+static void
+gst_ahs_src_update_smoothing (GstAHSSrc * self, const GstAHSensorEvent * event)
+{
+ gint i;
+
+ /*
+ * Since we're doing exponential smoothing, the first sample needs to be
+ * special-cased to prevent it from being artificially lowered by the alpha
+ * smoothing factor.
+ */
+ if (self->sample_index == 0) {
+ for (i = 0; i < self->sample_length; i++) {
+ self->current_sample[i] = event->data.values[i];
+ }
+ } else {
+ for (i = 0; i < self->sample_length; i++)
+ self->current_sample[i] =
+ (1 - self->alpha) * self->current_sample[i] +
+ self->alpha * event->data.values[i];
+ }
+}
+
+static void
+gst_ahs_src_on_sensor_changed (jobject event_object, gpointer user_data)
+{
+ GstBuffer *buffer;
+ GstClockTime buffer_time;
+ gfloat *data;
+ GstAHSensorEvent event;
+ GstDataQueueItem *item;
+ GstClock *pipeline_clock;
+ GstAHSSrc *self = GST_AHS_SRC (user_data);
+ gboolean success;
+
+ GST_OBJECT_LOCK (self);
+
+ pipeline_clock = GST_ELEMENT_CLOCK (self);
+ /* If the clock is NULL, the pipeline is not yet set to PLAYING. */
+ if (pipeline_clock == NULL)
+ goto done;
+
+ /*
+ * Unfortunately, the timestamp reported in the Android SensorEvent timestamp
+ * is not guaranteed to use any particular clock. On some device models, it
+ * uses system time, and on other models, it uses monotonic time. In addition,
+ * in some cases, the units are microseconds, and in other cases they are
+ * nanoseconds. Thus we cannot slave it to the pipeline clock or use any
+ * similar strategy that would allow us to correlate the two clocks. So
+ * instead, we approximate the buffer timestamp using the pipeline clock.
+ *
+ * See here for more details on issues with the Android SensorEvent timestamp:
+ * https://code.google.com/p/android/issues/detail?id=7981
+ */
+ buffer_time =
+ gst_clock_get_time (pipeline_clock) - GST_ELEMENT_CAST (self)->base_time;
+
+ success =
+ gst_ah_sensor_populate_event (&event, event_object, self->buffer_size);
+ if (!success) {
+ GST_ERROR_OBJECT (self, "Failed to populate sensor event");
+ goto done;
+ }
+
+ gst_ahs_src_update_smoothing (self, &event);
+ gst_ah_sensor_free_sensor_data (&event.data);
+ self->sample_index++;
+ if (self->sample_index < self->sample_interval)
+ goto done;
+ self->sample_index = 0;
+
+ /*
+ * We want to send off this sample; copy it into a separate data struct so we
+ * can continue using current_sample for aggregating future samples.
+ */
+ data = g_malloc (self->buffer_size);
+ memcpy (data, self->current_sample, self->buffer_size);
+
+ /* Wrap the datapoint with a buffer and add it to the queue. */
+ buffer = gst_buffer_new_wrapped (data, self->buffer_size);
+ GST_BUFFER_DURATION (buffer) = GST_CLOCK_TIME_NONE;
+ GST_BUFFER_PTS (buffer) = buffer_time;
+
+ item = g_slice_new (GstDataQueueItem);
+ item->object = GST_MINI_OBJECT (buffer);
+ item->size = gst_buffer_get_size (buffer);
+ item->duration = GST_BUFFER_DURATION (buffer);
+ item->visible = TRUE;
+ item->destroy = (GDestroyNotify) gst_ahs_src_free_data_queue_item;
+
+ success = gst_data_queue_push (self->queue, item);
+ if (!success) {
+ GST_ERROR_OBJECT (self, "Could not add buffer to queue");
+ gst_ahs_src_free_data_queue_item (item);
+ goto done;
+ }
+
+done:
+ GST_OBJECT_UNLOCK (self);
+}
+
+static void
+gst_ahs_src_on_accuracy_changed (jobject sensor, gint accuracy,
+ gpointer user_data)
+{
+ GstAHSSrc *self = GST_AHS_SRC (user_data);
+
+ /* TODO: Perhaps we should do something more with this information. */
+ GST_DEBUG_OBJECT (self, "Accuracy changed on sensor %p and is now %d", sensor,
+ accuracy);
+}
diff --git a/sys/androidmedia/gstahssrc.h b/sys/androidmedia/gstahssrc.h
new file mode 100644
index 0000000..9c00ca7
--- /dev/null
+++ b/sys/androidmedia/gstahssrc.h
@@ -0,0 +1,80 @@
+/* GStreamer android.hardware.Sensor Source
+ * Copyright (C) 2016 SurroundIO
+ * Author: Martin Kelly <martin@surround.io>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef _GST_AHSSRC_H__
+#define _GST_AHSSRC_H__
+
+#include <gst/base/gstdataqueue.h>
+#include <gst/base/gstpushsrc.h>
+
+#include "gst-android-hardware-sensor.h"
+
+G_BEGIN_DECLS
+#define GST_TYPE_AHS_SRC (gst_ahs_src_get_type())
+#define GST_AHS_SRC(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_AHS_SRC,GstAHSSrc))
+#define GST_AHS_SRC_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_AHS_SRC,GstAHSSrcClass))
+#define GST_IS_AHS_SRC(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_AHS_SRC))
+#define GST_IS_AHS_SRC_CLASS(obj) (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_AHS_SRC))
+typedef struct _GstAHSSrc GstAHSSrc;
+typedef struct _GstAHSSrcClass GstAHSSrcClass;
+
+struct _GstAHSSrc
+{
+ /* < private > */
+ GstPushSrc parent;
+
+ /* properties */
+ gint32 sensor_delay;
+ gdouble alpha;
+ guint sample_interval;
+
+ /* sensor type information */
+ GEnumClass *sensor_enum_class;
+ gint sensor_type;
+ const gchar *sensor_type_name;
+
+ /* JNI wrapper classes */
+ GstAHSensorManager *manager;
+ GstAHSensor *sensor;
+ GstAHSensorEventListener *listener;
+
+ /* timestamping */
+ GstClockTime previous_time;
+ gfloat *current_sample;
+
+ /* buffers */
+ gboolean callback_registered;
+ gint sample_index;
+ gint sample_length;
+ gint buffer_size;
+
+ /* multiprocessing */
+ GstDataQueue *queue;
+};
+
+struct _GstAHSSrcClass
+{
+ GstPushSrcClass parent_class;
+};
+
+GType gst_ahs_src_get_type (void);
+
+G_END_DECLS
+#endif
diff --git a/sys/androidmedia/gstamc.c b/sys/androidmedia/gstamc.c
index 78fd869..b6146d0 100644
--- a/sys/androidmedia/gstamc.c
+++ b/sys/androidmedia/gstamc.c
@@ -30,6 +30,7 @@
#endif
#include "gstahcsrc.h"
+#include "gstahssrc.h"
#include "gstamc.h"
#include "gstamc-constants.h"
@@ -49,7 +50,7 @@
GQuark gst_amc_codec_info_quark = 0;
-static GList *codec_infos = NULL;
+static GQueue codec_infos = G_QUEUE_INIT;
#ifdef GST_AMC_IGNORE_UNKNOWN_COLOR_FORMATS
static gboolean ignore_unknown_color_formats = TRUE;
#else
@@ -1398,7 +1399,7 @@
}
}
- codec_infos = g_list_append (codec_infos, gst_codec_info);
+ g_queue_push_tail (&codec_infos, gst_codec_info);
}
return TRUE;
@@ -1851,9 +1852,42 @@
/* We need at least a valid supported type */
if (valid_codec) {
- GST_LOG ("Successfully scanned codec '%s'", name_str);
- codec_infos = g_list_append (codec_infos, gst_codec_info);
- gst_codec_info = NULL;
+ GList *l;
+
+ for (l = codec_infos.head; l; l = l->next) {
+ GstAmcCodecInfo *tmp = l->data;
+
+ if (strcmp (tmp->name, gst_codec_info->name) == 0
+ && ! !tmp->is_encoder == ! !gst_codec_info->is_encoder) {
+ gint m = tmp->n_supported_types, n;
+
+ GST_LOG ("Successfully scanned codec '%s', appending to existing",
+ name_str);
+
+ tmp->gl_output_only |= gst_codec_info->gl_output_only;
+ tmp->n_supported_types += gst_codec_info->n_supported_types;
+ tmp->supported_types =
+ g_realloc (tmp->supported_types,
+ tmp->n_supported_types * sizeof (GstAmcCodecType));
+
+ for (n = 0; n < gst_codec_info->n_supported_types; n++, m++) {
+ tmp->supported_types[m] = gst_codec_info->supported_types[n];
+ }
+ g_free (gst_codec_info->supported_types);
+ g_free (gst_codec_info->name);
+ g_free (gst_codec_info);
+ gst_codec_info = NULL;
+
+ break;
+ }
+ }
+
+ /* Found no existing codec with this name */
+ if (l == NULL) {
+ GST_LOG ("Successfully scanned codec '%s'", name_str);
+ g_queue_push_tail (&codec_infos, gst_codec_info);
+ gst_codec_info = NULL;
+ }
}
/* Clean up of all local references we got */
@@ -1891,7 +1925,7 @@
valid_codec = TRUE;
}
- ret = codec_infos != NULL;
+ ret = codec_infos.length != 0;
/* If successful we store a cache of the codec information in
* the registry. Otherwise we would always load all codecs during
@@ -1906,7 +1940,7 @@
g_value_init (&arr, GST_TYPE_ARRAY);
- for (l = codec_infos; l; l = l->next) {
+ for (l = codec_infos.head; l; l = l->next) {
GstAmcCodecInfo *gst_codec_info = l->data;
GValue cv = { 0, };
GstStructure *cs = gst_structure_new_empty ("gst-amc-codec");
@@ -3187,7 +3221,7 @@
GST_DEBUG ("Registering plugins");
- for (l = codec_infos; l; l = l->next) {
+ for (l = codec_infos.head; l; l = l->next) {
GstAmcCodecInfo *codec_info = l->data;
gboolean is_audio = FALSE;
gboolean is_video = FALSE;
@@ -3337,13 +3371,24 @@
goto failed_graphics_imageformat;
}
+ if (!gst_android_hardware_sensor_init ()) {
+ goto failed_hardware_camera;
+ }
+
if (!gst_element_register (plugin, "ahcsrc", GST_RANK_NONE, GST_TYPE_AHC_SRC)) {
GST_ERROR ("Failed to register android camera source");
- goto failed_hardware_camera;
+ goto failed_hardware_sensor;
+ }
+
+ if (!gst_element_register (plugin, "ahssrc", GST_RANK_NONE, GST_TYPE_AHS_SRC)) {
+ GST_ERROR ("Failed to register android sensor source");
+ goto failed_hardware_sensor;
}
return TRUE;
+failed_hardware_sensor:
+ gst_android_hardware_sensor_deinit ();
failed_hardware_camera:
gst_android_hardware_camera_deinit ();
failed_graphics_imageformat:
@@ -3820,6 +3865,10 @@
}
}
}
+
+ GST_DEBUG ("Returning caps for '%s':", codec_info->name);
+ GST_DEBUG (" raw caps: %" GST_PTR_FORMAT, raw_ret);
+ GST_DEBUG (" encoded caps: %" GST_PTR_FORMAT, encoded_ret);
}
GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
diff --git a/sys/androidmedia/gstamcaudiodec.c b/sys/androidmedia/gstamcaudiodec.c
index 9a34c37..49c8c60 100644
--- a/sys/androidmedia/gstamcaudiodec.c
+++ b/sys/androidmedia/gstamcaudiodec.c
@@ -670,9 +670,7 @@
gst_event_new_eos ());
gst_pad_pause_task (GST_AUDIO_DECODER_SRC_PAD (self));
} else if (flow_ret < GST_FLOW_EOS) {
- GST_ELEMENT_ERROR (self, STREAM, FAILED,
- ("Internal data stream error."), ("stream stopped, reason %s",
- gst_flow_get_name (flow_ret)));
+ GST_ELEMENT_FLOW_ERROR (self, flow_ret);
gst_pad_push_event (GST_AUDIO_DECODER_SRC_PAD (self),
gst_event_new_eos ());
gst_pad_pause_task (GST_AUDIO_DECODER_SRC_PAD (self));
diff --git a/sys/androidmedia/gstamcvideodec.c b/sys/androidmedia/gstamcvideodec.c
index 397b585..bd772b7 100644
--- a/sys/androidmedia/gstamcvideodec.c
+++ b/sys/androidmedia/gstamcvideodec.c
@@ -1590,9 +1590,7 @@
gst_event_new_eos ());
gst_pad_pause_task (GST_VIDEO_DECODER_SRC_PAD (self));
} else if (flow_ret < GST_FLOW_EOS) {
- GST_ELEMENT_ERROR (self, STREAM, FAILED,
- ("Internal data stream error."), ("stream stopped, reason %s",
- gst_flow_get_name (flow_ret)));
+ GST_ELEMENT_FLOW_ERROR (self, flow_ret);
gst_pad_push_event (GST_VIDEO_DECODER_SRC_PAD (self),
gst_event_new_eos ());
gst_pad_pause_task (GST_VIDEO_DECODER_SRC_PAD (self));
diff --git a/sys/androidmedia/gstamcvideoenc.c b/sys/androidmedia/gstamcvideoenc.c
index 136df41..1742d44 100644
--- a/sys/androidmedia/gstamcvideoenc.c
+++ b/sys/androidmedia/gstamcvideoenc.c
@@ -1129,9 +1129,7 @@
gst_event_new_eos ());
gst_pad_pause_task (GST_VIDEO_ENCODER_SRC_PAD (self));
} else if (flow_ret == GST_FLOW_NOT_LINKED || flow_ret < GST_FLOW_EOS) {
- GST_ELEMENT_ERROR (self, STREAM, FAILED,
- ("Internal data stream error."), ("stream stopped, reason %s",
- gst_flow_get_name (flow_ret)));
+ GST_ELEMENT_FLOW_ERROR (self, flow_ret);
gst_pad_push_event (GST_VIDEO_ENCODER_SRC_PAD (self),
gst_event_new_eos ());
gst_pad_pause_task (GST_VIDEO_ENCODER_SRC_PAD (self));
diff --git a/sys/applemedia-nonpublic/Makefile.am b/sys/applemedia-nonpublic/Makefile.am
deleted file mode 100644
index e95abda..0000000
--- a/sys/applemedia-nonpublic/Makefile.am
+++ /dev/null
@@ -1,84 +0,0 @@
-plugin_LTLIBRARIES = libgstapplemedia_nonpublic.la
-
-libgstapplemedia_nonpublic_la_SOURCES = \
- plugin.m \
- bufferfactory.m \
- corevideobuffer.c \
- coremediabuffer.c \
- cvapi.c \
- cmapi.c \
- coremediactx.c \
- dynapi.c
-
-libgstapplemedia_nonpublic_la_CPPFLAGS = \
- -Dgst_dyn_api_get_type=gst_dyn_api_priv_get_type \
- -Dgst_dyn_api_debug=gst_dyn_api_priv_debug \
- -Dgst_dyn_api_new=gst_dyn_api_priv_new \
- -Dgst_core_media_buffer_new=gst_core_media_buffer_priv_new \
- -Dgst_core_media_buffer_get_type=gst_core_media_buffer_priv_get_type \
- -Dgst_core_media_buffer_get_pixel_buffer=gst_core_media_buffer_priv_get_pixel_buffer\
- -Dgst_core_video_buffer_new=gst_core_video_buffer_priv_new \
- -Dgst_core_video_buffer_get_type=gst_core_video_buffer_priv_get_type \
- -Dgst_core_media_ctx_new=gst_core_media_ctx_priv_new \
- -Dgst_core_media_ctx_get_type=gst_core_media_ctx_priv_get_type
-
-libgstapplemedia_nonpublic_la_CFLAGS = \
- $(GST_CFLAGS) \
- $(GST_BASE_CFLAGS) \
- $(GST_PLUGINS_BASE_CFLAGS)
-
-libgstapplemedia_nonpublic_la_OBJCFLAGS = \
- $(GST_OBJCFLAGS) \
- $(GST_BASE_CFLAGS) \
- $(GST_PLUGINS_BASE_CFLAGS)
-
-if HAVE_IOS
-libgstapplemedia_nonpublic_la_OBJCFLAGS += -fobjc-abi-version=2 -fobjc-legacy-dispatch
-endif
-
-libgstapplemedia_nonpublic_la_LIBADD = \
- $(GST_BASE_LIBS) \
- $(GST_PLUGINS_BASE_LIBS) \
- -lgstvideo-$(GST_API_VERSION) \
- $(GMODULE_NO_EXPORT_LIBS)
-
-libgstapplemedia_nonpublic_la_LIBTOOLFLAGS = $(GST_PLUGIN_LIBTOOLFLAGS) --tag=CC
-
-libgstapplemedia_nonpublic_la_LDFLAGS = \
- $(GST_PLUGIN_LDFLAGS) \
- $(GST_BASE_LDFLAGS) \
- $(GST_PLUGINS_BASE_LDFLAGS) \
- -Wl,-framework -Wl,Foundation \
- -Wl,-framework -Wl,CoreFoundation \
- -Wl,-framework -Wl,CoreVideo
-
-noinst_HEADERS = \
- miovideosrc.h \
- miovideodevice.h \
- celvideosrc.h \
- bufferfactory.h \
- corevideobuffer.h \
- coremediabuffer.h \
- coremediactx.h \
- mioapi.h \
- mtapi.h \
- celapi.h \
- cvapi.h \
- cmapi.h \
- dynapi.h \
- dynapi-internal.h
-
-if HAVE_IOS
-
-#libgstapplemedia_nonpublic_la_SOURCES += \
-# celvideosrc.c \
-# mtapi.c \
-# celapi.c
-
-else
-
-libgstapplemedia_nonpublic_la_SOURCES += \
- mioapi.c
-
-endif
-
diff --git a/sys/applemedia-nonpublic/bufferfactory.m b/sys/applemedia-nonpublic/bufferfactory.m
deleted file mode 100644
index 7b2e845..0000000
--- a/sys/applemedia-nonpublic/bufferfactory.m
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Copyright (C) 2010 Ole André Vadla Ravnås <oleavr@soundrop.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#import "bufferfactory.h"
-
-#include "coremediabuffer.h"
-#include "corevideobuffer.h"
-
-@implementation GstAMBufferFactory
-
-- (id)initWithError:(GError **)error
-{
- GstCoreMediaCtx *ctx;
-
- ctx =
- gst_core_media_ctx_new (GST_API_CORE_VIDEO | GST_API_CORE_MEDIA, error);
- if (ctx == NULL)
- return nil;
-
- if ((self = [super init]))
- coreMediaCtx = ctx;
- else
- g_object_unref (ctx);
-
- return self;
-}
-
-- (void)finalize
-{
- g_object_unref (coreMediaCtx);
-
- [super finalize];
-}
-
-- (GstBuffer *)createGstBufferForCoreVideoBuffer:(CFTypeRef)cvbuf
-{
- return gst_core_video_buffer_new (coreMediaCtx, (CVBufferRef) cvbuf, NULL);
-}
-
-- (GstBuffer *)createGstBufferForSampleBuffer:(CFTypeRef)sbuf
-{
- return gst_core_media_buffer_new (coreMediaCtx, sbuf);
-}
-
-@end
diff --git a/sys/applemedia-nonpublic/celapi.h b/sys/applemedia-nonpublic/celapi.h
deleted file mode 100644
index 78855f9..0000000
--- a/sys/applemedia-nonpublic/celapi.h
+++ /dev/null
@@ -1,169 +0,0 @@
-/*
- * Copyright (C) 2010 Ole André Vadla Ravnås <oleavr@soundrop.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifndef __GST_CEL_API_H__
-#define __GST_CEL_API_H__
-
-#include "mtapi.h"
-
-G_BEGIN_DECLS
-
-typedef struct _GstCelApi GstCelApi;
-typedef struct _GstCelApiClass GstCelApiClass;
-
-enum
-{
- kCelError_ResourceBusy = -12780
-};
-
-struct _GstCelApi
-{
- GstDynApi parent;
-
- OSStatus (* FigCreateCaptureDevicesAndStreamsForPreset)
- (CFAllocatorRef allocator, CFStringRef capturePreset,
- CFDictionaryRef audioOptions,
- FigCaptureDeviceRef * outVideoDevice,
- FigCaptureStreamRef * outVideoStream,
- FigCaptureDeviceRef * outAudioDevice,
- FigCaptureStreamRef * outAudioStream);
-
- CFStringRef * kFigCaptureDeviceProperty_MultiplexStreams;
- CFStringRef * kFigCapturePortType_Bottom;
- CFStringRef * kFigCapturePortType_Camera;
- CFStringRef * kFigCapturePortType_FrontFacingCamera;
- CFStringRef * kFigCapturePortType_Top;
- CFStringRef * kFigCapturePropertyValue_AFEarlyOutAllowPeakAtStart;
- CFStringRef * kFigCapturePropertyValue_AFEarlyOutDecrementAmount;
- CFStringRef * kFigCapturePropertyValue_AFEarlyOutEnable;
- CFStringRef * kFigCapturePropertyValue_AFEarlyOutThreshold;
- CFStringRef * kFigCapturePropertyValue_AFPositionCurrent;
- CFStringRef * kFigCapturePropertyValue_AFPositionInfinity;
- CFStringRef * kFigCapturePropertyValue_AFPositionMacro;
- CFStringRef * kFigCapturePropertyValue_AFSearchPositionArray;
- CFStringRef * kFigCapturePropertyValue_AGC;
- CFStringRef * kFigCapturePropertyValue_CLPFControl;
- CFStringRef * kFigCapturePropertyValue_ColorRangeFull;
- CFStringRef * kFigCapturePropertyValue_ColorRangeSDVideo;
- CFStringRef * kFigCapturePropertyValue_ModuleDate;
- CFStringRef * kFigCapturePropertyValue_ModuleIntegratorInfo;
- CFStringRef * kFigCapturePropertyValue_SensorID;
- CFStringRef * kFigCapturePropertyValue_SigmaFilterControl;
- CFStringRef * kFigCapturePropertyValue_YLPFControl;
- CFStringRef * kFigCapturePropertyValue_hStart;
- CFStringRef * kFigCapturePropertyValue_height;
- CFStringRef * kFigCapturePropertyValue_ispDGain;
- CFStringRef * kFigCapturePropertyValue_sensorDGain;
- CFStringRef * kFigCapturePropertyValue_shutterSpeedDenominator;
- CFStringRef * kFigCapturePropertyValue_shutterSpeedNumerator;
- CFStringRef * kFigCapturePropertyValue_vStart;
- CFStringRef * kFigCapturePropertyValue_weight;
- CFStringRef * kFigCapturePropertyValue_width;
- CFStringRef * kFigCaptureStreamPropertyValue_AEBracketedCaptureParams;
- CFStringRef * kFigCaptureStreamPropertyValue_BLCCompensation;
- CFStringRef * kFigCaptureStreamPropertyValue_BLCDebugMode;
- CFStringRef * kFigCaptureStreamPropertyValue_BandHighFactor;
- CFStringRef * kFigCaptureStreamPropertyValue_BandLowFactor;
- CFStringRef * kFigCaptureStreamPropertyValue_CCMWarmUpWeight;
- CFStringRef * kFigCaptureStreamPropertyValue_EdgeColorSuppressionSlope;
- CFStringRef * kFigCaptureStreamPropertyValue_EdgeColorSuppressionThreshold;
- CFStringRef * kFigCaptureStreamPropertyValue_EnableAESceneDynamicMetering;
- CFStringRef * kFigCaptureStreamPropertyValue_EnableCCMWarmUp;
- CFStringRef * kFigCaptureStreamPropertyValue_EnableHistogram1MetaData;
- CFStringRef * kFigCaptureStreamPropertyValue_EnableHistogram2MetaData;
- CFStringRef * kFigCaptureStreamPropertyValue_EnableHistogram3MetaData;
- CFStringRef * kFigCaptureStreamPropertyValue_EnableHistogram4MetaData;
- CFStringRef * kFigCaptureStreamPropertyValue_EnableHistogram;
- CFStringRef * kFigCaptureStreamPropertyValue_HistogramBinMode;
- CFStringRef * kFigCaptureStreamPropertyValue_HistogramDataType;
- CFStringRef * kFigCaptureStreamPropertyValue_ImageCropRect;
- CFStringRef * kFigCaptureStreamPropertyValue_LPExposure;
- CFStringRef * kFigCaptureStreamPropertyValue_LPGain;
- CFStringRef * kFigCaptureStreamPropertyValue_LowWeight;
- CFStringRef * kFigCaptureStreamPropertyValue_MaxWeight;
- CFStringRef * kFigCaptureStreamPropertyValue_MediumWeight;
- CFStringRef * kFigCaptureStreamPropertyValue_MinWeight;
- CFStringRef * kFigCaptureStreamPropertyValue_WeightDropOff;
- CFStringRef * kFigCaptureStreamPropertyValue_WeightReduction;
- CFStringRef * kFigCaptureStreamProperty_AEConvergenceSpeed;
- CFStringRef * kFigCaptureStreamProperty_AEOutlierClipCount;
- CFStringRef * kFigCaptureStreamProperty_AESceneDynamicMetering;
- CFStringRef * kFigCaptureStreamProperty_AEStability;
- CFStringRef * kFigCaptureStreamProperty_AEWindowManualWeightMatrix;
- CFStringRef * kFigCaptureStreamProperty_AEWindowParams;
- CFStringRef * kFigCaptureStreamProperty_AFEarlyOutParams;
- CFStringRef * kFigCaptureStreamProperty_AFParams;
- CFStringRef * kFigCaptureStreamProperty_AFSearchPositions;
- CFStringRef * kFigCaptureStreamProperty_AFWindowParams;
- CFStringRef * kFigCaptureStreamProperty_AGC;
- CFStringRef * kFigCaptureStreamProperty_AWBWindowParams;
- CFStringRef * kFigCaptureStreamProperty_AdditionalPTSOffset;
- CFStringRef * kFigCaptureStreamProperty_AlternateAWB;
- CFStringRef * kFigCaptureStreamProperty_Apply3AWindowSettings;
- CFStringRef * kFigCaptureStreamProperty_AttachRAW;
- CFStringRef * kFigCaptureStreamProperty_CCMWarmUp;
- CFStringRef * kFigCaptureStreamProperty_ClientMaxBufferCountHint;
- CFStringRef * kFigCaptureStreamProperty_ColorRange;
- CFStringRef * kFigCaptureStreamProperty_ColorSaturation;
- CFStringRef * kFigCaptureStreamProperty_ColorTables;
- CFStringRef * kFigCaptureStreamProperty_EdgeColorSuppressionParams;
- CFStringRef * kFigCaptureStreamProperty_ExposureBias;
- CFStringRef * kFigCaptureStreamProperty_FastSwitchMode;
- CFStringRef * kFigCaptureStreamProperty_FlashMode;
- CFStringRef * kFigCaptureStreamProperty_HistogramParams;
- CFStringRef * kFigCaptureStreamProperty_LockAENow;
- CFStringRef * kFigCaptureStreamProperty_LockAWBNow;
- CFStringRef * kFigCaptureStreamProperty_ManualAENow;
- CFStringRef * kFigCaptureStreamProperty_ManualFocusNow;
- CFStringRef * kFigCaptureStreamProperty_MaxIntegrationTime;
- CFStringRef * kFigCaptureStreamProperty_ModuleInfo;
- CFStringRef * kFigCaptureStreamProperty_NoiseReductionControls;
- CFStringRef * kFigCaptureStreamProperty_PortType;
- CFStringRef * kFigCaptureStreamProperty_PreFrameAE;
- CFStringRef * kFigCaptureStreamProperty_RawImageProcessNow;
- CFStringRef * kFigCaptureStreamProperty_RedEyeReductionParams;
- CFStringRef * kFigCaptureStreamProperty_ResetParams;
- CFStringRef * kFigCaptureStreamProperty_ScalerSharpening;
- CFStringRef * kFigCaptureStreamProperty_SetGainCap;
- CFStringRef * kFigCaptureStreamProperty_SharpeningControl;
- CFStringRef * kFigCaptureStreamProperty_TorchLevel;
- CFStringRef * kFigCaptureStreamProperty_UnlockAENow;
- CFStringRef * kFigCaptureStreamProperty_UnlockAWBNow;
- CFStringRef * kFigCaptureStreamProperty_UseFlashAFAssist;
- CFStringRef * kFigCaptureStreamProperty_UseFlashRedEyeReduction;
- CFStringRef * kFigCaptureStreamProperty_UseHardwareShutter;
- CFStringRef * kFigCaptureStreamProperty_VideoRecordingInProgress;
- CFStringRef * kFigRecorderCapturePreset_AudioRecording;
- CFStringRef * kFigRecorderCapturePreset_AudioVideoRecording;
- CFStringRef * kFigRecorderCapturePreset_PhotoCapture;
- CFStringRef * kFigRecorderCapturePreset_VideoRecording;
-};
-
-struct _GstCelApiClass
-{
- GstDynApiClass parent_class;
-};
-
-GType gst_cel_api_get_type (void);
-
-GstCelApi * gst_cel_api_obtain (GError ** error);
-
-G_END_DECLS
-
-#endif
diff --git a/sys/applemedia-nonpublic/celvideosrc.h b/sys/applemedia-nonpublic/celvideosrc.h
deleted file mode 100644
index 5fa656c..0000000
--- a/sys/applemedia-nonpublic/celvideosrc.h
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- * Copyright (C) 2010 Ole André Vadla Ravnås <oleavr@soundrop.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifndef __GST_CEL_VIDEO_SRC_H__
-#define __GST_CEL_VIDEO_SRC_H__
-
-#include <gst/base/gstpushsrc.h>
-
-#include "coremediactx.h"
-
-G_BEGIN_DECLS
-
-#define GST_TYPE_CEL_VIDEO_SRC \
- (gst_cel_video_src_get_type ())
-#define GST_CEL_VIDEO_SRC(obj) \
- (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_CEL_VIDEO_SRC, GstCelVideoSrc))
-#define GST_CEL_VIDEO_SRC_CAST(obj) \
- ((GstCelVideoSrc *) (obj))
-#define GST_CEL_VIDEO_SRC_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_CEL_VIDEO_SRC, GstCelVideoSrcClass))
-#define GST_IS_CEL_VIDEO_SRC(obj) \
- (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_CEL_VIDEO_SRC))
-#define GST_IS_CEL_VIDEO_SRC_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_CEL_VIDEO_SRC))
-
-typedef struct _GstCelVideoSrc GstCelVideoSrc;
-typedef struct _GstCelVideoSrcClass GstCelVideoSrcClass;
-
-struct _GstCelVideoSrc
-{
- GstPushSrc push_src;
-
- gint device_index;
- gboolean do_stats;
-
- GstCoreMediaCtx *ctx;
-
- FigCaptureDeviceRef device;
- FigCaptureDeviceIface *device_iface;
- FigBaseObjectRef device_base;
- FigBaseIface *device_base_iface;
- FigCaptureStreamRef stream;
- FigCaptureStreamIface *stream_iface;
- FigBaseObjectRef stream_base;
- FigBaseIface *stream_base_iface;
-
- CMBufferQueueRef queue;
- CMBufferQueueTriggerToken ready_trigger;
- GstCaps *device_caps;
- GArray *device_formats;
- GstClockTime duration;
-
- volatile gint is_running;
- guint64 offset;
-
- GCond *ready_cond;
- volatile gboolean queue_is_ready;
-
- GstClockTime last_sampling;
- guint count;
- gint fps;
-};
-
-struct _GstCelVideoSrcClass
-{
- GstPushSrcClass parent_class;
-};
-
-GType gst_cel_video_src_get_type (void);
-
-G_END_DECLS
-
-#endif /* __GST_CEL_VIDEO_SRC_H__ */
diff --git a/sys/applemedia-nonpublic/cmapi.c b/sys/applemedia-nonpublic/cmapi.c
deleted file mode 100644
index 15c28ed..0000000
--- a/sys/applemedia-nonpublic/cmapi.c
+++ /dev/null
@@ -1,137 +0,0 @@
-/*
- * Copyright (C) 2010 Ole André Vadla Ravnås <oleavr@soundrop.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#include "cmapi.h"
-
-#include "dynapi-internal.h"
-
-#include <gmodule.h>
-
-#define CM_FRAMEWORK_PATH "/System/Library/Frameworks/" \
- "CoreMedia.framework/CoreMedia"
-#define CM_FRAMEWORK_PATH_OLD "/System/Library/PrivateFrameworks/" \
- "CoreMedia.framework/CoreMedia"
-
-G_DEFINE_TYPE (GstCMApi, gst_cm_api, GST_TYPE_DYN_API);
-
-static void
-gst_cm_api_init (GstCMApi * self)
-{
-}
-
-static void
-gst_cm_api_class_init (GstCMApiClass * klass)
-{
-}
-
-#define SYM_SPEC(name) GST_DYN_SYM_SPEC (GstCMApi, name)
-
-GstCMApi *
-gst_cm_api_obtain (GError ** error)
-{
- static const GstDynSymSpec symbols[] = {
- SYM_SPEC (FigBaseObjectGetVTable),
-
- SYM_SPEC (CMGetAttachment),
-
- SYM_SPEC (FigFormatDescriptionRelease),
- SYM_SPEC (FigFormatDescriptionRetain),
- SYM_SPEC (CMFormatDescriptionEqual),
- SYM_SPEC (CMFormatDescriptionGetExtension),
- SYM_SPEC (CMFormatDescriptionGetMediaType),
- SYM_SPEC (CMFormatDescriptionGetMediaSubType),
-
- SYM_SPEC (CMVideoFormatDescriptionCreate),
- SYM_SPEC
- (FigVideoFormatDescriptionCreateWithSampleDescriptionExtensionAtom),
- SYM_SPEC (CMVideoFormatDescriptionGetDimensions),
-
- SYM_SPEC (CMTimeMake),
-
- SYM_SPEC (CMSampleBufferCreate),
- SYM_SPEC (CMSampleBufferDataIsReady),
- SYM_SPEC (CMSampleBufferGetDataBuffer),
- SYM_SPEC (CMSampleBufferGetFormatDescription),
- SYM_SPEC (CMSampleBufferGetImageBuffer),
- SYM_SPEC (CMSampleBufferGetNumSamples),
- SYM_SPEC (CMSampleBufferGetSampleAttachmentsArray),
- SYM_SPEC (CMSampleBufferGetSampleSize),
- SYM_SPEC (FigSampleBufferRelease),
- SYM_SPEC (FigSampleBufferRetain),
-
- SYM_SPEC (CMBlockBufferCreateWithMemoryBlock),
- SYM_SPEC (CMBlockBufferGetDataLength),
- SYM_SPEC (CMBlockBufferGetDataPointer),
- SYM_SPEC (FigBlockBufferRelease),
- SYM_SPEC (FigBlockBufferRetain),
-
- SYM_SPEC (CMBufferQueueDequeueAndRetain),
- SYM_SPEC (CMBufferQueueGetBufferCount),
- SYM_SPEC (CMBufferQueueInstallTrigger),
- SYM_SPEC (CMBufferQueueIsEmpty),
- SYM_SPEC (FigBufferQueueRelease),
- SYM_SPEC (CMBufferQueueRemoveTrigger),
- SYM_SPEC (CMBufferQueueSetValidationCallback),
-
- SYM_SPEC (kCMFormatDescriptionExtension_SampleDescriptionExtensionAtoms),
- SYM_SPEC (kCMSampleAttachmentKey_DependsOnOthers),
- SYM_SPEC (kCMTimeInvalid),
-
- {NULL, 0},
- };
- GstCMApi *result;
- GModule *module;
-
- /* We cannot stat() the library as it may not be present on the filesystem.
- * This is the case on newer versions of iOS where system libraries are all
- * part of dyld_shared_cache... */
- module = g_module_open (CM_FRAMEWORK_PATH, 0);
- if (module != NULL) {
- result = _gst_dyn_api_new (gst_cm_api_get_type (), CM_FRAMEWORK_PATH,
- symbols, error);
- g_module_close (module);
- } else {
- GstDynSymSpec *old_symbols;
- guint i;
-
- old_symbols = g_memdup (symbols, sizeof (symbols));
- for (i = 0; old_symbols[i].name != NULL; i++) {
- const gchar *name = old_symbols[i].name;
- const gchar *translated_name;
-
- if (g_str_has_prefix (name, "CM"))
- translated_name = g_strconcat ("Fig", name + 2, NULL);
- else if (g_str_has_prefix (name, "kCM"))
- translated_name = g_strconcat ("kFig", name + 3, NULL);
- else
- translated_name = g_strdup (name);
-
- old_symbols[i].name = translated_name;
- }
-
- result = _gst_dyn_api_new (gst_cm_api_get_type (), CM_FRAMEWORK_PATH_OLD,
- old_symbols, error);
-
- for (i = 0; old_symbols[i].name != NULL; i++)
- g_free ((gpointer) old_symbols[i].name);
- g_free (old_symbols);
- }
-
- return result;
-}
diff --git a/sys/applemedia-nonpublic/cmapi.h b/sys/applemedia-nonpublic/cmapi.h
deleted file mode 100644
index 92565fc..0000000
--- a/sys/applemedia-nonpublic/cmapi.h
+++ /dev/null
@@ -1,212 +0,0 @@
-/*
- * Copyright (C) 2010 Ole André Vadla Ravnås <oleavr@soundrop.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifndef __GST_CM_API_H__
-#define __GST_CM_API_H__
-
-#include "dynapi.h"
-
-#include <CoreFoundation/CoreFoundation.h>
-#include "cvapi.h"
-
-G_BEGIN_DECLS
-
-typedef struct _GstCMApi GstCMApi;
-typedef struct _GstCMApiClass GstCMApiClass;
-
-typedef CFTypeRef FigBaseObjectRef;
-typedef struct _FigBaseVTable FigBaseVTable;
-typedef struct _FigBaseIface FigBaseIface;
-
-typedef CFTypeRef CMFormatDescriptionRef;
-typedef struct _CMVideoDimensions CMVideoDimensions;
-typedef struct _CMTime CMTime;
-
-typedef CFTypeRef CMBufferQueueRef;
-typedef SInt32 CMBufferQueueTriggerCondition;
-typedef struct _CMBufferQueueTriggerToken *CMBufferQueueTriggerToken;
-typedef CFTypeRef CMSampleBufferRef;
-typedef CFTypeRef CMBlockBufferRef;
-
-typedef void (* CMBufferQueueTriggerCallback) (void *triggerRefcon,
- CMBufferQueueTriggerToken triggerToken);
-typedef Boolean (* CMBufferQueueValidationCallback) (CMBufferQueueRef queue,
- CMSampleBufferRef buf, void *refCon);
-
-enum _FigMediaType
-{
- kFigMediaTypeVideo = 'vide'
-};
-
-enum _FigCodecType
-{
- kComponentVideoUnsigned = 'yuvs',
- kFigVideoCodecType_JPEG_OpenDML = 'dmb1',
- kYUV420vCodecType = '420v'
-};
-
-enum _CMBufferQueueTriggerCondition
-{
- kCMBufferQueueTrigger_WhenDurationBecomesLessThan = 1,
- kCMBufferQueueTrigger_WhenDurationBecomesLessThanOrEqualTo = 2,
- kCMBufferQueueTrigger_WhenDurationBecomesGreaterThan = 3,
- kCMBufferQueueTrigger_WhenDurationBecomesGreaterThanOrEqualTo = 4,
- kCMBufferQueueTrigger_WhenMinPresentationTimeStampChanges = 5,
- kCMBufferQueueTrigger_WhenMaxPresentationTimeStampChanges = 6,
- kCMBufferQueueTrigger_WhenDataBecomesReady = 7,
- kCMBufferQueueTrigger_WhenEndOfDataReached = 8,
- kCMBufferQueueTrigger_WhenReset = 9,
- kCMBufferQueueTrigger_WhenBufferCountBecomesLessThan = 10,
- kCMBufferQueueTrigger_WhenBufferCountBecomesGreaterThan = 11
-};
-
-struct _FigBaseVTable
-{
- gsize unk;
- FigBaseIface * base;
- void * derived;
-};
-
-struct _FigBaseIface
-{
- gsize unk1;
- gsize unk2;
- gsize unk3;
- OSStatus (* Invalidate) (FigBaseObjectRef obj);
- OSStatus (* Finalize) (FigBaseObjectRef obj);
- gpointer unk4;
- OSStatus (* CopyProperty) (FigBaseObjectRef obj, CFTypeRef key, void *unk,
- CFTypeRef * value);
- OSStatus (* SetProperty) (FigBaseObjectRef obj, CFTypeRef key,
- CFTypeRef value);
-};
-
-struct _CMVideoDimensions
-{
- UInt32 width;
- UInt32 height;
-};
-
-struct _CMTime
-{
- UInt8 data[24];
-};
-
-struct _GstCMApi
-{
- GstDynApi parent;
-
- FigBaseVTable * (* FigBaseObjectGetVTable) (FigBaseObjectRef obj);
-
- void * (* CMGetAttachment) (CFTypeRef obj, CFStringRef attachmentKey,
- UInt32 * foundWherePtr);
-
- void (* FigFormatDescriptionRelease) (CMFormatDescriptionRef desc);
- CMFormatDescriptionRef (* FigFormatDescriptionRetain) (
- CMFormatDescriptionRef desc);
- Boolean (* CMFormatDescriptionEqual) (CMFormatDescriptionRef desc1,
- CMFormatDescriptionRef desc2);
- CFTypeRef (* CMFormatDescriptionGetExtension) (
- const CMFormatDescriptionRef desc, CFStringRef extensionKey);
- UInt32 (* CMFormatDescriptionGetMediaType) (
- const CMFormatDescriptionRef desc);
- UInt32 (* CMFormatDescriptionGetMediaSubType) (
- const CMFormatDescriptionRef desc);
-
- OSStatus (* CMVideoFormatDescriptionCreate) (
- CFAllocatorRef allocator, UInt32 formatId, UInt32 width, UInt32 height,
- CFDictionaryRef extensions, CMFormatDescriptionRef * desc);
- OSStatus (* FigVideoFormatDescriptionCreateWithSampleDescriptionExtensionAtom)
- (CFAllocatorRef allocator, UInt32 formatId, UInt32 width, UInt32 height,
- UInt32 atomId, const UInt8 * data, CFIndex len, void *unk1,
- CMFormatDescriptionRef * formatDesc);
- CMVideoDimensions (* CMVideoFormatDescriptionGetDimensions) (
- const CMFormatDescriptionRef desc);
-
- CMTime (* CMTimeMake) (int64_t value, int32_t timescale);
-
- OSStatus (* CMSampleBufferCreate) (CFAllocatorRef allocator,
- CMBlockBufferRef blockBuf, Boolean dataReady,
- void *makeDataReadyCallback,
- void *makeDataReadyRefcon,
- CMFormatDescriptionRef fmtDesc, size_t numSamples,
- size_t numSampleTimingEntries,
- const void *sampleTimingArray,
- size_t numSampleSizeEntries, const size_t *sampleSizeArray,
- CMSampleBufferRef * sampleBuffer);
- Boolean (* CMSampleBufferDataIsReady) (
- const CMSampleBufferRef buf);
- CMBlockBufferRef (* CMSampleBufferGetDataBuffer) (
- const CMSampleBufferRef buf);
- CMFormatDescriptionRef (* CMSampleBufferGetFormatDescription) (
- const CMSampleBufferRef buf);
- CVImageBufferRef (* CMSampleBufferGetImageBuffer) (
- const CMSampleBufferRef buf);
- SInt32 (* CMSampleBufferGetNumSamples) (
- const CMSampleBufferRef buf);
- CFArrayRef (* CMSampleBufferGetSampleAttachmentsArray) (
- const CMSampleBufferRef buf, SInt32 sampleIndex);
- SInt32 (* CMSampleBufferGetSampleSize) (
- const CMSampleBufferRef buf, SInt32 sampleIndex);
- void (* FigSampleBufferRelease) (CMSampleBufferRef buf);
- CMSampleBufferRef (* FigSampleBufferRetain) (CMSampleBufferRef buf);
-
- OSStatus (* CMBlockBufferCreateWithMemoryBlock)
- (CFAllocatorRef allocator, void * memoryBlock, size_t blockLength,
- CFAllocatorRef dataAllocator, void *customBlockSource,
- size_t offsetToData, size_t dataLength,
- int flags, CMBlockBufferRef * blockBuffer);
- SInt32 (* CMBlockBufferGetDataLength) (const CMBlockBufferRef buf);
- OSStatus (* CMBlockBufferGetDataPointer) (
- const CMBlockBufferRef buf, UInt32 unk1, UInt32 unk2, UInt32 unk3,
- Byte ** dataPtr);
- void (* FigBlockBufferRelease) (CMBlockBufferRef buf);
- CMBlockBufferRef (* FigBlockBufferRetain) (CMBlockBufferRef buf);
-
- CMSampleBufferRef (* CMBufferQueueDequeueAndRetain)
- (CMBufferQueueRef queue);
- CFIndex (* CMBufferQueueGetBufferCount) (CMBufferQueueRef queue);
- OSStatus (* CMBufferQueueInstallTrigger) (CMBufferQueueRef queue,
- CMBufferQueueTriggerCallback triggerCallback, void * triggerRefCon,
- CMBufferQueueTriggerCondition triggerCondition, CMTime triggerTime,
- CMBufferQueueTriggerToken * triggerTokenOut);
- Boolean (* CMBufferQueueIsEmpty) (CMBufferQueueRef queue);
- void (* FigBufferQueueRelease) (CMBufferQueueRef queue);
- OSStatus (* CMBufferQueueRemoveTrigger) (CMBufferQueueRef queue,
- CMBufferQueueTriggerToken triggerToken);
- OSStatus (* CMBufferQueueSetValidationCallback) (CMBufferQueueRef queue,
- CMBufferQueueValidationCallback func, void *refCon);
-
- CFStringRef * kCMFormatDescriptionExtension_SampleDescriptionExtensionAtoms;
- CFStringRef * kCMSampleAttachmentKey_DependsOnOthers;
- CMTime * kCMTimeInvalid;
-};
-
-struct _GstCMApiClass
-{
- GstDynApiClass parent_class;
-};
-
-GType gst_cm_api_get_type (void);
-
-GstCMApi * gst_cm_api_obtain (GError ** error);
-
-G_END_DECLS
-
-#endif
diff --git a/sys/applemedia-nonpublic/coremediabuffer.c b/sys/applemedia-nonpublic/coremediabuffer.c
deleted file mode 100644
index bec604a..0000000
--- a/sys/applemedia-nonpublic/coremediabuffer.c
+++ /dev/null
@@ -1,156 +0,0 @@
-/*
- * Copyright (C) 2009 Ole André Vadla Ravnås <oleavr@soundrop.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#include "coremediabuffer.h"
-
-static gboolean
-gst_core_media_meta_init (GstCoreMediaMeta * meta, gpointer params,
- GstBuffer * buf)
-{
- meta->ctx = NULL;
- meta->sample_buf = NULL;
- meta->image_buf = NULL;
- meta->pixel_buf = NULL;
- meta->block_buf = NULL;
-
- return TRUE;
-}
-
-static void
-gst_core_media_meta_free (GstCoreMediaMeta * meta, GstBuffer * buf)
-{
- if (meta->image_buf != NULL) {
- GstCVApi *cv = meta->ctx->cv;
- cv->CVPixelBufferUnlockBaseAddress (meta->image_buf,
- kCVPixelBufferLock_ReadOnly);
- }
- meta->ctx->cm->FigSampleBufferRelease (meta->sample_buf);
- g_object_unref (meta->ctx);
-}
-
-GType
-gst_core_media_meta_api_get_type (void)
-{
- static volatile GType type;
- static const gchar *tags[] = { "memory", NULL };
-
- if (g_once_init_enter (&type)) {
- GType _type = gst_meta_api_type_register ("GstCoreMediaMetaAPI", tags);
- g_once_init_leave (&type, _type);
- }
- return type;
-}
-
-static const GstMetaInfo *
-gst_core_media_meta_get_info (void)
-{
- static const GstMetaInfo *core_media_meta_info = NULL;
-
- if (g_once_init_enter (&core_media_meta_info)) {
- const GstMetaInfo *meta = gst_meta_register (GST_CORE_MEDIA_META_API_TYPE,
- "GstCoreMediaMeta", sizeof (GstCoreMediaMeta),
- (GstMetaInitFunction) gst_core_media_meta_init,
- (GstMetaFreeFunction) gst_core_media_meta_free,
- (GstMetaTransformFunction) NULL);
- g_once_init_leave (&core_media_meta_info, meta);
- }
- return core_media_meta_info;
-}
-
-GstBuffer *
-gst_core_media_buffer_new (GstCoreMediaCtx * ctx, CMSampleBufferRef sample_buf)
-{
- GstCVApi *cv = ctx->cv;
- GstCMApi *cm = ctx->cm;
- CVImageBufferRef image_buf;
- CVPixelBufferRef pixel_buf;
- CMBlockBufferRef block_buf;
- Byte *data = NULL;
- UInt32 size;
- OSStatus status;
- GstBuffer *buf;
- GstCoreMediaMeta *meta;
-
- image_buf = cm->CMSampleBufferGetImageBuffer (sample_buf);
- pixel_buf = NULL;
- block_buf = cm->CMSampleBufferGetDataBuffer (sample_buf);
-
- if (image_buf != NULL &&
- CFGetTypeID (image_buf) == cv->CVPixelBufferGetTypeID ()) {
- pixel_buf = (CVPixelBufferRef) image_buf;
-
- if (cv->CVPixelBufferLockBaseAddress (pixel_buf,
- kCVPixelBufferLock_ReadOnly) != kCVReturnSuccess) {
- goto error;
- }
-
- if (cv->CVPixelBufferIsPlanar (pixel_buf)) {
- gint plane_count, plane_idx;
-
- data = cv->CVPixelBufferGetBaseAddressOfPlane (pixel_buf, 0);
-
- size = 0;
- plane_count = cv->CVPixelBufferGetPlaneCount (pixel_buf);
- for (plane_idx = 0; plane_idx != plane_count; plane_idx++) {
- size += cv->CVPixelBufferGetBytesPerRowOfPlane (pixel_buf, plane_idx) *
- cv->CVPixelBufferGetHeightOfPlane (pixel_buf, plane_idx);
- }
- } else {
- data = cv->CVPixelBufferGetBaseAddress (pixel_buf);
- size = cv->CVPixelBufferGetBytesPerRow (pixel_buf) *
- cv->CVPixelBufferGetHeight (pixel_buf);
- }
- } else if (block_buf != NULL) {
- status = cm->CMBlockBufferGetDataPointer (block_buf, 0, 0, 0, &data);
- if (status != noErr)
- goto error;
- size = cm->CMBlockBufferGetDataLength (block_buf);
- } else {
- goto error;
- }
-
- buf = gst_buffer_new ();
-
- meta = (GstCoreMediaMeta *) gst_buffer_add_meta (buf,
- gst_core_media_meta_get_info (), NULL);
- meta->ctx = g_object_ref (ctx);
- meta->sample_buf = cm->FigSampleBufferRetain (sample_buf);
- meta->image_buf = image_buf;
- meta->pixel_buf = pixel_buf;
- meta->block_buf = block_buf;
-
- gst_buffer_append_memory (buf,
- gst_memory_new_wrapped (GST_MEMORY_FLAG_NO_SHARE, data,
- size, 0, size, NULL, NULL));
-
- return buf;
-
-error:
- return NULL;
-}
-
-CVPixelBufferRef
-gst_core_media_buffer_get_pixel_buffer (GstBuffer * buf)
-{
- GstCoreMediaMeta *meta = (GstCoreMediaMeta *) gst_buffer_get_meta (buf,
- GST_CORE_MEDIA_META_API_TYPE);
- g_return_val_if_fail (meta != NULL, NULL);
-
- return meta->ctx->cv->CVPixelBufferRetain (meta->pixel_buf);
-}
diff --git a/sys/applemedia-nonpublic/coremediabuffer.h b/sys/applemedia-nonpublic/coremediabuffer.h
deleted file mode 100644
index dffb43f..0000000
--- a/sys/applemedia-nonpublic/coremediabuffer.h
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Copyright (C) 2009 Ole André Vadla Ravnås <oleavr@soundrop.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifndef __GST_CORE_MEDIA_BUFFER_H__
-#define __GST_CORE_MEDIA_BUFFER_H__
-
-#include <gst/gst.h>
-
-#include "coremediactx.h"
-
-G_BEGIN_DECLS
-
-#define GST_CORE_MEDIA_META_API_TYPE (gst_core_media_meta_api_get_type())
-#define gst_buffer_get_core_media_meta(b) \
- ((GstCoreMediaMeta*)gst_buffer_get_meta((b),GST_CORE_MEDIA_META_API_TYPE))
-
-typedef struct _GstCoreMediaMeta
-{
- GstMeta meta;
-
- GstCoreMediaCtx * ctx;
- CMSampleBufferRef sample_buf;
- CVImageBufferRef image_buf;
- CVPixelBufferRef pixel_buf;
- CMBlockBufferRef block_buf;
-} GstCoreMediaMeta;
-
-
-GstBuffer * gst_core_media_buffer_new (GstCoreMediaCtx * ctx,
- CMSampleBufferRef sample_buf);
-CVPixelBufferRef gst_core_media_buffer_get_pixel_buffer
- (GstBuffer * buf);
-GType gst_core_media_meta_api_get_type (void);
-
-G_END_DECLS
-
-#endif /* __GST_CORE_MEDIA_BUFFER_H__ */
diff --git a/sys/applemedia-nonpublic/coremediactx.c b/sys/applemedia-nonpublic/coremediactx.c
deleted file mode 100644
index 2890205..0000000
--- a/sys/applemedia-nonpublic/coremediactx.c
+++ /dev/null
@@ -1,136 +0,0 @@
-/*
- * Copyright (C) 2010 Ole André Vadla Ravnås <oleavr@soundrop.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "coremediactx.h"
-
-#include <gst/gst.h>
-
-typedef struct _GstApiProvider GstApiProvider;
-
-typedef gpointer (*GstApiProviderObtainFunc) (GError ** error);
-
-struct _GstApiProvider
-{
- GstCoreMediaApi api;
- GstApiProviderObtainFunc obtain;
- guint offset;
-};
-
-#define API_PROVIDER(AN, a_n) \
- { GST_API_##AN, (GstApiProviderObtainFunc) gst_##a_n##_api_obtain, \
- G_STRUCT_OFFSET (GstCoreMediaCtx, a_n) }
-
-static const GstApiProvider api_provider[] = {
- API_PROVIDER (CORE_VIDEO, cv),
- API_PROVIDER (CORE_MEDIA, cm),
-#ifdef HAVE_IOS
-#if 0
- API_PROVIDER (MEDIA_TOOLBOX, mt),
- API_PROVIDER (CELESTIAL, cel)
-#endif
-#else
- API_PROVIDER (MIO, mio),
-#endif
-};
-
-G_DEFINE_TYPE (GstCoreMediaCtx, gst_core_media_ctx, G_TYPE_OBJECT);
-
-static void
-gst_core_media_ctx_init (GstCoreMediaCtx * self)
-{
-}
-
-static void
-gst_core_media_ctx_dispose (GObject * object)
-{
- GstCoreMediaCtx *self = GST_CORE_MEDIA_CTX_CAST (object);
- guint i;
-
- for (i = 0; i != G_N_ELEMENTS (api_provider); i++) {
- const GstApiProvider *ap = &api_provider[i];
- gpointer *api_ptr = (gpointer *) ((guint8 *) self + ap->offset);
-
- if (*api_ptr != NULL) {
- g_object_unref (*api_ptr);
- *api_ptr = NULL;
- }
- }
-
- G_OBJECT_CLASS (gst_core_media_ctx_parent_class)->dispose (object);
-}
-
-static void
-gst_core_media_ctx_class_init (GstCoreMediaCtxClass * klass)
-{
- GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
-
- gobject_class->dispose = gst_core_media_ctx_dispose;
-}
-
-GstCoreMediaCtx *
-gst_core_media_ctx_new (GstCoreMediaApi required_apis, GError ** error)
-{
- GstCoreMediaCtx *ctx;
- GArray *error_messages;
- guint i;
-
- ctx = g_object_new (GST_TYPE_CORE_MEDIA_CTX, NULL);
-
- error_messages = g_array_new (TRUE, FALSE, sizeof (gchar *));
-
- for (i = 0; i != G_N_ELEMENTS (api_provider); i++) {
- const GstApiProvider *ap = &api_provider[i];
-
- if ((required_apis & ap->api) != 0) {
- gpointer *api_ptr = (gpointer *) ((guint8 *) ctx + ap->offset);
- GError *tmp_error = NULL;
-
- *api_ptr = ap->obtain (&tmp_error);
- if (tmp_error != NULL) {
- gchar *message_copy = g_strdup (tmp_error->message);
- g_array_append_val (error_messages, message_copy);
- g_clear_error (&tmp_error);
- }
- }
- }
-
- if (error_messages->len != 0) {
- gchar *errors_joined;
-
- errors_joined = g_strjoinv ("\n\t* ", (gchar **) error_messages->data);
- g_set_error (error, GST_RESOURCE_ERROR, GST_RESOURCE_ERROR_FAILED,
- "Could not obtain required API%s:%s%s",
- (error_messages->len == 1) ? "" : "s",
- (error_messages->len == 1) ? " " : "\n\t* ", errors_joined);
- g_free (errors_joined);
-
- g_object_unref (ctx);
- ctx = NULL;
- }
-
- for (i = 0; i != error_messages->len; i++)
- g_free (g_array_index (error_messages, gchar *, i));
- g_array_free (error_messages, TRUE);
-
- return ctx;
-}
diff --git a/sys/applemedia-nonpublic/coremediactx.h b/sys/applemedia-nonpublic/coremediactx.h
deleted file mode 100644
index 45640bd..0000000
--- a/sys/applemedia-nonpublic/coremediactx.h
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- * Copyright (C) 2010 Ole André Vadla Ravnås <oleavr@soundrop.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifndef __GST_CORE_MEDIA_CTX_H__
-#define __GST_CORE_MEDIA_CTX_H__
-
-#include "cvapi.h"
-#include "cmapi.h"
-
-#include "mioapi.h"
-
-#include "mtapi.h"
-#include "celapi.h"
-
-#include <glib.h>
-
-G_BEGIN_DECLS
-
-#define GST_TYPE_CORE_MEDIA_CTX \
- (gst_core_media_ctx_get_type ())
-#define GST_CORE_MEDIA_CTX(obj) \
- (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_CORE_MEDIA_CTX, GstCoreMediaCtx))
-#define GST_CORE_MEDIA_CTX_CAST(obj) \
- ((GstCoreMediaCtx *) (obj))
-#define GST_CORE_MEDIA_CTX_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_CORE_MEDIA_CTX, GstCoreMediaCtxClass))
-#define GST_IS_CORE_MEDIA_CTX(obj) \
- (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_CORE_MEDIA_CTX))
-#define GST_IS_CORE_MEDIA_CTX_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_CORE_MEDIA_CTX))
-
-typedef struct _GstCoreMediaCtx GstCoreMediaCtx;
-typedef struct _GstCoreMediaCtxClass GstCoreMediaCtxClass;
-
-typedef enum _GstCoreMediaApi GstCoreMediaApi;
-
-struct _GstCoreMediaCtx
-{
- GObject parent;
-
- /* Common */
- GstCVApi *cv;
- GstCMApi *cm;
-
- /* OS X */
- GstMIOApi *mio;
-
- /* iPhone */
- GstMTApi *mt;
- GstCelApi *cel;
-};
-
-struct _GstCoreMediaCtxClass
-{
- GObjectClass parent_class;
-};
-
-enum _GstCoreMediaApi
-{
- GST_API_CORE_VIDEO = (1 << 0),
- GST_API_CORE_MEDIA = (1 << 1),
- GST_API_VIDEO_TOOLBOX = (1 << 2),
-
- GST_API_MIO = (1 << 3),
-
- GST_API_MEDIA_TOOLBOX = (1 << 4),
- GST_API_CELESTIAL = (1 << 5)
-};
-
-GType gst_core_media_ctx_get_type (void);
-
-GstCoreMediaCtx * gst_core_media_ctx_new (GstCoreMediaApi required_apis,
- GError ** error);
-
-G_END_DECLS
-
-#endif
diff --git a/sys/applemedia-nonpublic/corevideobuffer.c b/sys/applemedia-nonpublic/corevideobuffer.c
deleted file mode 100644
index 26b5643..0000000
--- a/sys/applemedia-nonpublic/corevideobuffer.c
+++ /dev/null
@@ -1,151 +0,0 @@
-/*
- * Copyright (C) 2010 Ole André Vadla Ravnås <oleavr@soundrop.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#include "corevideobuffer.h"
-
-static gboolean
-gst_core_video_meta_init (GstCoreVideoMeta * meta, gpointer params,
- GstBuffer * buf)
-{
- meta->ctx = NULL;
- meta->cvbuf = NULL;
- meta->pixbuf = NULL;
-
- return TRUE;
-}
-
-static void
-gst_core_video_meta_free (GstCoreVideoMeta * meta, GstBuffer * buf)
-{
- GstCVApi *cv = meta->ctx->cv;
-
- if (meta->pixbuf != NULL) {
- cv->CVPixelBufferUnlockBaseAddress (meta->pixbuf,
- kCVPixelBufferLock_ReadOnly);
- }
-
- cv->CVBufferRelease (meta->cvbuf);
- g_object_unref (meta->ctx);
-}
-
-GType
-gst_core_video_meta_api_get_type (void)
-{
- static volatile GType type;
- static const gchar *tags[] = { "memory", NULL };
-
- if (g_once_init_enter (&type)) {
- GType _type = gst_meta_api_type_register ("GstCoreVideoMetaAPI", tags);
- g_once_init_leave (&type, _type);
- }
- return type;
-}
-
-static const GstMetaInfo *
-gst_core_video_meta_get_info (void)
-{
- static const GstMetaInfo *core_video_meta_info = NULL;
-
- if (g_once_init_enter (&core_video_meta_info)) {
- const GstMetaInfo *meta = gst_meta_register (GST_CORE_VIDEO_META_API_TYPE,
- "GstCoreVideoMeta", sizeof (GstCoreVideoMeta),
- (GstMetaInitFunction) gst_core_video_meta_init,
- (GstMetaFreeFunction) gst_core_video_meta_free,
- (GstMetaTransformFunction) NULL);
- g_once_init_leave (&core_video_meta_info, meta);
- }
- return core_video_meta_info;
-}
-
-GstBuffer *
-gst_core_video_buffer_new (GstCoreMediaCtx * ctx, CVBufferRef cvbuf,
- GstVideoInfo * vinfo)
-{
- GstCVApi *cv = ctx->cv;
- void *data;
- size_t size;
- CVPixelBufferRef pixbuf = NULL;
- GstBuffer *buf;
- GstCoreVideoMeta *meta;
- guint width, height, n_planes, i;
- gsize offset[GST_VIDEO_MAX_PLANES];
- gint stride[GST_VIDEO_MAX_PLANES];
-
- if (CFGetTypeID (cvbuf) != cv->CVPixelBufferGetTypeID ())
- /* TODO: Do we need to handle other buffer types? */
- goto error;
-
- pixbuf = (CVPixelBufferRef) cvbuf;
-
- if (cv->CVPixelBufferLockBaseAddress (pixbuf,
- kCVPixelBufferLock_ReadOnly) != kCVReturnSuccess) {
- goto error;
- }
-
- buf = gst_buffer_new ();
-
- /* add the corevideo meta to free the underlying corevideo buffer */
- meta = (GstCoreVideoMeta *) gst_buffer_add_meta (buf,
- gst_core_video_meta_get_info (), NULL);
- meta->ctx = g_object_ref (ctx);
- meta->cvbuf = cv->CVBufferRetain (cvbuf);
- meta->pixbuf = pixbuf;
-
- /* set stride, offset and size */
- memset (&offset, 0, sizeof (offset));
- memset (&stride, 0, sizeof (stride));
-
- data = cv->CVPixelBufferGetBaseAddress (pixbuf);
- height = cv->CVPixelBufferGetHeight (pixbuf);
- if (cv->CVPixelBufferIsPlanar (pixbuf)) {
- GstVideoInfo tmp_vinfo;
-
- n_planes = cv->CVPixelBufferGetPlaneCount (pixbuf);
- for (i = 0; i < n_planes; ++i)
- stride[i] = cv->CVPixelBufferGetBytesPerRowOfPlane (pixbuf, i);
-
- /* FIXME: don't hardcode NV12 */
- gst_video_info_init (&tmp_vinfo);
- gst_video_info_set_format (&tmp_vinfo,
- GST_VIDEO_FORMAT_NV12, stride[0], height);
- offset[1] = tmp_vinfo.offset[1];
- size = tmp_vinfo.size;
- } else {
- n_planes = 1;
- size = cv->CVPixelBufferGetBytesPerRow (pixbuf) * height;
- }
-
- gst_buffer_append_memory (buf,
- gst_memory_new_wrapped (GST_MEMORY_FLAG_NO_SHARE, data,
- size, 0, size, NULL, NULL));
-
- if (vinfo) {
- GstVideoMeta *video_meta;
-
- width = vinfo->width;
- video_meta =
- gst_buffer_add_video_meta_full (buf, GST_VIDEO_FRAME_FLAG_NONE,
- GST_VIDEO_FORMAT_NV12, width, height, n_planes, offset, stride);
- }
-
- return buf;
-
-error:
- return NULL;
-}
diff --git a/sys/applemedia-nonpublic/corevideobuffer.h b/sys/applemedia-nonpublic/corevideobuffer.h
deleted file mode 100644
index 844d655..0000000
--- a/sys/applemedia-nonpublic/corevideobuffer.h
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (C) 2010 Ole André Vadla Ravnås <oleavr@soundrop.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifndef __GST_CORE_VIDEO_BUFFER_H__
-#define __GST_CORE_VIDEO_BUFFER_H__
-
-#include <gst/gst.h>
-#include <gst/video/video.h>
-#include <gst/video/gstvideometa.h>
-
-#include "coremediactx.h"
-
-G_BEGIN_DECLS
-
-#define GST_CORE_VIDEO_META_API_TYPE (gst_core_video_meta_api_get_type())
-#define gst_buffer_get_core_video_meta(b) \
- ((GstCoreVideoMeta*)gst_buffer_get_meta((b),GST_CORE_VIDEO_META_API_TYPE))
-
-typedef struct _GstCoreVideoMeta
-{
- GstMeta meta;
-
- GstCoreMediaCtx *ctx;
- CVBufferRef cvbuf;
- CVPixelBufferRef pixbuf;
-} GstCoreVideoMeta;
-
-GstBuffer * gst_core_video_buffer_new (GstCoreMediaCtx * ctx,
- CVBufferRef cvbuf,
- GstVideoInfo *info);
-GType gst_core_video_meta_api_get_type (void);
-
-G_END_DECLS
-
-#endif /* __GST_CORE_VIDEO_BUFFER_H__ */
diff --git a/sys/applemedia-nonpublic/cvapi.c b/sys/applemedia-nonpublic/cvapi.c
deleted file mode 100644
index 998428a..0000000
--- a/sys/applemedia-nonpublic/cvapi.c
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * Copyright (C) 2010 Ole André Vadla Ravnås <oleavr@soundrop.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#include "cvapi.h"
-
-#include "dynapi-internal.h"
-
-#define CV_FRAMEWORK_PATH "/System/Library/Frameworks/CoreVideo.framework/" \
- "CoreVideo"
-
-G_DEFINE_TYPE (GstCVApi, gst_cv_api, GST_TYPE_DYN_API);
-
-static void
-gst_cv_api_init (GstCVApi * self)
-{
-}
-
-static void
-gst_cv_api_class_init (GstCVApiClass * klass)
-{
-}
-
-#define SYM_SPEC(name) GST_DYN_SYM_SPEC (GstCVApi, name)
-#define SYM_SPEC_OPTIONAL(name) GST_DYN_SYM_SPEC_OPTIONAL (GstCVApi, name)
-
-GstCVApi *
-gst_cv_api_obtain (GError ** error)
-{
- static const GstDynSymSpec symbols[] = {
- SYM_SPEC (CVBufferRelease),
- SYM_SPEC (CVBufferRetain),
-
- SYM_SPEC (CVPixelBufferCreateWithBytes),
- SYM_SPEC (CVPixelBufferCreateWithPlanarBytes),
- SYM_SPEC (CVPixelBufferGetBaseAddress),
- SYM_SPEC (CVPixelBufferGetBaseAddressOfPlane),
- SYM_SPEC (CVPixelBufferGetBytesPerRow),
- SYM_SPEC (CVPixelBufferGetBytesPerRowOfPlane),
- SYM_SPEC (CVPixelBufferGetHeight),
- SYM_SPEC (CVPixelBufferGetHeightOfPlane),
- SYM_SPEC_OPTIONAL (CVPixelBufferGetIOSurface),
- SYM_SPEC (CVPixelBufferGetPlaneCount),
- SYM_SPEC (CVPixelBufferGetTypeID),
- SYM_SPEC (CVPixelBufferIsPlanar),
- SYM_SPEC (CVPixelBufferLockBaseAddress),
- SYM_SPEC (CVPixelBufferRelease),
- SYM_SPEC (CVPixelBufferRetain),
- SYM_SPEC (CVPixelBufferUnlockBaseAddress),
-
- SYM_SPEC (kCVPixelBufferPixelFormatTypeKey),
- SYM_SPEC (kCVPixelBufferWidthKey),
- SYM_SPEC (kCVPixelBufferHeightKey),
- SYM_SPEC (kCVPixelBufferBytesPerRowAlignmentKey),
- SYM_SPEC (kCVPixelBufferPlaneAlignmentKey),
-
- {NULL, 0},
- };
-
- return _gst_dyn_api_new (gst_cv_api_get_type (), CV_FRAMEWORK_PATH, symbols,
- error);
-}
diff --git a/sys/applemedia-nonpublic/cvapi.h b/sys/applemedia-nonpublic/cvapi.h
deleted file mode 100644
index 63c8cba..0000000
--- a/sys/applemedia-nonpublic/cvapi.h
+++ /dev/null
@@ -1,126 +0,0 @@
-/*
- * Copyright (C) 2010 Ole André Vadla Ravnås <oleavr@soundrop.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifndef __GST_CV_API_H__
-#define __GST_CV_API_H__
-
-#include "dynapi.h"
-
-#include <CoreFoundation/CoreFoundation.h>
-
-G_BEGIN_DECLS
-
-typedef struct _GstCVApi GstCVApi;
-typedef struct _GstCVApiClass GstCVApiClass;
-
-typedef int32_t CVReturn;
-
-typedef uint64_t CVOptionFlags;
-
-typedef struct _CVBuffer * CVBufferRef;
-typedef CVBufferRef CVImageBufferRef;
-typedef CVImageBufferRef CVPixelBufferRef;
-
-typedef void (* CVPixelBufferReleaseBytesCallback) (void * releaseRefCon,
- const void * baseAddress);
-
-enum _CVReturn
-{
- kCVReturnSuccess = 0
-};
-
-enum _CVPixelFormatType
-{
- kCVPixelFormatType_420YpCbCr8Planar = 'y420',
- kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange = '420v',
- kCVPixelFormatType_422YpCbCr8Deprecated = 'yuvs',
- kCVPixelFormatType_422YpCbCr8 = '2vuy'
-};
-
-enum _CVPixelBufferLockFlags
-{
- kCVPixelBufferLock_ReadOnly = 0x00000001
-};
-
-struct _GstCVApi
-{
- GstDynApi parent;
-
- void (* CVBufferRelease) (CVBufferRef buffer);
- CVBufferRef (* CVBufferRetain) (CVBufferRef buffer);
-
- CVReturn (* CVPixelBufferCreateWithBytes)
- (CFAllocatorRef allocator, size_t width, size_t height,
- OSType pixelFormatType, void * baseAddress, size_t bytesPerRow,
- CVPixelBufferReleaseBytesCallback releaseCallback,
- void * releaseRefCon, CFDictionaryRef pixelBufferAttributes,
- CVPixelBufferRef * pixelBufferOut);
- CVReturn (* CVPixelBufferCreateWithPlanarBytes)
- (CFAllocatorRef allocator, size_t width, size_t height,
- OSType pixelFormatType, void * dataPtr, size_t dataSize,
- size_t numberOfPlanes, void *planeBaseAddress[],
- size_t planeWidth[], size_t planeHeight[],
- size_t planeBytesPerRow[],
- CVPixelBufferReleaseBytesCallback releaseCallback,
- void * releaseRefCon, CFDictionaryRef pixelBufferAttributes,
- CVPixelBufferRef * pixelBufferOut);
- void * (* CVPixelBufferGetBaseAddress)
- (CVPixelBufferRef pixelBuffer);
- void * (* CVPixelBufferGetBaseAddressOfPlane)
- (CVPixelBufferRef pixelBuffer, size_t planeIndex);
- size_t (* CVPixelBufferGetBytesPerRow)
- (CVPixelBufferRef pixelBuffer);
- size_t (* CVPixelBufferGetBytesPerRowOfPlane)
- (CVPixelBufferRef pixelBuffer, size_t planeIndex);
- size_t (* CVPixelBufferGetHeight) (CVPixelBufferRef pixelBuffer);
- size_t (* CVPixelBufferGetHeightOfPlane)
- (CVPixelBufferRef pixelBuffer, size_t planeIndex);
- void * (* CVPixelBufferGetIOSurface)
- (CVPixelBufferRef pixelBuffer);
- size_t (* CVPixelBufferGetPlaneCount)
- (CVPixelBufferRef pixelBuffer);
- CFTypeID (* CVPixelBufferGetTypeID) (void);
- Boolean (* CVPixelBufferIsPlanar) (CVPixelBufferRef pixelBuffer);
- CVReturn (* CVPixelBufferLockBaseAddress)
- (CVPixelBufferRef pixelBuffer, CVOptionFlags lockFlags);
- void (* CVPixelBufferRelease) (CVPixelBufferRef pixelBuffer);
- CVPixelBufferRef (* CVPixelBufferRetain)
- (CVPixelBufferRef pixelBuffer);
- CVReturn (* CVPixelBufferUnlockBaseAddress)
- (CVPixelBufferRef pixelBuffer, CVOptionFlags unlockFlags);
-
- CFStringRef * kCVPixelBufferPixelFormatTypeKey;
- CFStringRef * kCVPixelBufferWidthKey;
- CFStringRef * kCVPixelBufferHeightKey;
- CFStringRef * kCVPixelBufferBytesPerRowAlignmentKey;
- CFStringRef * kCVPixelBufferPlaneAlignmentKey;
-};
-
-struct _GstCVApiClass
-{
- GstDynApiClass parent_class;
-};
-
-GType gst_cv_api_get_type (void);
-
-GstCVApi * gst_cv_api_obtain (GError ** error);
-
-G_END_DECLS
-
-#endif
diff --git a/sys/applemedia-nonpublic/dynapi-internal.h b/sys/applemedia-nonpublic/dynapi-internal.h
deleted file mode 100644
index adcd4f1..0000000
--- a/sys/applemedia-nonpublic/dynapi-internal.h
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright (C) 2010 Ole André Vadla Ravnås <oleavr@soundrop.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifndef __GST_DYN_API_INTERNAL_H__
-#define __GST_DYN_API_INTERNAL_H__
-
-#include <glib-object.h>
-
-G_BEGIN_DECLS
-
-typedef struct _GstDynSymSpec GstDynSymSpec;
-
-struct _GstDynSymSpec
-{
- const gchar * name;
- guint offset;
- gboolean is_required;
-};
-
-gpointer _gst_dyn_api_new (GType derived_type, const gchar * filename,
- const GstDynSymSpec * symbols, GError ** error);
-
-G_END_DECLS
-
-#endif
-
diff --git a/sys/applemedia-nonpublic/dynapi.c b/sys/applemedia-nonpublic/dynapi.c
deleted file mode 100644
index 2317f80..0000000
--- a/sys/applemedia-nonpublic/dynapi.c
+++ /dev/null
@@ -1,193 +0,0 @@
-/*
- * Copyright (C) 2010 Ole André Vadla Ravnås <oleavr@soundrop.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#include "dynapi.h"
-
-#include "dynapi-internal.h"
-
-#include <gmodule.h>
-#include <gst/gst.h>
-
-GST_DEBUG_CATEGORY (gst_dyn_api_debug);
-#define GST_CAT_DEFAULT gst_dyn_api_debug
-
-enum
-{
- PROP_0,
- PROP_FILENAME
-};
-
-struct _GstDynApiPrivate
-{
- gchar *filename;
- GModule *module;
-};
-
-G_DEFINE_TYPE (GstDynApi, gst_dyn_api, G_TYPE_OBJECT);
-
-static void
-gst_dyn_api_init (GstDynApi * self)
-{
- self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, GST_TYPE_DYN_API,
- GstDynApiPrivate);
-}
-
-static void
-gst_dyn_api_dispose (GObject * object)
-{
- GstDynApi *self = GST_DYN_API_CAST (object);
- GstDynApiPrivate *priv = self->priv;
-
- if (priv->module != NULL) {
- g_module_close (priv->module);
- priv->module = NULL;
- }
-
- G_OBJECT_CLASS (gst_dyn_api_parent_class)->dispose (object);
-}
-
-static void
-gst_dyn_api_finalize (GObject * object)
-{
- GstDynApi *self = GST_DYN_API_CAST (object);
- GstDynApiPrivate *priv = self->priv;
-
- g_free (priv->filename);
-
- G_OBJECT_CLASS (gst_dyn_api_parent_class)->finalize (object);
-}
-
-static void
-gst_dyn_api_get_property (GObject * object, guint prop_id,
- GValue * value, GParamSpec * pspec)
-{
- GstDynApi *self = GST_DYN_API (object);
-
- switch (prop_id) {
- case PROP_FILENAME:
- g_value_set_string (value, self->priv->filename);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static void
-gst_dyn_api_set_property (GObject * object, guint prop_id,
- const GValue * value, GParamSpec * pspec)
-{
- GstDynApi *self = GST_DYN_API (object);
-
- switch (prop_id) {
- case PROP_FILENAME:
- g_free (self->priv->filename);
- self->priv->filename = g_value_dup_string (value);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static void
-gst_dyn_api_class_init (GstDynApiClass * klass)
-{
- GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
-
- gobject_class->dispose = gst_dyn_api_dispose;
- gobject_class->finalize = gst_dyn_api_finalize;
- gobject_class->get_property = gst_dyn_api_get_property;
- gobject_class->set_property = gst_dyn_api_set_property;
-
- g_type_class_add_private (klass, sizeof (GstDynApiPrivate));
-
- g_object_class_install_property (gobject_class, PROP_FILENAME,
- g_param_spec_string ("filename", "Filename", "Filename", NULL,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS));
-}
-
-gpointer
-_gst_dyn_api_new (GType derived_type, const gchar * filename,
- const GstDynSymSpec * symbols, GError ** error)
-{
- GstDynApi *api;
- GstDynApiPrivate *priv;
- guint i;
- GArray *names_not_found;
-
- api = g_object_new (derived_type, "filename", filename, NULL);
- priv = api->priv;
-
- priv->module = g_module_open (priv->filename, 0);
- if (priv->module == NULL)
- goto open_failed;
-
- names_not_found = g_array_new (TRUE, FALSE, sizeof (gchar *));
-
- for (i = 0; symbols[i].name != NULL; i++) {
- const GstDynSymSpec *s = &symbols[i];
- if (!g_module_symbol (priv->module, s->name,
- (gpointer *) (((guint8 *) api) + s->offset)) && s->is_required) {
- g_array_append_val (names_not_found, s->name);
- }
- }
-
- if (names_not_found->len > 0)
- goto one_or_more_name_not_found;
-
- g_array_free (names_not_found, TRUE);
-
- return api;
-
- /* ERRORS */
-open_failed:
- {
- gchar *basename;
-
- basename = g_path_get_basename (filename);
- g_set_error (error, GST_RESOURCE_ERROR, GST_RESOURCE_ERROR_FAILED,
- "failed to open %s", basename);
- g_free (basename);
-
- goto any_error;
- }
-one_or_more_name_not_found:
- {
- gchar *basename, *names_joined;
-
- basename = g_path_get_basename (filename);
- names_joined = g_strjoinv (", ", (gchar **) names_not_found->data);
- g_set_error (error, GST_RESOURCE_ERROR, GST_RESOURCE_ERROR_FAILED,
- "missing %u symbol%s in %s: %s",
- names_not_found->len, (names_not_found->len == 1) ? "" : "s",
- basename, names_joined);
- g_free (names_joined);
- g_free (basename);
- g_array_free (names_not_found, TRUE);
-
- goto any_error;
- }
-any_error:
- {
- g_object_unref (api);
-
- return NULL;
- }
-}
diff --git a/sys/applemedia-nonpublic/dynapi.h b/sys/applemedia-nonpublic/dynapi.h
deleted file mode 100644
index b8eda85..0000000
--- a/sys/applemedia-nonpublic/dynapi.h
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * Copyright (C) 2010 Ole André Vadla Ravnås <oleavr@soundrop.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifndef __GST_DYN_API_H__
-#define __GST_DYN_API_H__
-
-#include <glib-object.h>
-
-G_BEGIN_DECLS
-
-#define GST_TYPE_DYN_API \
- (gst_dyn_api_get_type ())
-#define GST_DYN_API(obj) \
- (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_DYN_API, GstDynApi))
-#define GST_DYN_API_CAST(obj) \
- ((GstDynApi *) (obj))
-#define GST_DYN_API_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_DYN_API, GstDynApiClass))
-#define GST_IS_DYN_API(obj) \
- (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_DYN_API))
-#define GST_IS_DYN_API_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_DYN_API))
-
-#define GST_DYN_SYM_SPEC(type, name) \
- { G_STRINGIFY (name), G_STRUCT_OFFSET (type, name), TRUE }
-#define GST_DYN_SYM_SPEC_OPTIONAL(type, name) \
- { G_STRINGIFY (name), G_STRUCT_OFFSET (type, name), FALSE }
-
-typedef struct _GstDynApi GstDynApi;
-typedef struct _GstDynApiClass GstDynApiClass;
-typedef struct _GstDynApiPrivate GstDynApiPrivate;
-
-struct _GstDynApi
-{
- GObject parent;
-
- GstDynApiPrivate * priv;
-};
-
-struct _GstDynApiClass
-{
- GObjectClass parent_class;
-};
-
-GType gst_dyn_api_get_type (void);
-
-G_END_DECLS
-
-#endif
diff --git a/sys/applemedia-nonpublic/mioapi.c b/sys/applemedia-nonpublic/mioapi.c
deleted file mode 100644
index 30d3d35..0000000
--- a/sys/applemedia-nonpublic/mioapi.c
+++ /dev/null
@@ -1,234 +0,0 @@
-/*
- * Copyright (C) 2010 Ole André Vadla Ravnås <oleavr@soundrop.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#include "mioapi.h"
-
-#include "dynapi-internal.h"
-
-#define MIO_FRAMEWORK_PATH "/System/Library/PrivateFrameworks/" \
- "CoreMediaIOServices.framework/CoreMediaIOServices"
-
-GType gst_mio_api_get_type (void);
-
-G_DEFINE_TYPE (GstMIOApi, gst_mio_api, GST_TYPE_DYN_API);
-
-static void
-gst_mio_api_init (GstMIOApi * self)
-{
-}
-
-static void
-gst_mio_api_class_init (GstMIOApiClass * klass)
-{
-}
-
-#define SYM_SPEC(name) GST_DYN_SYM_SPEC (GstMIOApi, name)
-
-GstMIOApi *
-gst_mio_api_obtain (GError ** error)
-{
- static const GstDynSymSpec symbols[] = {
- SYM_SPEC (TundraGraphCreate),
- SYM_SPEC (TundraGraphRelease),
- SYM_SPEC (TundraGraphCreateNode),
- SYM_SPEC (TundraGraphGetNodeInfo),
- SYM_SPEC (TundraGraphSetProperty),
- SYM_SPEC (TundraGraphConnectNodeInput),
- SYM_SPEC (TundraGraphInitialize),
- SYM_SPEC (TundraGraphUninitialize),
- SYM_SPEC (TundraGraphStart),
- SYM_SPEC (TundraGraphStop),
-
- SYM_SPEC (TundraObjectGetPropertyDataSize),
- SYM_SPEC (TundraObjectGetPropertyData),
- SYM_SPEC (TundraObjectIsPropertySettable),
- SYM_SPEC (TundraObjectSetPropertyData),
-
- SYM_SPEC (kTundraSampleBufferAttachmentKey_SequenceNumber),
- SYM_SPEC (kTundraSampleBufferAttachmentKey_HostTime),
-
- {NULL, 0},
- };
-
- return _gst_dyn_api_new (gst_mio_api_get_type (), MIO_FRAMEWORK_PATH, symbols,
- error);
-}
-
-gpointer
-gst_mio_object_get_pointer (gint obj, TundraTargetSpec * pspec, GstMIOApi * mio)
-{
- gpointer ptr;
- guint sz;
- TundraStatus status;
-
- sz = sizeof (ptr);
- status = mio->TundraObjectGetPropertyData (obj, pspec, 0, NULL, &sz, &ptr);
- if (status != kTundraSuccess)
- goto error;
-
- return ptr;
-
-error:
- return NULL;
-}
-
-gchar *
-gst_mio_object_get_string (gint obj, TundraTargetSpec * pspec, GstMIOApi * mio)
-{
- gchar *result = NULL;
- CFStringRef str;
- guint size;
- TundraStatus status;
- CFRange range;
-
- size = sizeof (str);
- status = mio->TundraObjectGetPropertyData (obj, pspec, 0, NULL, &size, &str);
- if (status != kTundraSuccess)
- goto error;
-
- range.location = 0;
- range.length = CFStringGetLength (str);
- result = g_malloc0 (range.length + 1);
- CFStringGetBytes (str, range, kCFStringEncodingUTF8, 0, FALSE,
- (UInt8 *) result, range.length, NULL);
- CFRelease (str);
-
- return result;
-
-error:
- return NULL;
-}
-
-guint32
-gst_mio_object_get_uint32 (gint obj, TundraTargetSpec * pspec, GstMIOApi * mio)
-{
- guint32 val;
- guint size;
- TundraStatus status;
-
- size = sizeof (val);
- status = mio->TundraObjectGetPropertyData (obj, pspec, 0, NULL, &size, &val);
- if (status != kTundraSuccess)
- goto error;
-
- return val;
-
-error:
- return 0;
-}
-
-GArray *
-gst_mio_object_get_array (gint obj, TundraTargetSpec * pspec,
- guint element_size, GstMIOApi * mio)
-{
- return gst_mio_object_get_array_full (obj, pspec, 0, NULL, element_size, mio);
-}
-
-GArray *
-gst_mio_object_get_array_full (gint obj, TundraTargetSpec * pspec,
- guint ctx_size, gpointer ctx, guint element_size, GstMIOApi * mio)
-{
- GArray *arr = NULL;
- guint size, num_elements;
- TundraStatus status;
-
- status = mio->TundraObjectGetPropertyDataSize (obj, pspec, ctx_size, ctx,
- &size);
- if (status != kTundraSuccess)
- goto error;
- else if (size % element_size != 0)
- goto error;
-
- num_elements = size / element_size;
- arr = g_array_sized_new (FALSE, TRUE, element_size, num_elements);
- g_array_set_size (arr, num_elements);
-
- status = mio->TundraObjectGetPropertyData (obj, pspec, ctx_size, ctx,
- &size, arr->data);
- if (status != kTundraSuccess)
- goto error;
-
- return arr;
-
-error:
- if (arr != NULL)
- g_array_free (arr, TRUE);
- return NULL;
-}
-
-gchar *
-gst_mio_object_get_fourcc (gint obj, TundraTargetSpec * pspec, GstMIOApi * mio)
-{
- guint32 fcc;
- guint size;
- TundraStatus status;
-
- size = sizeof (fcc);
- status = mio->TundraObjectGetPropertyData (obj, pspec, 0, NULL, &size, &fcc);
- if (status != kTundraSuccess)
- goto error;
-
- return gst_mio_fourcc_to_string (fcc);
-
-error:
- return NULL;
-}
-
-gpointer
-gst_mio_object_get_raw (gint obj, TundraTargetSpec * pspec, guint * size,
- GstMIOApi * mio)
-{
- gpointer data = NULL;
- guint sz;
- TundraStatus status;
-
- status = mio->TundraObjectGetPropertyDataSize (obj, pspec, 0, NULL, &sz);
- if (status != kTundraSuccess)
- goto error;
-
- data = g_malloc0 (sz);
-
- status = mio->TundraObjectGetPropertyData (obj, pspec, 0, NULL, &sz, data);
- if (status != kTundraSuccess)
- goto error;
-
- if (size != NULL)
- *size = sz;
- return data;
-
-error:
- g_free (data);
- if (size != NULL)
- *size = 0;
- return NULL;
-}
-
-gchar *
-gst_mio_fourcc_to_string (guint32 fcc)
-{
- gchar *result;
-
- result = g_malloc0 (5);
- result[0] = (fcc >> 24) & 0xff;
- result[1] = (fcc >> 16) & 0xff;
- result[2] = (fcc >> 8) & 0xff;
- result[3] = (fcc >> 0) & 0xff;
-
- return result;
-}
diff --git a/sys/applemedia-nonpublic/mioapi.h b/sys/applemedia-nonpublic/mioapi.h
deleted file mode 100644
index fe2cbd8..0000000
--- a/sys/applemedia-nonpublic/mioapi.h
+++ /dev/null
@@ -1,248 +0,0 @@
-/*
- * Copyright (C) 2010 Ole André Vadla Ravnås <oleavr@soundrop.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifndef __GST_MIO_API_H__
-#define __GST_MIO_API_H__
-
-#include "cmapi.h"
-
-#include <CoreFoundation/CoreFoundation.h>
-
-G_BEGIN_DECLS
-
-typedef struct _GstMIOApi GstMIOApi;
-typedef struct _GstMIOApiClass GstMIOApiClass;
-
-#define TUNDRA_SYSTEM_OBJECT_ID 1
-
-typedef int TundraObjectID;
-typedef int TundraDeviceID;
-typedef int TundraUnitID;
-
-typedef enum _TundraStatus TundraStatus;
-typedef enum _TundraVendor TundraVendor;
-typedef enum _TundraScope TundraScope;
-typedef enum _TundraUnit TundraUnit;
-typedef enum _TundraProperty TundraProperty;
-
-typedef enum _TundraDeviceTransportType TundraDeviceTransportType;
-
-typedef struct _TundraTargetSpec TundraTargetSpec;
-typedef struct _TundraFramerate TundraFramerate;
-
-typedef struct _TundraGraph TundraGraph;
-typedef struct _TundraNode TundraNode;
-
-typedef struct _TundraOutputDelegate TundraOutputDelegate;
-
-enum _TundraStatus
-{
- kTundraSuccess = 0,
- kTundraNotSupported = -67456
-};
-
-enum _TundraVendor
-{
- kTundraVendorApple = 'appl'
-};
-
-enum _TundraScope
-{
- kTundraScopeGlobal = 'glob',
- kTundraScopeDAL = 'dal ',
- kTundraScope2PRC = '2prc', /* TODO: Investigate this one */
- kTundraScopeInput = 'inpt',
- kTundraScopeVSyn = 'vsyn'
-};
-
-enum _TundraUnit
-{
- kTundraUnitInput = 'tinp',
- kTundraUnitOutput = 'tout',
- kTundraUnitSync = 'tefc'
-};
-
-enum _TundraProperty
-{
- kTundraSystemPropertyDevices = 'dev#',
-
- kTundraObjectPropertyClass = 'clas',
- kTundraObjectPropertyCreator = 'oplg',
- kTundraObjectPropertyName = 'lnam',
- kTundraObjectPropertyUID = 'uid ',
- kTundraObjectPropertyVendor = 'lmak',
-
- kTundraDevicePropertyConfigApp = 'capp', /* CFString: com.apple.mediaio.TundraDeviceSetup */
- kTundraDevicePropertyExclusiveMode = 'ixna',
- kTundraDevicePropertyHogMode = 'oink',
- kTundraDevicePropertyModelUID = 'muid',
- kTundraDevicePropertyStreams = 'stm#',
- kTundraDevicePropertySuspendedByUser = 'sbyu',
- kTundraDevicePropertyTransportType = 'tran',
-
- kTundraStreamPropertyFormatDescriptions = 'pfta',
- kTundraStreamPropertyFormatDescription = 'pft ',
- kTundraStreamPropertyFrameRates = 'nfr#',
- kTundraStreamPropertyFrameRate = 'nfrt'
-};
-
-struct _TundraTargetSpec
-{
- FourCharCode name;
- FourCharCode scope;
- FourCharCode vendor;
- FourCharCode unk1;
- FourCharCode unk2;
-};
-
-struct _TundraFramerate
-{
- gdouble value;
-};
-
-enum _TundraUnitProperty
-{
- kTundraInputPropertyDeviceID = 302,
-
- kTundraOutputPropertyDelegate = 5903,
-
- kTundraInputUnitProperty_SourcePath = 6780,
-
- kTundraSyncPropertyClockProvider = 7100,
- kTundraSyncPropertyMasterSynchronizer = 7102,
- kTundraSyncPropertySynchronizationDirection = 7104
-};
-
-enum _TundraDeviceTransportType
-{
- kTundraDeviceTransportInvalid = 0,
- kTundraDeviceTransportBuiltin = 'bltn',
- kTundraDeviceTransportScreen = 'scrn',
- kTundraDeviceTransportUSB = 'usb ',
-};
-
-typedef TundraStatus (* TundraOutputRenderFunc) (gpointer instance,
- gpointer unk1, gpointer unk2, gpointer unk3, CMSampleBufferRef sampleBuf);
-typedef TundraStatus (* TundraOutputInitializeFunc) (gpointer instance);
-typedef TundraStatus (* TundraOutputUninitializeFunc) (gpointer instance);
-typedef TundraStatus (* TundraOutputStartFunc) (gpointer instance);
-typedef TundraStatus (* TundraOutputStopFunc) (gpointer instance);
-typedef TundraStatus (* TundraOutputResetFunc) (gpointer instance);
-typedef TundraStatus (* TundraOutputDeallocateFunc) (gpointer instance);
-typedef gboolean (* TundraOutputCanRenderNowFunc) (gpointer instance,
- guint * unk);
-typedef CFArrayRef (* TundraOutputAvailableFormatsFunc) (gpointer instance,
- gboolean ensureOnly);
-typedef TundraStatus (* TundraOutputCopyClockFunc) (gpointer instance);
-typedef TundraStatus (* TundraOutputGetPropertyInfoFunc) (gpointer instance,
- guint propId);
-typedef TundraStatus (* TundraOutputGetPropertyFunc) (gpointer instance,
- guint propId);
-typedef TundraStatus (* TundraOutputSetPropertyFunc) (gpointer instance,
- guint propId);
-
-#pragma pack(push, 1)
-
-struct _TundraOutputDelegate
-{
- int unk1;
- gpointer instance;
- TundraOutputRenderFunc Render;
- TundraOutputInitializeFunc Initialize;
- TundraOutputUninitializeFunc Uninitialize;
- TundraOutputStartFunc Start;
- TundraOutputStopFunc Stop;
- TundraOutputResetFunc Reset;
- TundraOutputDeallocateFunc Deallocate;
- TundraOutputCanRenderNowFunc CanRenderNow;
- TundraOutputAvailableFormatsFunc AvailableFormats;
- TundraOutputCopyClockFunc CopyClock;
- TundraOutputGetPropertyInfoFunc GetPropertyInfo;
- TundraOutputGetPropertyFunc GetProperty;
- TundraOutputSetPropertyFunc SetProperty;
-};
-
-#pragma pack(pop)
-
-struct _GstMIOApi
-{
- GstDynApi parent;
-
- TundraStatus (* TundraGraphCreate) (CFAllocatorRef allocator,
- TundraGraph ** graph);
- void (* TundraGraphRelease) (TundraGraph * graph);
- TundraStatus (* TundraGraphCreateNode) (TundraGraph * graph,
- gint nodeId, UInt32 unk1, UInt32 unk2, TundraTargetSpec * spec,
- UInt32 unk3, TundraUnitID * node);
- TundraStatus (* TundraGraphGetNodeInfo) (TundraGraph * graph,
- gint nodeId, UInt32 unk1, UInt32 unk2, UInt32 unk3, UInt32 unk4,
- gpointer * info);
- TundraStatus (* TundraGraphSetProperty) (TundraGraph * graph,
- gint nodeId, UInt32 unk1, guint propId, UInt32 unk2, UInt32 unk3,
- gpointer data, guint size);
- TundraStatus (* TundraGraphConnectNodeInput) (TundraGraph * graph,
- TundraUnitID from_node, guint from_bus,
- TundraUnitID to_node, guint to_bus);
- TundraStatus (* TundraGraphInitialize) (TundraGraph * graph);
- TundraStatus (* TundraGraphUninitialize) (TundraGraph * graph);
- TundraStatus (* TundraGraphStart) (TundraGraph * graph);
- TundraStatus (* TundraGraphStop) (TundraGraph * graph);
-
- TundraStatus (* TundraObjectGetPropertyDataSize) (TundraObjectID obj,
- TundraTargetSpec * spec, UInt32 contextSize, void * context, guint * size);
- TundraStatus (* TundraObjectGetPropertyData) (TundraObjectID obj,
- TundraTargetSpec * spec, UInt32 contextSize, void * context, guint * size,
- gpointer data);
- TundraStatus (* TundraObjectIsPropertySettable) (TundraObjectID obj,
- TundraTargetSpec * spec, Boolean *isSettable);
- TundraStatus (* TundraObjectSetPropertyData) (TundraObjectID obj,
- TundraTargetSpec * spec, gpointer unk1, gpointer unk2, guint size,
- gpointer data);
-
- CFStringRef * kTundraSampleBufferAttachmentKey_SequenceNumber;
- CFStringRef * kTundraSampleBufferAttachmentKey_HostTime;
-};
-
-struct _GstMIOApiClass
-{
- GstDynApiClass parent_class;
-};
-
-GstMIOApi * gst_mio_api_obtain (GError ** error);
-
-gpointer gst_mio_object_get_pointer (gint obj, TundraTargetSpec * pspec,
- GstMIOApi * mio);
-gchar * gst_mio_object_get_string (gint obj, TundraTargetSpec * pspec,
- GstMIOApi * mio);
-guint32 gst_mio_object_get_uint32 (gint obj, TundraTargetSpec * pspec,
- GstMIOApi * mio);
-gchar * gst_mio_object_get_fourcc (gint obj, TundraTargetSpec * pspec,
- GstMIOApi * mio);
-GArray * gst_mio_object_get_array (gint obj, TundraTargetSpec * pspec,
- guint element_size, GstMIOApi * mio);
-GArray * gst_mio_object_get_array_full (gint obj, TundraTargetSpec * pspec,
- guint ctx_size, gpointer ctx, guint element_size, GstMIOApi * mio);
-gpointer gst_mio_object_get_raw (gint obj, TundraTargetSpec * pspec,
- guint * size, GstMIOApi * mio);
-
-gchar * gst_mio_fourcc_to_string (guint32 fcc);
-
-G_END_DECLS
-
-#endif
diff --git a/sys/applemedia-nonpublic/miovideodevice.h b/sys/applemedia-nonpublic/miovideodevice.h
deleted file mode 100644
index 87b86f3..0000000
--- a/sys/applemedia-nonpublic/miovideodevice.h
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- * Copyright (C) 2009 Ole André Vadla Ravnås <oleavr@soundrop.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifndef __GST_MIO_VIDEO_DEVICE_H__
-#define __GST_MIO_VIDEO_DEVICE_H__
-
-#include <gst/gst.h>
-
-#include "coremediactx.h"
-
-G_BEGIN_DECLS
-
-#define GST_TYPE_MIO_VIDEO_DEVICE \
- (gst_mio_video_device_get_type ())
-#define GST_MIO_VIDEO_DEVICE(obj) \
- (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_MIO_VIDEO_DEVICE, GstMIOVideoDevice))
-#define GST_MIO_VIDEO_DEVICE_CAST(obj) \
- ((GstMIOVideoDevice *) (obj))
-#define GST_MIO_VIDEO_DEVICE_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_MIO_VIDEO_DEVICE, GstMIOVideoDeviceClass))
-#define GST_IS_MIO_VIDEO_DEVICE(obj) \
- (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_MIO_VIDEO_DEVICE))
-#define GST_IS_MIO_VIDEO_DEVICE_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_MIO_VIDEO_DEVICE))
-
-typedef struct _GstMIOVideoDevice GstMIOVideoDevice;
-typedef struct _GstMIOVideoDeviceClass GstMIOVideoDeviceClass;
-
-struct _GstMIOVideoDevice
-{
- GObject parent;
-
- GstCoreMediaCtx *ctx;
- TundraObjectID handle;
-
- gchar *cached_uid;
- gchar *cached_name;
- TundraDeviceTransportType cached_transport;
- GstCaps *cached_caps;
- CMFormatDescriptionRef selected_format;
- gint selected_fps_n, selected_fps_d;
-};
-
-struct _GstMIOVideoDeviceClass
-{
- GObjectClass parent_class;
-};
-
-GType gst_mio_video_device_get_type (void);
-
-TundraObjectID gst_mio_video_device_get_handle (GstMIOVideoDevice * self);
-const gchar * gst_mio_video_device_get_uid (GstMIOVideoDevice * self);
-const gchar * gst_mio_video_device_get_name (GstMIOVideoDevice * self);
-TundraDeviceTransportType gst_mio_video_device_get_transport_type (
- GstMIOVideoDevice * self);
-
-gboolean gst_mio_video_device_open (GstMIOVideoDevice * self);
-void gst_mio_video_device_close (GstMIOVideoDevice * self);
-
-GstCaps * gst_mio_video_device_get_available_caps (GstMIOVideoDevice * self);
-gboolean gst_mio_video_device_set_caps (GstMIOVideoDevice * self,
- GstCaps * caps);
-CMFormatDescriptionRef gst_mio_video_device_get_selected_format (
- GstMIOVideoDevice * self);
-GstClockTime gst_mio_video_device_get_duration (GstMIOVideoDevice * self);
-
-void gst_mio_video_device_print_debug_info (GstMIOVideoDevice * self);
-
-GList * gst_mio_video_device_list_create (GstCoreMediaCtx * ctx);
-void gst_mio_video_device_list_destroy (GList * devices);
-
-G_END_DECLS
-
-#endif /* __GST_MIO_VIDEO_DEVICE_H__ */
diff --git a/sys/applemedia-nonpublic/miovideosrc.h b/sys/applemedia-nonpublic/miovideosrc.h
deleted file mode 100644
index 3fe82e7..0000000
--- a/sys/applemedia-nonpublic/miovideosrc.h
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * Copyright (C) 2009 Ole André Vadla Ravnås <oleavr@soundrop.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifndef __GST_MIO_VIDEO_SRC_H__
-#define __GST_MIO_VIDEO_SRC_H__
-
-#include <gst/base/gstpushsrc.h>
-
-#include "coremediactx.h"
-#include "miovideodevice.h"
-
-G_BEGIN_DECLS
-
-#define GST_TYPE_MIO_VIDEO_SRC \
- (gst_mio_video_src_get_type ())
-#define GST_MIO_VIDEO_SRC(obj) \
- (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_MIO_VIDEO_SRC, GstMIOVideoSrc))
-#define GST_MIO_VIDEO_SRC_CAST(obj) \
- ((GstMIOVideoSrc *) (obj))
-#define GST_MIO_VIDEO_SRC_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_MIO_VIDEO_SRC, GstMIOVideoSrcClass))
-#define GST_IS_MIO_VIDEO_SRC(obj) \
- (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_MIO_VIDEO_SRC))
-#define GST_IS_MIO_VIDEO_SRC_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_MIO_VIDEO_SRC))
-
-typedef struct _GstMIOVideoSrc GstMIOVideoSrc;
-typedef struct _GstMIOVideoSrcClass GstMIOVideoSrcClass;
-
-struct _GstMIOVideoSrc
-{
- GstPushSrc push_src;
-
- gint cv_ratio_n;
- gint cv_ratio_d;
-
- gchar *device_uid;
- gchar *device_name;
- gint device_index;
-
- GThread *dispatcher_thread;
- GMainLoop *dispatcher_loop;
- GMainContext *dispatcher_ctx;
-
- GstCoreMediaCtx *ctx;
- GstMIOVideoDevice *device;
-
- TundraGraph *graph;
-
- volatile gboolean running;
- GQueue *queue;
- GMutex *qlock;
- GCond *qcond;
- guint64 prev_offset;
- CMFormatDescriptionRef prev_format;
-};
-
-struct _GstMIOVideoSrcClass
-{
- GstPushSrcClass parent_class;
-};
-
-GType gst_mio_video_src_get_type (void);
-
-G_END_DECLS
-
-#endif /* __GST_MIO_VIDEO_SRC_H__ */
diff --git a/sys/applemedia-nonpublic/mtapi.h b/sys/applemedia-nonpublic/mtapi.h
deleted file mode 100644
index 91d90e9..0000000
--- a/sys/applemedia-nonpublic/mtapi.h
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
- * Copyright (C) 2010 Ole André Vadla Ravnås <oleavr@soundrop.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifndef __GST_MT_API_H__
-#define __GST_MT_API_H__
-
-#include "cmapi.h"
-
-G_BEGIN_DECLS
-
-typedef struct _GstMTApi GstMTApi;
-typedef struct _GstMTApiClass GstMTApiClass;
-
-typedef struct _FigCaptureDevice * FigCaptureDeviceRef;
-typedef struct _FigCaptureStream * FigCaptureStreamRef;
-typedef struct _FigCaptureDeviceIface FigCaptureDeviceIface;
-typedef struct _FigCaptureStreamIface FigCaptureStreamIface;
-
-struct _FigCaptureDeviceIface
-{
- gsize unk;
- OSStatus (* Func1) (FigCaptureDeviceRef stream);
-};
-
-struct _FigCaptureStreamIface
-{
- gsize unk;
- OSStatus (* Start) (FigCaptureStreamRef stream);
- OSStatus (* Stop) (FigCaptureStreamRef stream);
-};
-
-struct _GstMTApi
-{
- GstDynApi parent;
-
- FigBaseObjectRef (* FigCaptureDeviceGetFigBaseObject)
- (FigCaptureDeviceRef device);
- FigBaseObjectRef (* FigCaptureStreamGetFigBaseObject)
- (FigCaptureStreamRef stream);
-
- CFStringRef * kFigCaptureDeviceProperty_Clock;
- CFStringRef * kFigCaptureDeviceProperty_StreamArray;
- CFStringRef * kFigCaptureStreamProperty_AudioLevelArray;
- CFStringRef * kFigCaptureStreamProperty_AudioLevelMeteringEnable;
- CFStringRef * kFigCaptureStreamProperty_AudioLevelUnits;
- CFStringRef * kFigCaptureStreamProperty_AutoAENow;
- CFStringRef * kFigCaptureStreamProperty_AutoFocusNow;
- CFStringRef * kFigCaptureStreamProperty_BufferAllocator;
- CFStringRef * kFigCaptureStreamProperty_BufferQueue;
- CFStringRef * kFigCaptureStreamProperty_FixedFrameRate;
- CFStringRef * kFigCaptureStreamProperty_FormatDescription;
- CFStringRef * kFigCaptureStreamProperty_FormatIndex;
- CFStringRef * kFigCaptureStreamProperty_FrameDuration;
- CFStringRef * kFigCaptureStreamProperty_MaximumFrameRate;
- CFStringRef * kFigCaptureStreamProperty_MinimumFrameRate;
- CFStringRef * kFigCaptureStreamProperty_NeedSampleBufferDurations;
- CFStringRef * kFigCaptureStreamProperty_StillImageBufferQueue;
- CFStringRef * kFigCaptureStreamProperty_StillImageCaptureNow;
- CFStringRef * kFigCaptureStreamProperty_SupportedFormatsArray;
- CFStringRef * kFigSupportedFormat_AudioMaxSampleRate;
- CFStringRef * kFigSupportedFormat_AudioMinSampleRate;
- CFStringRef * kFigSupportedFormat_FormatDescription;
- CFStringRef * kFigSupportedFormat_VideoIsBinned;
- CFStringRef * kFigSupportedFormat_VideoMaxFrameRate;
- CFStringRef * kFigSupportedFormat_VideoMinFrameRate;
- CFStringRef * kFigSupportedFormat_VideoScaleFactor;
-};
-
-struct _GstMTApiClass
-{
- GstDynApiClass parent_class;
-};
-
-GType gst_mt_api_get_type (void);
-
-GstMTApi * gst_mt_api_obtain (GError ** error);
-
-G_END_DECLS
-
-#endif
diff --git a/sys/applemedia-nonpublic/plugin.m b/sys/applemedia-nonpublic/plugin.m
deleted file mode 100644
index f8cea93..0000000
--- a/sys/applemedia-nonpublic/plugin.m
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * Copyright (C) 2009-2010 Ole André Vadla Ravnås <oleavr@soundrop.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#ifdef HAVE_IOS
-#include "celvideosrc.h"
-#else
-#include "miovideosrc.h"
-#include <Foundation/Foundation.h>
-#endif
-
-#ifndef HAVE_IOS
-static void
-enable_mt_mode (void)
-{
- NSThread * th = [[NSThread alloc] init];
- [th start];
- [th release];
- g_assert ([NSThread isMultiThreaded]);
-}
-#endif
-
-static gboolean
-plugin_init (GstPlugin * plugin)
-{
- gboolean res = TRUE;
-
-#ifdef HAVE_IOS
-#if 0
- res &= gst_element_register (plugin, "celvideosrc", GST_RANK_NONE,
- GST_TYPE_CEL_VIDEO_SRC);
-#endif
-#else
- enable_mt_mode ();
-
-#if 0
- res &= gst_element_register (plugin, "miovideosrc", GST_RANK_NONE,
- GST_TYPE_MIO_VIDEO_SRC);
-#endif
-#endif
-
- return res;
-}
-
-GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
- GST_VERSION_MINOR,
- applemedia_nonpublic,
- "Elements for capture and codec access on Apple OS X and iOS using private Frameworks",
- plugin_init, VERSION, "LGPL", "GStreamer", "http://gstreamer.net/")
diff --git a/sys/applemedia/Makefile.am b/sys/applemedia/Makefile.am
index 164f7a9..d77e47c 100644
--- a/sys/applemedia/Makefile.am
+++ b/sys/applemedia/Makefile.am
@@ -78,12 +78,14 @@
iosassetsrc.h \
iosurfacememory.h \
avfassetsrc.h \
- glcontexthelper.h
+ glcontexthelper.h \
+ iosglmemory.h
if HAVE_IOS
libgstapplemedia_la_SOURCES += \
- iosassetsrc.m
+ iosassetsrc.m \
+ iosglmemory.c
libgstapplemedia_la_LDFLAGS += \
-Wl,-framework -Wl,Foundation \
@@ -92,17 +94,23 @@
else
libgstapplemedia_la_SOURCES += \
- qtkitvideosrc.m \
iosurfacememory.c
libgstapplemedia_la_LDFLAGS += \
-Wl,-framework -Wl,Cocoa \
- -Wl,-framework -Wl,QTKit \
-Wl,-framework -Wl,OpenGL \
-Wl,-framework -Wl,IOSurface
endif
+if HAVE_QTKIT
+libgstapplemedia_la_SOURCES += \
+ qtkitvideosrc.m
+
+libgstapplemedia_la_LDFLAGS += \
+ -Wl,-framework -Wl,QTKit
+endif
+
if HAVE_AVFOUNDATION
libgstapplemedia_la_SOURCES += \
diff --git a/sys/applemedia/Makefile.in b/sys/applemedia/Makefile.in
index 0cb0dcb..0661e54 100644
--- a/sys/applemedia/Makefile.in
+++ b/sys/applemedia/Makefile.in
@@ -92,35 +92,40 @@
target_triplet = @target@
@HAVE_IOS_TRUE@am__append_1 = -fobjc-abi-version=2 -fobjc-legacy-dispatch
@HAVE_IOS_TRUE@am__append_2 = \
-@HAVE_IOS_TRUE@ iosassetsrc.m
+@HAVE_IOS_TRUE@ iosassetsrc.m \
+@HAVE_IOS_TRUE@ iosglmemory.c
@HAVE_IOS_TRUE@am__append_3 = \
@HAVE_IOS_TRUE@ -Wl,-framework -Wl,Foundation \
@HAVE_IOS_TRUE@ -Wl,-framework -Wl,AssetsLibrary
@HAVE_IOS_FALSE@am__append_4 = \
-@HAVE_IOS_FALSE@ qtkitvideosrc.m \
@HAVE_IOS_FALSE@ iosurfacememory.c
@HAVE_IOS_FALSE@am__append_5 = \
@HAVE_IOS_FALSE@ -Wl,-framework -Wl,Cocoa \
-@HAVE_IOS_FALSE@ -Wl,-framework -Wl,QTKit \
@HAVE_IOS_FALSE@ -Wl,-framework -Wl,OpenGL \
@HAVE_IOS_FALSE@ -Wl,-framework -Wl,IOSurface
-@HAVE_AVFOUNDATION_TRUE@am__append_6 = \
+@HAVE_QTKIT_TRUE@am__append_6 = \
+@HAVE_QTKIT_TRUE@ qtkitvideosrc.m
+
+@HAVE_QTKIT_TRUE@am__append_7 = \
+@HAVE_QTKIT_TRUE@ -Wl,-framework -Wl,QTKit
+
+@HAVE_AVFOUNDATION_TRUE@am__append_8 = \
@HAVE_AVFOUNDATION_TRUE@ avfvideosrc.m \
@HAVE_AVFOUNDATION_TRUE@ avfassetsrc.m \
@HAVE_AVFOUNDATION_TRUE@ avsamplevideosink.m
-@HAVE_AVFOUNDATION_TRUE@am__append_7 = \
+@HAVE_AVFOUNDATION_TRUE@am__append_9 = \
@HAVE_AVFOUNDATION_TRUE@ -Wl,-framework -Wl,AVFoundation
-@HAVE_VIDEOTOOLBOX_TRUE@am__append_8 = \
+@HAVE_VIDEOTOOLBOX_TRUE@am__append_10 = \
@HAVE_VIDEOTOOLBOX_TRUE@ vtenc.c \
@HAVE_VIDEOTOOLBOX_TRUE@ vtdec.c
-@HAVE_VIDEOTOOLBOX_TRUE@am__append_9 = -Wl,-weak_framework -Wl,VideoToolbox
+@HAVE_VIDEOTOOLBOX_TRUE@am__append_11 = -Wl,-weak_framework -Wl,VideoToolbox
subdir = sys/applemedia
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
@@ -200,16 +205,18 @@
am__libgstapplemedia_la_SOURCES_DIST = plugin.m vtutil.c \
corevideomemory.c corevideobuffer.c coremediabuffer.c \
videotexturecache.m atdec.c glcontexthelper.c iosassetsrc.m \
- qtkitvideosrc.m iosurfacememory.c avfvideosrc.m avfassetsrc.m \
- avsamplevideosink.m vtenc.c vtdec.c
-@HAVE_IOS_TRUE@am__objects_1 = libgstapplemedia_la-iosassetsrc.lo
-@HAVE_IOS_FALSE@am__objects_2 = libgstapplemedia_la-qtkitvideosrc.lo \
+ iosglmemory.c iosurfacememory.c qtkitvideosrc.m avfvideosrc.m \
+ avfassetsrc.m avsamplevideosink.m vtenc.c vtdec.c
+@HAVE_IOS_TRUE@am__objects_1 = libgstapplemedia_la-iosassetsrc.lo \
+@HAVE_IOS_TRUE@ libgstapplemedia_la-iosglmemory.lo
+@HAVE_IOS_FALSE@am__objects_2 = \
@HAVE_IOS_FALSE@ libgstapplemedia_la-iosurfacememory.lo
-@HAVE_AVFOUNDATION_TRUE@am__objects_3 = \
+@HAVE_QTKIT_TRUE@am__objects_3 = libgstapplemedia_la-qtkitvideosrc.lo
+@HAVE_AVFOUNDATION_TRUE@am__objects_4 = \
@HAVE_AVFOUNDATION_TRUE@ libgstapplemedia_la-avfvideosrc.lo \
@HAVE_AVFOUNDATION_TRUE@ libgstapplemedia_la-avfassetsrc.lo \
@HAVE_AVFOUNDATION_TRUE@ libgstapplemedia_la-avsamplevideosink.lo
-@HAVE_VIDEOTOOLBOX_TRUE@am__objects_4 = libgstapplemedia_la-vtenc.lo \
+@HAVE_VIDEOTOOLBOX_TRUE@am__objects_5 = libgstapplemedia_la-vtenc.lo \
@HAVE_VIDEOTOOLBOX_TRUE@ libgstapplemedia_la-vtdec.lo
am_libgstapplemedia_la_OBJECTS = libgstapplemedia_la-plugin.lo \
libgstapplemedia_la-vtutil.lo \
@@ -219,7 +226,8 @@
libgstapplemedia_la-videotexturecache.lo \
libgstapplemedia_la-atdec.lo \
libgstapplemedia_la-glcontexthelper.lo $(am__objects_1) \
- $(am__objects_2) $(am__objects_3) $(am__objects_4)
+ $(am__objects_2) $(am__objects_3) $(am__objects_4) \
+ $(am__objects_5)
libgstapplemedia_la_OBJECTS = $(am_libgstapplemedia_la_OBJECTS)
AM_V_lt = $(am__v_lt_@AM_V@)
am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
@@ -397,6 +405,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -446,6 +456,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
@@ -857,7 +869,7 @@
libgstapplemedia_la_SOURCES = plugin.m vtutil.c corevideomemory.c \
corevideobuffer.c coremediabuffer.c videotexturecache.m \
atdec.c glcontexthelper.c $(am__append_2) $(am__append_4) \
- $(am__append_6) $(am__append_8)
+ $(am__append_6) $(am__append_8) $(am__append_10)
libgstapplemedia_la_CPPFLAGS = \
-Dgst_core_media_buffer_new=gst_core_media_buffer_priv_new \
-Dgst_core_media_buffer_get_type=gst_core_media_buffer_priv_get_type \
@@ -893,7 +905,8 @@
$(GST_BASE_LDFLAGS) $(GST_PLUGINS_BASE_LDFLAGS) -Wl,-framework \
-Wl,CoreFoundation -Wl,-framework -Wl,CoreMedia -Wl,-framework \
-Wl,CoreVideo -Wl,-framework -Wl,AudioToolbox $(am__append_3) \
- $(am__append_5) $(am__append_7) $(am__append_9)
+ $(am__append_5) $(am__append_7) $(am__append_9) \
+ $(am__append_11)
noinst_HEADERS = \
qtkitvideosrc.h \
avfvideosrc.h \
@@ -909,7 +922,8 @@
iosassetsrc.h \
iosurfacememory.h \
avfassetsrc.h \
- glcontexthelper.h
+ glcontexthelper.h \
+ iosglmemory.h
all: all-am
@@ -998,6 +1012,7 @@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstapplemedia_la-corevideomemory.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstapplemedia_la-glcontexthelper.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstapplemedia_la-iosassetsrc.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstapplemedia_la-iosglmemory.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstapplemedia_la-iosurfacememory.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstapplemedia_la-plugin.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstapplemedia_la-qtkitvideosrc.Plo@am__quote@
@@ -1072,6 +1087,13 @@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstapplemedia_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgstapplemedia_la_CPPFLAGS) $(CPPFLAGS) $(libgstapplemedia_la_CFLAGS) $(CFLAGS) -c -o libgstapplemedia_la-glcontexthelper.lo `test -f 'glcontexthelper.c' || echo '$(srcdir)/'`glcontexthelper.c
+libgstapplemedia_la-iosglmemory.lo: iosglmemory.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstapplemedia_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgstapplemedia_la_CPPFLAGS) $(CPPFLAGS) $(libgstapplemedia_la_CFLAGS) $(CFLAGS) -MT libgstapplemedia_la-iosglmemory.lo -MD -MP -MF $(DEPDIR)/libgstapplemedia_la-iosglmemory.Tpo -c -o libgstapplemedia_la-iosglmemory.lo `test -f 'iosglmemory.c' || echo '$(srcdir)/'`iosglmemory.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstapplemedia_la-iosglmemory.Tpo $(DEPDIR)/libgstapplemedia_la-iosglmemory.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='iosglmemory.c' object='libgstapplemedia_la-iosglmemory.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstapplemedia_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgstapplemedia_la_CPPFLAGS) $(CPPFLAGS) $(libgstapplemedia_la_CFLAGS) $(CFLAGS) -c -o libgstapplemedia_la-iosglmemory.lo `test -f 'iosglmemory.c' || echo '$(srcdir)/'`iosglmemory.c
+
libgstapplemedia_la-iosurfacememory.lo: iosurfacememory.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstapplemedia_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgstapplemedia_la_CPPFLAGS) $(CPPFLAGS) $(libgstapplemedia_la_CFLAGS) $(CFLAGS) -MT libgstapplemedia_la-iosurfacememory.lo -MD -MP -MF $(DEPDIR)/libgstapplemedia_la-iosurfacememory.Tpo -c -o libgstapplemedia_la-iosurfacememory.lo `test -f 'iosurfacememory.c' || echo '$(srcdir)/'`iosurfacememory.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstapplemedia_la-iosurfacememory.Tpo $(DEPDIR)/libgstapplemedia_la-iosurfacememory.Plo
diff --git a/sys/applemedia/avfassetsrc.m b/sys/applemedia/avfassetsrc.m
index e589cf3..8568281 100644
--- a/sys/applemedia/avfassetsrc.m
+++ b/sys/applemedia/avfassetsrc.m
@@ -535,8 +535,7 @@
}
if (combined_ret != GST_FLOW_OK) {
- GST_ELEMENT_ERROR (self, STREAM, FAILED, ("Internal data stream error."),
- ("stream stopped reason %s", gst_flow_get_name (ret)));
+ GST_ELEMENT_FLOW_ERROR (self, ret);
}
gst_pad_pause_task (pad);
@@ -900,16 +899,13 @@
{
NSString *str;
NSURL *url;
- gchar *escaped_uri;
- GST_INFO ("Initializing AVFAssetReader with uri:%s", uri);
+ GST_INFO ("Initializing AVFAssetReader with uri: %s", uri);
*error = NULL;
- escaped_uri = g_uri_escape_string (uri, ":/", TRUE);
- str = [NSString stringWithUTF8String: escaped_uri];
+ str = [NSString stringWithUTF8String: uri];
url = [[NSURL alloc] initWithString: str];
asset = [[AVAsset assetWithURL: url] retain];
- g_free (escaped_uri);
if (!asset.playable) {
*error = g_error_new (GST_AVF_ASSET_SRC_ERROR, GST_AVF_ASSET_ERROR_NOT_PLAYABLE,
@@ -1074,7 +1070,7 @@
return NULL;
}
- buf = gst_core_media_buffer_new (cmbuf, FALSE);
+ buf = gst_core_media_buffer_new (cmbuf, FALSE, NULL);
CFRelease (cmbuf);
if (buf == NULL)
return NULL;
diff --git a/sys/applemedia/avfvideosrc.m b/sys/applemedia/avfvideosrc.m
index a0cc57b..4955953 100644
--- a/sys/applemedia/avfvideosrc.m
+++ b/sys/applemedia/avfvideosrc.m
@@ -138,6 +138,7 @@
- (GstVideoFormat)getGstVideoFormat:(NSNumber *)pixel_format;
#if !HAVE_IOS
- (CGDirectDisplayID)getDisplayIdFromDeviceIndex;
+- (float)getScaleFactorFromDeviceIndex;
#endif
- (GstCaps *)getDeviceCaps;
- (BOOL)setDeviceCaps:(GstVideoInfo *)info;
@@ -416,6 +417,20 @@
displayId = [description objectForKey:@"NSScreenNumber"];
return [displayId unsignedIntegerValue];
}
+
+- (float)getScaleFactorFromDeviceIndex
+{
+ NSArray *screens = [NSScreen screens];
+
+ if (deviceIndex == DEFAULT_DEVICE_INDEX)
+ return [[NSScreen mainScreen] backingScaleFactor];
+ if (deviceIndex >= [screens count]) {
+ GST_ELEMENT_ERROR (element, RESOURCE, NOT_FOUND,
+ ("Invalid screen capture device index"), (NULL));
+ return 1.0;
+ }
+ return [[screens objectAtIndex:deviceIndex] backingScaleFactor];
+}
#endif
- (GstCaps *)getDeviceCaps
@@ -648,12 +663,13 @@
if (captureScreen) {
#if !HAVE_IOS
CGRect rect = CGDisplayBounds ([self getDisplayIdFromDeviceIndex]);
+ float scale = [self getScaleFactorFromDeviceIndex];
for (NSNumber *pixel_format in pixel_formats) {
GstVideoFormat gst_format = [self getGstVideoFormat:pixel_format];
if (gst_format != GST_VIDEO_FORMAT_UNKNOWN)
gst_caps_append (result, gst_caps_new_simple ("video/x-raw",
- "width", G_TYPE_INT, (int)rect.size.width,
- "height", G_TYPE_INT, (int)rect.size.height,
+ "width", G_TYPE_INT, (int)(rect.size.width * scale),
+ "height", G_TYPE_INT, (int)(rect.size.height * scale),
"format", G_TYPE_STRING, gst_video_format_to_string (gst_format),
NULL));
}
@@ -938,19 +954,13 @@
}
}
- *buf = gst_core_media_buffer_new (sbuf, useVideoMeta);
+ *buf = gst_core_media_buffer_new (sbuf, useVideoMeta, textureCache);
if (*buf == NULL) {
CFRelease (sbuf);
return GST_FLOW_ERROR;
}
CFRelease (sbuf);
- if (textureCache != NULL) {
- *buf = gst_video_texture_cache_get_gl_buffer (textureCache, *buf);
- if (*buf == NULL)
- return GST_FLOW_ERROR;
- }
-
GST_BUFFER_OFFSET (*buf) = offset++;
GST_BUFFER_OFFSET_END (*buf) = GST_BUFFER_OFFSET (*buf) + 1;
GST_BUFFER_TIMESTAMP (*buf) = timestamp;
diff --git a/sys/applemedia/coremediabuffer.c b/sys/applemedia/coremediabuffer.c
index 8960de6..8f573be 100644
--- a/sys/applemedia/coremediabuffer.c
+++ b/sys/applemedia/coremediabuffer.c
@@ -240,7 +240,7 @@
GstBuffer *
gst_core_media_buffer_new (CMSampleBufferRef sample_buf,
- gboolean use_video_meta)
+ gboolean use_video_meta, GstVideoTextureCache * cache)
{
CVImageBufferRef image_buf;
CMBlockBufferRef block_buf;
@@ -262,7 +262,8 @@
goto error;
}
- gst_core_video_wrap_pixel_buffer (buf, &info, pixel_buf, &has_padding);
+ gst_core_video_wrap_pixel_buffer (buf, &info, pixel_buf, cache,
+ &has_padding);
/* If the video meta API is not supported, remove padding by
* copying the core media buffer to a system memory buffer */
diff --git a/sys/applemedia/coremediabuffer.h b/sys/applemedia/coremediabuffer.h
index bc18acf..69299b7 100644
--- a/sys/applemedia/coremediabuffer.h
+++ b/sys/applemedia/coremediabuffer.h
@@ -22,6 +22,7 @@
#include <gst/gst.h>
#include <gst/video/gstvideometa.h>
+#include "videotexturecache.h"
#include "CoreMedia/CoreMedia.h"
@@ -43,7 +44,8 @@
GstBuffer * gst_core_media_buffer_new (CMSampleBufferRef sample_buf,
- gboolean use_video_meta);
+ gboolean use_video_meta,
+ GstVideoTextureCache *cache);
CVPixelBufferRef gst_core_media_buffer_get_pixel_buffer
(GstBuffer * buf);
GType gst_core_media_meta_api_get_type (void);
diff --git a/sys/applemedia/corevideobuffer.c b/sys/applemedia/corevideobuffer.c
index 0ad480d..bf20139 100644
--- a/sys/applemedia/corevideobuffer.c
+++ b/sys/applemedia/corevideobuffer.c
@@ -17,8 +17,14 @@
* Boston, MA 02110-1301, USA.
*/
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
#include "corevideobuffer.h"
#include "corevideomemory.h"
+#if !HAVE_IOS
+#include "iosurfacememory.h"
+#endif
static const GstMetaInfo *gst_core_video_meta_get_info (void);
@@ -93,18 +99,46 @@
return core_video_meta_info;
}
+static GstMemory *
+_create_glmem (GstAppleCoreVideoPixelBuffer * gpixbuf,
+ GstVideoInfo * info, guint plane, gsize size, GstVideoTextureCache * cache)
+{
+#if HAVE_IOS
+ return gst_video_texture_cache_create_memory (cache, gpixbuf, plane, size);
+#else
+ GstIOSurfaceMemory *mem;
+ GstVideoGLTextureType tex_type =
+ gst_gl_texture_type_from_format (cache->ctx, GST_VIDEO_INFO_FORMAT (info),
+ plane);
+ CVPixelBufferRef pixel_buf = gpixbuf->buf;
+ IOSurfaceRef surface = CVPixelBufferGetIOSurface (pixel_buf);
+
+ CFRetain (pixel_buf);
+ mem = gst_io_surface_memory_wrapped (cache->ctx,
+ surface, GST_GL_TEXTURE_TARGET_RECTANGLE, tex_type,
+ info, plane, NULL, pixel_buf, (GDestroyNotify) CFRelease);
+ return GST_MEMORY_CAST (mem);
+#endif
+}
+
void
-gst_core_video_wrap_pixel_buffer (GstBuffer * buf, GstVideoInfo * info,
- CVPixelBufferRef pixel_buf, gboolean * has_padding)
+gst_core_video_wrap_pixel_buffer (GstBuffer * buf,
+ GstVideoInfo * info,
+ CVPixelBufferRef pixel_buf,
+ GstVideoTextureCache * cache, gboolean * has_padding)
{
guint n_planes;
gsize offset[GST_VIDEO_MAX_PLANES] = { 0 };
gint stride[GST_VIDEO_MAX_PLANES] = { 0 };
UInt32 size;
GstAppleCoreVideoPixelBuffer *gpixbuf;
+ GstMemory *mem = NULL;
+ gboolean do_gl = cache != NULL;
gpixbuf = gst_apple_core_video_pixel_buffer_new (pixel_buf);
- *has_padding = FALSE;
+
+ if (has_padding)
+ *has_padding = FALSE;
if (CVPixelBufferIsPlanar (pixel_buf)) {
gint i, size = 0, plane_offset = 0;
@@ -113,16 +147,20 @@
for (i = 0; i < n_planes; i++) {
stride[i] = CVPixelBufferGetBytesPerRowOfPlane (pixel_buf, i);
- if (stride[i] != GST_VIDEO_INFO_PLANE_STRIDE (info, i)) {
+ if (stride[i] != GST_VIDEO_INFO_PLANE_STRIDE (info, i) && has_padding)
*has_padding = TRUE;
- }
size = stride[i] * CVPixelBufferGetHeightOfPlane (pixel_buf, i);
offset[i] = plane_offset;
plane_offset += size;
- gst_buffer_append_memory (buf,
- gst_apple_core_video_memory_new_wrapped (gpixbuf, i, size));
+ if (do_gl)
+ mem = _create_glmem (gpixbuf, info, i, size, cache);
+ else
+ mem =
+ GST_MEMORY_CAST (gst_apple_core_video_memory_new_wrapped (gpixbuf,
+ i, size));
+ gst_buffer_append_memory (buf, mem);
}
} else {
n_planes = 1;
@@ -130,9 +168,13 @@
offset[0] = 0;
size = stride[0] * CVPixelBufferGetHeight (pixel_buf);
- gst_buffer_append_memory (buf,
- gst_apple_core_video_memory_new_wrapped (gpixbuf,
- GST_APPLE_CORE_VIDEO_NO_PLANE, size));
+ if (do_gl)
+ mem = _create_glmem (gpixbuf, info, 0, size, cache);
+ else
+ mem =
+ GST_MEMORY_CAST (gst_apple_core_video_memory_new_wrapped (gpixbuf, 0,
+ size));
+ gst_buffer_append_memory (buf, mem);
}
gst_apple_core_video_pixel_buffer_unref (gpixbuf);
@@ -147,13 +189,58 @@
}
}
+static GstVideoFormat
+gst_core_video_get_video_format (OSType format)
+{
+ switch (format) {
+ case kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange:
+ return GST_VIDEO_FORMAT_NV12;
+ case kCVPixelFormatType_422YpCbCr8_yuvs:
+ return GST_VIDEO_FORMAT_YUY2;
+ case kCVPixelFormatType_422YpCbCr8:
+ return GST_VIDEO_FORMAT_UYVY;
+ case kCVPixelFormatType_32BGRA:
+ return GST_VIDEO_FORMAT_BGRA;
+ case kCVPixelFormatType_32RGBA:
+ return GST_VIDEO_FORMAT_RGBA;
+ default:
+ GST_WARNING ("Unknown OSType format: %d", (gint) format);
+ return GST_VIDEO_FORMAT_UNKNOWN;
+ }
+}
+
+
+gboolean
+gst_core_video_info_init_from_pixel_buffer (GstVideoInfo * info,
+ CVPixelBufferRef pixel_buf)
+{
+ size_t width, height;
+ OSType format_type;
+ GstVideoFormat video_format;
+
+ width = CVPixelBufferGetWidth (pixel_buf);
+ height = CVPixelBufferGetHeight (pixel_buf);
+ format_type = CVPixelBufferGetPixelFormatType (pixel_buf);
+ video_format = gst_core_video_get_video_format (format_type);
+
+ if (video_format == GST_VIDEO_FORMAT_UNKNOWN) {
+ return FALSE;
+ }
+
+ gst_video_info_init (info);
+ gst_video_info_set_format (info, video_format, width, height);
+
+ return TRUE;
+}
+
+
GstBuffer *
-gst_core_video_buffer_new (CVBufferRef cvbuf, GstVideoInfo * vinfo)
+gst_core_video_buffer_new (CVBufferRef cvbuf, GstVideoInfo * vinfo,
+ GstVideoTextureCache * cache)
{
CVPixelBufferRef pixbuf = NULL;
GstBuffer *buf;
GstCoreVideoMeta *meta;
- gboolean has_padding; /* not used for now */
if (CFGetTypeID (cvbuf) != CVPixelBufferGetTypeID ())
/* TODO: Do we need to handle other buffer types? */
@@ -169,7 +256,7 @@
meta->cvbuf = CVBufferRetain (cvbuf);
meta->pixbuf = pixbuf;
- gst_core_video_wrap_pixel_buffer (buf, vinfo, pixbuf, &has_padding);
+ gst_core_video_wrap_pixel_buffer (buf, vinfo, pixbuf, cache, NULL);
return buf;
}
diff --git a/sys/applemedia/corevideobuffer.h b/sys/applemedia/corevideobuffer.h
index 0ea7d1e..c051988 100644
--- a/sys/applemedia/corevideobuffer.h
+++ b/sys/applemedia/corevideobuffer.h
@@ -23,6 +23,7 @@
#include <gst/gst.h>
#include <gst/video/video.h>
#include <gst/video/gstvideometa.h>
+#include "videotexturecache.h"
#include "CoreVideo/CoreVideo.h"
@@ -41,10 +42,14 @@
} GstCoreVideoMeta;
GstBuffer * gst_core_video_buffer_new (CVBufferRef cvbuf,
- GstVideoInfo *info);
+ GstVideoInfo *info,
+ GstVideoTextureCache *cache);
+gboolean gst_core_video_info_init_from_pixel_buffer (GstVideoInfo * info,
+ CVPixelBufferRef pixel_buf);
void gst_core_video_wrap_pixel_buffer (GstBuffer * buf,
GstVideoInfo * info,
CVPixelBufferRef pixel_buf,
+ GstVideoTextureCache *cache,
gboolean * has_padding);
GType gst_core_video_meta_api_get_type (void);
diff --git a/sys/applemedia/corevideomemory.c b/sys/applemedia/corevideomemory.c
index 4cb085d..e8ab72f 100644
--- a/sys/applemedia/corevideomemory.c
+++ b/sys/applemedia/corevideomemory.c
@@ -300,7 +300,7 @@
* Helper function for gst_apple_core_video_mem_share().
* Users should call gst_apple_core_video_memory_new_wrapped() instead.
*/
-static GstMemory *
+static GstAppleCoreVideoMemory *
gst_apple_core_video_memory_new (GstMemoryFlags flags, GstMemory * parent,
GstAppleCoreVideoPixelBuffer * gpixbuf, gsize plane, gsize maxsize,
gsize align, gsize offset, gsize size)
@@ -320,18 +320,18 @@
GST_DEBUG ("%p: gpixbuf %p, plane: %" G_GSSIZE_FORMAT ", size %"
G_GSIZE_FORMAT, mem, mem->gpixbuf, mem->plane, mem->mem.size);
- return (GstMemory *) mem;
+ return mem;
}
/**
* gst_apple_core_video_memory_new_wrapped:
* @gpixbuf: the backing #GstAppleCoreVideoPixelBuffer
- * @plane: the plane this memory will represent, or #GST_APPLE_CORE_VIDEO_NO_PLANE for non-planar buffer
+ * @plane: the plane this memory will represent, or 0 for non-planar buffer
* @size: the size of the buffer or specific plane
*
* Returns: a newly allocated #GstAppleCoreVideoMemory
*/
-GstMemory *
+GstAppleCoreVideoMemory *
gst_apple_core_video_memory_new_wrapped (GstAppleCoreVideoPixelBuffer * gpixbuf,
gsize plane, gsize size)
{
@@ -349,7 +349,7 @@
if (!gst_apple_core_video_pixel_buffer_lock (mem->gpixbuf, flags))
return NULL;
- if (mem->plane != GST_APPLE_CORE_VIDEO_NO_PLANE) {
+ if (CVPixelBufferIsPlanar (mem->gpixbuf->buf)) {
ret = CVPixelBufferGetBaseAddressOfPlane (mem->gpixbuf->buf, mem->plane);
if (ret != NULL)
@@ -378,11 +378,8 @@
{
GstAppleCoreVideoMemory *mem = (GstAppleCoreVideoMemory *) gmem;
(void) gst_apple_core_video_pixel_buffer_unlock (mem->gpixbuf);
- if (mem->plane != GST_APPLE_CORE_VIDEO_NO_PLANE)
- GST_DEBUG ("%p: pixbuf %p plane %" G_GSIZE_FORMAT, mem,
- mem->gpixbuf->buf, mem->plane);
- else
- GST_DEBUG ("%p: pixbuf %p", mem, mem->gpixbuf->buf);
+ GST_DEBUG ("%p: pixbuf %p plane %" G_GSIZE_FORMAT, mem,
+ mem->gpixbuf->buf, mem->plane);
}
static GstMemory *
@@ -403,9 +400,9 @@
/* the shared memory is always readonly */
sub =
- gst_apple_core_video_memory_new (GST_MINI_OBJECT_FLAGS (parent) |
- GST_MINI_OBJECT_FLAG_LOCK_READONLY, parent, mem->gpixbuf, mem->plane,
- gmem->maxsize, gmem->align, gmem->offset + offset, size);
+ GST_MEMORY_CAST (gst_apple_core_video_memory_new (GST_MINI_OBJECT_FLAGS
+ (parent) | GST_MINI_OBJECT_FLAG_LOCK_READONLY, parent, mem->gpixbuf,
+ mem->plane, gmem->maxsize, gmem->align, gmem->offset + offset, size));
return sub;
}
diff --git a/sys/applemedia/corevideomemory.h b/sys/applemedia/corevideomemory.h
index d81781c..ba4468f 100644
--- a/sys/applemedia/corevideomemory.h
+++ b/sys/applemedia/corevideomemory.h
@@ -63,13 +63,6 @@
} GstAppleCoreVideoPixelBuffer;
/**
- * GST_APPLE_CORE_VIDEO_NO_PLANE:
- *
- * Indicates a non-planar pixel buffer.
- */
-#define GST_APPLE_CORE_VIDEO_NO_PLANE ((size_t)-1)
-
-/**
* GstAppleCoreVideoMemory:
*
* Represents a video plane or an entire (non-planar) video image,
@@ -101,7 +94,7 @@
gboolean
gst_is_apple_core_video_memory (GstMemory * mem);
-GstMemory *
+GstAppleCoreVideoMemory *
gst_apple_core_video_memory_new_wrapped (GstAppleCoreVideoPixelBuffer * shared, gsize plane, gsize size);
G_END_DECLS
diff --git a/sys/applemedia/iosglmemory.c b/sys/applemedia/iosglmemory.c
new file mode 100644
index 0000000..65507b4
--- /dev/null
+++ b/sys/applemedia/iosglmemory.c
@@ -0,0 +1,166 @@
+/*
+ * GStreamer
+ * Copyright (C) 2015 Alessandro Decina <twi@centricular.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "iosglmemory.h"
+
+GST_DEBUG_CATEGORY_STATIC (GST_CAT_IOS_GL_MEMORY);
+#define GST_CAT_DEFAULT GST_CAT_IOS_GL_MEMORY
+
+G_DEFINE_TYPE (GstIOSGLMemoryAllocator, gst_ios_gl_memory_allocator,
+ GST_TYPE_GL_MEMORY_ALLOCATOR);
+
+typedef struct
+{
+ GstIOSGLMemory *memory;
+} ContextThreadData;
+
+static GstAllocator *_ios_gl_memory_allocator;
+
+static void
+_ios_gl_memory_destroy (GstGLBaseMemory * gl_mem)
+{
+ GstIOSGLMemory *mem = (GstIOSGLMemory *) gl_mem;
+
+ gst_memory_unref (GST_MEMORY_CAST (mem->cv_mem));
+ GST_GL_BASE_MEMORY_ALLOCATOR_CLASS
+ (gst_ios_gl_memory_allocator_parent_class)->destroy (gl_mem);
+}
+
+static gpointer
+_ios_gl_memory_allocator_map (GstGLBaseMemory * bmem,
+ GstMapInfo * info, gsize size)
+{
+ GstGLMemory *gl_mem = (GstGLMemory *) bmem;
+ GstIOSGLMemory *mem = (GstIOSGLMemory *) gl_mem;
+
+ if (info->flags & GST_MAP_GL)
+ return &gl_mem->tex_id;
+ return GST_MEMORY_CAST (mem->cv_mem)->allocator->
+ mem_map (GST_MEMORY_CAST (mem->cv_mem), size, info->flags);
+}
+
+static void
+_ios_gl_memory_allocator_unmap (GstGLBaseMemory * bmem, GstMapInfo * info)
+{
+ GstIOSGLMemory *mem = (GstIOSGLMemory *) bmem;
+
+ if (!(info->flags & GST_MAP_GL))
+ GST_MEMORY_CAST (mem->cv_mem)->allocator->
+ mem_unmap (GST_MEMORY_CAST (mem->cv_mem));
+}
+
+static GstMemory *
+_mem_alloc (GstAllocator * allocator, gsize size, GstAllocationParams * params)
+{
+ g_warning ("use gst_ios_gl_memory_new_wrapped () to allocate from this "
+ "IOSGL allocator");
+
+ return NULL;
+}
+
+static void
+gst_ios_gl_memory_allocator_class_init (GstIOSGLMemoryAllocatorClass * klass)
+{
+ GstAllocatorClass *allocator_class = (GstAllocatorClass *) klass;
+ GstGLBaseMemoryAllocatorClass *gl_base_allocator_class =
+ (GstGLBaseMemoryAllocatorClass *) klass;
+
+ allocator_class->alloc = _mem_alloc;
+ gl_base_allocator_class->destroy = _ios_gl_memory_destroy;
+ gl_base_allocator_class->map = _ios_gl_memory_allocator_map;
+ gl_base_allocator_class->unmap = _ios_gl_memory_allocator_unmap;
+}
+
+static void
+gst_ios_gl_memory_allocator_init (GstIOSGLMemoryAllocator * allocator)
+{
+ GstAllocator *alloc = GST_ALLOCATOR_CAST (allocator);
+
+ alloc->mem_type = GST_IOS_GL_MEMORY_ALLOCATOR_NAME;
+ GST_OBJECT_FLAG_SET (allocator, GST_ALLOCATOR_FLAG_CUSTOM_ALLOC);
+}
+
+void
+gst_ios_gl_memory_init (void)
+{
+ static volatile gsize _init = 0;
+
+ if (g_once_init_enter (&_init)) {
+ GST_DEBUG_CATEGORY_INIT (GST_CAT_IOS_GL_MEMORY, "iosurface", 0,
+ "IOSGL Buffer");
+
+ _ios_gl_memory_allocator =
+ g_object_new (GST_TYPE_IOS_GL_MEMORY_ALLOCATOR, NULL);
+
+ gst_allocator_register (GST_IOS_GL_MEMORY_ALLOCATOR_NAME,
+ gst_object_ref (_ios_gl_memory_allocator));
+ g_once_init_leave (&_init, 1);
+ }
+}
+
+gboolean
+gst_is_ios_gl_memory (GstMemory * mem)
+{
+ return mem != NULL && mem->allocator != NULL &&
+ g_type_is_a (G_OBJECT_TYPE (mem->allocator),
+ GST_TYPE_IOS_GL_MEMORY_ALLOCATOR);
+}
+
+static GstIOSGLMemory *
+_ios_gl_memory_new (GstGLContext * context,
+ GstAppleCoreVideoMemory * cv_mem,
+ GstGLTextureTarget target,
+ GstVideoGLTextureType tex_type,
+ guint tex_id,
+ GstVideoInfo * info,
+ guint plane,
+ GstVideoAlignment * valign, gpointer user_data, GDestroyNotify notify)
+{
+ GstIOSGLMemory *mem;
+
+ mem = g_new0 (GstIOSGLMemory, 1);
+ mem->gl_mem.tex_id = tex_id;
+ mem->gl_mem.texture_wrapped = TRUE;
+ gst_gl_memory_init (&mem->gl_mem, _ios_gl_memory_allocator, NULL, context,
+ target, tex_type, NULL, info, plane, valign, user_data, notify);
+ mem->cv_mem = cv_mem;
+
+ GST_MINI_OBJECT_FLAG_SET (mem, GST_MEMORY_FLAG_READONLY);
+
+ return mem;
+}
+
+GstIOSGLMemory *
+gst_ios_gl_memory_new_wrapped (GstGLContext * context,
+ GstAppleCoreVideoMemory * cv_mem,
+ GstGLTextureTarget target,
+ GstVideoGLTextureType tex_type,
+ guint tex_id,
+ GstVideoInfo * info,
+ guint plane,
+ GstVideoAlignment * valign, gpointer user_data, GDestroyNotify notify)
+{
+ return _ios_gl_memory_new (context, cv_mem, target, tex_type, tex_id, info,
+ plane, valign, user_data, notify);
+}
diff --git a/sys/applemedia/iosglmemory.h b/sys/applemedia/iosglmemory.h
new file mode 100644
index 0000000..ae9816a
--- /dev/null
+++ b/sys/applemedia/iosglmemory.h
@@ -0,0 +1,78 @@
+/*
+ * GStreamer
+ * Copyright (C) 2016 Alessandro Decina <twi@centricular.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef _GST_IOS_GL_MEMORY_H_
+#define _GST_IOS_GL_MEMORY_H_
+
+#include <gst/gst.h>
+#include <gst/gstallocator.h>
+#include <gst/video/video.h>
+#include <gst/gl/gl.h>
+#include "corevideomemory.h"
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_IOS_GL_MEMORY_ALLOCATOR (gst_ios_gl_memory_allocator_get_type())
+GType gst_ios_gl_memory_allocator_get_type(void);
+
+#define GST_IS_IOS_GL_MEMORY_ALLOCATOR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_IOS_GL_MEMORY_ALLOCATOR))
+#define GST_IS_IOS_GL_MEMORY_ALLOCATOR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_IOS_GL_MEMORY_ALLOCATOR))
+#define GST_IOS_GL_MEMORY_ALLOCATOR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GST_TYPE_IOS_GL_MEMORY_ALLOCATOR, GstIOSGLMemoryAllocatorClass))
+#define GST_IOS_GL_MEMORY_ALLOCATOR(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_IOS_GL_MEMORY_ALLOCATOR, GstIOSGLMemoryAllocator))
+#define GST_IOS_GL_MEMORY_ALLOCATOR_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_IOS_GL_MEMORY_ALLOCATOR, GstIOSGLMemoryAllocatorClass))
+#define GST_IOS_GL_MEMORY_ALLOCATOR_CAST(obj) ((GstIOSGLMemoryAllocator *)(obj))
+
+typedef struct _GstIOSGLMemory
+{
+ GstGLMemory gl_mem;
+ GstAppleCoreVideoMemory *cv_mem;
+} GstIOSGLMemory;
+
+#define GST_IOS_GL_MEMORY_ALLOCATOR_NAME "IOSGLMemory"
+
+void gst_ios_gl_memory_init (void);
+
+GstIOSGLMemory *
+gst_ios_gl_memory_new_wrapped (GstGLContext * context,
+ GstAppleCoreVideoMemory *cv_mem,
+ GstGLTextureTarget target,
+ GstVideoGLTextureType tex_type,
+ guint tex_id,
+ GstVideoInfo * info,
+ guint plane,
+ GstVideoAlignment *valign,
+ gpointer user_data,
+ GDestroyNotify notify);
+
+gboolean gst_is_ios_gl_memory (GstMemory * mem);
+
+typedef struct _GstIOSGLMemoryAllocator
+{
+ GstGLMemoryAllocator allocator;
+} GstIOSGLMemoryAllocator;
+
+typedef struct _GstIOSGLMemoryAllocatorClass
+{
+ GstGLMemoryAllocatorClass parent_class;
+} GstIOSGLMemoryAllocatorClass;
+
+G_END_DECLS
+
+#endif /* _GST_IOS_GL_MEMORY_H_ */
diff --git a/sys/applemedia/iosurfacememory.c b/sys/applemedia/iosurfacememory.c
index 23f03f9..e0d8b07 100644
--- a/sys/applemedia/iosurfacememory.c
+++ b/sys/applemedia/iosurfacememory.c
@@ -30,6 +30,12 @@
G_DEFINE_TYPE (GstIOSurfaceMemoryAllocator, gst_io_surface_memory_allocator,
GST_TYPE_GL_MEMORY_ALLOCATOR);
+typedef struct
+{
+ GstIOSurfaceMemory *memory;
+ IOSurfaceRef surface;
+} ContextThreadData;
+
static void _io_surface_memory_set_surface (GstIOSurfaceMemory * memory,
IOSurfaceRef surface);
@@ -176,7 +182,7 @@
GST_MINI_OBJECT_FLAG_SET (mem, GST_MEMORY_FLAG_READONLY);
mem->surface = NULL;
- _io_surface_memory_set_surface (mem, surface);
+ gst_io_surface_memory_set_surface (mem, surface);
return mem;
}
@@ -232,12 +238,22 @@
}
}
+static void
+_do_set_surface (GstGLContext * context, ContextThreadData * data)
+{
+ _io_surface_memory_set_surface (data->memory, data->surface);
+}
+
void
gst_io_surface_memory_set_surface (GstIOSurfaceMemory * memory,
IOSurfaceRef surface)
{
- g_return_if_fail (gst_is_io_surface_memory ((GstMemory *) memory));
- g_return_if_fail (memory->surface == NULL);
+ GstGLContext *context;
+ ContextThreadData data = { memory, surface };
- _io_surface_memory_set_surface (memory, surface);
+ g_return_if_fail (gst_is_io_surface_memory ((GstMemory *) memory));
+
+ context = memory->gl_mem.mem.context;
+ gst_gl_context_thread_add (context,
+ (GstGLContextThreadFunc) _do_set_surface, &data);
}
diff --git a/sys/applemedia/plugin.m b/sys/applemedia/plugin.m
index 0ff4ec1..19384c7 100644
--- a/sys/applemedia/plugin.m
+++ b/sys/applemedia/plugin.m
@@ -25,7 +25,8 @@
#include "corevideomemory.h"
#ifdef HAVE_IOS
#include "iosassetsrc.h"
-#else
+#endif
+#ifdef HAVE_QTKIT
#include "qtkitvideosrc.h"
#endif
#ifdef HAVE_AVFOUNDATION
@@ -67,11 +68,15 @@
gst_apple_core_video_memory_init ();
#ifdef HAVE_IOS
+ gst_ios_gl_memory_init ();
+
res &= gst_element_register (plugin, "iosassetsrc", GST_RANK_SECONDARY,
GST_TYPE_IOS_ASSET_SRC);
#else
enable_mt_mode ();
+#endif
+#ifdef HAVE_QTKIT
res = gst_element_register (plugin, "qtkitvideosrc", GST_RANK_SECONDARY,
GST_TYPE_QTKIT_VIDEO_SRC);
#endif
diff --git a/sys/applemedia/qtkitvideosrc.m b/sys/applemedia/qtkitvideosrc.m
index 4017084..a69e70f 100644
--- a/sys/applemedia/qtkitvideosrc.m
+++ b/sys/applemedia/qtkitvideosrc.m
@@ -18,8 +18,8 @@
*/
#include "qtkitvideosrc.h"
-
#import "corevideobuffer.h"
+#include "glcontexthelper.h"
#import <QTKit/QTKit.h>
@@ -100,9 +100,12 @@
BOOL stopRequest;
gint width, height;
- gint fps_n, fps_d;
+ gint fps_n, fps_d;
GstClockTime duration;
guint64 offset;
+ GstGLContextHelper *ctxh;
+ GstVideoTextureCache *textureCache;
+ GstVideoInfo outputInfo;
}
- (id)init;
@@ -149,6 +152,10 @@
gst_base_src_set_live (baseSrc, TRUE);
gst_base_src_set_format (baseSrc, GST_FORMAT_TIME);
+
+ self->ctxh = NULL;
+ textureCache = NULL;
+ gst_video_info_init (&outputInfo);
}
return self;
@@ -272,6 +279,17 @@
error:nil];
g_assert (success);
+ gst_gl_context_helper_ensure_context (ctxh);
+ GST_INFO_OBJECT (element, "pushing textures, context %p old context %p",
+ ctxh->context, textureCache ? textureCache->ctx : NULL);
+ if (textureCache && textureCache->ctx != ctxh->context) {
+ gst_video_texture_cache_free (textureCache);
+ textureCache = NULL;
+ }
+ textureCache = gst_video_texture_cache_new (ctxh->context);
+ gst_video_texture_cache_set_format (textureCache, GST_VIDEO_FORMAT_UYVY, caps);
+ gst_video_info_set_format (&outputInfo, GST_VIDEO_FORMAT_UYVY, width, height);
+
[output setDelegate:self];
[session startRunning];
@@ -291,6 +309,7 @@
fps_n = 0;
fps_d = 1;
duration = GST_CLOCK_TIME_NONE;
+ ctxh = gst_gl_context_helper_new (element);
/* this will trigger negotiation and open the device in setCaps */
gst_base_src_start_complete (baseSrc, GST_FLOW_OK);
@@ -306,7 +325,6 @@
[[NSRunLoop mainRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:1]];
}
-
return YES;
}
@@ -320,6 +338,12 @@
[queue release];
queue = nil;
+ gst_gl_context_helper_free (ctxh);
+ ctxh = NULL;
+ if (textureCache)
+ gst_video_texture_cache_free (textureCache);
+ textureCache = NULL;
+
return YES;
}
@@ -434,7 +458,7 @@
[queueLock unlockWithCondition:
([queue count] == 0) ? NO_FRAMES : HAS_FRAME_OR_STOP_REQUEST];
- *buf = gst_core_video_buffer_new ((CVBufferRef)frame, NULL);
+ *buf = gst_core_video_buffer_new ((CVBufferRef)frame, &outputInfo, textureCache);
CVBufferRelease (frame);
[self timestampBuffer:*buf];
diff --git a/sys/applemedia/videotexturecache.h b/sys/applemedia/videotexturecache.h
index 0b43566..8dc927a 100644
--- a/sys/applemedia/videotexturecache.h
+++ b/sys/applemedia/videotexturecache.h
@@ -22,7 +22,7 @@
#include <gst/video/gstvideometa.h>
#include <gst/gl/gstglcontext.h>
-#include <CoreVideo/CoreVideo.h>
+#include "corevideomemory.h"
G_BEGIN_DECLS
@@ -47,8 +47,8 @@
void gst_video_texture_cache_set_format (GstVideoTextureCache * cache,
GstVideoFormat in_format, GstCaps * out_caps);
gboolean gst_video_texture_cache_upload (GstVideoGLTextureUploadMeta * meta, guint texture_id[4]);
-GstBuffer * gst_video_texture_cache_get_gl_buffer (GstVideoTextureCache * cache,
- GstBuffer * cv_buffer);
+GstMemory *gst_video_texture_cache_create_memory (GstVideoTextureCache * cache,
+ GstAppleCoreVideoPixelBuffer *gpixbuf, guint plane, gsize size);
G_END_DECLS
diff --git a/sys/applemedia/videotexturecache.m b/sys/applemedia/videotexturecache.m
index 4f4ee58..8315a3b 100644
--- a/sys/applemedia/videotexturecache.m
+++ b/sys/applemedia/videotexturecache.m
@@ -27,6 +27,7 @@
#include <gst/gl/gstglbufferpool.h>
#include "iosurfacememory.h"
#endif
+#include "iosglmemory.h"
#include "videotexturecache.h"
#include "coremediabuffer.h"
#include "corevideobuffer.h"
@@ -35,8 +36,10 @@
typedef struct _ContextThreadData
{
GstVideoTextureCache *cache;
- GstBuffer *input_buffer;
- GstBuffer *output_buffer;
+ GstAppleCoreVideoPixelBuffer *gpixbuf;
+ guint plane;
+ gsize size;
+ GstMemory *memory;
} ContextThreadData;
GstVideoTextureCache *
@@ -97,14 +100,12 @@
out_caps = gst_caps_copy (out_caps);
features = gst_caps_get_features (out_caps, 0);
- gst_caps_features_add (features, GST_CAPS_FEATURE_MEMORY_GL_MEMORY);
gst_video_info_from_caps (&cache->output_info, out_caps);
in_caps = gst_caps_copy (out_caps);
gst_caps_set_simple (in_caps, "format",
G_TYPE_STRING, gst_video_format_to_string (in_format), NULL);
features = gst_caps_get_features (in_caps, 0);
- gst_caps_features_add (features, GST_CAPS_FEATURE_MEMORY_GL_MEMORY);
gst_video_info_from_caps (&cache->input_info, in_caps);
if (cache->in_caps)
@@ -127,40 +128,22 @@
#endif
}
-static CVPixelBufferRef
-cv_pixel_buffer_from_gst_buffer (GstBuffer * buffer)
-{
- GstCoreMediaMeta *cm_meta =
- (GstCoreMediaMeta *) gst_buffer_get_meta (buffer,
- gst_core_media_meta_api_get_type ());
- GstCoreVideoMeta *cv_meta =
- (GstCoreVideoMeta *) gst_buffer_get_meta (buffer,
- gst_core_video_meta_api_get_type ());
-
- g_return_val_if_fail (cm_meta || cv_meta, NULL);
-
- return cm_meta ? cm_meta->pixel_buf : cv_meta->pixbuf;
-}
-
#if HAVE_IOS
static void
-_do_get_gl_buffer (GstGLContext * context, ContextThreadData * data)
+_do_create_memory (GstGLContext * context, ContextThreadData * data)
{
CVOpenGLESTextureRef texture = NULL;
GstVideoTextureCache *cache = data->cache;
- CVPixelBufferRef pixel_buf = cv_pixel_buffer_from_gst_buffer (data->input_buffer);
+ GstAppleCoreVideoPixelBuffer *gpixbuf = data->gpixbuf;
+ CVPixelBufferRef pixel_buf = gpixbuf->buf;
+ guint plane = data->plane;
+ gssize size = data->size;
GstGLTextureTarget gl_target;
- GstGLBaseMemoryAllocator *base_mem_alloc;
- GstGLVideoAllocationParams *params;
- GstBuffer *output_buffer;
-
- base_mem_alloc = GST_GL_BASE_MEMORY_ALLOCATOR (gst_gl_memory_allocator_get_default (cache->ctx));
- output_buffer = gst_buffer_new ();
- gst_buffer_copy_into (output_buffer, data->input_buffer, GST_BUFFER_COPY_ALL, 0, -1);
+ GstAppleCoreVideoMemory *memory;
+ GstIOSGLMemory *gl_memory;
switch (GST_VIDEO_INFO_FORMAT (&cache->input_info)) {
case GST_VIDEO_FORMAT_BGRA:
- /* avfvideosrc does BGRA on iOS when doing GLMemory */
if (CVOpenGLESTextureCacheCreateTextureFromImage (kCFAllocatorDefault,
cache->cache, pixel_buf, NULL, GL_TEXTURE_2D, GL_RGBA,
GST_VIDEO_INFO_WIDTH (&cache->input_info),
@@ -169,64 +152,36 @@
goto error;
gl_target = gst_gl_texture_target_from_gl (CVOpenGLESTextureGetTarget (texture));
- params = gst_gl_video_allocation_params_new_wrapped_texture (cache->ctx,
- NULL, &cache->input_info, 0, NULL, gl_target,
- GST_VIDEO_GL_TEXTURE_TYPE_RGBA, CVOpenGLESTextureGetName (texture),
- texture, (GDestroyNotify) CFRelease);
-
- gst_buffer_replace_memory (output_buffer, 0,
- (GstMemory *) gst_gl_base_memory_alloc (base_mem_alloc,
- (GstGLAllocationParams *) params));
- gst_gl_allocation_params_free ((GstGLAllocationParams *) params);
+ memory = gst_apple_core_video_memory_new_wrapped (gpixbuf, plane, size);
+ gl_memory = gst_ios_gl_memory_new_wrapped (context, memory,
+ gl_target, GST_VIDEO_GL_TEXTURE_TYPE_RGBA,
+ CVOpenGLESTextureGetName (texture),
+ &cache->input_info,
+ 0, NULL, texture, (GDestroyNotify) CFRelease);
break;
case GST_VIDEO_FORMAT_NV12: {
GstVideoGLTextureType textype;
GLenum texifmt, texfmt;
- textype = GST_VIDEO_GL_TEXTURE_TYPE_LUMINANCE;
- texifmt = gst_gl_format_from_gl_texture_type (textype);
- texfmt = gst_gl_sized_gl_format_from_gl_format_type (cache->ctx, texifmt, GL_UNSIGNED_BYTE);
-
- /* vtdec does NV12 on iOS when doing GLMemory */
- if (CVOpenGLESTextureCacheCreateTextureFromImage (kCFAllocatorDefault,
- cache->cache, pixel_buf, NULL, GL_TEXTURE_2D, texifmt,
- GST_VIDEO_INFO_WIDTH (&cache->input_info),
- GST_VIDEO_INFO_HEIGHT (&cache->input_info),
- texfmt, GL_UNSIGNED_BYTE, 0, &texture) != kCVReturnSuccess)
- goto error;
-
- gl_target = gst_gl_texture_target_from_gl (CVOpenGLESTextureGetTarget (texture));
- params = gst_gl_video_allocation_params_new_wrapped_texture (cache->ctx,
- NULL, &cache->input_info, 0, NULL, gl_target, textype,
- CVOpenGLESTextureGetName (texture), texture,
- (GDestroyNotify) CFRelease);
-
- gst_buffer_replace_memory (output_buffer, 0,
- (GstMemory *) gst_gl_base_memory_alloc (base_mem_alloc,
- (GstGLAllocationParams *) params));
- gst_gl_allocation_params_free ((GstGLAllocationParams *) params);
-
- textype = GST_VIDEO_GL_TEXTURE_TYPE_LUMINANCE_ALPHA;
+ if (plane == 0)
+ textype = GST_VIDEO_GL_TEXTURE_TYPE_LUMINANCE;
+ else
+ textype = GST_VIDEO_GL_TEXTURE_TYPE_LUMINANCE_ALPHA;
texifmt = gst_gl_format_from_gl_texture_type (textype);
texfmt = gst_gl_sized_gl_format_from_gl_format_type (cache->ctx, texifmt, GL_UNSIGNED_BYTE);
if (CVOpenGLESTextureCacheCreateTextureFromImage (kCFAllocatorDefault,
cache->cache, pixel_buf, NULL, GL_TEXTURE_2D, texifmt,
- GST_VIDEO_INFO_WIDTH (&cache->input_info) / 2,
- GST_VIDEO_INFO_HEIGHT (&cache->input_info) / 2,
- texfmt, GL_UNSIGNED_BYTE, 1, &texture) != kCVReturnSuccess)
+ GST_VIDEO_INFO_COMP_WIDTH (&cache->input_info, plane),
+ GST_VIDEO_INFO_COMP_HEIGHT (&cache->input_info, plane),
+ texfmt, GL_UNSIGNED_BYTE, plane, &texture) != kCVReturnSuccess)
goto error;
gl_target = gst_gl_texture_target_from_gl (CVOpenGLESTextureGetTarget (texture));
- params = gst_gl_video_allocation_params_new_wrapped_texture (cache->ctx,
- NULL, &cache->input_info, 1, NULL, gl_target, textype,
- CVOpenGLESTextureGetName (texture), texture,
- (GDestroyNotify) CFRelease);
-
- gst_buffer_replace_memory (output_buffer, 1,
- (GstMemory *) gst_gl_base_memory_alloc (base_mem_alloc,
- (GstGLAllocationParams *) params));
- gst_gl_allocation_params_free ((GstGLAllocationParams *) params);
+ memory = gst_apple_core_video_memory_new_wrapped (gpixbuf, plane, size);
+ gl_memory = gst_ios_gl_memory_new_wrapped (context, memory,
+ gl_target, textype, CVOpenGLESTextureGetName (texture), &cache->input_info,
+ plane, NULL, texture, (GDestroyNotify) CFRelease);
break;
}
default:
@@ -234,51 +189,27 @@
goto error;
}
- gst_object_unref (base_mem_alloc);
-
- data->output_buffer = output_buffer;
+ data->memory = GST_MEMORY_CAST (gl_memory);
return;
error:
- data->output_buffer = NULL;
-}
-#else /* !HAVE_IOS */
-static void
-_do_get_gl_buffer (GstGLContext * context, ContextThreadData * data)
-{
- GstVideoTextureCache *cache = data->cache;
- CVPixelBufferRef pixel_buf = cv_pixel_buffer_from_gst_buffer (data->input_buffer);
- IOSurfaceRef surface = CVPixelBufferGetIOSurface (pixel_buf);
-
- data->output_buffer = gst_buffer_new ();
- gst_buffer_copy_into (data->output_buffer, data->input_buffer, GST_BUFFER_COPY_ALL, 0, -1);
- for (int i = 0; i < GST_VIDEO_INFO_N_PLANES (&cache->input_info); i++) {
- GstIOSurfaceMemory *mem;
- GstVideoGLTextureType tex_type =
- gst_gl_texture_type_from_format (context,
- GST_VIDEO_INFO_FORMAT (&cache->input_info), i);
-
- CFRetain (pixel_buf);
- mem = gst_io_surface_memory_wrapped (cache->ctx,
- surface, GST_GL_TEXTURE_TARGET_RECTANGLE, tex_type,
- &cache->input_info, i, NULL, pixel_buf, (GDestroyNotify) CFRelease);
-
- gst_buffer_replace_memory (data->output_buffer, i, (GstMemory *) mem);
- }
+ data->memory = NULL;
}
#endif
-GstBuffer *
-gst_video_texture_cache_get_gl_buffer (GstVideoTextureCache * cache,
- GstBuffer * cv_buffer)
+GstMemory *
+gst_video_texture_cache_create_memory (GstVideoTextureCache * cache,
+ GstAppleCoreVideoPixelBuffer *gpixbuf,
+ guint plane,
+ gsize size)
{
- ContextThreadData data = {cache, cv_buffer, NULL};
+ ContextThreadData data = {cache, gpixbuf, plane, size, NULL};
+#if HAVE_IOS
gst_gl_context_thread_add (cache->ctx,
- (GstGLContextThreadFunc) _do_get_gl_buffer, &data);
+ (GstGLContextThreadFunc) _do_create_memory, &data);
+#endif
- gst_buffer_unref (cv_buffer);
-
- return data.output_buffer;
+ return data.memory;
}
diff --git a/sys/applemedia/vtdec.c b/sys/applemedia/vtdec.c
index e9c7bdd..fc81774 100644
--- a/sys/applemedia/vtdec.c
+++ b/sys/applemedia/vtdec.c
@@ -96,7 +96,8 @@
GST_PAD_ALWAYS,
GST_STATIC_CAPS ("video/x-h264, stream-format=avc, alignment=au,"
" width=(int)[1, MAX], height=(int)[1, MAX];"
- "video/mpeg, mpegversion=2;" "image/jpeg")
+ "video/mpeg, mpegversion=2, systemstream=false, parsed=true;"
+ "image/jpeg")
);
/* define EnableHardwareAcceleratedVideoDecoder in < 10.9 */
@@ -773,7 +774,9 @@
GST_WARNING_OBJECT (vtdec, "Output state not configured, release buffer");
frame->flags &= VTDEC_FRAME_FLAG_SKIP;
} else {
- buf = gst_core_video_buffer_new (image_buffer, &state->info);
+ buf =
+ gst_core_video_buffer_new (image_buffer, &state->info,
+ vtdec->texture_cache);
gst_video_codec_state_unref (state);
GST_BUFFER_PTS (buf) = pts.value;
GST_BUFFER_DURATION (buf) = duration.value;
@@ -817,13 +820,6 @@
while ((g_async_queue_length (vtdec->reorder_queue) >=
vtdec->reorder_queue_length) || drain || flush) {
frame = (GstVideoCodecFrame *) g_async_queue_try_pop (vtdec->reorder_queue);
- if (frame && frame->output_buffer && vtdec->texture_cache != NULL) {
- frame->output_buffer =
- gst_video_texture_cache_get_gl_buffer (vtdec->texture_cache,
- frame->output_buffer);
- if (!frame->output_buffer)
- GST_ERROR_OBJECT (vtdec, "couldn't get textures from buffer");
- }
/* we need to check this in case reorder_queue_length=0 (jpeg for
* example) or we're draining/flushing
diff --git a/sys/applemedia/vtenc.c b/sys/applemedia/vtenc.c
index 39b7813..d91ab82 100644
--- a/sys/applemedia/vtenc.c
+++ b/sys/applemedia/vtenc.c
@@ -1127,7 +1127,8 @@
goto cv_error;
}
- outbuf = gst_core_video_buffer_new ((CVBufferRef) pbuf, &self->video_info);
+ outbuf =
+ gst_core_video_buffer_new ((CVBufferRef) pbuf, &self->video_info, NULL);
if (!gst_video_frame_map (&outframe, &self->video_info, outbuf,
GST_MAP_WRITE)) {
gst_video_frame_unmap (&inframe);
@@ -1309,7 +1310,7 @@
/* We are dealing with block buffers here, so we don't need
* to enable the use of the video meta API on the core media buffer */
- frame->output_buffer = gst_core_media_buffer_new (sampleBuffer, FALSE);
+ frame->output_buffer = gst_core_media_buffer_new (sampleBuffer, FALSE, NULL);
beach:
/* needed anyway so the frame will be released */
diff --git a/sys/avc/Makefile.in b/sys/avc/Makefile.in
index a1c2cb2..ff4d84f 100644
--- a/sys/avc/Makefile.in
+++ b/sys/avc/Makefile.in
@@ -326,6 +326,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -375,6 +377,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/sys/bluez/Makefile.in b/sys/bluez/Makefile.in
index 5699ff6..fe8af68 100644
--- a/sys/bluez/Makefile.in
+++ b/sys/bluez/Makefile.in
@@ -331,6 +331,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -380,6 +382,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/sys/d3dvideosink/Makefile.in b/sys/d3dvideosink/Makefile.in
index 2f728b9..24eee93 100644
--- a/sys/d3dvideosink/Makefile.in
+++ b/sys/d3dvideosink/Makefile.in
@@ -327,6 +327,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -376,6 +378,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/sys/decklink/Makefile.in b/sys/decklink/Makefile.in
index 01e112a..dd3799d 100644
--- a/sys/decklink/Makefile.in
+++ b/sys/decklink/Makefile.in
@@ -347,6 +347,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -396,6 +398,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/sys/decklink/gstdecklink.cpp b/sys/decklink/gstdecklink.cpp
index 203fe4e..c8eb7b3 100644
--- a/sys/decklink/gstdecklink.cpp
+++ b/sys/decklink/gstdecklink.cpp
@@ -140,6 +140,33 @@
}
GType
+gst_decklink_timecode_format_get_type (void)
+{
+ static gsize id = 0;
+ static const GEnumValue timecodeformats[] = {
+ {GST_DECKLINK_TIMECODE_FORMAT_RP188VITC1, "bmdTimecodeRP188VITC1",
+ "rp188vitc1"},
+ {GST_DECKLINK_TIMECODE_FORMAT_RP188VITC2, "bmdTimecodeRP188VITC2",
+ "rp188vitc2"},
+ {GST_DECKLINK_TIMECODE_FORMAT_RP188LTC, "bmdTimecodeRP188LTC", "rp188ltc"},
+ {GST_DECKLINK_TIMECODE_FORMAT_RP188ANY, "bmdTimecodeRP188Any", "rp188any"},
+ {GST_DECKLINK_TIMECODE_FORMAT_VITC, "bmdTimecodeVITC", "vitc"},
+ {GST_DECKLINK_TIMECODE_FORMAT_VITCFIELD2, "bmdTimecodeVITCField2",
+ "vitcfield2"},
+ {GST_DECKLINK_TIMECODE_FORMAT_SERIAL, "bmdTimecodeSerial", "serial"},
+ {0, NULL, NULL}
+ };
+
+ if (g_once_init_enter (&id)) {
+ GType tmp =
+ g_enum_register_static ("GstDecklinkTimecodeFormat", timecodeformats);
+ g_once_init_leave (&id, tmp);
+ }
+
+ return (GType) id;
+}
+
+GType
gst_decklink_audio_connection_get_type (void)
{
static gsize id = 0;
@@ -232,6 +259,22 @@
/* *INDENT-ON* */
};
+static const struct
+{
+ BMDTimecodeFormat format;
+ GstDecklinkTimecodeFormat gstformat;
+} tcformats[] = {
+ /* *INDENT-OFF* */
+ {bmdTimecodeRP188VITC1, GST_DECKLINK_TIMECODE_FORMAT_RP188VITC1},
+ {bmdTimecodeRP188VITC2, GST_DECKLINK_TIMECODE_FORMAT_RP188VITC2},
+ {bmdTimecodeRP188LTC, GST_DECKLINK_TIMECODE_FORMAT_RP188LTC},
+ {bmdTimecodeRP188Any, GST_DECKLINK_TIMECODE_FORMAT_RP188ANY},
+ {bmdTimecodeVITC, GST_DECKLINK_TIMECODE_FORMAT_VITC},
+ {bmdTimecodeVITCField2, GST_DECKLINK_TIMECODE_FORMAT_VITCFIELD2},
+ {bmdTimecodeSerial, GST_DECKLINK_TIMECODE_FORMAT_SERIAL}
+ /* *INDENT-ON* */
+};
+
const GstDecklinkMode *
gst_decklink_get_mode (GstDecklinkModeEnum e)
{
@@ -367,6 +410,25 @@
return GST_DECKLINK_VIDEO_FORMAT_AUTO;
}
+const BMDTimecodeFormat
+gst_decklink_timecode_format_from_enum (GstDecklinkTimecodeFormat f)
+{
+ return tcformats[f].format;
+}
+
+const GstDecklinkTimecodeFormat
+gst_decklink_timecode_format_to_enum (BMDTimecodeFormat f)
+{
+ guint i;
+
+ for (i = 0; i < G_N_ELEMENTS (tcformats); i++) {
+ if (tcformats[i].format == f)
+ return (GstDecklinkTimecodeFormat) i;
+ }
+ g_assert_not_reached ();
+ return GST_DECKLINK_TIMECODE_FORMAT_RP188ANY;
+}
+
static const BMDVideoConnection connections[] = {
0, /* auto */
bmdVideoConnectionSDI,
@@ -660,7 +722,9 @@
GstElement *videosrc = NULL, *audiosrc = NULL;
void (*got_video_frame) (GstElement * videosrc,
IDeckLinkVideoInputFrame * frame, GstDecklinkModeEnum mode,
- GstClockTime capture_time, GstClockTime capture_duration) = NULL;
+ GstClockTime capture_time, GstClockTime capture_duration, guint hours,
+ guint minutes, guint seconds, guint frames, BMDTimecodeFlags bflags) =
+ NULL;
void (*got_audio_packet) (GstElement * videosrc,
IDeckLinkAudioInputPacket * packet, GstClockTime capture_time,
gboolean discont) = NULL;
@@ -668,7 +732,11 @@
BMDTimeValue capture_time = GST_CLOCK_TIME_NONE, capture_duration =
GST_CLOCK_TIME_NONE;
HRESULT res;
+ IDeckLinkTimecode *dtc;
+ uint8_t hours, minutes, seconds, frames;
+ BMDTimecodeFlags bflags;
+ hours = minutes = seconds = frames = bflags = 0;
if (video_frame == NULL)
goto no_video_frame;
@@ -681,6 +749,35 @@
capture_duration = GST_CLOCK_TIME_NONE;
}
+ if (m_input->videosrc) {
+ /* FIXME: Avoid circularity between gstdecklink.cpp and
+ * gstdecklinkvideosrc.cpp */
+ videosrc = GST_ELEMENT_CAST (gst_object_ref (m_input->videosrc));
+ res =
+ video_frame->
+ GetTimecode (GST_DECKLINK_VIDEO_SRC (videosrc)->timecode_format,
+ &dtc);
+
+ if (res != S_OK) {
+ GST_DEBUG_OBJECT (videosrc, "Failed to get timecode: 0x%08x", res);
+ dtc = NULL;
+ } else {
+ res = dtc->GetComponents (&hours, &minutes, &seconds, &frames);
+ if (res != S_OK) {
+ GST_ERROR ("Could not get components for timecode %p", dtc);
+ hours = 0;
+ minutes = 0;
+ seconds = 0;
+ frames = 0;
+ bflags = 0;
+ } else {
+ GST_DEBUG_OBJECT (videosrc, "Got timecode %02d:%02d:%02d:%02d", hours,
+ minutes, seconds, frames);
+ bflags = dtc->GetFlags ();
+ }
+ }
+ }
+
g_mutex_lock (&m_input->lock);
if (capture_time > (BMDTimeValue) m_input->clock_start_time)
@@ -694,7 +791,6 @@
capture_time = 0;
if (m_input->videosrc) {
- videosrc = GST_ELEMENT_CAST (gst_object_ref (m_input->videosrc));
got_video_frame = m_input->got_video_frame;
}
mode = gst_decklink_get_mode_enum_from_bmd (m_input->mode->mode);
@@ -707,7 +803,8 @@
if (got_video_frame && videosrc) {
got_video_frame (videosrc, video_frame, mode, capture_time,
- capture_duration);
+ capture_duration, (guint8) hours, (guint8) minutes, (guint8) seconds,
+ (guint8) frames, bflags);
}
no_video_frame:
@@ -848,6 +945,7 @@
ret = decklink->QueryInterface (IID_IDeckLinkAttributes,
(void **) &devices[i].input.attributes);
+ devices[i].output.attributes = devices[i].input.attributes;
if (ret != S_OK) {
GST_WARNING ("selected device does not have attributes interface");
}
diff --git a/sys/decklink/gstdecklink.h b/sys/decklink/gstdecklink.h
index 6559206..9f95c56 100644
--- a/sys/decklink/gstdecklink.h
+++ b/sys/decklink/gstdecklink.h
@@ -125,9 +125,23 @@
#define GST_TYPE_DECKLINK_VIDEO_FORMAT (gst_decklink_video_format_get_type ())
GType gst_decklink_video_format_get_type (void);
+typedef enum {
+ GST_DECKLINK_TIMECODE_FORMAT_RP188VITC1, /*bmdTimecodeRP188VITC1 */
+ GST_DECKLINK_TIMECODE_FORMAT_RP188VITC2, /*bmdTimecodeRP188VITC2 */
+ GST_DECKLINK_TIMECODE_FORMAT_RP188LTC, /*bmdTimecodeRP188LTC */
+ GST_DECKLINK_TIMECODE_FORMAT_RP188ANY, /*bmdTimecodeRP188Any */
+ GST_DECKLINK_TIMECODE_FORMAT_VITC, /*bmdTimecodeVITC */
+ GST_DECKLINK_TIMECODE_FORMAT_VITCFIELD2, /*bmdTimecodeVITCField2 */
+ GST_DECKLINK_TIMECODE_FORMAT_SERIAL /* bmdTimecodeSerial */
+} GstDecklinkTimecodeFormat;
+#define GST_TYPE_DECKLINK_TIMECODE_FORMAT (gst_decklink_timecode_format_get_type ())
+GType gst_decklink_timecode_format_get_type (void);
+
const BMDPixelFormat gst_decklink_pixel_format_from_type (GstDecklinkVideoFormat t);
const gint gst_decklink_bpp_from_type (GstDecklinkVideoFormat t);
const GstDecklinkVideoFormat gst_decklink_type_from_video_format (GstVideoFormat f);
+const BMDTimecodeFormat gst_decklink_timecode_format_from_enum (GstDecklinkTimecodeFormat f);
+const GstDecklinkTimecodeFormat gst_decklink_timecode_format_to_enum (BMDTimecodeFormat f);
typedef struct _GstDecklinkMode GstDecklinkMode;
struct _GstDecklinkMode {
@@ -153,6 +167,7 @@
struct _GstDecklinkOutput {
IDeckLink *device;
IDeckLinkOutput *output;
+ IDeckLinkAttributes *attributes;
GstClock *clock;
GstClockTime clock_start_time, clock_last_time, clock_epoch;
GstClockTimeDiff clock_offset;
@@ -189,7 +204,7 @@
GMutex lock;
/* Set by the video source */
- void (*got_video_frame) (GstElement *videosrc, IDeckLinkVideoInputFrame * frame, GstDecklinkModeEnum mode, GstClockTime capture_time, GstClockTime capture_duration);
+ void (*got_video_frame) (GstElement *videosrc, IDeckLinkVideoInputFrame * frame, GstDecklinkModeEnum mode, GstClockTime capture_time, GstClockTime capture_duration, guint hours, guint minutes, guint seconds, guint frames, BMDTimecodeFlags bflags);
/* Configured mode or NULL */
const GstDecklinkMode *mode;
BMDPixelFormat format;
diff --git a/sys/decklink/gstdecklinkaudiosink.cpp b/sys/decklink/gstdecklinkaudiosink.cpp
index 54cb257..9b480d5 100644
--- a/sys/decklink/gstdecklinkaudiosink.cpp
+++ b/sys/decklink/gstdecklinkaudiosink.cpp
@@ -409,7 +409,7 @@
}
ret = self->output->output->EnableAudioOutput (bmdAudioSampleRate48kHz,
- sample_depth, 2, bmdAudioOutputStreamContinuous);
+ sample_depth, spec->info.channels, bmdAudioOutputStreamContinuous);
if (ret != S_OK) {
GST_WARNING_OBJECT (self->sink, "Failed to enable audio output 0x%08x",
ret);
@@ -517,7 +517,7 @@
GST_PAD_SINK,
GST_PAD_ALWAYS,
GST_STATIC_CAPS
- ("audio/x-raw, format={S16LE,S32LE}, channels=2, rate=48000, "
+ ("audio/x-raw, format={S16LE,S32LE}, channels={2, 8, 16}, rate=48000, "
"layout=interleaved")
);
@@ -529,7 +529,7 @@
static GstStateChangeReturn gst_decklink_audio_sink_change_state (GstElement *
element, GstStateChange transition);
-
+static GstCaps * gst_decklink_audio_sink_get_caps (GstBaseSink * bsink, GstCaps * filter);
static GstAudioRingBuffer
* gst_decklink_audio_sink_create_ringbuffer (GstAudioBaseSink * absink);
@@ -542,6 +542,7 @@
{
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
+ GstBaseSinkClass *basesink_class = GST_BASE_SINK_CLASS (klass);
GstAudioBaseSinkClass *audiobasesink_class =
GST_AUDIO_BASE_SINK_CLASS (klass);
@@ -552,6 +553,8 @@
element_class->change_state =
GST_DEBUG_FUNCPTR (gst_decklink_audio_sink_change_state);
+ basesink_class->get_caps = GST_DEBUG_FUNCPTR (gst_decklink_audio_sink_get_caps);
+
audiobasesink_class->create_ringbuffer =
GST_DEBUG_FUNCPTR (gst_decklink_audio_sink_create_ringbuffer);
@@ -651,6 +654,62 @@
return ret;
}
+static GstCaps *
+gst_decklink_audio_sink_get_caps (GstBaseSink * bsink, GstCaps * filter)
+{
+ GstDecklinkAudioSink *self = GST_DECKLINK_AUDIO_SINK_CAST (bsink);
+ GstDecklinkAudioSinkRingBuffer *buf =
+ GST_DECKLINK_AUDIO_SINK_RING_BUFFER_CAST (GST_AUDIO_BASE_SINK_CAST
+ (self)->ringbuffer);
+ GstCaps *caps = gst_pad_get_pad_template_caps (GST_BASE_SINK_PAD (bsink));
+
+ if (buf) {
+ GST_OBJECT_LOCK (buf);
+ if (buf->output && buf->output->attributes) {
+ int64_t max_channels = 0;
+ HRESULT ret;
+ GstStructure *s;
+ GValue arr = G_VALUE_INIT;
+ GValue v = G_VALUE_INIT;
+
+ ret = buf->output->attributes->GetInt (BMDDeckLinkMaximumAudioChannels, &max_channels);
+ /* 2 should always be supported */
+ if (ret != S_OK) {
+ max_channels = 2;
+ }
+
+ caps = gst_caps_make_writable (caps);
+ s = gst_caps_get_structure (caps, 0);
+
+ g_value_init (&arr, GST_TYPE_LIST);
+ g_value_init (&v, G_TYPE_INT);
+ if (max_channels >= 16) {
+ g_value_set_int (&v, 16);
+ gst_value_list_append_value (&arr, &v);
+ }
+ if (max_channels >= 8) {
+ g_value_set_int (&v, 8);
+ gst_value_list_append_value (&arr, &v);
+ }
+ g_value_set_int (&v, 2);
+ gst_value_list_append_value (&arr, &v);
+
+ gst_structure_set_value (s, "channels", &arr);
+ g_value_unset (&v);
+ g_value_unset (&arr);
+ }
+ GST_OBJECT_UNLOCK (buf);
+ }
+
+ if (filter) {
+ GstCaps *intersection = gst_caps_intersect_full (filter, caps, GST_CAPS_INTERSECT_FIRST);
+ gst_caps_unref (caps);
+ caps = intersection;
+ }
+
+ return caps;
+}
+
static GstAudioRingBuffer *
gst_decklink_audio_sink_create_ringbuffer (GstAudioBaseSink * absink)
{
diff --git a/sys/decklink/gstdecklinkvideosink.cpp b/sys/decklink/gstdecklinkvideosink.cpp
index 551e5d7..6f6f944 100644
--- a/sys/decklink/gstdecklinkvideosink.cpp
+++ b/sys/decklink/gstdecklinkvideosink.cpp
@@ -119,7 +119,8 @@
PROP_0,
PROP_MODE,
PROP_DEVICE_NUMBER,
- PROP_VIDEO_FORMAT
+ PROP_VIDEO_FORMAT,
+ PROP_TIMECODE_FORMAT
};
static void gst_decklink_video_sink_set_property (GObject * object,
@@ -213,6 +214,14 @@
(GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS |
G_PARAM_CONSTRUCT)));
+ g_object_class_install_property (gobject_class, PROP_TIMECODE_FORMAT,
+ g_param_spec_enum ("timecode-format", "Timecode format",
+ "Timecode format type to use for playback",
+ GST_TYPE_DECKLINK_TIMECODE_FORMAT,
+ GST_DECKLINK_TIMECODE_FORMAT_RP188ANY,
+ (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS |
+ G_PARAM_CONSTRUCT)));
+
templ_caps = gst_decklink_mode_get_template_caps ();
templ_caps = gst_caps_make_writable (templ_caps);
/* For output we support any framerate and only really care about timestamps */
@@ -235,6 +244,8 @@
self->mode = GST_DECKLINK_MODE_NTSC;
self->device_number = 0;
self->video_format = GST_DECKLINK_VIDEO_FORMAT_8BIT_YUV;
+ /* VITC is legacy, we should expect RP188 in modern use cases */
+ self->timecode_format = bmdTimecodeRP188Any;
gst_base_sink_set_max_lateness (GST_BASE_SINK_CAST (self), 20 * GST_MSECOND);
gst_base_sink_set_qos_enabled (GST_BASE_SINK_CAST (self), TRUE);
@@ -268,6 +279,11 @@
break;
}
break;
+ case PROP_TIMECODE_FORMAT:
+ self->timecode_format =
+ gst_decklink_timecode_format_from_enum ((GstDecklinkTimecodeFormat)
+ g_value_get_enum (value));
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
break;
@@ -290,6 +306,10 @@
case PROP_VIDEO_FORMAT:
g_value_set_enum (value, self->video_format);
break;
+ case PROP_TIMECODE_FORMAT:
+ g_value_set_enum (value,
+ gst_decklink_timecode_format_to_enum (self->timecode_format));
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
break;
@@ -310,6 +330,7 @@
GstDecklinkVideoSink *self = GST_DECKLINK_VIDEO_SINK_CAST (bsink);
const GstDecklinkMode *mode;
HRESULT ret;
+ BMDVideoOutputFlags flags;
GST_DEBUG_OBJECT (self, "Setting caps %" GST_PTR_FORMAT, caps);
@@ -341,8 +362,21 @@
g_assert (mode != NULL);
};
- ret = self->output->output->EnableVideoOutput (mode->mode,
- bmdVideoOutputFlagDefault);
+ /* The timecode_format itself is used when we embed the actual timecode data
+ * into the frame. Now we only need to know which of the two standards the
+ * timecode format will adhere to: VITC or RP188, and send the appropriate
+ * flag to EnableVideoOutput. The exact format is specified later.
+ *
+ * Note that this flag will have no effect in practice if the video stream
+ * does not contain timecode metadata.
+ */
+ if (self->timecode_format == GST_DECKLINK_TIMECODE_FORMAT_VITC ||
+ self->timecode_format == GST_DECKLINK_TIMECODE_FORMAT_VITCFIELD2)
+ flags = bmdVideoOutputVITC;
+ else
+ flags = bmdVideoOutputRP188;
+
+ ret = self->output->output->EnableVideoOutput (mode->mode, flags);
if (ret != S_OK) {
GST_WARNING_OBJECT (self, "Failed to enable video output");
return FALSE;
@@ -503,6 +537,7 @@
GstDecklinkVideoFormat caps_format;
BMDPixelFormat format;
gint bpp;
+ GstVideoTimeCodeMeta *tc_meta;
GST_DEBUG_OBJECT (self, "Preparing buffer %p", buffer);
@@ -575,14 +610,48 @@
}
gst_video_frame_unmap (&vframe);
+ tc_meta = gst_buffer_get_video_time_code_meta (buffer);
+ if (tc_meta) {
+ BMDTimecodeFlags bflags = (BMDTimecodeFlags) 0;
+ gchar *tc_str;
+
+ if (((GstVideoTimeCodeFlags) (tc_meta->tc.
+ config.flags)) & GST_VIDEO_TIME_CODE_FLAGS_DROP_FRAME)
+ bflags = (BMDTimecodeFlags) (bflags | bmdTimecodeIsDropFrame);
+ else
+ bflags = (BMDTimecodeFlags) (bflags | bmdTimecodeFlagDefault);
+ if (tc_meta->tc.field_count == 2)
+ bflags = (BMDTimecodeFlags) (bflags | bmdTimecodeFieldMark);
+
+ tc_str = gst_video_time_code_to_string (&tc_meta->tc);
+ ret = frame->SetTimecodeFromComponents (self->timecode_format,
+ (uint8_t) tc_meta->tc.hours,
+ (uint8_t) tc_meta->tc.minutes,
+ (uint8_t) tc_meta->tc.seconds, (uint8_t) tc_meta->tc.frames, bflags);
+ if (ret != S_OK) {
+ GST_ERROR_OBJECT (self,
+ "Failed to set timecode %s to video frame: 0x%08x", tc_str, ret);
+ flow_ret = GST_FLOW_ERROR;
+ g_free (tc_str);
+ goto out;
+ }
+ GST_DEBUG_OBJECT (self, "Set frame timecode to %s", tc_str);
+ g_free (tc_str);
+ }
+
convert_to_internal_clock (self, &running_time, &running_time_duration);
GST_LOG_OBJECT (self, "Scheduling video frame %p at %" GST_TIME_FORMAT
" with duration %" GST_TIME_FORMAT, frame, GST_TIME_ARGS (running_time),
GST_TIME_ARGS (running_time_duration));
+ /* FIXME: Scale down to milliseconds, otherwise at least some hardware
+ * has problems scheduling the frames (or schedules them too slow) and we
+ * run out of available frames:
+ * https://bugzilla.gnome.org/show_bug.cgi?id=770282
+ */
ret = self->output->output->ScheduleVideoFrame (frame,
- running_time, running_time_duration, GST_SECOND);
+ running_time / GST_MSECOND, running_time_duration / GST_MSECOND, GST_MSECOND);
if (ret != S_OK) {
GST_ELEMENT_ERROR (self, STREAM, FAILED,
(NULL), ("Failed to schedule frame: 0x%08x", ret));
diff --git a/sys/decklink/gstdecklinkvideosink.h b/sys/decklink/gstdecklinkvideosink.h
index fb95591..b9aca28 100644
--- a/sys/decklink/gstdecklinkvideosink.h
+++ b/sys/decklink/gstdecklinkvideosink.h
@@ -52,6 +52,7 @@
GstDecklinkModeEnum mode;
gint device_number;
GstDecklinkVideoFormat video_format;
+ BMDTimecodeFormat timecode_format;
GstVideoInfo info;
diff --git a/sys/decklink/gstdecklinkvideosrc.cpp b/sys/decklink/gstdecklinkvideosrc.cpp
index 15ea0c8..90492ae 100644
--- a/sys/decklink/gstdecklinkvideosrc.cpp
+++ b/sys/decklink/gstdecklinkvideosrc.cpp
@@ -40,7 +40,8 @@
PROP_CONNECTION,
PROP_DEVICE_NUMBER,
PROP_BUFFER_SIZE,
- PROP_VIDEO_FORMAT
+ PROP_VIDEO_FORMAT,
+ PROP_TIMECODE_FORMAT
};
typedef struct
@@ -49,6 +50,7 @@
GstClockTime capture_time, capture_duration;
GstDecklinkModeEnum mode;
BMDPixelFormat format;
+ GstVideoTimeCode *tc;
} CaptureFrame;
static void
@@ -169,6 +171,14 @@
(GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS |
G_PARAM_CONSTRUCT)));
+ g_object_class_install_property (gobject_class, PROP_TIMECODE_FORMAT,
+ g_param_spec_enum ("timecode-format", "Timecode format",
+ "Timecode format type to use for input",
+ GST_TYPE_DECKLINK_TIMECODE_FORMAT,
+ GST_DECKLINK_TIMECODE_FORMAT_RP188ANY,
+ (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS |
+ G_PARAM_CONSTRUCT)));
+
templ_caps = gst_decklink_mode_get_template_caps ();
gst_element_class_add_pad_template (element_class,
gst_pad_template_new ("src", GST_PAD_SRC, GST_PAD_ALWAYS, templ_caps));
@@ -192,6 +202,7 @@
self->device_number = 0;
self->buffer_size = DEFAULT_BUFFER_SIZE;
self->video_format = GST_DECKLINK_VIDEO_FORMAT_AUTO;
+ self->timecode_format = bmdTimecodeRP188Any;
gst_base_src_set_live (GST_BASE_SRC (self), TRUE);
gst_base_src_set_format (GST_BASE_SRC (self), GST_FORMAT_TIME);
@@ -245,6 +256,11 @@
break;
}
break;
+ case PROP_TIMECODE_FORMAT:
+ self->timecode_format =
+ gst_decklink_timecode_format_from_enum ((GstDecklinkTimecodeFormat)
+ g_value_get_enum (value));
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
break;
@@ -273,6 +289,10 @@
case PROP_VIDEO_FORMAT:
g_value_set_enum (value, self->video_format);
break;
+ case PROP_TIMECODE_FORMAT:
+ g_value_set_enum (value,
+ gst_decklink_timecode_format_to_enum (self->timecode_format));
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
break;
@@ -493,7 +513,8 @@
static void
gst_decklink_video_src_got_frame (GstElement * element,
IDeckLinkVideoInputFrame * frame, GstDecklinkModeEnum mode,
- GstClockTime capture_time, GstClockTime capture_duration)
+ GstClockTime capture_time, GstClockTime capture_duration, guint hours,
+ guint minutes, guint seconds, guint frames, BMDTimecodeFlags bflags)
{
GstDecklinkVideoSrc *self = GST_DECKLINK_VIDEO_SRC_CAST (element);
@@ -509,6 +530,9 @@
g_mutex_lock (&self->lock);
if (!self->flushing) {
CaptureFrame *f;
+ const GstDecklinkMode *bmode;
+ GstVideoTimeCodeFlags flags = GST_VIDEO_TIME_CODE_FLAGS_NONE;
+ guint field_count = 0;
while (g_queue_get_length (&self->current_frames) >= self->buffer_size) {
f = (CaptureFrame *) g_queue_pop_head (&self->current_frames);
@@ -523,6 +547,24 @@
f->capture_duration = capture_duration;
f->mode = mode;
f->format = frame->GetPixelFormat ();
+ bmode = gst_decklink_get_mode (mode);
+ if (bmode->interlaced) {
+ flags =
+ (GstVideoTimeCodeFlags) (flags |
+ GST_VIDEO_TIME_CODE_FLAGS_INTERLACED);
+ if (bflags & bmdTimecodeFieldMark)
+ field_count = 2;
+ else
+ field_count = 1;
+ }
+ if (bflags & bmdTimecodeIsDropFrame)
+ flags =
+ (GstVideoTimeCodeFlags) (flags |
+ GST_VIDEO_TIME_CODE_FLAGS_DROP_FRAME);
+ f->tc =
+ gst_video_time_code_new (bmode->fps_n, bmode->fps_d, NULL, flags, hours,
+ minutes, seconds, frames, field_count);
+
frame->AddRef ();
g_queue_push_tail (&self->current_frames, f);
g_cond_signal (&self->cond);
@@ -556,7 +598,6 @@
GST_DEBUG_OBJECT (self, "Flushing");
return GST_FLOW_FLUSHING;
}
-
// If we're not flushing, we should have a valid frame from the queue
g_assert (f != NULL);
@@ -620,6 +661,7 @@
GST_BUFFER_TIMESTAMP (*buffer) = f->capture_time;
GST_BUFFER_DURATION (*buffer) = f->capture_duration;
+ gst_buffer_add_video_time_code_meta (*buffer, f->tc);
GST_DEBUG_OBJECT (self,
"Outputting buffer %p with timestamp %" GST_TIME_FORMAT " and duration %"
diff --git a/sys/decklink/gstdecklinkvideosrc.h b/sys/decklink/gstdecklinkvideosrc.h
index 1309364..b1e7351 100644
--- a/sys/decklink/gstdecklinkvideosrc.h
+++ b/sys/decklink/gstdecklinkvideosrc.h
@@ -58,6 +58,7 @@
GstVideoInfo info;
GstDecklinkVideoFormat video_format;
+ BMDTimecodeFormat timecode_format;
GstDecklinkInput *input;
diff --git a/sys/directsound/Makefile.in b/sys/directsound/Makefile.in
index cab8f60..c03bebd 100644
--- a/sys/directsound/Makefile.in
+++ b/sys/directsound/Makefile.in
@@ -329,6 +329,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -378,6 +380,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/sys/dshowdecwrapper/Makefile.in b/sys/dshowdecwrapper/Makefile.in
index 8f4f070..e3261e9 100644
--- a/sys/dshowdecwrapper/Makefile.in
+++ b/sys/dshowdecwrapper/Makefile.in
@@ -331,6 +331,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -380,6 +382,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/sys/dshowsrcwrapper/Makefile.in b/sys/dshowsrcwrapper/Makefile.in
index b4076c6..0318375 100644
--- a/sys/dshowsrcwrapper/Makefile.in
+++ b/sys/dshowsrcwrapper/Makefile.in
@@ -242,6 +242,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -291,6 +293,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/sys/dshowvideosink/Makefile.in b/sys/dshowvideosink/Makefile.in
index 0714b41..a947aeb 100644
--- a/sys/dshowvideosink/Makefile.in
+++ b/sys/dshowvideosink/Makefile.in
@@ -242,6 +242,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -291,6 +293,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/sys/dvb/Makefile.in b/sys/dvb/Makefile.in
index 8fa6e19..adbf2e7 100644
--- a/sys/dvb/Makefile.in
+++ b/sys/dvb/Makefile.in
@@ -335,6 +335,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -384,6 +386,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/sys/dvb/parsechannels.c b/sys/dvb/parsechannels.c
index 1d63eb8..e39cd94 100644
--- a/sys/dvb/parsechannels.c
+++ b/sys/dvb/parsechannels.c
@@ -99,7 +99,6 @@
return TRUE;
}
-/* TODO handle errors when getting keyfile data on all these functions */
static gboolean
gst_dvb_base_bin_conf_set_string (GstElement * dvbbasebin,
const gchar * property, GKeyFile * kf, const gchar * channel_name,
@@ -108,6 +107,12 @@
gchar *str;
str = g_key_file_get_string (kf, channel_name, key, NULL);
+ if (!str) {
+ GST_WARNING_OBJECT (dvbbasebin,
+ "Could not get value for '%s' on channel '%s'", key, channel_name);
+ return FALSE;
+ }
+
g_object_set (dvbbasebin, property, str, NULL);
g_free (str);
return TRUE;
@@ -120,6 +125,12 @@
guint64 v;
v = g_key_file_get_uint64 (kf, channel_name, key, NULL);
+ if (!v) {
+ GST_WARNING_OBJECT (dvbbasebin,
+ "Could not get value for '%s' on channel '%s'", key, channel_name);
+ return FALSE;
+ }
+
g_object_set (dvbbasebin, property, (guint) v, NULL);
return TRUE;
}
@@ -131,6 +142,12 @@
gint v;
v = g_key_file_get_integer (kf, channel_name, key, NULL);
+ if (!v) {
+ GST_WARNING_OBJECT (dvbbasebin,
+ "Could not get value for '%s' on channel '%s'", key, channel_name);
+ return FALSE;
+ }
+
g_object_set (dvbbasebin, property, v, NULL);
return TRUE;
}
@@ -144,6 +161,12 @@
gint v;
str = g_key_file_get_string (kf, channel_name, key, NULL);
+ if (!str) {
+ GST_WARNING_OBJECT (dvbbasebin,
+ "Could not get value for '%s' on channel '%s'", key, channel_name);
+ return FALSE;
+ }
+
if (strcmp (str, "AUTO") == 0)
v = 2;
else if (strcmp (str, "ON") == 0)
@@ -317,7 +340,7 @@
}
if (!property_found)
- GST_DEBUG_OBJECT (dvbbasebin, "Failed to map property '%s'", k);
+ GST_WARNING_OBJECT (dvbbasebin, "Failed to map property '%s'", k);
keys_p++;
}
diff --git a/sys/fbdev/Makefile.in b/sys/fbdev/Makefile.in
index e43e4fd..1ba38af 100644
--- a/sys/fbdev/Makefile.in
+++ b/sys/fbdev/Makefile.in
@@ -325,6 +325,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -374,6 +376,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/sys/fbdev/gstfbdevsink.c b/sys/fbdev/gstfbdevsink.c
index 3f9ad88..166c543 100644
--- a/sys/fbdev/gstfbdevsink.c
+++ b/sys/fbdev/gstfbdevsink.c
@@ -34,8 +34,14 @@
#include <fcntl.h>
#include <sys/ioctl.h>
#include <sys/mman.h>
+
+#ifdef HAVE_UNISTD_H
#include <unistd.h>
-#include "_stdint.h"
+#endif
+
+#ifdef HAVE_STDINT_H
+#include <stdint.h>
+#endif
#include "gstfbdevsink.h"
diff --git a/sys/kms/Makefile.in b/sys/kms/Makefile.in
index 571f994..467c252 100644
--- a/sys/kms/Makefile.in
+++ b/sys/kms/Makefile.in
@@ -330,6 +330,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -379,6 +381,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/sys/kms/gstkmsallocator.c b/sys/kms/gstkmsallocator.c
index 5c23c92..7df1aa3 100644
--- a/sys/kms/gstkmsallocator.c
+++ b/sys/kms/gstkmsallocator.c
@@ -295,13 +295,17 @@
"KMSMemory::allocator", "drm-fd", fd, NULL);
}
+/* The mem_offsets are relative to the GstMemory start, unlike the vinfo->offset
+ * which are relative to the GstBuffer start. */
static gboolean
gst_kms_allocator_add_fb (GstKMSAllocator * alloc, GstKMSMemory * kmsmem,
- GstVideoInfo * vinfo)
+ gsize mem_offsets[GST_VIDEO_MAX_PLANES], GstVideoInfo * vinfo)
{
int i, ret;
+ gint num_planes = GST_VIDEO_INFO_N_PLANES (vinfo);
guint32 w, h, fmt, bo_handles[4] = { 0, };
- guint32 offsets[4], pitches[4];
+ guint32 offsets[4] = { 0, };
+ guint32 pitches[4] = { 0, };
if (kmsmem->fb_id)
return TRUE;
@@ -312,19 +316,21 @@
if (kmsmem->bo) {
kms_bo_get_prop (kmsmem->bo, KMS_HANDLE, &bo_handles[0]);
- for (i = 1; i < 4; i++)
+ for (i = 1; i < num_planes; i++)
bo_handles[i] = bo_handles[0];
} else {
- for (i = 0; i < 4; i++)
+ for (i = 0; i < num_planes; i++)
bo_handles[i] = kmsmem->gem_handle[i];
}
GST_DEBUG_OBJECT (alloc, "bo handles: %d, %d, %d, %d", bo_handles[0],
bo_handles[1], bo_handles[2], bo_handles[3]);
- for (i = 0; i < 4; i++) {
- offsets[i] = GST_VIDEO_INFO_PLANE_OFFSET (vinfo, i);
+ for (i = 0; i < num_planes; i++) {
+ offsets[i] = mem_offsets[i];
pitches[i] = GST_VIDEO_INFO_PLANE_STRIDE (vinfo, i);
+ GST_DEBUG_OBJECT (alloc, "Create FB plane %i with stride %u and offset %u",
+ i, pitches[i], offsets[i]);
}
ret = drmModeAddFB2 (alloc->priv->fd, w, h, fmt, bo_handles, pitches,
@@ -369,7 +375,7 @@
kmsmem = (GstKMSMemory *) mem;
if (!gst_kms_allocator_memory_create (alloc, kmsmem, vinfo))
goto fail;
- if (!gst_kms_allocator_add_fb (alloc, kmsmem, vinfo))
+ if (!gst_kms_allocator_add_fb (alloc, kmsmem, vinfo->offset, vinfo))
goto fail;
return mem;
@@ -382,7 +388,7 @@
GstKMSMemory *
gst_kms_allocator_dmabuf_import (GstAllocator * allocator, gint * prime_fds,
- gint n_planes, GstVideoInfo * vinfo)
+ gint n_planes, gsize offsets[GST_VIDEO_MAX_PLANES], GstVideoInfo * vinfo)
{
GstKMSAllocator *alloc;
GstMemory *mem;
@@ -404,7 +410,7 @@
goto import_fd_failed;
}
- if (!gst_kms_allocator_add_fb (alloc, tmp, vinfo))
+ if (!gst_kms_allocator_add_fb (alloc, tmp, offsets, vinfo))
goto failed;
return tmp;
diff --git a/sys/kms/gstkmsallocator.h b/sys/kms/gstkmsallocator.h
index fa5c349..fefd4c2 100644
--- a/sys/kms/gstkmsallocator.h
+++ b/sys/kms/gstkmsallocator.h
@@ -82,6 +82,7 @@
GstKMSMemory* gst_kms_allocator_dmabuf_import (GstAllocator *allocator,
gint *prime_fds,
gint n_planes,
+ gsize offsets[GST_VIDEO_MAX_PLANES],
GstVideoInfo *vinfo);
G_END_DECLS
diff --git a/sys/kms/gstkmssink.c b/sys/kms/gstkmssink.c
index 6790ad6..72cb1f7 100644
--- a/sys/kms/gstkmssink.c
+++ b/sys/kms/gstkmssink.c
@@ -48,6 +48,7 @@
#include <drm.h>
#include <xf86drm.h>
#include <xf86drmMode.h>
+#include <drm_fourcc.h>
#include <string.h>
@@ -888,21 +889,6 @@
(GDestroyNotify) gst_memory_unref);
}
-static gsize
-get_plane_data_size (GstVideoInfo * info, guint plane)
-{
- gint padded_height;
- gsize plane_size;
-
- padded_height = info->height;
- padded_height =
- GST_VIDEO_FORMAT_INFO_SCALE_HEIGHT (info->finfo, plane, padded_height);
-
- plane_size = GST_VIDEO_INFO_PLANE_STRIDE (info, plane) * padded_height;
-
- return plane_size;
-}
-
static gboolean
gst_kms_sink_import_dmabuf (GstKMSSink * self, GstBuffer * inbuf,
GstBuffer ** outbuf)
@@ -926,6 +912,9 @@
n_mem = gst_buffer_n_memory (inbuf);
meta = gst_buffer_get_video_meta (inbuf);
+ GST_TRACE_OBJECT (self, "Found a dmabuf with %u planes and %u memories",
+ n_planes, n_mem);
+
/* We cannot have multiple dmabuf per plane */
if (n_mem > n_planes)
return FALSE;
@@ -943,19 +932,13 @@
/* Find and validate all memories */
for (i = 0; i < n_planes; i++) {
- guint plane_size;
guint length;
- plane_size = get_plane_data_size (&self->vinfo, i);
if (!gst_buffer_find_memory (inbuf,
- GST_VIDEO_INFO_PLANE_OFFSET (&self->vinfo, i), plane_size,
+ GST_VIDEO_INFO_PLANE_OFFSET (&self->vinfo, i), 1,
&mems_idx[i], &length, &mems_skip[i]))
return FALSE;
- /* We can't have more then one dmabuf per plane */
- if (length != 1)
- return FALSE;
-
mems[i] = gst_buffer_peek_memory (inbuf, mems_idx[i]);
/* And all memory found must be dmabuf */
@@ -977,7 +960,7 @@
prime_fds[1], prime_fds[2], prime_fds[3]);
kmsmem = gst_kms_allocator_dmabuf_import (self->allocator, prime_fds,
- n_planes, &self->vinfo);
+ n_planes, mems_skip, &self->vinfo);
if (!kmsmem)
return FALSE;
diff --git a/sys/linsys/Makefile.in b/sys/linsys/Makefile.in
index 2163221..6032f8b 100644
--- a/sys/linsys/Makefile.in
+++ b/sys/linsys/Makefile.in
@@ -327,6 +327,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -376,6 +378,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/sys/nvenc/Makefile.in b/sys/nvenc/Makefile.in
index 9dfe020..c3485fa 100644
--- a/sys/nvenc/Makefile.in
+++ b/sys/nvenc/Makefile.in
@@ -331,6 +331,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -380,6 +382,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/sys/opensles/Makefile.am b/sys/opensles/Makefile.am
index 6236833..764078e 100644
--- a/sys/opensles/Makefile.am
+++ b/sys/opensles/Makefile.am
@@ -20,5 +20,6 @@
noinst_HEADERS = openslescommon.h \
openslesringbuffer.h \
openslessink.h \
- openslessrc.h
+ openslessrc.h \
+ opensles.h
diff --git a/sys/opensles/Makefile.in b/sys/opensles/Makefile.in
index 8f9099e..faff953 100644
--- a/sys/opensles/Makefile.in
+++ b/sys/opensles/Makefile.in
@@ -328,6 +328,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -377,6 +379,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
@@ -805,7 +809,8 @@
noinst_HEADERS = openslescommon.h \
openslesringbuffer.h \
openslessink.h \
- openslessrc.h
+ openslessrc.h \
+ opensles.h
all: all-am
diff --git a/sys/applemedia-nonpublic/bufferfactory.h b/sys/opensles/opensles.h
similarity index 67%
rename from sys/applemedia-nonpublic/bufferfactory.h
rename to sys/opensles/opensles.h
index 132b953..dbc341c 100644
--- a/sys/applemedia-nonpublic/bufferfactory.h
+++ b/sys/opensles/opensles.h
@@ -1,5 +1,6 @@
-/*
- * Copyright (C) 2010 Ole André Vadla Ravnås <oleavr@soundrop.com>
+/* GStreamer
+ * Copyright (C) 2012 Collabora Ltd.
+ * Author: Sebastian Dröge <sebastian.droege@collabora.co.uk>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
@@ -17,18 +18,13 @@
* Boston, MA 02110-1301, USA.
*/
-#import <Foundation/Foundation.h>
+#ifndef __OPENSLES_H__
+#define __OPENSLES_H__
#include <gst/gst.h>
+#include <SLES/OpenSLES.h>
-@interface GstAMBufferFactory : NSObject {
- gpointer coreMediaCtx;
-}
+SLObjectItf gst_opensles_get_engine (void);
+void gst_opensles_release_engine (SLObjectItf engine_object);
-- (id)initWithError:(GError **)error;
-- (void)finalize;
-
-- (GstBuffer *)createGstBufferForCoreVideoBuffer:(CFTypeRef)cvbuf;
-- (GstBuffer *)createGstBufferForSampleBuffer:(CFTypeRef)sbuf;
-
-@end
+#endif /* __OPENSLES_H__ */
diff --git a/sys/pvr2d/Makefile.in b/sys/pvr2d/Makefile.in
index 8b29d5e..121009c 100644
--- a/sys/pvr2d/Makefile.in
+++ b/sys/pvr2d/Makefile.in
@@ -329,6 +329,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -378,6 +380,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/sys/shm/Makefile.in b/sys/shm/Makefile.in
index 900230e..03eee08 100644
--- a/sys/shm/Makefile.in
+++ b/sys/shm/Makefile.in
@@ -327,6 +327,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -376,6 +378,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/sys/tinyalsa/Makefile.in b/sys/tinyalsa/Makefile.in
index 160ba70..843d5f2 100644
--- a/sys/tinyalsa/Makefile.in
+++ b/sys/tinyalsa/Makefile.in
@@ -326,6 +326,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -375,6 +377,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/sys/uvch264/Makefile.in b/sys/uvch264/Makefile.in
index 3218574..1f7b750 100644
--- a/sys/uvch264/Makefile.in
+++ b/sys/uvch264/Makefile.in
@@ -330,6 +330,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -379,6 +381,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/sys/vcd/Makefile.in b/sys/vcd/Makefile.in
index ed18a3b..1c4db38 100644
--- a/sys/vcd/Makefile.in
+++ b/sys/vcd/Makefile.in
@@ -325,6 +325,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -374,6 +376,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/sys/vdpau/Makefile.in b/sys/vdpau/Makefile.in
index a8f39c4..13903a0 100644
--- a/sys/vdpau/Makefile.in
+++ b/sys/vdpau/Makefile.in
@@ -333,6 +333,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -382,6 +384,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/sys/wasapi/Makefile.in b/sys/wasapi/Makefile.in
index e00b3b9..882d1aa 100644
--- a/sys/wasapi/Makefile.in
+++ b/sys/wasapi/Makefile.in
@@ -329,6 +329,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -378,6 +380,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/sys/wininet/Makefile.in b/sys/wininet/Makefile.in
index 96a3a0f..21363b0 100644
--- a/sys/wininet/Makefile.in
+++ b/sys/wininet/Makefile.in
@@ -325,6 +325,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -374,6 +376,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/sys/winks/Makefile.in b/sys/winks/Makefile.in
index ba4cce4..21a37eb 100644
--- a/sys/winks/Makefile.in
+++ b/sys/winks/Makefile.in
@@ -330,6 +330,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -379,6 +381,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/sys/winks/gstksvideodevice.c b/sys/winks/gstksvideodevice.c
index d00b6a7..8f89d51 100644
--- a/sys/winks/gstksvideodevice.c
+++ b/sys/winks/gstksvideodevice.c
@@ -796,7 +796,7 @@
priv->fps_n = fps_n;
priv->fps_d = fps_d;
- if (gst_structure_has_name (s, "video/x-raw-rgb"))
+ if (media_type->is_rgb)
priv->rgb_swap_buf = g_malloc (media_type->sample_size / priv->height);
else
priv->rgb_swap_buf = NULL;
@@ -1176,9 +1176,10 @@
}
gboolean
-gst_ks_video_device_postprocess_frame (GstKsVideoDevice * self, GstBuffer * buf)
+gst_ks_video_device_postprocess_frame (GstKsVideoDevice * self, GstBuffer ** bufptr)
{
GstKsVideoDevicePrivate *priv = GST_KS_VIDEO_DEVICE_GET_PRIVATE (self);
+ GstBuffer *buf = *bufptr;
/* If it's RGB we need to flip the image */
if (priv->rgb_swap_buf != NULL) {
@@ -1186,6 +1187,10 @@
gint stride, line;
guint8 *dst, *src;
+ /* Need to make the buffer writable because
+ * the pseudo-bufferpool of requests keeps a ref */
+ buf = gst_buffer_make_writable (buf);
+
if (!gst_buffer_map (buf, &info, GST_MAP_READWRITE))
return FALSE;
@@ -1205,6 +1210,7 @@
gst_buffer_unmap (buf, &info);
}
+ *bufptr = buf;
return TRUE;
}
diff --git a/sys/winks/gstksvideodevice.h b/sys/winks/gstksvideodevice.h
index 649faaa..4c135ea 100644
--- a/sys/winks/gstksvideodevice.h
+++ b/sys/winks/gstksvideodevice.h
@@ -77,7 +77,7 @@
gboolean gst_ks_video_device_get_latency (GstKsVideoDevice * self, GstClockTime * min_latency, GstClockTime * max_latency);
GstFlowReturn gst_ks_video_device_read_frame (GstKsVideoDevice * self, GstBuffer ** buf, GstClockTime * presentation_time, gulong * error_code, gchar ** error_str);
-gboolean gst_ks_video_device_postprocess_frame (GstKsVideoDevice * self, GstBuffer *buf);
+gboolean gst_ks_video_device_postprocess_frame (GstKsVideoDevice * self, GstBuffer **buf);
void gst_ks_video_device_cancel (GstKsVideoDevice * self);
void gst_ks_video_device_cancel_stop (GstKsVideoDevice * self);
diff --git a/sys/winks/gstksvideosrc.c b/sys/winks/gstksvideosrc.c
index c2bad34..0854b29 100644
--- a/sys/winks/gstksvideosrc.c
+++ b/sys/winks/gstksvideosrc.c
@@ -927,7 +927,7 @@
if (G_UNLIKELY (priv->do_stats))
gst_ks_video_src_update_statistics (self);
- if (!gst_ks_video_device_postprocess_frame (priv->device, *buf)) {
+ if (!gst_ks_video_device_postprocess_frame (priv->device, buf)) {
GST_ELEMENT_ERROR (self, RESOURCE, FAILED, ("Postprocessing failed"),
("Postprocessing failed"));
return GST_FLOW_ERROR;
@@ -1013,7 +1013,7 @@
0, "Kernel streaming video source");
if (!gst_element_register (plugin, "ksvideosrc",
- GST_RANK_NONE, GST_TYPE_KS_VIDEO_SRC))
+ GST_RANK_PRIMARY, GST_TYPE_KS_VIDEO_SRC))
return FALSE;
if (!gst_device_provider_register (plugin, "ksdeviceprovider",
diff --git a/sys/winks/ksvideohelpers.c b/sys/winks/ksvideohelpers.c
index 9d70461..8f51e50 100644
--- a/sys/winks/ksvideohelpers.c
+++ b/sys/winks/ksvideohelpers.c
@@ -125,10 +125,13 @@
}
static GstStructure *
-ks_video_format_to_structure (GUID subtype_guid, GUID format_guid)
+ks_video_format_to_structure (GUID subtype_guid, GUID format_guid,
+ gboolean * p_is_rgb)
{
GstStructure *structure = NULL;
const gchar *media_type = NULL, *format = NULL;
+ /* RGB formats can be bottom-up (upside down) DIB */
+ gboolean is_rgb = FALSE;
if (IsEqualGUID (&subtype_guid, &MEDIASUBTYPE_MJPG) || IsEqualGUID (&subtype_guid, &MEDIASUBTYPE_TVMJ) || /* FIXME: NOT tested */
IsEqualGUID (&subtype_guid, &MEDIASUBTYPE_WAKE) || /* FIXME: NOT tested */
@@ -138,18 +141,23 @@
} else if (IsEqualGUID (&subtype_guid, &MEDIASUBTYPE_RGB555)) {
media_type = "video/x-raw";
format = "RGB15";
+ is_rgb = TRUE;
} else if (IsEqualGUID (&subtype_guid, &MEDIASUBTYPE_RGB565)) {
media_type = "video/x-raw";
format = "RGB16";
+ is_rgb = TRUE;
} else if (IsEqualGUID (&subtype_guid, &MEDIASUBTYPE_RGB24)) {
media_type = "video/x-raw";
- format = "RGBx";
+ format = "BGR";
+ is_rgb = TRUE;
} else if (IsEqualGUID (&subtype_guid, &MEDIASUBTYPE_RGB32)) {
media_type = "video/x-raw";
- format = "RGB";
+ format = "BGRx";
+ is_rgb = TRUE;
} else if (IsEqualGUID (&subtype_guid, &MEDIASUBTYPE_ARGB32)) {
media_type = "video/x-raw";
- format = "ARGB";
+ format = "BGRA";
+ is_rgb = TRUE;
} else if (IsEqualGUID (&subtype_guid, &MEDIASUBTYPE_ARGB1555)) {
GST_WARNING ("Unsupported video format ARGB15555");
} else if (IsEqualGUID (&subtype_guid, &MEDIASUBTYPE_ARGB4444)) {
@@ -177,6 +185,9 @@
if (format) {
gst_structure_set (structure, "format", G_TYPE_STRING, format, NULL);
}
+ if (p_is_rgb) {
+ *p_is_rgb = is_rgb;
+ }
}
if (!structure) {
@@ -527,7 +538,7 @@
media_structure =
ks_video_format_to_structure (range->SubFormat,
- range->Specifier);
+ range->Specifier, &entry->is_rgb);
if (media_structure == NULL) {
g_warning ("ks_video_format_to_structure returned NULL");
@@ -678,22 +689,22 @@
/* RGB formats */
structure =
ks_video_append_var_video_fields (ks_video_format_to_structure
- (MEDIASUBTYPE_RGB555, FORMAT_VideoInfo));
+ (MEDIASUBTYPE_RGB555, FORMAT_VideoInfo, NULL));
gst_caps_append_structure (caps, structure);
structure =
ks_video_append_var_video_fields (ks_video_format_to_structure
- (MEDIASUBTYPE_RGB565, FORMAT_VideoInfo));
+ (MEDIASUBTYPE_RGB565, FORMAT_VideoInfo, NULL));
gst_caps_append_structure (caps, structure);
structure =
ks_video_append_var_video_fields (ks_video_format_to_structure
- (MEDIASUBTYPE_RGB24, FORMAT_VideoInfo));
+ (MEDIASUBTYPE_RGB24, FORMAT_VideoInfo, NULL));
gst_caps_append_structure (caps, structure);
structure =
ks_video_append_var_video_fields (ks_video_format_to_structure
- (MEDIASUBTYPE_RGB32, FORMAT_VideoInfo));
+ (MEDIASUBTYPE_RGB32, FORMAT_VideoInfo, NULL));
gst_caps_append_structure (caps, structure);
/* YUV formats */
@@ -705,16 +716,16 @@
/* Other formats */
structure =
ks_video_append_var_video_fields (ks_video_format_to_structure
- (MEDIASUBTYPE_MJPG, FORMAT_VideoInfo));
+ (MEDIASUBTYPE_MJPG, FORMAT_VideoInfo, NULL));
gst_caps_append_structure (caps, structure);
structure =
ks_video_append_var_video_fields (ks_video_format_to_structure
- (MEDIASUBTYPE_dvsd, FORMAT_VideoInfo));
+ (MEDIASUBTYPE_dvsd, FORMAT_VideoInfo, NULL));
gst_caps_append_structure (caps, structure);
structure = /* no variable video fields (width, height, framerate) */
- ks_video_format_to_structure (MEDIASUBTYPE_dvsd, FORMAT_DvInfo);
+ ks_video_format_to_structure (MEDIASUBTYPE_dvsd, FORMAT_DvInfo, NULL);
gst_caps_append_structure (caps, structure);
}
diff --git a/sys/winks/ksvideohelpers.h b/sys/winks/ksvideohelpers.h
index 3aa0c38..9215284 100644
--- a/sys/winks/ksvideohelpers.h
+++ b/sys/winks/ksvideohelpers.h
@@ -49,6 +49,7 @@
guint sample_size;
GstCaps * translated_caps;
+ gboolean is_rgb;
};
typedef struct DVINFO {
diff --git a/sys/winscreencap/Makefile.in b/sys/winscreencap/Makefile.in
index 3ef6c3d..957a2bf 100644
--- a/sys/winscreencap/Makefile.in
+++ b/sys/winscreencap/Makefile.in
@@ -329,6 +329,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -378,6 +380,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/tests/Makefile.in b/tests/Makefile.in
index c653861..b6a8115 100644
--- a/tests/Makefile.in
+++ b/tests/Makefile.in
@@ -298,6 +298,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -347,6 +349,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/tests/check/Makefile.am b/tests/check/Makefile.am
index b16c968..ab8c787 100644
--- a/tests/check/Makefile.am
+++ b/tests/check/Makefile.am
@@ -41,7 +41,7 @@
endif
if USE_DASH
-check_dash = elements/dash_mpd
+check_dash = elements/dash_mpd elements/dash_isoff
check_dash_demux = elements/dash_demux
else
check_dash =
@@ -228,15 +228,17 @@
# these tests don't even pass
# neon: too flaky (almost always fails 'the first time')
+# dashdemux: fails because it uses random data streams but dashdemux nowadays
+# actually looks at the data and doesn't like randomness
noinst_PROGRAMS = \
pipelines/streamheader \
+ $(check_dash_demux) \
$(check_neon)
check_PROGRAMS = \
generic/states \
$(check_assrender) \
$(check_dash) \
- $(check_dash_demux) \
$(check_faac) \
$(check_faad) \
$(check_voaacenc) \
@@ -274,6 +276,8 @@
elements/netsim \
elements/pcapparse \
elements/pnm \
+ elements/rawaudioparse \
+ elements/rawvideoparse \
elements/rtponvifparse \
elements/rtponviftimestamp \
elements/id3mux \
@@ -298,14 +302,14 @@
$(check_player) \
$(EXPERIMENTAL_CHECKS)
-noinst_HEADERS = elements/mxfdemux.h
+noinst_HEADERS = elements/mxfdemux.h elements/dash_isoff.h
TESTS = $(check_PROGRAMS)
AM_CFLAGS = $(GST_CFLAGS) $(GST_CHECK_CFLAGS) $(GST_OPTION_CFLAGS) \
-DGST_CHECK_TEST_ENVIRONMENT_BEACON="\"GST_PLUGIN_LOADING_WHITELIST\"" \
-DGST_TEST_FILES_PATH="\"$(TEST_FILES_DIRECTORY)\"" \
- -UG_DISABLE_ASSERT -UG_DISABLE_CAST_CHECKS
+ -UG_DISABLE_ASSERT -UG_DISABLE_CAST_CHECKS $(PTHREAD_CFLAGS)
LDADD = $(GST_CHECK_LIBS)
generic_states_CFLAGS = $(AM_CFLAGS) $(GMODULE_NO_EXPORT_CFLAGS)
@@ -314,7 +318,7 @@
elements_audiomixer_LDADD = $(GST_BASE_LIBS) $(GST_CONTROLLER_LIBS) -lgstbase-@GST_API_VERSION@ $(LDADD)
elements_audiomixer_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CONTROLLER_CFLAGS) $(AM_CFLAGS)
-elements_audiointerleave_LDADD = $(GST_BASE_LIBS) -lgstbase-@GST_API_VERSION@ -lgstaudio-@GST_API_VERSION@ $(LDADD)
+elements_audiointerleave_LDADD = $(GST_BASE_LIBS) -lgstbase-@GST_API_VERSION@ $(GST_AUDIO_LIBS) $(LDADD)
elements_audiointerleave_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(AM_CFLAGS)
elements_pnm_CFLAGS = \
@@ -340,6 +344,12 @@
elements_pcapparse_LDADD = libparser.la $(LDADD)
+elements_rawaudioparse_LDADD = $(GST_BASE_LIBS) -lgstbase-@GST_API_VERSION@ $(GST_AUDIO_LIBS) $(LDADD)
+elements_rawaudioparse_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(AM_CFLAGS)
+
+elements_rawvideoparse_LDADD = $(GST_BASE_LIBS) -lgstbase-@GST_API_VERSION@ $(GST_VIDEO_LIBS) $(LDADD)
+elements_rawvideoparse_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(AM_CFLAGS)
+
libs_mpegvideoparser_CFLAGS = \
$(GST_PLUGINS_BAD_CFLAGS) $(GST_PLUGINS_BASE_CFLAGS) \
-DGST_USE_UNSTABLE_API \
@@ -352,7 +362,8 @@
libs_mpegts_CFLAGS = \
$(GST_PLUGINS_BAD_CFLAGS) \
-DGST_USE_UNSTABLE_API \
- $(GST_CFLAGS)
+ $(GST_CFLAGS) \
+ $(PTHREAD_CFLAGS)
libs_mpegts_LDADD = \
$(top_builddir)/gst-libs/gst/mpegts/libgstmpegts-@GST_API_VERSION@.la \
@@ -392,21 +403,21 @@
$(GST_BASE_CFLAGS) $(GST_CFLAGS) $(AM_CFLAGS)
elements_videoframe_audiolevel_LDADD = \
$(GST_PLUGINS_BASE_LIBS) $(GST_BASE_LIBS) $(GST_LIBS) $(LDADD) \
- -lgstaudio-@GST_API_VERSION@
+ $(GST_AUDIO_LIBS)
elements_faad_CFLAGS = \
$(GST_PLUGINS_BASE_CFLAGS) \
$(GST_BASE_CFLAGS) $(GST_CFLAGS) $(AM_CFLAGS)
elements_faad_LDADD = \
$(GST_PLUGINS_BASE_LIBS) $(GST_BASE_LIBS) $(GST_LIBS) $(LDADD) \
- -lgstaudio-@GST_API_VERSION@
+ $(GST_AUDIO_LIBS)
elements_faac_CFLAGS = \
$(GST_PLUGINS_BASE_CFLAGS) \
$(GST_BASE_CFLAGS) $(GST_CFLAGS) $(AM_CFLAGS)
elements_faac_LDADD = \
$(GST_PLUGINS_BASE_LIBS) $(GST_BASE_LIBS) $(GST_LIBS) $(LDADD) \
- -lgstaudio-@GST_API_VERSION@
+ $(GST_AUDIO_LIBS)
elements_gdppay_CFLAGS = \
$(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS) $(AM_CFLAGS)
@@ -421,7 +432,7 @@
$(GST_BASE_CFLAGS) $(GST_CFLAGS) $(AM_CFLAGS)
elements_voaacenc_LDADD = \
$(GST_PLUGINS_BASE_LIBS) $(GST_BASE_LIBS) $(GST_LIBS) $(LDADD) \
- -lgstaudio-@GST_API_VERSION@
+ $(GST_AUDIO_LIBS)
elements_camerabin_CFLAGS = \
$(GST_PLUGINS_BAD_CFLAGS) $(GST_PLUGINS_BASE_CFLAGS) \
@@ -444,10 +455,10 @@
elements_kate_LDADD = $(GST_BASE_LIBS) $(LDADD)
elements_assrender_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(AM_CFLAGS)
-elements_assrender_LDADD = $(GST_PLUGINS_BASE_LIBS) -lgstvideo-$(GST_API_VERSION) -lgstapp-$(GST_API_VERSION) $(GST_BASE_LIBS) $(LDADD)
+elements_assrender_LDADD = $(GST_PLUGINS_BASE_LIBS) $(GST_VIDEO_LIBS) -lgstapp-$(GST_API_VERSION) $(GST_BASE_LIBS) $(LDADD)
elements_mpegtsmux_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(AM_CFLAGS)
-elements_mpegtsmux_LDADD = $(GST_PLUGINS_BASE_LIBS) -lgstvideo-$(GST_API_VERSION) $(GST_BASE_LIBS) $(LDADD)
+elements_mpegtsmux_LDADD = $(GST_PLUGINS_BASE_LIBS) $(GST_VIDEO_LIBS) $(GST_BASE_LIBS) $(LDADD)
elements_uvch264demux_CFLAGS = -DUVCH264DEMUX_DATADIR="$(srcdir)/elements/uvch264demux_data" \
$(AM_CFLAGS)
@@ -457,6 +468,10 @@
$(top_builddir)/gst-libs/gst/uridownloader/libgsturidownloader-@GST_API_VERSION@.la
elements_dash_mpd_SOURCES = elements/dash_mpd.c
+elements_dash_isoff_CFLAGS = $(AM_CFLAGS) $(GST_BASE_CFLAGS)
+elements_dash_isoff_LDADD = $(LDADD) $(GST_BASE_LIBS)
+elements_dash_isoff_SOURCES = elements/dash_isoff.c
+
elements_dash_demux_CFLAGS = $(AM_CFLAGS) $(LIBXML2_CFLAGS) $(GST_PLUGINS_BASE_CFLAGS) $(GST_PLUGINS_BAD_CFLAGS)
elements_dash_demux_LDADD = \
$(LDADD) $(LIBXML2_LIBS) $(GST_BASE_LIBS) \
@@ -466,6 +481,8 @@
elements_dash_demux_SOURCES = elements/test_http_src.c elements/test_http_src.h elements/adaptive_demux_engine.c elements/adaptive_demux_engine.h elements/adaptive_demux_common.c elements/adaptive_demux_common.h elements/dash_demux.c
+elements_neonhttpsrc_CFLAGS = $(AM_CFLAGS) $(GST_PLUGINS_BASE_CFLAGS)
+
elements_mssdemux_CFLAGS = $(AM_CFLAGS) $(LIBXML2_CFLAGS) $(GST_PLUGINS_BASE_CFLAGS) $(GST_PLUGINS_BAD_CFLAGS)
elements_mssdemux_LDADD = \
$(LDADD) $(LIBXML2_LIBS) $(GST_BASE_LIBS) \
@@ -488,8 +505,8 @@
libs_player_LDADD = \
$(top_builddir)/gst-libs/gst/player/libgstplayer-@GST_API_VERSION@.la \
- -lgstvideo-@GST_API_VERSION@ \
- $(GST_PLUGINS_BASE_LIBS) $(GST_BASE_LIBS) $(GST_LIBS) $(LDADD)
+ $(GST_VIDEO_LIBS) $(GST_PLUGINS_BASE_LIBS) $(GST_BASE_LIBS) $(GST_LIBS) \
+ $(LDADD)
libs_player_CFLAGS = \
$(GST_PLUGINS_BAD_CFLAGS) $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS) $(AM_CFLAGS) \
-DTEST_PATH=\"$(builddir)/media\"
@@ -541,8 +558,8 @@
libs_gstglcontext_LDADD = \
$(top_builddir)/gst-libs/gst/gl/libgstgl-@GST_API_VERSION@.la \
- $(GST_PLUGINS_BASE_LIBS) -lgstvideo-$(GST_API_VERSION) \
- $(GST_BASE_LIBS) $(GST_LIBS) $(LDADD)
+ $(GST_PLUGINS_BASE_LIBS) $(GST_VIDEO_LIBS) $(GST_BASE_LIBS) \
+ $(GST_LIBS) $(LDADD)
libs_gstglcontext_CFLAGS = \
$(GST_PLUGINS_BAD_CFLAGS) $(GST_PLUGINS_BASE_CFLAGS) \
@@ -551,8 +568,8 @@
libs_gstglmemory_LDADD = \
$(top_builddir)/gst-libs/gst/gl/libgstgl-@GST_API_VERSION@.la \
- $(GST_PLUGINS_BASE_LIBS) -lgstvideo-$(GST_API_VERSION) \
- $(GST_BASE_LIBS) $(GST_LIBS) $(LDADD)
+ $(GST_PLUGINS_BASE_LIBS) $(GST_VIDEO_LIBS) $(GST_BASE_LIBS) \
+ $(GST_LIBS) $(LDADD)
libs_gstglmemory_CFLAGS = \
$(GST_PLUGINS_BAD_CFLAGS) $(GST_PLUGINS_BASE_CFLAGS) \
@@ -566,8 +583,8 @@
libs_gstglupload_LDADD = \
$(top_builddir)/gst-libs/gst/gl/libgstgl-@GST_API_VERSION@.la \
- $(GST_PLUGINS_BASE_LIBS) -lgstvideo-$(GST_API_VERSION) \
- $(GST_BASE_LIBS) $(GST_LIBS) $(LDADD)
+ $(GST_PLUGINS_BASE_LIBS) $(GST_VIDEO_LIBS) $(GST_BASE_LIBS) \
+ $(GST_LIBS) $(LDADD)
libs_gstglcolorconvert_CFLAGS = \
$(GST_PLUGINS_BAD_CFLAGS) $(GST_PLUGINS_BASE_CFLAGS) \
@@ -576,8 +593,8 @@
libs_gstglcolorconvert_LDADD = \
$(top_builddir)/gst-libs/gst/gl/libgstgl-@GST_API_VERSION@.la \
- $(GST_PLUGINS_BASE_LIBS) -lgstvideo-$(GST_API_VERSION) \
- $(GST_BASE_LIBS) $(GST_LIBS) $(LDADD)
+ $(GST_PLUGINS_BASE_LIBS) $(GST_VIDEO_LIBS) $(GST_BASE_LIBS) \
+ $(GST_LIBS) $(LDADD)
libs_gstglquery_LDADD = \
$(top_builddir)/gst-libs/gst/gl/libgstgl-@GST_API_VERSION@.la \
@@ -604,8 +621,8 @@
elements_glimagesink_LDADD = \
$(top_builddir)/gst-libs/gst/gl/libgstgl-@GST_API_VERSION@.la \
- $(GST_PLUGINS_BASE_LIBS) -lgstvideo-$(GST_API_VERSION) \
- $(GST_BASE_LIBS) $(GST_LIBS) $(LDADD)
+ $(GST_PLUGINS_BASE_LIBS) $(GST_VIDEO_LIBS) $(GST_BASE_LIBS) \
+ $(GST_LIBS) $(LDADD)
pipelines_simple_launch_lines_CFLAGS = \
$(GST_PLUGINS_BAD_CFLAGS) \
@@ -626,8 +643,7 @@
$(GST_BASE_CFLAGS) $(GST_CFLAGS) $(AM_CFLAGS)
elements_compositor_LDADD = \
- $(GST_PLUGINS_BASE_LIBS) -lgstvideo-$(GST_API_VERSION) \
- $(GST_BASE_LIBS) $(LDADD)
+ $(GST_PLUGINS_BASE_LIBS) $(GST_VIDEO_LIBS) $(GST_BASE_LIBS) $(LDADD)
elements_compositor_CFLAGS = \
$(GST_PLUGINS_BASE_CFLAGS) \
$(GST_BASE_CFLAGS) $(CFLAGS) $(AM_CFLAGS)
diff --git a/tests/check/Makefile.in b/tests/check/Makefile.in
index eea156b..f08163b 100644
--- a/tests/check/Makefile.in
+++ b/tests/check/Makefile.in
@@ -91,14 +91,14 @@
build_triplet = @build@
host_triplet = @host@
target_triplet = @target@
-noinst_PROGRAMS = pipelines/streamheader$(EXEEXT) $(am__EXEEXT_29)
+noinst_PROGRAMS = pipelines/streamheader$(EXEEXT) $(am__EXEEXT_28) \
+ $(am__EXEEXT_29)
check_PROGRAMS = generic/states$(EXEEXT) $(am__EXEEXT_1) \
$(am__EXEEXT_2) $(am__EXEEXT_3) $(am__EXEEXT_4) \
$(am__EXEEXT_5) $(am__EXEEXT_6) $(am__EXEEXT_7) \
$(am__EXEEXT_8) $(am__EXEEXT_9) $(am__EXEEXT_10) \
$(am__EXEEXT_11) $(am__EXEEXT_12) $(am__EXEEXT_13) \
- $(am__EXEEXT_14) $(am__EXEEXT_16) $(am__EXEEXT_17) \
- elements/aiffparse$(EXEEXT) \
+ $(am__EXEEXT_15) $(am__EXEEXT_16) elements/aiffparse$(EXEEXT) \
elements/videoframe-audiolevel$(EXEEXT) \
elements/autoconvert$(EXEEXT) \
elements/autovideoconvert$(EXEEXT) \
@@ -106,22 +106,24 @@
elements/asfmux$(EXEEXT) elements/camerabin$(EXEEXT) \
elements/dataurisrc$(EXEEXT) elements/gdppay$(EXEEXT) \
elements/gdpdepay$(EXEEXT) elements/compositor$(EXEEXT) \
- $(am__EXEEXT_18) elements/jpegparse$(EXEEXT) \
+ $(am__EXEEXT_17) elements/jpegparse$(EXEEXT) \
elements/h263parse$(EXEEXT) elements/h264parse$(EXEEXT) \
elements/mpegtsmux$(EXEEXT) elements/mpegvideoparse$(EXEEXT) \
elements/mpeg4videoparse$(EXEEXT) elements/mxfdemux$(EXEEXT) \
elements/mxfmux$(EXEEXT) elements/netsim$(EXEEXT) \
elements/pcapparse$(EXEEXT) elements/pnm$(EXEEXT) \
+ elements/rawaudioparse$(EXEEXT) \
+ elements/rawvideoparse$(EXEEXT) \
elements/rtponvifparse$(EXEEXT) \
elements/rtponviftimestamp$(EXEEXT) elements/id3mux$(EXEEXT) \
- pipelines/mxf$(EXEEXT) $(am__EXEEXT_19) \
+ pipelines/mxf$(EXEEXT) $(am__EXEEXT_18) \
libs/mpegvideoparser$(EXEEXT) libs/mpegts$(EXEEXT) \
libs/h264parser$(EXEEXT) libs/vp8parser$(EXEEXT) \
- libs/aggregator$(EXEEXT) $(am__EXEEXT_20) \
- libs/vc1parser$(EXEEXT) $(am__EXEEXT_21) $(am__EXEEXT_22) \
- elements/viewfinderbin$(EXEEXT) $(am__EXEEXT_23) \
- $(am__EXEEXT_24) libs/insertbin$(EXEEXT) $(am__EXEEXT_25) \
- $(am__EXEEXT_26) $(am__EXEEXT_27) $(am__EXEEXT_28)
+ libs/aggregator$(EXEEXT) $(am__EXEEXT_19) \
+ libs/vc1parser$(EXEEXT) $(am__EXEEXT_20) $(am__EXEEXT_21) \
+ elements/viewfinderbin$(EXEEXT) $(am__EXEEXT_22) \
+ $(am__EXEEXT_23) libs/insertbin$(EXEEXT) $(am__EXEEXT_24) \
+ $(am__EXEEXT_25) $(am__EXEEXT_26) $(am__EXEEXT_27)
@WITH_GST_PLAYER_TESTS_TRUE@am__append_1 = $(PLAYER_MEDIA_FILES) libs/player_dummy.c
subdir = tests/check
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
@@ -179,43 +181,44 @@
$(LIBTOOLFLAGS) --mode=link $(CCLD) $(libparser_la_CFLAGS) \
$(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
@USE_ASSRENDER_TRUE@am__EXEEXT_1 = elements/assrender$(EXEEXT)
-@USE_DASH_TRUE@am__EXEEXT_2 = elements/dash_mpd$(EXEEXT)
-@USE_DASH_TRUE@am__EXEEXT_3 = elements/dash_demux$(EXEEXT)
-@USE_FAAC_TRUE@am__EXEEXT_4 = elements/faac$(EXEEXT)
-@USE_FAAD_TRUE@am__EXEEXT_5 = elements/faad$(EXEEXT)
-@USE_VOAACENC_TRUE@am__EXEEXT_6 = elements/voaacenc$(EXEEXT)
-@USE_VOAMRWBENC_TRUE@am__EXEEXT_7 = elements/voamrwbenc$(EXEEXT)
-@USE_MPEG2ENC_TRUE@am__EXEEXT_8 = elements/mpeg2enc$(EXEEXT)
-@USE_MPLEX_TRUE@am__EXEEXT_9 = elements/mplex$(EXEEXT)
-@USE_SMOOTHSTREAMING_TRUE@am__EXEEXT_10 = elements/mssdemux$(EXEEXT)
-@USE_OFA_TRUE@am__EXEEXT_11 = elements/ofa$(EXEEXT)
-@USE_TIMIDITY_TRUE@am__EXEEXT_12 = elements/timidity$(EXEEXT)
-@USE_KATE_TRUE@am__EXEEXT_13 = elements/kate$(EXEEXT)
-@USE_OPENCV_TRUE@am__EXEEXT_14 = elements/templatematch$(EXEEXT)
-@USE_SSH2_TRUE@am__EXEEXT_15 = elements/curlsftpsink$(EXEEXT)
-@USE_CURL_TRUE@am__EXEEXT_16 = elements/curlhttpsink$(EXEEXT) \
+@USE_DASH_TRUE@am__EXEEXT_2 = elements/dash_mpd$(EXEEXT) \
+@USE_DASH_TRUE@ elements/dash_isoff$(EXEEXT)
+@USE_FAAC_TRUE@am__EXEEXT_3 = elements/faac$(EXEEXT)
+@USE_FAAD_TRUE@am__EXEEXT_4 = elements/faad$(EXEEXT)
+@USE_VOAACENC_TRUE@am__EXEEXT_5 = elements/voaacenc$(EXEEXT)
+@USE_VOAMRWBENC_TRUE@am__EXEEXT_6 = elements/voamrwbenc$(EXEEXT)
+@USE_MPEG2ENC_TRUE@am__EXEEXT_7 = elements/mpeg2enc$(EXEEXT)
+@USE_MPLEX_TRUE@am__EXEEXT_8 = elements/mplex$(EXEEXT)
+@USE_SMOOTHSTREAMING_TRUE@am__EXEEXT_9 = elements/mssdemux$(EXEEXT)
+@USE_OFA_TRUE@am__EXEEXT_10 = elements/ofa$(EXEEXT)
+@USE_TIMIDITY_TRUE@am__EXEEXT_11 = elements/timidity$(EXEEXT)
+@USE_KATE_TRUE@am__EXEEXT_12 = elements/kate$(EXEEXT)
+@USE_OPENCV_TRUE@am__EXEEXT_13 = elements/templatematch$(EXEEXT)
+@USE_SSH2_TRUE@am__EXEEXT_14 = elements/curlsftpsink$(EXEEXT)
+@USE_CURL_TRUE@am__EXEEXT_15 = elements/curlhttpsink$(EXEEXT) \
@USE_CURL_TRUE@ elements/curlfilesink$(EXEEXT) \
-@USE_CURL_TRUE@ elements/curlftpsink$(EXEEXT) $(am__EXEEXT_15) \
+@USE_CURL_TRUE@ elements/curlftpsink$(EXEEXT) $(am__EXEEXT_14) \
@USE_CURL_TRUE@ elements/curlsmtpsink$(EXEEXT)
-@USE_SHM_TRUE@am__EXEEXT_17 = elements/shm$(EXEEXT)
-@USE_EXIF_TRUE@am__EXEEXT_18 = elements/jifmux$(EXEEXT)
-@USE_MIMIC_TRUE@am__EXEEXT_19 = pipelines/mimic$(EXEEXT)
-@USE_UVCH264_TRUE@am__EXEEXT_20 = elements/uvch264demux$(EXEEXT)
-@USE_SCHRO_TRUE@am__EXEEXT_21 = elements/schroenc$(EXEEXT)
-@USE_X265_TRUE@am__EXEEXT_22 = elements/x265enc$(EXEEXT)
-@USE_ZBAR_TRUE@am__EXEEXT_23 = elements/zbar$(EXEEXT)
-@HAVE_ORC_TRUE@am__EXEEXT_24 = orc/bayer$(EXEEXT) \
+@USE_SHM_TRUE@am__EXEEXT_16 = elements/shm$(EXEEXT)
+@USE_EXIF_TRUE@am__EXEEXT_17 = elements/jifmux$(EXEEXT)
+@USE_MIMIC_TRUE@am__EXEEXT_18 = pipelines/mimic$(EXEEXT)
+@USE_UVCH264_TRUE@am__EXEEXT_19 = elements/uvch264demux$(EXEEXT)
+@USE_SCHRO_TRUE@am__EXEEXT_20 = elements/schroenc$(EXEEXT)
+@USE_X265_TRUE@am__EXEEXT_21 = elements/x265enc$(EXEEXT)
+@USE_ZBAR_TRUE@am__EXEEXT_22 = elements/zbar$(EXEEXT)
+@HAVE_ORC_TRUE@am__EXEEXT_23 = orc/bayer$(EXEEXT) \
@HAVE_ORC_TRUE@ orc/audiomixer$(EXEEXT) orc/compositor$(EXEEXT)
-@USE_GL_TRUE@am__EXEEXT_25 = libs/gstglcontext$(EXEEXT) \
+@USE_GL_TRUE@am__EXEEXT_24 = libs/gstglcontext$(EXEEXT) \
@USE_GL_TRUE@ libs/gstglmemory$(EXEEXT) \
@USE_GL_TRUE@ libs/gstglupload$(EXEEXT) \
@USE_GL_TRUE@ libs/gstglcolorconvert$(EXEEXT) \
@USE_GL_TRUE@ libs/gstglquery$(EXEEXT) libs/gstglsl$(EXEEXT) \
@USE_GL_TRUE@ elements/glimagesink$(EXEEXT) \
@USE_GL_TRUE@ pipelines/simple-launch-lines$(EXEEXT)
-@USE_HLS_TRUE@am__EXEEXT_26 = elements/hlsdemux_m3u8$(EXEEXT)
-@USE_HLS_TRUE@am__EXEEXT_27 = elements/hls_demux$(EXEEXT)
-@WITH_GST_PLAYER_TESTS_TRUE@am__EXEEXT_28 = libs/player$(EXEEXT)
+@USE_HLS_TRUE@am__EXEEXT_25 = elements/hlsdemux_m3u8$(EXEEXT)
+@USE_HLS_TRUE@am__EXEEXT_26 = elements/hls_demux$(EXEEXT)
+@WITH_GST_PLAYER_TESTS_TRUE@am__EXEEXT_27 = libs/player$(EXEEXT)
+@USE_DASH_TRUE@am__EXEEXT_28 = elements/dash_demux$(EXEEXT)
@USE_NEON_TRUE@am__EXEEXT_29 = elements/neonhttpsrc$(EXEEXT)
PROGRAMS = $(noinst_PROGRAMS)
elements_aiffparse_SOURCES = elements/aiffparse.c
@@ -232,7 +235,8 @@
elements/elements_assrender-assrender.$(OBJEXT)
am__DEPENDENCIES_2 = $(am__DEPENDENCIES_1)
elements_assrender_DEPENDENCIES = $(am__DEPENDENCIES_1) \
- $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_2)
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_2)
elements_assrender_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
$(elements_assrender_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
@@ -241,7 +245,7 @@
elements_audiointerleave_OBJECTS = \
elements/elements_audiointerleave-audiointerleave.$(OBJEXT)
elements_audiointerleave_DEPENDENCIES = $(am__DEPENDENCIES_1) \
- $(am__DEPENDENCIES_2)
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_2)
elements_audiointerleave_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
$(elements_audiointerleave_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
@@ -279,7 +283,8 @@
elements_compositor_OBJECTS = \
elements/elements_compositor-compositor.$(OBJEXT)
elements_compositor_DEPENDENCIES = $(am__DEPENDENCIES_1) \
- $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_2)
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_2)
elements_compositor_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
$(elements_compositor_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
@@ -317,6 +322,15 @@
$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
$(elements_dash_demux_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
$(LDFLAGS) -o $@
+am_elements_dash_isoff_OBJECTS = \
+ elements/elements_dash_isoff-dash_isoff.$(OBJEXT)
+elements_dash_isoff_OBJECTS = $(am_elements_dash_isoff_OBJECTS)
+elements_dash_isoff_DEPENDENCIES = $(am__DEPENDENCIES_2) \
+ $(am__DEPENDENCIES_1)
+elements_dash_isoff_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+ $(elements_dash_isoff_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+ $(LDFLAGS) -o $@
am_elements_dash_mpd_OBJECTS = \
elements/elements_dash_mpd-dash_mpd.$(OBJEXT)
elements_dash_mpd_OBJECTS = $(am_elements_dash_mpd_OBJECTS)
@@ -335,7 +349,7 @@
elements_faac_OBJECTS = elements/elements_faac-faac.$(OBJEXT)
elements_faac_DEPENDENCIES = $(am__DEPENDENCIES_1) \
$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
- $(am__DEPENDENCIES_2)
+ $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1)
elements_faac_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=link $(CCLD) $(elements_faac_CFLAGS) \
$(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
@@ -343,7 +357,7 @@
elements_faad_OBJECTS = elements/elements_faad-faad.$(OBJEXT)
elements_faad_DEPENDENCIES = $(am__DEPENDENCIES_1) \
$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
- $(am__DEPENDENCIES_2)
+ $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1)
elements_faad_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=link $(CCLD) $(elements_faad_CFLAGS) \
$(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
@@ -370,7 +384,8 @@
elements_glimagesink_DEPENDENCIES = \
$(top_builddir)/gst-libs/gst/gl/libgstgl-@GST_API_VERSION@.la \
$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
- $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_2)
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_2)
elements_glimagesink_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
$(elements_glimagesink_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
@@ -440,7 +455,8 @@
elements_mpegtsmux_OBJECTS = \
elements/elements_mpegtsmux-mpegtsmux.$(OBJEXT)
elements_mpegtsmux_DEPENDENCIES = $(am__DEPENDENCIES_1) \
- $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_2)
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_2)
elements_mpegtsmux_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
$(elements_mpegtsmux_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
@@ -475,9 +491,14 @@
elements_mxfmux_LDADD = $(LDADD)
elements_mxfmux_DEPENDENCIES = $(am__DEPENDENCIES_1)
elements_neonhttpsrc_SOURCES = elements/neonhttpsrc.c
-elements_neonhttpsrc_OBJECTS = elements/neonhttpsrc.$(OBJEXT)
+elements_neonhttpsrc_OBJECTS = \
+ elements/elements_neonhttpsrc-neonhttpsrc.$(OBJEXT)
elements_neonhttpsrc_LDADD = $(LDADD)
elements_neonhttpsrc_DEPENDENCIES = $(am__DEPENDENCIES_1)
+elements_neonhttpsrc_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+ $(elements_neonhttpsrc_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+ $(LDFLAGS) -o $@
elements_netsim_SOURCES = elements/netsim.c
elements_netsim_OBJECTS = elements/netsim.$(OBJEXT)
elements_netsim_LDADD = $(LDADD)
@@ -496,6 +517,24 @@
elements_pnm_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=link $(CCLD) $(elements_pnm_CFLAGS) \
$(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+elements_rawaudioparse_SOURCES = elements/rawaudioparse.c
+elements_rawaudioparse_OBJECTS = \
+ elements/elements_rawaudioparse-rawaudioparse.$(OBJEXT)
+elements_rawaudioparse_DEPENDENCIES = $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_2)
+elements_rawaudioparse_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+ $(elements_rawaudioparse_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+ $(LDFLAGS) -o $@
+elements_rawvideoparse_SOURCES = elements/rawvideoparse.c
+elements_rawvideoparse_OBJECTS = \
+ elements/elements_rawvideoparse-rawvideoparse.$(OBJEXT)
+elements_rawvideoparse_DEPENDENCIES = $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_2)
+elements_rawvideoparse_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+ $(elements_rawvideoparse_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+ $(LDFLAGS) -o $@
elements_rtponvifparse_SOURCES = elements/rtponvifparse.c
elements_rtponvifparse_OBJECTS = \
elements/elements_rtponvifparse-rtponvifparse.$(OBJEXT)
@@ -550,7 +589,7 @@
elements_videoframe_audiolevel_OBJECTS = elements/elements_videoframe_audiolevel-videoframe-audiolevel.$(OBJEXT)
elements_videoframe_audiolevel_DEPENDENCIES = $(am__DEPENDENCIES_1) \
$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
- $(am__DEPENDENCIES_2)
+ $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1)
elements_videoframe_audiolevel_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
$(elements_videoframe_audiolevel_CFLAGS) $(CFLAGS) \
@@ -564,7 +603,7 @@
elements/elements_voaacenc-voaacenc.$(OBJEXT)
elements_voaacenc_DEPENDENCIES = $(am__DEPENDENCIES_1) \
$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
- $(am__DEPENDENCIES_2)
+ $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1)
elements_voaacenc_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
$(elements_voaacenc_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \
@@ -604,7 +643,8 @@
libs_gstglcolorconvert_DEPENDENCIES = \
$(top_builddir)/gst-libs/gst/gl/libgstgl-@GST_API_VERSION@.la \
$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
- $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_2)
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_2)
libs_gstglcolorconvert_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
$(libs_gstglcolorconvert_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
@@ -615,7 +655,8 @@
libs_gstglcontext_DEPENDENCIES = \
$(top_builddir)/gst-libs/gst/gl/libgstgl-@GST_API_VERSION@.la \
$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
- $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_2)
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_2)
libs_gstglcontext_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
$(libs_gstglcontext_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \
@@ -626,7 +667,8 @@
libs_gstglmemory_DEPENDENCIES = \
$(top_builddir)/gst-libs/gst/gl/libgstgl-@GST_API_VERSION@.la \
$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
- $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_2)
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_2)
libs_gstglmemory_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
$(libs_gstglmemory_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \
@@ -656,7 +698,8 @@
libs_gstglupload_DEPENDENCIES = \
$(top_builddir)/gst-libs/gst/gl/libgstgl-@GST_API_VERSION@.la \
$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
- $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_2)
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_2)
libs_gstglupload_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
$(libs_gstglupload_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \
@@ -703,7 +746,8 @@
$(nodist_libs_player_OBJECTS)
libs_player_DEPENDENCIES = $(top_builddir)/gst-libs/gst/player/libgstplayer-@GST_API_VERSION@.la \
$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
- $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_2)
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_2)
libs_player_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=link $(CCLD) $(libs_player_CFLAGS) \
$(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
@@ -815,10 +859,11 @@
elements/curlfilesink.c elements/curlftpsink.c \
elements/curlhttpsink.c elements/curlsftpsink.c \
elements/curlsmtpsink.c $(elements_dash_demux_SOURCES) \
- $(elements_dash_mpd_SOURCES) elements/dataurisrc.c \
- elements/faac.c elements/faad.c elements/gdpdepay.c \
- elements/gdppay.c elements/glimagesink.c elements/h263parse.c \
- elements/h264parse.c $(elements_hls_demux_SOURCES) \
+ $(elements_dash_isoff_SOURCES) $(elements_dash_mpd_SOURCES) \
+ elements/dataurisrc.c elements/faac.c elements/faad.c \
+ elements/gdpdepay.c elements/gdppay.c elements/glimagesink.c \
+ elements/h263parse.c elements/h264parse.c \
+ $(elements_hls_demux_SOURCES) \
$(elements_hlsdemux_m3u8_SOURCES) elements/id3mux.c \
$(elements_jifmux_SOURCES) elements/jpegparse.c \
elements/kate.c elements/mpeg2enc.c elements/mpeg4videoparse.c \
@@ -826,7 +871,8 @@
elements/mplex.c $(elements_mssdemux_SOURCES) \
elements/mxfdemux.c elements/mxfmux.c elements/neonhttpsrc.c \
elements/netsim.c elements/ofa.c elements/pcapparse.c \
- elements/pnm.c elements/rtponvifparse.c \
+ elements/pnm.c elements/rawaudioparse.c \
+ elements/rawvideoparse.c elements/rtponvifparse.c \
elements/rtponviftimestamp.c elements/schroenc.c \
elements/shm.c elements/templatematch.c elements/timidity.c \
elements/uvch264demux.c elements/videoframe-audiolevel.c \
@@ -850,10 +896,11 @@
elements/curlfilesink.c elements/curlftpsink.c \
elements/curlhttpsink.c elements/curlsftpsink.c \
elements/curlsmtpsink.c $(elements_dash_demux_SOURCES) \
- $(elements_dash_mpd_SOURCES) elements/dataurisrc.c \
- elements/faac.c elements/faad.c elements/gdpdepay.c \
- elements/gdppay.c elements/glimagesink.c elements/h263parse.c \
- elements/h264parse.c $(elements_hls_demux_SOURCES) \
+ $(elements_dash_isoff_SOURCES) $(elements_dash_mpd_SOURCES) \
+ elements/dataurisrc.c elements/faac.c elements/faad.c \
+ elements/gdpdepay.c elements/gdppay.c elements/glimagesink.c \
+ elements/h263parse.c elements/h264parse.c \
+ $(elements_hls_demux_SOURCES) \
$(elements_hlsdemux_m3u8_SOURCES) elements/id3mux.c \
$(elements_jifmux_SOURCES) elements/jpegparse.c \
elements/kate.c elements/mpeg2enc.c elements/mpeg4videoparse.c \
@@ -861,7 +908,8 @@
elements/mplex.c $(elements_mssdemux_SOURCES) \
elements/mxfdemux.c elements/mxfmux.c elements/neonhttpsrc.c \
elements/netsim.c elements/ofa.c elements/pcapparse.c \
- elements/pnm.c elements/rtponvifparse.c \
+ elements/pnm.c elements/rawaudioparse.c \
+ elements/rawvideoparse.c elements/rtponvifparse.c \
elements/rtponviftimestamp.c elements/schroenc.c \
elements/shm.c elements/templatematch.c elements/timidity.c \
elements/uvch264demux.c elements/videoframe-audiolevel.c \
@@ -1193,6 +1241,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -1242,6 +1292,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
@@ -1678,7 +1730,7 @@
@USE_ASSRENDER_FALSE@check_assrender =
@USE_ASSRENDER_TRUE@check_assrender = elements/assrender
@USE_DASH_FALSE@check_dash =
-@USE_DASH_TRUE@check_dash = elements/dash_mpd
+@USE_DASH_TRUE@check_dash = elements/dash_mpd elements/dash_isoff
@USE_DASH_FALSE@check_dash_demux =
@USE_DASH_TRUE@check_dash_demux = elements/dash_demux
@USE_FAAC_FALSE@check_faac =
@@ -1763,19 +1815,19 @@
VALGRIND_TESTS_DISABLE = \
$(VALGRIND_TO_FIX)
-noinst_HEADERS = elements/mxfdemux.h
+noinst_HEADERS = elements/mxfdemux.h elements/dash_isoff.h
TESTS = $(check_PROGRAMS)
AM_CFLAGS = $(GST_CFLAGS) $(GST_CHECK_CFLAGS) $(GST_OPTION_CFLAGS) \
-DGST_CHECK_TEST_ENVIRONMENT_BEACON="\"GST_PLUGIN_LOADING_WHITELIST\"" \
-DGST_TEST_FILES_PATH="\"$(TEST_FILES_DIRECTORY)\"" \
- -UG_DISABLE_ASSERT -UG_DISABLE_CAST_CHECKS
+ -UG_DISABLE_ASSERT -UG_DISABLE_CAST_CHECKS $(PTHREAD_CFLAGS)
LDADD = $(GST_CHECK_LIBS)
generic_states_CFLAGS = $(AM_CFLAGS) $(GMODULE_NO_EXPORT_CFLAGS)
generic_states_LDADD = $(LDADD) $(GMODULE_NO_EXPORT_LIBS)
elements_audiomixer_LDADD = $(GST_BASE_LIBS) $(GST_CONTROLLER_LIBS) -lgstbase-@GST_API_VERSION@ $(LDADD)
elements_audiomixer_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CONTROLLER_CFLAGS) $(AM_CFLAGS)
-elements_audiointerleave_LDADD = $(GST_BASE_LIBS) -lgstbase-@GST_API_VERSION@ -lgstaudio-@GST_API_VERSION@ $(LDADD)
+elements_audiointerleave_LDADD = $(GST_BASE_LIBS) -lgstbase-@GST_API_VERSION@ $(GST_AUDIO_LIBS) $(LDADD)
elements_audiointerleave_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(AM_CFLAGS)
elements_pnm_CFLAGS = \
$(GST_PLUGINS_BASE_CFLAGS)
@@ -1796,6 +1848,10 @@
elements_h263parse_LDADD = libparser.la $(LDADD)
elements_h264parse_LDADD = libparser.la $(LDADD)
elements_pcapparse_LDADD = libparser.la $(LDADD)
+elements_rawaudioparse_LDADD = $(GST_BASE_LIBS) -lgstbase-@GST_API_VERSION@ $(GST_AUDIO_LIBS) $(LDADD)
+elements_rawaudioparse_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(AM_CFLAGS)
+elements_rawvideoparse_LDADD = $(GST_BASE_LIBS) -lgstbase-@GST_API_VERSION@ $(GST_VIDEO_LIBS) $(LDADD)
+elements_rawvideoparse_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(AM_CFLAGS)
libs_mpegvideoparser_CFLAGS = \
$(GST_PLUGINS_BAD_CFLAGS) $(GST_PLUGINS_BASE_CFLAGS) \
-DGST_USE_UNSTABLE_API \
@@ -1808,7 +1864,8 @@
libs_mpegts_CFLAGS = \
$(GST_PLUGINS_BAD_CFLAGS) \
-DGST_USE_UNSTABLE_API \
- $(GST_CFLAGS)
+ $(GST_CFLAGS) \
+ $(PTHREAD_CFLAGS)
libs_mpegts_LDADD = \
$(top_builddir)/gst-libs/gst/mpegts/libgstmpegts-@GST_API_VERSION@.la \
@@ -1849,7 +1906,7 @@
elements_videoframe_audiolevel_LDADD = \
$(GST_PLUGINS_BASE_LIBS) $(GST_BASE_LIBS) $(GST_LIBS) $(LDADD) \
- -lgstaudio-@GST_API_VERSION@
+ $(GST_AUDIO_LIBS)
elements_faad_CFLAGS = \
$(GST_PLUGINS_BASE_CFLAGS) \
@@ -1857,7 +1914,7 @@
elements_faad_LDADD = \
$(GST_PLUGINS_BASE_LIBS) $(GST_BASE_LIBS) $(GST_LIBS) $(LDADD) \
- -lgstaudio-@GST_API_VERSION@
+ $(GST_AUDIO_LIBS)
elements_faac_CFLAGS = \
$(GST_PLUGINS_BASE_CFLAGS) \
@@ -1865,7 +1922,7 @@
elements_faac_LDADD = \
$(GST_PLUGINS_BASE_LIBS) $(GST_BASE_LIBS) $(GST_LIBS) $(LDADD) \
- -lgstaudio-@GST_API_VERSION@
+ $(GST_AUDIO_LIBS)
elements_gdppay_CFLAGS = \
$(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS) $(AM_CFLAGS)
@@ -1881,7 +1938,7 @@
elements_voaacenc_LDADD = \
$(GST_PLUGINS_BASE_LIBS) $(GST_BASE_LIBS) $(GST_LIBS) $(LDADD) \
- -lgstaudio-@GST_API_VERSION@
+ $(GST_AUDIO_LIBS)
elements_camerabin_CFLAGS = \
$(GST_PLUGINS_BAD_CFLAGS) $(GST_PLUGINS_BASE_CFLAGS) \
@@ -1902,9 +1959,9 @@
elements_kate_CFLAGS = $(GST_BASE_CFLAGS) $(AM_CFLAGS)
elements_kate_LDADD = $(GST_BASE_LIBS) $(LDADD)
elements_assrender_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(AM_CFLAGS)
-elements_assrender_LDADD = $(GST_PLUGINS_BASE_LIBS) -lgstvideo-$(GST_API_VERSION) -lgstapp-$(GST_API_VERSION) $(GST_BASE_LIBS) $(LDADD)
+elements_assrender_LDADD = $(GST_PLUGINS_BASE_LIBS) $(GST_VIDEO_LIBS) -lgstapp-$(GST_API_VERSION) $(GST_BASE_LIBS) $(LDADD)
elements_mpegtsmux_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(AM_CFLAGS)
-elements_mpegtsmux_LDADD = $(GST_PLUGINS_BASE_LIBS) -lgstvideo-$(GST_API_VERSION) $(GST_BASE_LIBS) $(LDADD)
+elements_mpegtsmux_LDADD = $(GST_PLUGINS_BASE_LIBS) $(GST_VIDEO_LIBS) $(GST_BASE_LIBS) $(LDADD)
elements_uvch264demux_CFLAGS = -DUVCH264DEMUX_DATADIR="$(srcdir)/elements/uvch264demux_data" \
$(AM_CFLAGS)
@@ -1913,6 +1970,9 @@
$(top_builddir)/gst-libs/gst/uridownloader/libgsturidownloader-@GST_API_VERSION@.la
elements_dash_mpd_SOURCES = elements/dash_mpd.c
+elements_dash_isoff_CFLAGS = $(AM_CFLAGS) $(GST_BASE_CFLAGS)
+elements_dash_isoff_LDADD = $(LDADD) $(GST_BASE_LIBS)
+elements_dash_isoff_SOURCES = elements/dash_isoff.c
elements_dash_demux_CFLAGS = $(AM_CFLAGS) $(LIBXML2_CFLAGS) $(GST_PLUGINS_BASE_CFLAGS) $(GST_PLUGINS_BAD_CFLAGS)
elements_dash_demux_LDADD = \
$(LDADD) $(LIBXML2_LIBS) $(GST_BASE_LIBS) \
@@ -1921,6 +1981,7 @@
$(top_builddir)/gst-libs/gst/adaptivedemux/libgstadaptivedemux-@GST_API_VERSION@.la
elements_dash_demux_SOURCES = elements/test_http_src.c elements/test_http_src.h elements/adaptive_demux_engine.c elements/adaptive_demux_engine.h elements/adaptive_demux_common.c elements/adaptive_demux_common.h elements/dash_demux.c
+elements_neonhttpsrc_CFLAGS = $(AM_CFLAGS) $(GST_PLUGINS_BASE_CFLAGS)
elements_mssdemux_CFLAGS = $(AM_CFLAGS) $(LIBXML2_CFLAGS) $(GST_PLUGINS_BASE_CFLAGS) $(GST_PLUGINS_BAD_CFLAGS)
elements_mssdemux_LDADD = \
$(LDADD) $(LIBXML2_LIBS) $(GST_BASE_LIBS) \
@@ -1941,8 +2002,8 @@
libs_player_SOURCES = libs/player.c
libs_player_LDADD = \
$(top_builddir)/gst-libs/gst/player/libgstplayer-@GST_API_VERSION@.la \
- -lgstvideo-@GST_API_VERSION@ \
- $(GST_PLUGINS_BASE_LIBS) $(GST_BASE_LIBS) $(GST_LIBS) $(LDADD)
+ $(GST_VIDEO_LIBS) $(GST_PLUGINS_BASE_LIBS) $(GST_BASE_LIBS) $(GST_LIBS) \
+ $(LDADD)
libs_player_CFLAGS = \
$(GST_PLUGINS_BAD_CFLAGS) $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS) $(AM_CFLAGS) \
@@ -1970,8 +2031,8 @@
nodist_orc_audiomixer_SOURCES = orc/audiomixer.c
libs_gstglcontext_LDADD = \
$(top_builddir)/gst-libs/gst/gl/libgstgl-@GST_API_VERSION@.la \
- $(GST_PLUGINS_BASE_LIBS) -lgstvideo-$(GST_API_VERSION) \
- $(GST_BASE_LIBS) $(GST_LIBS) $(LDADD)
+ $(GST_PLUGINS_BASE_LIBS) $(GST_VIDEO_LIBS) $(GST_BASE_LIBS) \
+ $(GST_LIBS) $(LDADD)
libs_gstglcontext_CFLAGS = \
$(GST_PLUGINS_BAD_CFLAGS) $(GST_PLUGINS_BASE_CFLAGS) \
@@ -1980,8 +2041,8 @@
libs_gstglmemory_LDADD = \
$(top_builddir)/gst-libs/gst/gl/libgstgl-@GST_API_VERSION@.la \
- $(GST_PLUGINS_BASE_LIBS) -lgstvideo-$(GST_API_VERSION) \
- $(GST_BASE_LIBS) $(GST_LIBS) $(LDADD)
+ $(GST_PLUGINS_BASE_LIBS) $(GST_VIDEO_LIBS) $(GST_BASE_LIBS) \
+ $(GST_LIBS) $(LDADD)
libs_gstglmemory_CFLAGS = \
$(GST_PLUGINS_BAD_CFLAGS) $(GST_PLUGINS_BASE_CFLAGS) \
@@ -1995,8 +2056,8 @@
libs_gstglupload_LDADD = \
$(top_builddir)/gst-libs/gst/gl/libgstgl-@GST_API_VERSION@.la \
- $(GST_PLUGINS_BASE_LIBS) -lgstvideo-$(GST_API_VERSION) \
- $(GST_BASE_LIBS) $(GST_LIBS) $(LDADD)
+ $(GST_PLUGINS_BASE_LIBS) $(GST_VIDEO_LIBS) $(GST_BASE_LIBS) \
+ $(GST_LIBS) $(LDADD)
libs_gstglcolorconvert_CFLAGS = \
$(GST_PLUGINS_BAD_CFLAGS) $(GST_PLUGINS_BASE_CFLAGS) \
@@ -2005,8 +2066,8 @@
libs_gstglcolorconvert_LDADD = \
$(top_builddir)/gst-libs/gst/gl/libgstgl-@GST_API_VERSION@.la \
- $(GST_PLUGINS_BASE_LIBS) -lgstvideo-$(GST_API_VERSION) \
- $(GST_BASE_LIBS) $(GST_LIBS) $(LDADD)
+ $(GST_PLUGINS_BASE_LIBS) $(GST_VIDEO_LIBS) $(GST_BASE_LIBS) \
+ $(GST_LIBS) $(LDADD)
libs_gstglquery_LDADD = \
$(top_builddir)/gst-libs/gst/gl/libgstgl-@GST_API_VERSION@.la \
@@ -2033,8 +2094,8 @@
elements_glimagesink_LDADD = \
$(top_builddir)/gst-libs/gst/gl/libgstgl-@GST_API_VERSION@.la \
- $(GST_PLUGINS_BASE_LIBS) -lgstvideo-$(GST_API_VERSION) \
- $(GST_BASE_LIBS) $(GST_LIBS) $(LDADD)
+ $(GST_PLUGINS_BASE_LIBS) $(GST_VIDEO_LIBS) $(GST_BASE_LIBS) \
+ $(GST_LIBS) $(LDADD)
pipelines_simple_launch_lines_CFLAGS = \
$(GST_PLUGINS_BAD_CFLAGS) \
@@ -2055,8 +2116,7 @@
$(GST_BASE_CFLAGS) $(GST_CFLAGS) $(AM_CFLAGS)
elements_compositor_LDADD = \
- $(GST_PLUGINS_BASE_LIBS) -lgstvideo-$(GST_API_VERSION) \
- $(GST_BASE_LIBS) $(LDADD)
+ $(GST_PLUGINS_BASE_LIBS) $(GST_VIDEO_LIBS) $(GST_BASE_LIBS) $(LDADD)
elements_compositor_CFLAGS = \
$(GST_PLUGINS_BASE_CFLAGS) \
@@ -2246,6 +2306,12 @@
elements/dash_demux$(EXEEXT): $(elements_dash_demux_OBJECTS) $(elements_dash_demux_DEPENDENCIES) $(EXTRA_elements_dash_demux_DEPENDENCIES) elements/$(am__dirstamp)
@rm -f elements/dash_demux$(EXEEXT)
$(AM_V_CCLD)$(elements_dash_demux_LINK) $(elements_dash_demux_OBJECTS) $(elements_dash_demux_LDADD) $(LIBS)
+elements/elements_dash_isoff-dash_isoff.$(OBJEXT): \
+ elements/$(am__dirstamp) elements/$(DEPDIR)/$(am__dirstamp)
+
+elements/dash_isoff$(EXEEXT): $(elements_dash_isoff_OBJECTS) $(elements_dash_isoff_DEPENDENCIES) $(EXTRA_elements_dash_isoff_DEPENDENCIES) elements/$(am__dirstamp)
+ @rm -f elements/dash_isoff$(EXEEXT)
+ $(AM_V_CCLD)$(elements_dash_isoff_LINK) $(elements_dash_isoff_OBJECTS) $(elements_dash_isoff_LDADD) $(LIBS)
elements/elements_dash_mpd-dash_mpd.$(OBJEXT): \
elements/$(am__dirstamp) elements/$(DEPDIR)/$(am__dirstamp)
@@ -2396,12 +2462,12 @@
elements/mxfmux$(EXEEXT): $(elements_mxfmux_OBJECTS) $(elements_mxfmux_DEPENDENCIES) $(EXTRA_elements_mxfmux_DEPENDENCIES) elements/$(am__dirstamp)
@rm -f elements/mxfmux$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(elements_mxfmux_OBJECTS) $(elements_mxfmux_LDADD) $(LIBS)
-elements/neonhttpsrc.$(OBJEXT): elements/$(am__dirstamp) \
- elements/$(DEPDIR)/$(am__dirstamp)
+elements/elements_neonhttpsrc-neonhttpsrc.$(OBJEXT): \
+ elements/$(am__dirstamp) elements/$(DEPDIR)/$(am__dirstamp)
elements/neonhttpsrc$(EXEEXT): $(elements_neonhttpsrc_OBJECTS) $(elements_neonhttpsrc_DEPENDENCIES) $(EXTRA_elements_neonhttpsrc_DEPENDENCIES) elements/$(am__dirstamp)
@rm -f elements/neonhttpsrc$(EXEEXT)
- $(AM_V_CCLD)$(LINK) $(elements_neonhttpsrc_OBJECTS) $(elements_neonhttpsrc_LDADD) $(LIBS)
+ $(AM_V_CCLD)$(elements_neonhttpsrc_LINK) $(elements_neonhttpsrc_OBJECTS) $(elements_neonhttpsrc_LDADD) $(LIBS)
elements/netsim.$(OBJEXT): elements/$(am__dirstamp) \
elements/$(DEPDIR)/$(am__dirstamp)
@@ -2426,6 +2492,18 @@
elements/pnm$(EXEEXT): $(elements_pnm_OBJECTS) $(elements_pnm_DEPENDENCIES) $(EXTRA_elements_pnm_DEPENDENCIES) elements/$(am__dirstamp)
@rm -f elements/pnm$(EXEEXT)
$(AM_V_CCLD)$(elements_pnm_LINK) $(elements_pnm_OBJECTS) $(elements_pnm_LDADD) $(LIBS)
+elements/elements_rawaudioparse-rawaudioparse.$(OBJEXT): \
+ elements/$(am__dirstamp) elements/$(DEPDIR)/$(am__dirstamp)
+
+elements/rawaudioparse$(EXEEXT): $(elements_rawaudioparse_OBJECTS) $(elements_rawaudioparse_DEPENDENCIES) $(EXTRA_elements_rawaudioparse_DEPENDENCIES) elements/$(am__dirstamp)
+ @rm -f elements/rawaudioparse$(EXEEXT)
+ $(AM_V_CCLD)$(elements_rawaudioparse_LINK) $(elements_rawaudioparse_OBJECTS) $(elements_rawaudioparse_LDADD) $(LIBS)
+elements/elements_rawvideoparse-rawvideoparse.$(OBJEXT): \
+ elements/$(am__dirstamp) elements/$(DEPDIR)/$(am__dirstamp)
+
+elements/rawvideoparse$(EXEEXT): $(elements_rawvideoparse_OBJECTS) $(elements_rawvideoparse_DEPENDENCIES) $(EXTRA_elements_rawvideoparse_DEPENDENCIES) elements/$(am__dirstamp)
+ @rm -f elements/rawvideoparse$(EXEEXT)
+ $(AM_V_CCLD)$(elements_rawvideoparse_LINK) $(elements_rawvideoparse_OBJECTS) $(elements_rawvideoparse_LDADD) $(LIBS)
elements/elements_rtponvifparse-rtponvifparse.$(OBJEXT): \
elements/$(am__dirstamp) elements/$(DEPDIR)/$(am__dirstamp)
@@ -2694,6 +2772,7 @@
@AMDEP_TRUE@@am__include@ @am__quote@elements/$(DEPDIR)/elements_dash_demux-adaptive_demux_engine.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@elements/$(DEPDIR)/elements_dash_demux-dash_demux.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@elements/$(DEPDIR)/elements_dash_demux-test_http_src.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@elements/$(DEPDIR)/elements_dash_isoff-dash_isoff.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@elements/$(DEPDIR)/elements_dash_mpd-dash_mpd.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@elements/$(DEPDIR)/elements_faac-faac.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@elements/$(DEPDIR)/elements_faad-faad.Po@am__quote@
@@ -2712,7 +2791,10 @@
@AMDEP_TRUE@@am__include@ @am__quote@elements/$(DEPDIR)/elements_mssdemux-adaptive_demux_engine.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@elements/$(DEPDIR)/elements_mssdemux-mssdemux.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@elements/$(DEPDIR)/elements_mssdemux-test_http_src.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@elements/$(DEPDIR)/elements_neonhttpsrc-neonhttpsrc.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@elements/$(DEPDIR)/elements_pnm-pnm.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@elements/$(DEPDIR)/elements_rawaudioparse-rawaudioparse.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@elements/$(DEPDIR)/elements_rawvideoparse-rawvideoparse.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@elements/$(DEPDIR)/elements_rtponvifparse-rtponvifparse.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@elements/$(DEPDIR)/elements_rtponviftimestamp-rtponviftimestamp.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@elements/$(DEPDIR)/elements_timidity-timidity.Po@am__quote@
@@ -2730,7 +2812,6 @@
@AMDEP_TRUE@@am__include@ @am__quote@elements/$(DEPDIR)/mplex.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@elements/$(DEPDIR)/mxfdemux.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@elements/$(DEPDIR)/mxfmux.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@elements/$(DEPDIR)/neonhttpsrc.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@elements/$(DEPDIR)/netsim.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@elements/$(DEPDIR)/ofa.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@elements/$(DEPDIR)/pcapparse.Po@am__quote@
@@ -2922,6 +3003,20 @@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_dash_demux_CFLAGS) $(CFLAGS) -c -o elements/elements_dash_demux-dash_demux.obj `if test -f 'elements/dash_demux.c'; then $(CYGPATH_W) 'elements/dash_demux.c'; else $(CYGPATH_W) '$(srcdir)/elements/dash_demux.c'; fi`
+elements/elements_dash_isoff-dash_isoff.o: elements/dash_isoff.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_dash_isoff_CFLAGS) $(CFLAGS) -MT elements/elements_dash_isoff-dash_isoff.o -MD -MP -MF elements/$(DEPDIR)/elements_dash_isoff-dash_isoff.Tpo -c -o elements/elements_dash_isoff-dash_isoff.o `test -f 'elements/dash_isoff.c' || echo '$(srcdir)/'`elements/dash_isoff.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) elements/$(DEPDIR)/elements_dash_isoff-dash_isoff.Tpo elements/$(DEPDIR)/elements_dash_isoff-dash_isoff.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='elements/dash_isoff.c' object='elements/elements_dash_isoff-dash_isoff.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_dash_isoff_CFLAGS) $(CFLAGS) -c -o elements/elements_dash_isoff-dash_isoff.o `test -f 'elements/dash_isoff.c' || echo '$(srcdir)/'`elements/dash_isoff.c
+
+elements/elements_dash_isoff-dash_isoff.obj: elements/dash_isoff.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_dash_isoff_CFLAGS) $(CFLAGS) -MT elements/elements_dash_isoff-dash_isoff.obj -MD -MP -MF elements/$(DEPDIR)/elements_dash_isoff-dash_isoff.Tpo -c -o elements/elements_dash_isoff-dash_isoff.obj `if test -f 'elements/dash_isoff.c'; then $(CYGPATH_W) 'elements/dash_isoff.c'; else $(CYGPATH_W) '$(srcdir)/elements/dash_isoff.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) elements/$(DEPDIR)/elements_dash_isoff-dash_isoff.Tpo elements/$(DEPDIR)/elements_dash_isoff-dash_isoff.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='elements/dash_isoff.c' object='elements/elements_dash_isoff-dash_isoff.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_dash_isoff_CFLAGS) $(CFLAGS) -c -o elements/elements_dash_isoff-dash_isoff.obj `if test -f 'elements/dash_isoff.c'; then $(CYGPATH_W) 'elements/dash_isoff.c'; else $(CYGPATH_W) '$(srcdir)/elements/dash_isoff.c'; fi`
+
elements/elements_dash_mpd-dash_mpd.o: elements/dash_mpd.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_dash_mpd_CFLAGS) $(CFLAGS) -MT elements/elements_dash_mpd-dash_mpd.o -MD -MP -MF elements/$(DEPDIR)/elements_dash_mpd-dash_mpd.Tpo -c -o elements/elements_dash_mpd-dash_mpd.o `test -f 'elements/dash_mpd.c' || echo '$(srcdir)/'`elements/dash_mpd.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) elements/$(DEPDIR)/elements_dash_mpd-dash_mpd.Tpo elements/$(DEPDIR)/elements_dash_mpd-dash_mpd.Po
@@ -3174,6 +3269,20 @@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_mssdemux_CFLAGS) $(CFLAGS) -c -o elements/elements_mssdemux-mssdemux.obj `if test -f 'elements/mssdemux.c'; then $(CYGPATH_W) 'elements/mssdemux.c'; else $(CYGPATH_W) '$(srcdir)/elements/mssdemux.c'; fi`
+elements/elements_neonhttpsrc-neonhttpsrc.o: elements/neonhttpsrc.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_neonhttpsrc_CFLAGS) $(CFLAGS) -MT elements/elements_neonhttpsrc-neonhttpsrc.o -MD -MP -MF elements/$(DEPDIR)/elements_neonhttpsrc-neonhttpsrc.Tpo -c -o elements/elements_neonhttpsrc-neonhttpsrc.o `test -f 'elements/neonhttpsrc.c' || echo '$(srcdir)/'`elements/neonhttpsrc.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) elements/$(DEPDIR)/elements_neonhttpsrc-neonhttpsrc.Tpo elements/$(DEPDIR)/elements_neonhttpsrc-neonhttpsrc.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='elements/neonhttpsrc.c' object='elements/elements_neonhttpsrc-neonhttpsrc.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_neonhttpsrc_CFLAGS) $(CFLAGS) -c -o elements/elements_neonhttpsrc-neonhttpsrc.o `test -f 'elements/neonhttpsrc.c' || echo '$(srcdir)/'`elements/neonhttpsrc.c
+
+elements/elements_neonhttpsrc-neonhttpsrc.obj: elements/neonhttpsrc.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_neonhttpsrc_CFLAGS) $(CFLAGS) -MT elements/elements_neonhttpsrc-neonhttpsrc.obj -MD -MP -MF elements/$(DEPDIR)/elements_neonhttpsrc-neonhttpsrc.Tpo -c -o elements/elements_neonhttpsrc-neonhttpsrc.obj `if test -f 'elements/neonhttpsrc.c'; then $(CYGPATH_W) 'elements/neonhttpsrc.c'; else $(CYGPATH_W) '$(srcdir)/elements/neonhttpsrc.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) elements/$(DEPDIR)/elements_neonhttpsrc-neonhttpsrc.Tpo elements/$(DEPDIR)/elements_neonhttpsrc-neonhttpsrc.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='elements/neonhttpsrc.c' object='elements/elements_neonhttpsrc-neonhttpsrc.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_neonhttpsrc_CFLAGS) $(CFLAGS) -c -o elements/elements_neonhttpsrc-neonhttpsrc.obj `if test -f 'elements/neonhttpsrc.c'; then $(CYGPATH_W) 'elements/neonhttpsrc.c'; else $(CYGPATH_W) '$(srcdir)/elements/neonhttpsrc.c'; fi`
+
elements/elements_pnm-pnm.o: elements/pnm.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_pnm_CFLAGS) $(CFLAGS) -MT elements/elements_pnm-pnm.o -MD -MP -MF elements/$(DEPDIR)/elements_pnm-pnm.Tpo -c -o elements/elements_pnm-pnm.o `test -f 'elements/pnm.c' || echo '$(srcdir)/'`elements/pnm.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) elements/$(DEPDIR)/elements_pnm-pnm.Tpo elements/$(DEPDIR)/elements_pnm-pnm.Po
@@ -3188,6 +3297,34 @@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_pnm_CFLAGS) $(CFLAGS) -c -o elements/elements_pnm-pnm.obj `if test -f 'elements/pnm.c'; then $(CYGPATH_W) 'elements/pnm.c'; else $(CYGPATH_W) '$(srcdir)/elements/pnm.c'; fi`
+elements/elements_rawaudioparse-rawaudioparse.o: elements/rawaudioparse.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_rawaudioparse_CFLAGS) $(CFLAGS) -MT elements/elements_rawaudioparse-rawaudioparse.o -MD -MP -MF elements/$(DEPDIR)/elements_rawaudioparse-rawaudioparse.Tpo -c -o elements/elements_rawaudioparse-rawaudioparse.o `test -f 'elements/rawaudioparse.c' || echo '$(srcdir)/'`elements/rawaudioparse.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) elements/$(DEPDIR)/elements_rawaudioparse-rawaudioparse.Tpo elements/$(DEPDIR)/elements_rawaudioparse-rawaudioparse.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='elements/rawaudioparse.c' object='elements/elements_rawaudioparse-rawaudioparse.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_rawaudioparse_CFLAGS) $(CFLAGS) -c -o elements/elements_rawaudioparse-rawaudioparse.o `test -f 'elements/rawaudioparse.c' || echo '$(srcdir)/'`elements/rawaudioparse.c
+
+elements/elements_rawaudioparse-rawaudioparse.obj: elements/rawaudioparse.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_rawaudioparse_CFLAGS) $(CFLAGS) -MT elements/elements_rawaudioparse-rawaudioparse.obj -MD -MP -MF elements/$(DEPDIR)/elements_rawaudioparse-rawaudioparse.Tpo -c -o elements/elements_rawaudioparse-rawaudioparse.obj `if test -f 'elements/rawaudioparse.c'; then $(CYGPATH_W) 'elements/rawaudioparse.c'; else $(CYGPATH_W) '$(srcdir)/elements/rawaudioparse.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) elements/$(DEPDIR)/elements_rawaudioparse-rawaudioparse.Tpo elements/$(DEPDIR)/elements_rawaudioparse-rawaudioparse.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='elements/rawaudioparse.c' object='elements/elements_rawaudioparse-rawaudioparse.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_rawaudioparse_CFLAGS) $(CFLAGS) -c -o elements/elements_rawaudioparse-rawaudioparse.obj `if test -f 'elements/rawaudioparse.c'; then $(CYGPATH_W) 'elements/rawaudioparse.c'; else $(CYGPATH_W) '$(srcdir)/elements/rawaudioparse.c'; fi`
+
+elements/elements_rawvideoparse-rawvideoparse.o: elements/rawvideoparse.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_rawvideoparse_CFLAGS) $(CFLAGS) -MT elements/elements_rawvideoparse-rawvideoparse.o -MD -MP -MF elements/$(DEPDIR)/elements_rawvideoparse-rawvideoparse.Tpo -c -o elements/elements_rawvideoparse-rawvideoparse.o `test -f 'elements/rawvideoparse.c' || echo '$(srcdir)/'`elements/rawvideoparse.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) elements/$(DEPDIR)/elements_rawvideoparse-rawvideoparse.Tpo elements/$(DEPDIR)/elements_rawvideoparse-rawvideoparse.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='elements/rawvideoparse.c' object='elements/elements_rawvideoparse-rawvideoparse.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_rawvideoparse_CFLAGS) $(CFLAGS) -c -o elements/elements_rawvideoparse-rawvideoparse.o `test -f 'elements/rawvideoparse.c' || echo '$(srcdir)/'`elements/rawvideoparse.c
+
+elements/elements_rawvideoparse-rawvideoparse.obj: elements/rawvideoparse.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_rawvideoparse_CFLAGS) $(CFLAGS) -MT elements/elements_rawvideoparse-rawvideoparse.obj -MD -MP -MF elements/$(DEPDIR)/elements_rawvideoparse-rawvideoparse.Tpo -c -o elements/elements_rawvideoparse-rawvideoparse.obj `if test -f 'elements/rawvideoparse.c'; then $(CYGPATH_W) 'elements/rawvideoparse.c'; else $(CYGPATH_W) '$(srcdir)/elements/rawvideoparse.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) elements/$(DEPDIR)/elements_rawvideoparse-rawvideoparse.Tpo elements/$(DEPDIR)/elements_rawvideoparse-rawvideoparse.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='elements/rawvideoparse.c' object='elements/elements_rawvideoparse-rawvideoparse.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_rawvideoparse_CFLAGS) $(CFLAGS) -c -o elements/elements_rawvideoparse-rawvideoparse.obj `if test -f 'elements/rawvideoparse.c'; then $(CYGPATH_W) 'elements/rawvideoparse.c'; else $(CYGPATH_W) '$(srcdir)/elements/rawvideoparse.c'; fi`
+
elements/elements_rtponvifparse-rtponvifparse.o: elements/rtponvifparse.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_rtponvifparse_CFLAGS) $(CFLAGS) -MT elements/elements_rtponvifparse-rtponvifparse.o -MD -MP -MF elements/$(DEPDIR)/elements_rtponvifparse-rtponvifparse.Tpo -c -o elements/elements_rtponvifparse-rtponvifparse.o `test -f 'elements/rtponvifparse.c' || echo '$(srcdir)/'`elements/rtponvifparse.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) elements/$(DEPDIR)/elements_rtponvifparse-rtponvifparse.Tpo elements/$(DEPDIR)/elements_rtponvifparse-rtponvifparse.Po
@@ -3791,9 +3928,9 @@
--log-file $$b.log --trs-file $$b.trs \
$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
"$$tst" $(AM_TESTS_FD_REDIRECT)
-elements/dash_demux.log: elements/dash_demux$(EXEEXT)
- @p='elements/dash_demux$(EXEEXT)'; \
- b='elements/dash_demux'; \
+elements/dash_isoff.log: elements/dash_isoff$(EXEEXT)
+ @p='elements/dash_isoff$(EXEEXT)'; \
+ b='elements/dash_isoff'; \
$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
--log-file $$b.log --trs-file $$b.trs \
$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
@@ -4085,6 +4222,20 @@
--log-file $$b.log --trs-file $$b.trs \
$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
"$$tst" $(AM_TESTS_FD_REDIRECT)
+elements/rawaudioparse.log: elements/rawaudioparse$(EXEEXT)
+ @p='elements/rawaudioparse$(EXEEXT)'; \
+ b='elements/rawaudioparse'; \
+ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+ --log-file $$b.log --trs-file $$b.trs \
+ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+ "$$tst" $(AM_TESTS_FD_REDIRECT)
+elements/rawvideoparse.log: elements/rawvideoparse$(EXEEXT)
+ @p='elements/rawvideoparse$(EXEEXT)'; \
+ b='elements/rawvideoparse'; \
+ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+ --log-file $$b.log --trs-file $$b.trs \
+ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+ "$$tst" $(AM_TESTS_FD_REDIRECT)
elements/rtponvifparse.log: elements/rtponvifparse$(EXEEXT)
@p='elements/rtponvifparse$(EXEEXT)'; \
b='elements/rtponvifparse'; \
diff --git a/tests/check/elements/adaptive_demux_common.c b/tests/check/elements/adaptive_demux_common.c
index a8fcb1e..814b0ea 100644
--- a/tests/check/elements/adaptive_demux_common.c
+++ b/tests/check/elements/adaptive_demux_common.c
@@ -431,6 +431,7 @@
TEST_TASK_STATE_WAITING_FOR_TESTSRC_STATE_CHANGE) {
GST_DEBUG ("changing test_task_state");
testData->test_task_state = TEST_TASK_STATE_EXITING;
+ gst_bus_remove_signal_watch (bus);
g_cond_signal (&testData->test_task_state_cond);
}
g_mutex_unlock (&testData->test_task_state_lock);
@@ -454,6 +455,7 @@
gst_bus_add_signal_watch (bus);
g_signal_connect (bus, "message::state-changed",
G_CALLBACK (testSeekOnStateChanged), testData);
+ gst_object_unref (bus);
}
static void
diff --git a/tests/check/elements/adaptive_demux_engine.c b/tests/check/elements/adaptive_demux_engine.c
index 4662a00..b969831 100644
--- a/tests/check/elements/adaptive_demux_engine.c
+++ b/tests/check/elements/adaptive_demux_engine.c
@@ -595,6 +595,7 @@
priv->engine.pipeline = NULL;
g_main_loop_unref (priv->engine.loop);
g_ptr_array_unref (priv->engine.output_streams);
+ gst_object_unref (bus);
GST_TEST_UNLOCK (priv);
g_mutex_clear (&priv->engine.lock);
diff --git a/tests/check/elements/aiffparse.c b/tests/check/elements/aiffparse.c
index ebf2028..5828ce1 100644
--- a/tests/check/elements/aiffparse.c
+++ b/tests/check/elements/aiffparse.c
@@ -112,15 +112,21 @@
gst_event_parse_tag (event, &aiff_tags);
fail_unless (aiff_tags != NULL);
+ have_tags = TRUE;
for (i = 0; i < sizeof (tags) / sizeof (*tags); i++) {
buf = NULL;
- fail_unless (gst_tag_list_get_string (aiff_tags, tags[i][0], &buf));
+ if (!gst_tag_list_get_string (aiff_tags, tags[i][0], &buf)) {
+ have_tags = FALSE;
+ continue;
+ }
ret = g_strcmp0 (buf, tags[i][1]);
g_free (buf);
- fail_unless (ret == 0);
+ if (ret != 0) {
+ have_tags = FALSE;
+ continue;
+ }
}
- have_tags = TRUE;
break;
}
default:
diff --git a/tests/check/elements/audiomixer.c b/tests/check/elements/audiomixer.c
index 00be1c6..9ef5c3c 100644
--- a/tests/check/elements/audiomixer.c
+++ b/tests/check/elements/audiomixer.c
@@ -723,6 +723,7 @@
g_main_loop_unref (main_loop);
if (play_seek_event)
gst_event_unref (play_seek_event);
+ gst_bus_remove_signal_watch (bus);
gst_object_unref (bus);
gst_object_unref (bin);
}
diff --git a/tests/check/elements/autovideoconvert.c b/tests/check/elements/autovideoconvert.c
index 268f094..56757ab 100644
--- a/tests/check/elements/autovideoconvert.c
+++ b/tests/check/elements/autovideoconvert.c
@@ -77,8 +77,6 @@
g_signal_connect (bus, "message", (GCallback) on_message_cb, &omud);
- gst_object_unref (bus);
-
ret = gst_element_set_state (pipeline, GST_STATE_PLAYING);
fail_unless (ret == GST_STATE_CHANGE_SUCCESS
|| ret == GST_STATE_CHANGE_ASYNC);
@@ -90,6 +88,8 @@
fail_unless (omud.eos == TRUE);
+ gst_bus_remove_signal_watch (bus);
+ gst_object_unref (bus);
gst_object_unref (pipeline);
g_main_loop_unref (loop);
diff --git a/tests/check/elements/camerabin.c b/tests/check/elements/camerabin.c
index f6d7c7c..e554b0b 100644
--- a/tests/check/elements/camerabin.c
+++ b/tests/check/elements/camerabin.c
@@ -439,7 +439,7 @@
static GstElement *camera;
static GstElement *testsrc;
-static guint bus_source;
+static GstBus *bus = NULL;
static GMainLoop *main_loop;
static gint capture_count = 0;
guint32 test_id = 0;
@@ -615,21 +615,20 @@
gchar *pipeline_str = g_strdup_printf ("filesrc location=%s ! "
"jpegparse ! fakesink", filepath);
GstElement *pipeline;
- guint source;
pipeline = gst_parse_launch (pipeline_str, NULL);
fail_unless (pipeline != NULL);
g_free (pipeline_str);
bus = gst_pipeline_get_bus (GST_PIPELINE (pipeline));
- source = gst_bus_add_watch (bus, (GstBusFunc) validity_bus_cb, loop);
+ gst_bus_add_watch (bus, (GstBusFunc) validity_bus_cb, loop);
gst_element_set_state (pipeline, GST_STATE_PLAYING);
g_main_loop_run (loop);
gst_element_set_state (pipeline, GST_STATE_NULL);
+ gst_bus_remove_watch (bus);
gst_object_unref (bus);
- g_source_remove (source);
gst_object_unref (pipeline);
g_main_loop_unref (loop);
}
@@ -637,9 +636,7 @@
static void
setup_camerabin_common (void)
{
- GstBus *bus;
test_id = g_random_int ();
- bus_source = 0;
main_loop = g_main_loop_new (NULL, TRUE);
@@ -647,8 +644,7 @@
fail_unless (camera != NULL, "failed to create camerabin element");
bus = gst_pipeline_get_bus (GST_PIPELINE (camera));
- bus_source = gst_bus_add_watch (bus, (GstBusFunc) capture_bus_cb, main_loop);
- gst_object_unref (bus);
+ gst_bus_add_watch (bus, (GstBusFunc) capture_bus_cb, main_loop);
tags_found = NULL;
capture_count = 0;
@@ -748,8 +744,10 @@
gst_check_teardown_element (camera);
camera = NULL;
- if (bus_source)
- g_source_remove (bus_source);
+ if (bus) {
+ gst_bus_remove_watch (bus);
+ gst_object_unref (bus);
+ }
if (main_loop)
g_main_loop_unref (main_loop);
@@ -842,7 +840,6 @@
GstCaps *caps;
gint caps_width, caps_height;
GstState state;
- guint source;
GMainLoop *loop = g_main_loop_new (NULL, FALSE);
GstElement *playbin = gst_element_factory_make ("playbin", NULL);
@@ -856,7 +853,7 @@
"audio-sink", fakeaudio, NULL);
bus = gst_pipeline_get_bus (GST_PIPELINE (playbin));
- source = gst_bus_add_watch (bus, (GstBusFunc) validity_bus_cb, loop);
+ gst_bus_add_watch (bus, (GstBusFunc) validity_bus_cb, loop);
gst_element_set_state (playbin, GST_STATE_PAUSED);
gst_element_get_state (playbin, &state, NULL, GST_SECOND * 3);
@@ -899,7 +896,7 @@
}
g_free (uri);
- g_source_remove (source);
+ gst_bus_remove_watch (bus);
gst_object_unref (bus);
gst_object_unref (playbin);
g_main_loop_unref (loop);
diff --git a/tests/check/elements/dash_isoff.c b/tests/check/elements/dash_isoff.c
new file mode 100644
index 0000000..500747b
--- /dev/null
+++ b/tests/check/elements/dash_isoff.c
@@ -0,0 +1,206 @@
+#include "../../ext/dash/gstisoff.c"
+#undef GST_CAT_DEFAULT
+
+#include <gst/check/gstcheck.h>
+#include <gst/base/base.h>
+
+#include "dash_isoff.h"
+
+GST_START_TEST (dash_isoff_box_header_minimal)
+{
+ /* INDENT-OFF */
+ static const guint8 data[] = {
+ 16, 32, 64, 128,
+ 't', 'e', 's', 't'
+ };
+ /* INDENT-ON */
+ GstByteReader reader = GST_BYTE_READER_INIT (data, sizeof (data));
+ guint32 type;
+ guint8 extended_type[16];
+ guint header_size;
+ guint64 size;
+
+ fail_unless (gst_isoff_parse_box_header (&reader, &type, extended_type,
+ &header_size, &size));
+ fail_unless (type == GST_MAKE_FOURCC ('t', 'e', 's', 't'));
+ fail_unless_equals_int (header_size, 8);
+ fail_unless_equals_uint64 (size, 0x10204080);
+}
+
+GST_END_TEST;
+
+GST_START_TEST (dash_isoff_box_header_long_size)
+{
+ /* INDENT-OFF */
+ static const guint8 data[] = {
+ 0, 0, 0, 1,
+ 't', 'e', 's', 't',
+ 1, 2, 4, 8, 16, 32, 64, 128
+ };
+ /* INDENT-ON */
+ GstByteReader reader = GST_BYTE_READER_INIT (data, sizeof (data));
+ guint32 type;
+ guint8 extended_type[16];
+ guint header_size;
+ guint64 size;
+
+ fail_unless (gst_isoff_parse_box_header (&reader, &type, extended_type,
+ &header_size, &size));
+ fail_unless (type == GST_MAKE_FOURCC ('t', 'e', 's', 't'));
+ fail_unless_equals_int (header_size, 16);
+ fail_unless_equals_uint64 (size, G_GUINT64_CONSTANT (0x0102040810204080));
+}
+
+GST_END_TEST;
+
+GST_START_TEST (dash_isoff_box_header_uuid_type)
+{
+ /* INDENT-OFF */
+ static const guint8 data[] = {
+ 16, 32, 64, 128,
+ 'u', 'u', 'i', 'd',
+ 'a', 'b', 'c', 'd',
+ 'e', 'f', 'g', 'h',
+ 'i', 'j', 'k', 'l',
+ 'm', 'n', 'o', 'p'
+ };
+ /* INDENT-ON */
+ GstByteReader reader = GST_BYTE_READER_INIT (data, sizeof (data));
+ guint32 type;
+ guint8 extended_type[16];
+ guint header_size;
+ guint64 size;
+
+ fail_unless (gst_isoff_parse_box_header (&reader, &type, extended_type,
+ &header_size, &size));
+ fail_unless (type == GST_MAKE_FOURCC ('u', 'u', 'i', 'd'));
+ fail_unless_equals_int (header_size, 24);
+ fail_unless_equals_uint64 (size, 0x10204080);
+ fail_unless (memcmp (data + 8, extended_type, 16) == 0);
+}
+
+GST_END_TEST;
+
+GST_START_TEST (dash_isoff_box_header_uuid_type_long_size)
+{
+ /* INDENT-OFF */
+ static const guint8 data[] = {
+ 0, 0, 0, 1,
+ 'u', 'u', 'i', 'd',
+ 1, 2, 4, 8, 16, 32, 64, 128,
+ 'a', 'b', 'c', 'd',
+ 'e', 'f', 'g', 'h',
+ 'i', 'j', 'k', 'l',
+ 'm', 'n', 'o', 'p'
+ };
+ /* INDENT-ON */
+ GstByteReader reader = GST_BYTE_READER_INIT (data, sizeof (data));
+ guint32 type;
+ guint8 extended_type[16];
+ guint header_size;
+ guint64 size;
+
+ fail_unless (gst_isoff_parse_box_header (&reader, &type, extended_type,
+ &header_size, &size));
+ fail_unless (type == GST_MAKE_FOURCC ('u', 'u', 'i', 'd'));
+ fail_unless_equals_int (header_size, 32);
+ fail_unless_equals_uint64 (size, G_GUINT64_CONSTANT (0x0102040810204080));
+ fail_unless (memcmp (data + 16, extended_type, 16) == 0);
+}
+
+GST_END_TEST;
+
+GST_START_TEST (dash_isoff_moof_parse)
+{
+ /* INDENT-ON */
+ GstByteReader reader = GST_BYTE_READER_INIT (moof1, sizeof (moof1));
+ guint32 type;
+ guint8 extended_type[16];
+ guint header_size;
+ guint64 size;
+ GstMoofBox *moof;
+ GstTrafBox *traf;
+ GstTrunBox *trun;
+ guint i;
+
+ fail_unless (gst_isoff_parse_box_header (&reader, &type, extended_type,
+ &header_size, &size));
+ fail_unless (type == GST_MAKE_FOURCC ('m', 'o', 'o', 'f'));
+ fail_unless_equals_int (header_size, 8);
+ fail_unless_equals_uint64 (size, sizeof (moof1));
+
+ moof = gst_isoff_moof_box_parse (&reader);
+ fail_unless (moof != NULL);
+
+ fail_unless_equals_int (moof->mfhd.sequence_number, 1);
+ fail_unless_equals_int (moof->traf->len, 1);
+
+ traf = &g_array_index (moof->traf, GstTrafBox, 0);
+ fail_unless_equals_int (traf->tfhd.version, 0);
+ fail_unless_equals_int (traf->tfhd.flags,
+ GST_TFHD_FLAGS_DEFAULT_SAMPLE_DURATION_PRESENT);
+ fail_unless_equals_int (traf->tfhd.track_id, 1);
+ fail_unless_equals_uint64 (traf->tfhd.base_data_offset, 0);
+ fail_unless_equals_int (traf->tfhd.sample_description_index, 0);
+ fail_unless_equals_int (traf->tfhd.default_sample_duration, 8);
+ fail_unless_equals_int (traf->tfhd.default_sample_size, 0);
+ fail_unless_equals_int (traf->tfhd.default_sample_flags, 0);
+
+ fail_unless_equals_int (traf->trun->len, 1);
+ trun = &g_array_index (traf->trun, GstTrunBox, 0);
+
+ fail_unless_equals_int (trun->version, 1);
+ fail_unless_equals_int (trun->flags,
+ GST_TRUN_FLAGS_SAMPLE_COMPOSITION_TIME_OFFSETS_PRESENT |
+ GST_TRUN_FLAGS_SAMPLE_FLAGS_PRESENT | GST_TRUN_FLAGS_SAMPLE_SIZE_PRESENT |
+ GST_TRUN_FLAGS_DATA_OFFSET_PRESENT);
+ fail_unless_equals_int (trun->sample_count, 96);
+ fail_unless_equals_int (trun->data_offset, size + header_size);
+ fail_unless_equals_int (trun->first_sample_flags, 0);
+
+ fail_unless_equals_int (trun->samples->len, 96);
+
+ for (i = 0; i < 96; i++) {
+ GstTrunSample *sample = &g_array_index (trun->samples, GstTrunSample, i);
+
+ fail_unless_equals_int (sample->sample_duration, 0);
+ if (i == 0) {
+ /* sample_depends_on = 2 => I-frame */
+ /* sample_is_non_sync_sample = 0 */
+ fail_unless_equals_int (sample->sample_flags, 0x02000000);
+ } else {
+ /* sample_depends_on = 1 => non-I-frame */
+ /* sample_is_non_sync_sample = 1 */
+ fail_unless_equals_int (sample->sample_flags, 0x01010000);
+ }
+
+ /* sample size and CTO is changing for each sample */
+ }
+
+ gst_isoff_moof_box_free (moof);
+}
+
+GST_END_TEST;
+
+static Suite *
+dash_isoff_suite (void)
+{
+ Suite *s = suite_create ("dash-isoff");
+ TCase *tc_isoff_box = tcase_create ("isoff-box-parsing");
+ TCase *tc_moof = tcase_create ("moof");
+
+ tcase_add_test (tc_isoff_box, dash_isoff_box_header_minimal);
+ tcase_add_test (tc_isoff_box, dash_isoff_box_header_long_size);
+ tcase_add_test (tc_isoff_box, dash_isoff_box_header_uuid_type);
+ tcase_add_test (tc_isoff_box, dash_isoff_box_header_uuid_type_long_size);
+
+ suite_add_tcase (s, tc_isoff_box);
+
+
+ tcase_add_test (tc_moof, dash_isoff_moof_parse);
+ suite_add_tcase (s, tc_moof);
+
+ return s;
+}
+
+GST_CHECK_MAIN (dash_isoff);
diff --git a/tests/check/elements/dash_isoff.h b/tests/check/elements/dash_isoff.h
new file mode 100644
index 0000000..ab4c30c
--- /dev/null
+++ b/tests/check/elements/dash_isoff.h
@@ -0,0 +1,113 @@
+#ifndef __DASH_ISOFF_H__
+#define __DASH_ISOFF_H__
+
+#include <glib.h>
+
+static const guint8 moof1[] = {
+ 0x00, 0x00, 0x04, 0xdc, 0x6d, 0x6f, 0x6f, 0x66, 0x00, 0x00, 0x00, 0x10,
+ 0x6d, 0x66, 0x68, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
+ 0x00, 0x00, 0x04, 0xc4, 0x74, 0x72, 0x61, 0x66, 0x00, 0x00, 0x00, 0x14,
+ 0x74, 0x66, 0x68, 0x64, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x01,
+ 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x14, 0x74, 0x66, 0x64, 0x74,
+ 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x04, 0x94, 0x74, 0x72, 0x75, 0x6e, 0x01, 0x00, 0x0e, 0x01,
+ 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x04, 0xe4, 0x00, 0x00, 0x00, 0xd1,
+ 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x29,
+ 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x05, 0xa5,
+ 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x92,
+ 0x01, 0x01, 0x00, 0x00, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x08, 0x92,
+ 0x01, 0x01, 0x00, 0x00, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x08, 0x92,
+ 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x92,
+ 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x92,
+ 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x92,
+ 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x92,
+ 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x92,
+ 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x92,
+ 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x92,
+ 0x01, 0x01, 0x00, 0x00, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x08, 0x92,
+ 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x92,
+ 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x92,
+ 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x92,
+ 0x01, 0x01, 0x00, 0x00, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x08, 0x92,
+ 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x92,
+ 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x92,
+ 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x92,
+ 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x92,
+ 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x92,
+ 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x92,
+ 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x92,
+ 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x92,
+ 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x92,
+ 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x92,
+ 0x01, 0x01, 0x00, 0x00, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x08, 0x92,
+ 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x92,
+ 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x92,
+ 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x92,
+ 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x92,
+ 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x92,
+ 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x92,
+ 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x92,
+ 0x01, 0x01, 0x00, 0x00, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x08, 0x92,
+ 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x92,
+ 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x92,
+ 0x01, 0x01, 0x00, 0x00, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x08, 0x92,
+ 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x92,
+ 0x01, 0x01, 0x00, 0x00, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x08, 0x92,
+ 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x92,
+ 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x92,
+ 0x01, 0x01, 0x00, 0x00, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x08, 0x92,
+ 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x92,
+ 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x92,
+ 0x01, 0x01, 0x00, 0x00, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x08, 0x92,
+ 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x92,
+ 0x01, 0x01, 0x00, 0x00, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x08, 0x92,
+ 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x92,
+ 0x01, 0x01, 0x00, 0x00, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x08, 0x92,
+ 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x08, 0x92,
+ 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x92,
+ 0x01, 0x01, 0x00, 0x00, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x08, 0x92,
+ 0x01, 0x01, 0x00, 0x00, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x08, 0x92,
+ 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x08, 0x92,
+ 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x92,
+ 0x01, 0x01, 0x00, 0x00, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x08, 0x92,
+ 0x01, 0x01, 0x00, 0x00, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x08, 0x92,
+ 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x08, 0x92,
+ 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x92,
+ 0x01, 0x01, 0x00, 0x00, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x08, 0x92,
+ 0x01, 0x01, 0x00, 0x00, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x08, 0x92,
+ 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x08, 0x92,
+ 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x92,
+ 0x01, 0x01, 0x00, 0x00, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x08, 0x92,
+ 0x01, 0x01, 0x00, 0x00, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x08, 0x92,
+ 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x08, 0x92,
+ 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x92,
+ 0x01, 0x01, 0x00, 0x00, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x08, 0x92,
+ 0x01, 0x01, 0x00, 0x00, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x08, 0x92,
+ 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x08, 0x92,
+ 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x92,
+ 0x01, 0x01, 0x00, 0x00, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x08, 0x92,
+ 0x01, 0x01, 0x00, 0x00, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x08, 0x92,
+ 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x08, 0x92,
+ 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x92,
+ 0x01, 0x01, 0x00, 0x00, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x08, 0x92,
+ 0x01, 0x01, 0x00, 0x00, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x08, 0x92,
+ 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x08, 0x92,
+ 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x92,
+ 0x01, 0x01, 0x00, 0x00, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x08, 0x92,
+ 0x01, 0x01, 0x00, 0x00, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x09, 0x47,
+ 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x07, 0xdd,
+ 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x92,
+ 0x01, 0x01, 0x00, 0x00, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x08, 0x92,
+ 0x01, 0x01, 0x00, 0x00, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x08, 0x92,
+ 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x08, 0x92,
+ 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x92,
+ 0x01, 0x01, 0x00, 0x00, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x0a, 0x70,
+ 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x06, 0xb4,
+ 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x92,
+ 0x01, 0x01, 0x00, 0x00, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x08, 0x92,
+ 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x9b,
+ 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x8f,
+ 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
+
+#endif
diff --git a/tests/check/elements/dash_mpd.c b/tests/check/elements/dash_mpd.c
index 6e49f0e..783ecae 100644
--- a/tests/check/elements/dash_mpd.c
+++ b/tests/check/elements/dash_mpd.c
@@ -44,6 +44,14 @@
return ms;
}
+static GstClockTime
+duration_to_clocktime (guint year, guint month, guint day, guint hour,
+ guint minute, guint second, guint millisecond)
+{
+ return (GST_MSECOND * duration_to_ms (year, month, day, hour, minute, second,
+ millisecond));
+}
+
/*
* Test to ensure a simple mpd file successfully parses.
*
@@ -3154,19 +3162,23 @@
assert_equals_int (represendationIndex, 1);
represendationIndex =
- gst_mpdparser_get_rep_idx_with_max_bandwidth (representations, 0);
+ gst_mpdparser_get_rep_idx_with_max_bandwidth (representations, 0, 0, 0, 0,
+ 1);
assert_equals_int (represendationIndex, 1);
represendationIndex =
- gst_mpdparser_get_rep_idx_with_max_bandwidth (representations, 100000);
+ gst_mpdparser_get_rep_idx_with_max_bandwidth (representations, 100000, 0,
+ 0, 0, 1);
assert_equals_int (represendationIndex, -1);
represendationIndex =
- gst_mpdparser_get_rep_idx_with_max_bandwidth (representations, 300000);
+ gst_mpdparser_get_rep_idx_with_max_bandwidth (representations, 300000, 0,
+ 0, 0, 1);
assert_equals_int (represendationIndex, 1);
represendationIndex =
- gst_mpdparser_get_rep_idx_with_max_bandwidth (representations, 500000);
+ gst_mpdparser_get_rep_idx_with_max_bandwidth (representations, 500000, 0,
+ 0, 0, 1);
assert_equals_int (represendationIndex, 0);
gst_mpd_client_free (mpdclient);
@@ -5445,6 +5457,74 @@
GST_END_TEST;
/*
+ * Test that the maximum_segment_duration correctly implements the
+ * rules in the DASH specification
+ */
+GST_START_TEST (dash_mpdparser_maximum_segment_duration)
+{
+ const gchar *xml_template =
+ "<?xml version=\"1.0\"?>"
+ "<MPD xmlns=\"urn:mpeg:dash:schema:mpd:2011\""
+ " profiles=\"urn:mpeg:dash:profile:isoff-main:2011\""
+ " availabilityStartTime=\"2015-03-24T0:0:0\""
+ " %s "
+ " mediaPresentationDuration=\"P100Y\">"
+ " <Period id=\"Period0\" start=\"PT0S\">"
+ " <AdaptationSet mimeType=\"video/mp4\" >"
+ " <SegmentTemplate timescale=\"90000\" initialization=\"$RepresentationID$/Header.m4s\" media=\"$RepresentationID$/$Number$.m4s\" duration=\"360000\" />"
+ " <Representation id=\"video1\" width=\"576\" height=\"324\" frameRate=\"25\" sar=\"1:1\" bandwidth=\"900000\" codecs=\"avc1.4D401E\"/>"
+ " </AdaptationSet>"
+ " <AdaptationSet mimeType=\"audio/mp4\" >"
+ " <SegmentTemplate timescale=\"90000\" initialization=\"$RepresentationID$/Header.m4s\" media=\"$RepresentationID$/$Number$.m4s\" duration=\"340000\" />"
+ " <Representation id=\"audio1\" audioSamplingRate=\"22050\" bandwidth=\"29600\" codecs=\"mp4a.40.2\">"
+ " <AudioChannelConfiguration schemeIdUri=\"urn:mpeg:dash:23003:3:audio_channel_configuration:2011\" value=\"2\"/>"
+ " </Representation>" " </AdaptationSet>" " </Period></MPD>";
+ gboolean ret;
+ GstMpdClient *mpdclient;
+ gchar *xml;
+ GstClockTime dur;
+ GList *adapt_sets, *iter;
+
+ xml = g_strdup_printf (xml_template, "maxSegmentDuration=\"PT4.5S\"");
+ mpdclient = gst_mpd_client_new ();
+ ret = gst_mpd_parse (mpdclient, xml, (gint) strlen (xml));
+ g_free (xml);
+ assert_equals_int (ret, TRUE);
+
+ assert_equals_uint64 (mpdclient->mpd_node->maxSegmentDuration,
+ duration_to_ms (0, 0, 0, 0, 0, 4, 500));
+ dur = gst_mpd_client_get_maximum_segment_duration (mpdclient);
+ assert_equals_uint64 (dur, duration_to_clocktime (0, 0, 0, 0, 0, 4, 500));
+ gst_mpd_client_free (mpdclient);
+
+ /* now parse without the maxSegmentDuration attribute, to check that
+ gst_mpd_client_get_maximum_segment_duration uses the maximum
+ duration of any segment
+ */
+ xml = g_strdup_printf (xml_template, "");
+ mpdclient = gst_mpd_client_new ();
+ ret = gst_mpd_parse (mpdclient, xml, (gint) strlen (xml));
+ g_free (xml);
+ assert_equals_int (ret, TRUE);
+ ret =
+ gst_mpd_client_setup_media_presentation (mpdclient, GST_CLOCK_TIME_NONE,
+ -1, NULL);
+ assert_equals_int (ret, TRUE);
+ adapt_sets = gst_mpd_client_get_adaptation_sets (mpdclient);
+ for (iter = adapt_sets; iter; iter = g_list_next (iter)) {
+ GstAdaptationSetNode *adapt_set_node = iter->data;
+
+ ret = gst_mpd_client_setup_streaming (mpdclient, adapt_set_node);
+ assert_equals_int (ret, TRUE);
+ }
+ dur = gst_mpd_client_get_maximum_segment_duration (mpdclient);
+ assert_equals_uint64 (dur, duration_to_clocktime (0, 0, 0, 0, 0, 4, 0));
+ gst_mpd_client_free (mpdclient);
+}
+
+GST_END_TEST;
+
+/*
* create a test suite containing all dash testcases
*/
static Suite *
@@ -5625,6 +5705,7 @@
tcase_add_test (tc_stringTests, dash_mpdparser_rfc1738_strings);
tcase_add_test (tc_duration, dash_mpdparser_duration);
+ tcase_add_test (tc_duration, dash_mpdparser_maximum_segment_duration);
suite_add_tcase (s, tc_simpleMPD);
suite_add_tcase (s, tc_complexMPD);
diff --git a/tests/check/elements/hlsdemux_m3u8.c b/tests/check/elements/hlsdemux_m3u8.c
index f49e901..02f50f1 100644
--- a/tests/check/elements/hlsdemux_m3u8.c
+++ b/tests/check/elements/hlsdemux_m3u8.c
@@ -322,44 +322,41 @@
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=65000,CODECS=\"mp4a.40.5\"\r\n\
http://example.com/audio-only.m3u8";
-static GstM3U8Client *
+static GstHLSMasterPlaylist *
load_playlist (const gchar * data)
{
- gboolean ret;
- GstM3U8Client *client;
+ GstHLSMasterPlaylist *master;
- client = gst_m3u8_client_new ("http://localhost/test.m3u8", NULL);
- ret = gst_m3u8_client_update (client, g_strdup (data));
- assert_equals_int (ret, TRUE);
+ master = gst_hls_master_playlist_new_from_data (g_strdup (data),
+ "http://localhost/test.m3u8");
+ fail_unless (master != NULL);
- return client;
+ return master;
}
GST_START_TEST (test_load_main_playlist_invalid)
{
- gboolean ret;
- GstM3U8Client *client =
- gst_m3u8_client_new ("http://localhost/test.m3u8", NULL);
+ GstHLSMasterPlaylist *master;
- ret = gst_m3u8_client_update (client, g_strdup (INVALID_PLAYLIST));
- assert_equals_int (ret, FALSE);
-
- gst_m3u8_client_free (client);
+ master =
+ gst_hls_master_playlist_new_from_data (g_strdup (INVALID_PLAYLIST), NULL);
+ fail_unless (master == NULL);
}
GST_END_TEST;
GST_START_TEST (test_load_main_playlist_rendition)
{
- GstM3U8Client *client;
+ GstHLSMasterPlaylist *master;
+ GstHLSVariantStream *variant;
- client = load_playlist (ON_DEMAND_PLAYLIST);
+ master = load_playlist (ON_DEMAND_PLAYLIST);
+ variant = master->default_variant;
- assert_equals_int (g_list_length (client->main->files), 4);
- assert_equals_int (g_list_length (client->current->files), 4);
- assert_equals_int (client->sequence, 0);
+ assert_equals_int (g_list_length (variant->m3u8->files), 4);
+ assert_equals_int (master->version, 0);
- gst_m3u8_client_free (client);
+ gst_hls_master_playlist_unref (master);
}
GST_END_TEST;
@@ -367,17 +364,18 @@
static void
do_test_load_main_playlist_variant (const gchar * playlist)
{
- GstM3U8Client *client;
- GstM3U8 *stream;
+ GstHLSMasterPlaylist *master;
+ GstHLSVariantStream *stream;
GList *tmp;
- client = load_playlist (playlist);
+ master = gst_hls_master_playlist_new_from_data (g_strdup (playlist), NULL);
+ fail_unless (master != NULL);
- assert_equals_int (g_list_length (client->main->lists), 4);
+ assert_equals_int (g_list_length (master->variants), 4);
/* Audio-Only */
- tmp = g_list_first (client->main->lists);
- stream = GST_M3U8 (tmp->data);
+ tmp = g_list_first (master->variants);
+ stream = tmp->data;
assert_equals_int (stream->bandwidth, 65000);
assert_equals_int (stream->program_id, 1);
assert_equals_string (stream->uri, "http://example.com/audio-only.m3u8");
@@ -385,30 +383,30 @@
/* Low */
tmp = g_list_next (tmp);
- stream = GST_M3U8 (tmp->data);
+ stream = tmp->data;
assert_equals_int (stream->bandwidth, 128000);
assert_equals_int (stream->program_id, 1);
assert_equals_string (stream->uri, "http://example.com/low.m3u8");
/* Mid */
tmp = g_list_next (tmp);
- stream = GST_M3U8 (tmp->data);
+ stream = tmp->data;
assert_equals_int (stream->bandwidth, 256000);
assert_equals_int (stream->program_id, 1);
assert_equals_string (stream->uri, "http://example.com/mid.m3u8");
/* High */
tmp = g_list_next (tmp);
- stream = GST_M3U8 (tmp->data);
+ stream = tmp->data;
assert_equals_int (stream->bandwidth, 768000);
assert_equals_int (stream->program_id, 1);
assert_equals_string (stream->uri, "http://example.com/hi.m3u8");
/* Check the first playlist is selected */
- assert_equals_int (client->current != NULL, TRUE);
- assert_equals_int (client->current->bandwidth, 128000);
+ assert_equals_int (master->default_variant != NULL, TRUE);
+ assert_equals_int (master->default_variant->bandwidth, 128000);
- gst_m3u8_client_free (client);
+ gst_hls_master_playlist_unref (master);
}
GST_START_TEST (test_load_main_playlist_variant)
@@ -420,11 +418,11 @@
GST_START_TEST (test_load_main_playlist_variant_with_missing_uri)
{
- GstM3U8Client *client;
+ GstHLSMasterPlaylist *master;
- client = load_playlist (VARIANT_PLAYLIST_WITH_URI_MISSING);
- assert_equals_int (g_list_length (client->main->lists), 3);
- gst_m3u8_client_free (client);
+ master = load_playlist (VARIANT_PLAYLIST_WITH_URI_MISSING);
+ assert_equals_int (g_list_length (master->variants), 3);
+ gst_hls_master_playlist_unref (master);
}
GST_END_TEST;
@@ -453,17 +451,17 @@
static void
check_on_demand_playlist (const gchar * data)
{
- GstM3U8Client *client;
+ GstHLSMasterPlaylist *master;
GstM3U8 *pl;
GstM3U8MediaFile *file;
- client = load_playlist (data);
- pl = client->current;
+ master = load_playlist (data);
+ pl = master->default_variant->m3u8;
/* Sequence should be 0 as it's an ondemand playlist */
- assert_equals_int (client->sequence, 0);
+ assert_equals_int (pl->sequence, 0);
/* Check that we are not live */
- assert_equals_int (gst_m3u8_client_is_live (client), FALSE);
+ assert_equals_int (gst_m3u8_is_live (pl), FALSE);
/* Check number of entries */
assert_equals_int (g_list_length (pl->files), 4);
/* Check first media segments */
@@ -475,7 +473,7 @@
assert_equals_string (file->uri, "http://media.example.com/004.ts");
assert_equals_int (file->sequence, 3);
- gst_m3u8_client_free (client);
+ gst_hls_master_playlist_unref (master);
}
GST_START_TEST (test_on_demand_playlist)
@@ -508,18 +506,18 @@
GST_START_TEST (test_live_playlist)
{
- GstM3U8Client *client;
+ GstHLSMasterPlaylist *master;
GstM3U8 *pl;
GstM3U8MediaFile *file;
gint64 start = -1;
gint64 stop = -1;
- client = load_playlist (LIVE_PLAYLIST);
+ master = load_playlist (LIVE_PLAYLIST);
- pl = client->current;
+ pl = master->default_variant->m3u8;
/* Check that we are live */
- assert_equals_int (gst_m3u8_client_is_live (client), TRUE);
- assert_equals_int (client->sequence, 2681);
+ assert_equals_int (gst_m3u8_is_live (pl), TRUE);
+ assert_equals_int (pl->sequence, 2681);
/* Check number of entries */
assert_equals_int (g_list_length (pl->files), 4);
/* Check first media segments */
@@ -532,11 +530,11 @@
assert_equals_string (file->uri,
"https://priv.example.com/fileSequence2683.ts");
assert_equals_int (file->sequence, 2683);
- fail_unless (gst_m3u8_client_get_seek_range (client, &start, &stop));
+ fail_unless (gst_m3u8_get_seek_range (pl, &start, &stop));
assert_equals_int64 (start, 0);
assert_equals_float (stop / (double) GST_SECOND, 16.0);
- gst_m3u8_client_free (client);
+ gst_hls_master_playlist_unref (master);
}
GST_END_TEST;
@@ -546,44 +544,45 @@
* there is a jump in the media sequence that must be handled correctly. */
GST_START_TEST (test_live_playlist_rotated)
{
- GstM3U8Client *client;
+ GstHLSMasterPlaylist *master;
GstM3U8 *pl;
GstM3U8MediaFile *file;
gboolean ret;
- client = load_playlist (LIVE_PLAYLIST);
- pl = client->current;
- assert_equals_int (client->sequence, 2681);
+ master = load_playlist (LIVE_PLAYLIST);
+ pl = master->default_variant->m3u8;
+
+ assert_equals_int (pl->sequence, 2681);
/* Check first media segments */
file = GST_M3U8_MEDIA_FILE (g_list_first (pl->files)->data);
assert_equals_int (file->sequence, 2680);
- ret = gst_m3u8_client_update (client, g_strdup (LIVE_ROTATED_PLAYLIST));
+ ret = gst_m3u8_update (pl, g_strdup (LIVE_ROTATED_PLAYLIST));
assert_equals_int (ret, TRUE);
- gst_m3u8_client_get_next_fragment (client, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, TRUE);
+ gst_m3u8_get_next_fragment (pl, TRUE, NULL, NULL);
+
/* FIXME: Sequence should last - 3. Should it? */
- assert_equals_int (client->sequence, 3001);
+ assert_equals_int (pl->sequence, 3001);
/* Check first media segments */
file = GST_M3U8_MEDIA_FILE (g_list_first (pl->files)->data);
assert_equals_int (file->sequence, 3001);
- gst_m3u8_client_free (client);
+ gst_hls_master_playlist_unref (master);
}
GST_END_TEST;
GST_START_TEST (test_playlist_with_doubles_duration)
{
- GstM3U8Client *client;
+ GstHLSMasterPlaylist *master;
GstM3U8 *pl;
GstM3U8MediaFile *file;
gint64 start = -1;
gint64 stop = -1;
- client = load_playlist (DOUBLES_PLAYLIST);
+ master = load_playlist (DOUBLES_PLAYLIST);
+ pl = master->default_variant->m3u8;
- pl = client->current;
/* Check first media segments */
file = GST_M3U8_MEDIA_FILE (g_list_nth_data (pl->files, 0));
assert_equals_float (file->duration / (double) GST_SECOND, 10.321);
@@ -593,18 +592,19 @@
assert_equals_float (file->duration / (double) GST_SECOND, 10.2344);
file = GST_M3U8_MEDIA_FILE (g_list_nth_data (pl->files, 3));
assert_equals_float (file->duration / (double) GST_SECOND, 9.92);
- fail_unless (gst_m3u8_client_get_seek_range (client, &start, &stop));
+ fail_unless (gst_m3u8_get_seek_range (pl, &start, &stop));
assert_equals_int64 (start, 0);
assert_equals_float (stop / (double) GST_SECOND,
10.321 + 9.6789 + 10.2344 + 9.92);
- gst_m3u8_client_free (client);
+
+ gst_hls_master_playlist_unref (master);
}
GST_END_TEST;
GST_START_TEST (test_playlist_with_encryption)
{
- GstM3U8Client *client;
+ GstHLSMasterPlaylist *master;
GstM3U8 *pl;
GstM3U8MediaFile *file;
guint8 iv1[16] = { 0, };
@@ -613,9 +613,9 @@
iv1[15] = 1;
iv2[15] = 2;
- client = load_playlist (AES_128_ENCRYPTED_PLAYLIST);
+ master = load_playlist (AES_128_ENCRYPTED_PLAYLIST);
+ pl = master->default_variant->m3u8;
- pl = client->current;
assert_equals_int (g_list_length (pl->files), 5);
/* Check all media segments */
@@ -640,72 +640,73 @@
assert_equals_string (file->key, "https://priv.example.com/key2.bin");
fail_unless (memcmp (&file->iv, iv1, 16) == 0);
- gst_m3u8_client_free (client);
+ gst_hls_master_playlist_unref (master);
}
GST_END_TEST;
+
GST_START_TEST (test_update_invalid_playlist)
{
- GstM3U8Client *client;
+ GstHLSMasterPlaylist *master;
GstM3U8 *pl;
gboolean ret;
/* Test updates in on-demand playlists */
- client = load_playlist (ON_DEMAND_PLAYLIST);
- pl = client->current;
+ master = load_playlist (ON_DEMAND_PLAYLIST);
+ pl = master->default_variant->m3u8;
assert_equals_int (g_list_length (pl->files), 4);
- ret = gst_m3u8_client_update (client, g_strdup ("#INVALID"));
+ ret = gst_m3u8_update (pl, g_strdup ("#INVALID"));
assert_equals_int (ret, FALSE);
- gst_m3u8_client_free (client);
+ gst_hls_master_playlist_unref (master);
}
GST_END_TEST;
GST_START_TEST (test_update_playlist)
{
- GstM3U8Client *client;
+ GstHLSMasterPlaylist *master;
GstM3U8 *pl;
gchar *live_pl;
gboolean ret;
/* Test updates in on-demand playlists */
- client = load_playlist (ON_DEMAND_PLAYLIST);
- pl = client->current;
+ master = load_playlist (ON_DEMAND_PLAYLIST);
+ pl = master->default_variant->m3u8;
assert_equals_int (g_list_length (pl->files), 4);
- ret = gst_m3u8_client_update (client, g_strdup (ON_DEMAND_PLAYLIST));
+ ret = gst_m3u8_update (pl, g_strdup (ON_DEMAND_PLAYLIST));
assert_equals_int (ret, TRUE);
assert_equals_int (g_list_length (pl->files), 4);
- gst_m3u8_client_free (client);
+ gst_hls_master_playlist_unref (master);
/* Test updates in live playlists */
- client = load_playlist (LIVE_PLAYLIST);
- pl = client->current;
+ master = load_playlist (LIVE_PLAYLIST);
+ pl = master->default_variant->m3u8;
assert_equals_int (g_list_length (pl->files), 4);
/* Add a new entry to the playlist and check the update */
live_pl = g_strdup_printf ("%s\n%s\n%s", LIVE_PLAYLIST, "#EXTINF:8",
"https://priv.example.com/fileSequence2683.ts");
- ret = gst_m3u8_client_update (client, live_pl);
+ ret = gst_m3u8_update (pl, live_pl);
assert_equals_int (ret, TRUE);
assert_equals_int (g_list_length (pl->files), 5);
/* Test sliding window */
- ret = gst_m3u8_client_update (client, g_strdup (LIVE_PLAYLIST));
+ ret = gst_m3u8_update (pl, g_strdup (LIVE_PLAYLIST));
assert_equals_int (ret, TRUE);
assert_equals_int (g_list_length (pl->files), 4);
- gst_m3u8_client_free (client);
+ gst_hls_master_playlist_unref (master);
}
GST_END_TEST;
GST_START_TEST (test_playlist_media_files)
{
- GstM3U8Client *client;
+ GstHLSMasterPlaylist *master;
GstM3U8 *pl;
GstM3U8MediaFile *file;
- client = load_playlist (ON_DEMAND_PLAYLIST);
- pl = client->current;
+ master = load_playlist (ON_DEMAND_PLAYLIST);
+ pl = master->default_variant->m3u8;
/* Check number of entries */
assert_equals_int (g_list_length (pl->files), 4);
@@ -718,19 +719,19 @@
assert_equals_int (file->size, -1);
assert_equals_string (file->title, "Test");
- gst_m3u8_client_free (client);
+ gst_hls_master_playlist_unref (master);
}
GST_END_TEST;
GST_START_TEST (test_playlist_byte_range_media_files)
{
- GstM3U8Client *client;
+ GstHLSMasterPlaylist *master;
GstM3U8 *pl;
GstM3U8MediaFile *file;
- client = load_playlist (BYTE_RANGES_PLAYLIST);
- pl = client->current;
+ master = load_playlist (BYTE_RANGES_PLAYLIST);
+ pl = master->default_variant->m3u8;
/* Check number of entries */
assert_equals_int (g_list_length (pl->files), 4);
@@ -749,11 +750,11 @@
assert_equals_int (file->offset, 3000);
assert_equals_int (file->size, 1000);
- gst_m3u8_client_free (client);
+ gst_hls_master_playlist_unref (master);
- client = load_playlist (BYTE_RANGES_ACC_OFFSET_PLAYLIST);
- pl = client->current;
+ master = load_playlist (BYTE_RANGES_ACC_OFFSET_PLAYLIST);
+ pl = master->default_variant->m3u8;
/* Check number of entries */
assert_equals_int (g_list_length (pl->files), 4);
@@ -772,90 +773,93 @@
assert_equals_int (file->offset, 3000);
assert_equals_int (file->size, 1000);
- gst_m3u8_client_free (client);
+ gst_hls_master_playlist_unref (master);
}
GST_END_TEST;
GST_START_TEST (test_get_next_fragment)
{
- GstM3U8Client *client;
+ GstHLSMasterPlaylist *master;
+ GstM3U8 *pl;
+ GstM3U8MediaFile *mf;
gboolean discontinous;
- gchar *uri;
- GstClockTime duration, timestamp;
- gint64 range_start, range_end;
+ GstClockTime timestamp;
- client = load_playlist (BYTE_RANGES_PLAYLIST);
+ master = load_playlist (BYTE_RANGES_PLAYLIST);
+ pl = master->default_variant->m3u8;
/* Check the next fragment */
- gst_m3u8_client_get_next_fragment (client, &discontinous, &uri, &duration,
- ×tamp, &range_start, &range_end, NULL, NULL, TRUE);
+ mf = gst_m3u8_get_next_fragment (pl, TRUE, ×tamp, &discontinous);
+ fail_unless (mf != NULL);
assert_equals_int (discontinous, FALSE);
- assert_equals_string (uri, "http://media.example.com/all.ts");
+ assert_equals_string (mf->uri, "http://media.example.com/all.ts");
assert_equals_uint64 (timestamp, 0);
- assert_equals_uint64 (duration, 10 * GST_SECOND);
- assert_equals_uint64 (range_start, 100);
- assert_equals_uint64 (range_end, 1099);
- g_free (uri);
+ assert_equals_uint64 (mf->duration, 10 * GST_SECOND);
+ assert_equals_uint64 (mf->offset, 100);
+ assert_equals_uint64 (mf->offset + mf->size, 1100);
- gst_m3u8_client_advance_fragment (client, TRUE);
+ gst_m3u8_advance_fragment (pl, TRUE);
/* Check next media segments */
- gst_m3u8_client_get_next_fragment (client, &discontinous, &uri, &duration,
- ×tamp, &range_start, &range_end, NULL, NULL, TRUE);
+ mf = gst_m3u8_get_next_fragment (pl, TRUE, ×tamp, &discontinous);
+ fail_unless (mf != NULL);
assert_equals_int (discontinous, FALSE);
- assert_equals_string (uri, "http://media.example.com/all.ts");
+ assert_equals_string (mf->uri, "http://media.example.com/all.ts");
assert_equals_uint64 (timestamp, 10 * GST_SECOND);
- assert_equals_uint64 (duration, 10 * GST_SECOND);
- assert_equals_uint64 (range_start, 1000);
- assert_equals_uint64 (range_end, 1999);
- g_free (uri);
+ assert_equals_uint64 (mf->duration, 10 * GST_SECOND);
+ assert_equals_uint64 (mf->offset, 1000);
+ assert_equals_uint64 (mf->offset + mf->size, 2000);
- gst_m3u8_client_advance_fragment (client, TRUE);
+ gst_m3u8_advance_fragment (pl, TRUE);
/* Check next media segments */
- gst_m3u8_client_get_next_fragment (client, &discontinous, &uri, &duration,
- ×tamp, &range_start, &range_end, NULL, NULL, TRUE);
+ mf = gst_m3u8_get_next_fragment (pl, TRUE, ×tamp, &discontinous);
assert_equals_int (discontinous, FALSE);
- assert_equals_string (uri, "http://media.example.com/all.ts");
+ assert_equals_string (mf->uri, "http://media.example.com/all.ts");
assert_equals_uint64 (timestamp, 20 * GST_SECOND);
- assert_equals_uint64 (duration, 10 * GST_SECOND);
- assert_equals_uint64 (range_start, 2000);
- assert_equals_uint64 (range_end, 2999);
- g_free (uri);
+ assert_equals_uint64 (mf->duration, 10 * GST_SECOND);
+ assert_equals_uint64 (mf->offset, 2000);
+ assert_equals_uint64 (mf->offset + mf->size, 3000);
- gst_m3u8_client_free (client);
+ gst_hls_master_playlist_unref (master);
}
GST_END_TEST;
GST_START_TEST (test_get_duration)
{
- GstM3U8Client *client;
+ GstHLSMasterPlaylist *master;
+ GstM3U8 *pl;
/* Test duration for on-demand playlists */
- client = load_playlist (ON_DEMAND_PLAYLIST);
- assert_equals_uint64 (gst_m3u8_client_get_duration (client), 40 * GST_SECOND);
- gst_m3u8_client_free (client);
+ master = load_playlist (ON_DEMAND_PLAYLIST);
+ pl = master->default_variant->m3u8;
+
+ assert_equals_uint64 (gst_m3u8_get_duration (pl), 40 * GST_SECOND);
+ gst_hls_master_playlist_unref (master);
/* Test duration for live playlists */
- client = load_playlist (LIVE_PLAYLIST);
- assert_equals_uint64 (gst_m3u8_client_get_duration (client),
- GST_CLOCK_TIME_NONE);
- gst_m3u8_client_free (client);
+ master = load_playlist (LIVE_PLAYLIST);
+ pl = master->default_variant->m3u8;
+ assert_equals_uint64 (gst_m3u8_get_duration (pl), GST_CLOCK_TIME_NONE);
+
+ gst_hls_master_playlist_unref (master);
}
GST_END_TEST;
GST_START_TEST (test_get_target_duration)
{
- GstM3U8Client *client;
+ GstHLSMasterPlaylist *master;
+ GstM3U8 *pl;
- client = load_playlist (ON_DEMAND_PLAYLIST);
- assert_equals_uint64 (gst_m3u8_client_get_target_duration (client),
- 10 * GST_SECOND);
+ master = load_playlist (ON_DEMAND_PLAYLIST);
+ pl = master->default_variant->m3u8;
- gst_m3u8_client_free (client);
+ assert_equals_uint64 (gst_m3u8_get_target_duration (pl), 10 * GST_SECOND);
+
+ gst_hls_master_playlist_unref (master);
}
GST_END_TEST;
@@ -863,23 +867,29 @@
GST_START_TEST (test_get_stream_for_bitrate)
{
- GstM3U8Client *client;
- GstM3U8 *stream;
+ GstHLSMasterPlaylist *master;
+ GstHLSVariantStream *stream;
- client = load_playlist (VARIANT_PLAYLIST);
- stream = gst_m3u8_client_get_playlist_for_bitrate (client, 0)->data;
+ master = load_playlist (VARIANT_PLAYLIST);
+ stream = gst_hls_master_playlist_get_variant_for_bitrate (master, NULL, 0);
+
assert_equals_int (stream->bandwidth, 65000);
- stream = gst_m3u8_client_get_playlist_for_bitrate (client, G_MAXINT32)->data;
+
+ stream =
+ gst_hls_master_playlist_get_variant_for_bitrate (master, NULL,
+ G_MAXINT32);
assert_equals_int (stream->bandwidth, 768000);
- stream = gst_m3u8_client_get_playlist_for_bitrate (client, 300000)->data;
+ stream =
+ gst_hls_master_playlist_get_variant_for_bitrate (master, NULL, 300000);
assert_equals_int (stream->bandwidth, 256000);
- stream = gst_m3u8_client_get_playlist_for_bitrate (client, 500000)->data;
+ stream =
+ gst_hls_master_playlist_get_variant_for_bitrate (master, NULL, 500000);
assert_equals_int (stream->bandwidth, 256000);
- stream = gst_m3u8_client_get_playlist_for_bitrate (client, 255000)->data;
+ stream =
+ gst_hls_master_playlist_get_variant_for_bitrate (master, NULL, 255000);
assert_equals_int (stream->bandwidth, 128000);
-
- gst_m3u8_client_free (client);
+ gst_hls_master_playlist_unref (master);
}
GST_END_TEST;
@@ -905,7 +915,7 @@
{
GstM3U8Client *client;
- client = load_playlist (ON_DEMAND_PLAYLIST);
+ master = load_playlist (ON_DEMAND_PLAYLIST);
/* Test seek in the middle of a fragment */
do_test_seek (client, 1, 0);
@@ -922,10 +932,10 @@
/* Test invalid seeks (end if list should be 30 + 10) */
do_test_seek (client, 39, 30);
do_test_seek (client, 40, -1);
- gst_m3u8_client_free (client);
+ gst_hls_master_playlist_unref (master);
/* Test seeks on a live playlist */
- client = load_playlist (LIVE_PLAYLIST);
+ master = load_playlist (LIVE_PLAYLIST);
do_test_seek (client, 0, 0);
do_test_seek (client, 8, 8);
@@ -933,7 +943,7 @@
do_test_seek (client, 30, 24);
do_test_seek (client, 3000, -1);
- gst_m3u8_client_free (client);
+ gst_hls_master_playlist_unref (master);
}
GST_END_TEST;
@@ -944,7 +954,7 @@
GstM3U8Media *media;
GList *alternates;
- client = load_playlist (ALTERNATE_AUDIO_PLAYLIST);
+ master = load_playlist (ALTERNATE_AUDIO_PLAYLIST);
assert_equals_int (g_list_length (client->main->streams), 4);
assert_equals_int (g_hash_table_size (client->main->video_rendition_groups),
@@ -980,7 +990,7 @@
assert_equals_string (g_list_nth_data (alternates, 1), "Commentary");
assert_equals_string (g_list_nth_data (alternates, 2), "Deutsche");
- gst_m3u8_client_free (client);
+ gst_hls_master_playlist_unref (master);
}
GST_END_TEST;
@@ -991,7 +1001,7 @@
GstM3U8Media *media;
GList *alternates;
- client = load_playlist (SUBTITLES_PLAYLIST);
+ master = load_playlist (SUBTITLES_PLAYLIST);
assert_equals_int (g_list_length (client->main->streams), 3);
assert_equals_int (g_hash_table_size (client->main->video_rendition_groups),
@@ -1028,7 +1038,7 @@
assert_equals_string (g_list_nth_data (alternates, 1), "Spanish");
assert_equals_string (g_list_nth_data (alternates, 2), "English");
- gst_m3u8_client_free (client);
+ gst_hls_master_playlist_unref (master);
}
GST_END_TEST;
@@ -1041,7 +1051,7 @@
/* Check with a playlist with alternative audio renditions where the video
* stream is video-only and therefor we always have 2 playlists, one for
* video and another one for audio */
- client = load_playlist (SUBTITLES_PLAYLIST);
+ master = load_playlist (SUBTITLES_PLAYLIST);
gst_m3u8_client_get_current_uri (client, &v_uri, &a_uri, &s_uri);
assert_equals_int (a_uri == NULL, TRUE);
assert_equals_int (s_uri != NULL, TRUE);
@@ -1081,7 +1091,7 @@
assert_equals_string (v_uri, "http://localhost/low/video-audio.m3u8");
assert_equals_int (s_uri == NULL, TRUE);
- gst_m3u8_client_free (client);
+ gst_hls_master_playlist_unref (master);
}
GST_END_TEST;
@@ -1094,7 +1104,7 @@
/* Check with a playlist with alternative audio renditions where the video
* stream is video-only and therefor we always have 2 playlists, one for
* video and another one for audio */
- client = load_playlist (ALTERNATE_AUDIO_PLAYLIST);
+ master = load_playlist (ALTERNATE_AUDIO_PLAYLIST);
gst_m3u8_client_get_current_uri (client, &v_uri, &a_uri, &s_uri);
assert_equals_int (a_uri != NULL, TRUE);
assert_equals_string (a_uri, "http://localhost/main/english-audio.m3u8");
@@ -1123,13 +1133,13 @@
assert_equals_int (v_uri == NULL, TRUE);
assert_equals_int (s_uri == NULL, TRUE);
- gst_m3u8_client_free (client);
+ gst_hls_master_playlist_unref (master);
/* Now check with a playlist with alternative audio renditions where the
* video * stream has the default audio rendition muxed and therefore we
* only have 2 playlists when the audio alternative rendition is not the
* default one */
- client = load_playlist (ALT_AUDIO_PLAYLIST_WITH_VIDEO_AUDIO);
+ master = load_playlist (ALT_AUDIO_PLAYLIST_WITH_VIDEO_AUDIO);
gst_m3u8_client_get_current_uri (client, &v_uri, &a_uri, &s_uri);
assert_equals_int (a_uri == NULL, TRUE);
assert_equals_int (v_uri != NULL, TRUE);
@@ -1161,7 +1171,7 @@
assert_equals_string (v_uri, "http://localhost/low/video-audio.m3u8");
assert_equals_int (s_uri == NULL, TRUE);
- gst_m3u8_client_free (client);
+ gst_hls_master_playlist_unref (master);
}
GST_END_TEST;
@@ -1173,7 +1183,7 @@
GstFragment *a_frag, *v_frag, *s_frag;
gboolean ret;
- client = load_playlist (ALTERNATE_AUDIO_PLAYLIST);
+ master = load_playlist (ALTERNATE_AUDIO_PLAYLIST);
/* The default selection should be audio-only, which only has audio and not
* video */
gst_m3u8_client_get_current_uri (client, &v_uri, &a_uri, &s_uri);
@@ -1184,7 +1194,7 @@
assert_equals_int (s_uri == NULL, TRUE);
/* Update the playlists */
- ret = gst_m3u8_client_update (client,
+ ret = gst_m3u8_update (client,
g_strdup (ON_DEMAND_LOW_VIDEO_ONLY_PLAYLIST),
g_strdup (ON_DEMAND_ENGLISH_PLAYLIST), NULL);
assert_equals_int (ret, TRUE);
@@ -1229,7 +1239,7 @@
assert_equals_int (s_uri == NULL, TRUE);
/* Update the new uri's */
ret =
- gst_m3u8_client_update (client,
+ gst_m3u8_update (client,
g_strdup (ON_DEMAND_LOW_VIDEO_ONLY_PLAYLIST),
g_strdup (ON_DEMAND_GERMAN_PLAYLIST), NULL);
assert_equals_int (ret, TRUE);
@@ -1254,7 +1264,7 @@
assert_equals_string (v_uri, "http://localhost/mid/video-only.m3u8");
assert_equals_int (s_uri == NULL, TRUE);
ret =
- gst_m3u8_client_update (client,
+ gst_m3u8_update (client,
g_strdup (ON_DEMAND_MID_VIDEO_ONLY_PLAYLIST),
g_strdup (ON_DEMAND_GERMAN_PLAYLIST), NULL);
assert_equals_int (ret, TRUE);
@@ -1327,7 +1337,7 @@
ret = gst_m3u8_client_get_next_fragment (client, &v_frag, &a_frag, &s_frag);
assert_equals_int (ret, FALSE);
- gst_m3u8_client_free (client);
+ gst_hls_master_playlist_unref (master);
}
GST_END_TEST;
@@ -1339,16 +1349,19 @@
"#EXT-X-VERSION:4\n"
"#EXT-X-STREAM-INF:PROGRAM-ID=1, BANDWIDTH=1251135, CODECS=\"avc1.42001f, mp4a.40.2\", RESOLUTION=640x352\n"
"1251/media.m3u8?acl=/*1054559_h264_1500k.mp4\n";
- GstM3U8Client *client;
+ GstHLSMasterPlaylist *master;
+ GstHLSVariantStream *stream;
GstM3U8 *media;
- client = load_playlist (MASTER_PLAYLIST);
+ master = load_playlist (MASTER_PLAYLIST);
- assert_equals_int (g_list_length (client->main->lists), 1);
- media = g_list_nth_data (client->main->lists, 0);
+ assert_equals_int (g_list_length (master->variants), 1);
+ stream = g_list_nth_data (master->variants, 0);
+ media = stream->m3u8;
+
assert_equals_string (media->uri,
"http://localhost/1251/media.m3u8?acl=/*1054559_h264_1500k.mp4");
- gst_m3u8_client_free (client);
+ gst_hls_master_playlist_unref (master);
}
GST_END_TEST;
@@ -1359,19 +1372,20 @@
"#EXT-X-VERSION:4\n"
"#EXT-X-STREAM-INF:PROGRAM-ID=1, BANDWIDTH=1251135, CODECS=\"avc1.42001f, mp4a.40.2\", RESOLUTION=640x352\n"
"media.m3u8\n";
- GstM3U8Client *client;
- GstM3U8 *media;
+ GstHLSMasterPlaylist *master;
+ GstHLSVariantStream *stream;
- client = load_playlist (MASTER_PLAYLIST);
+ master = load_playlist (MASTER_PLAYLIST);
- assert_equals_int (g_list_length (client->main->lists), 1);
- media = g_list_nth_data (client->main->lists, 0);
- assert_equals_int64 (media->program_id, 1);
- assert_equals_int64 (media->width, 640);
- assert_equals_int64 (media->height, 352);
- assert_equals_int64 (media->bandwidth, 1251135);
- assert_equals_string (media->codecs, "avc1.42001f, mp4a.40.2");
- gst_m3u8_client_free (client);
+ assert_equals_int (g_list_length (master->variants), 1);
+ stream = g_list_nth_data (master->variants, 0);
+
+ assert_equals_int64 (stream->program_id, 1);
+ assert_equals_int64 (stream->width, 640);
+ assert_equals_int64 (stream->height, 352);
+ assert_equals_int64 (stream->bandwidth, 1251135);
+ assert_equals_string (stream->codecs, "avc1.42001f, mp4a.40.2");
+ gst_hls_master_playlist_unref (master);
}
GST_END_TEST;
@@ -1398,6 +1412,8 @@
tcase_add_test (tc_m3u8, test_empty_lines_playlist);
tcase_add_test (tc_m3u8, test_live_playlist);
tcase_add_test (tc_m3u8, test_live_playlist_rotated);
+ tcase_add_test (tc_m3u8, test_playlist_with_doubles_duration);
+ tcase_add_test (tc_m3u8, test_playlist_with_encryption);
tcase_add_test (tc_m3u8, test_update_invalid_playlist);
tcase_add_test (tc_m3u8, test_update_playlist);
tcase_add_test (tc_m3u8, test_playlist_media_files);
@@ -1414,8 +1430,6 @@
tcase_add_test (tc_m3u8, test_select_subs_alternate);
tcase_add_test (tc_m3u8, test_simulation);
#endif
- tcase_add_test (tc_m3u8, test_playlist_with_doubles_duration);
- tcase_add_test (tc_m3u8, test_playlist_with_encryption);
tcase_add_test (tc_m3u8, test_url_with_slash_query_param);
tcase_add_test (tc_m3u8, test_stream_inf_tag);
return s;
diff --git a/tests/check/elements/rawaudioparse.c b/tests/check/elements/rawaudioparse.c
new file mode 100644
index 0000000..029aab5
--- /dev/null
+++ b/tests/check/elements/rawaudioparse.c
@@ -0,0 +1,395 @@
+/* GStreamer
+ *
+ * unit test for rawaudioparse
+ *
+ * Copyright (C) <2016> Carlos Rafael Giani <dv at pseudoterminal dot org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+/* FIXME: GValueArray is deprecated, but there is currently no viabla alternative
+ * See https://bugzilla.gnome.org/show_bug.cgi?id=667228 */
+#define GLIB_DISABLE_DEPRECATION_WARNINGS
+
+#include <gst/check/gstcheck.h>
+#include <gst/audio/audio.h>
+
+/* Checks are hardcoded to expect stereo 16-bit data. The sample rate
+ * however varies from the default of 40 kHz in some tests to see the
+ * differences in calculated buffer durations. */
+#define NUM_TEST_SAMPLES 512
+#define NUM_TEST_CHANNELS 2
+#define TEST_SAMPLE_RATE 40000
+#define TEST_SAMPLE_FORMAT GST_AUDIO_FORMAT_S16
+
+/* For ease of programming we use globals to keep refs for our floating
+ * src and sink pads we create; otherwise we always have to do get_pad,
+ * get_peer, and then remove references in every test function */
+static GstPad *mysrcpad, *mysinkpad;
+
+typedef struct
+{
+ GstElement *rawaudioparse;
+ GstAdapter *test_data_adapter;
+}
+RawAudParseTestCtx;
+
+/* Sets up a rawaudioparse element and a GstAdapter that contains 512 test
+ * audio samples. The samples a monotonically increasing set from the values
+ * 0 to 511 for the left and 512 to 1023 for the right channel. The result
+ * is a GstAdapter that contains the interleaved 16-bit integer values:
+ * 0,512,1,513,2,514, ... 511,1023 . This set is used in the checks to see
+ * if rawaudioparse's output buffers contain valid data. */
+static void
+setup_rawaudioparse (RawAudParseTestCtx * testctx, gboolean use_sink_caps,
+ gboolean set_properties, GstCaps * incaps, GstFormat format)
+{
+ GstElement *rawaudioparse;
+ GstAdapter *test_data_adapter;
+ GstBuffer *buffer;
+ guint i;
+ guint16 samples[NUM_TEST_SAMPLES * NUM_TEST_CHANNELS];
+
+
+ /* Setup the rawaudioparse element and the pads */
+
+ static GstStaticPadTemplate sinktemplate = GST_STATIC_PAD_TEMPLATE ("sink",
+ GST_PAD_SINK,
+ GST_PAD_ALWAYS,
+ GST_STATIC_CAPS (GST_AUDIO_CAPS_MAKE (GST_AUDIO_FORMATS_ALL))
+ );
+ static GstStaticPadTemplate srctemplate = GST_STATIC_PAD_TEMPLATE ("src",
+ GST_PAD_SRC,
+ GST_PAD_ALWAYS,
+ GST_STATIC_CAPS_ANY);
+
+ rawaudioparse = gst_check_setup_element ("rawaudioparse");
+
+ g_object_set (G_OBJECT (rawaudioparse), "use-sink-caps", use_sink_caps, NULL);
+ if (set_properties)
+ g_object_set (G_OBJECT (rawaudioparse), "sample-rate", TEST_SAMPLE_RATE,
+ "num-channels", NUM_TEST_CHANNELS, "pcm-format", TEST_SAMPLE_FORMAT,
+ NULL);
+
+ fail_unless (gst_element_set_state (rawaudioparse,
+ GST_STATE_PAUSED) == GST_STATE_CHANGE_SUCCESS,
+ "could not set to paused");
+
+ mysrcpad = gst_check_setup_src_pad (rawaudioparse, &srctemplate);
+ mysinkpad = gst_check_setup_sink_pad (rawaudioparse, &sinktemplate);
+
+ gst_pad_set_active (mysrcpad, TRUE);
+ gst_pad_set_active (mysinkpad, TRUE);
+
+ gst_check_setup_events (mysrcpad, rawaudioparse, incaps, format);
+ if (incaps)
+ gst_caps_unref (incaps);
+
+
+ /* Fill the adapter with the interleaved 0..511 and
+ * 512..1023 samples */
+ for (i = 0; i < NUM_TEST_SAMPLES; ++i) {
+ guint c;
+ for (c = 0; c < NUM_TEST_CHANNELS; ++c)
+ samples[i * NUM_TEST_CHANNELS + c] = c * NUM_TEST_SAMPLES + i;
+ }
+
+ test_data_adapter = gst_adapter_new ();
+ buffer = gst_buffer_new_allocate (NULL, sizeof (samples), NULL);
+ gst_buffer_fill (buffer, 0, samples, sizeof (samples));
+ gst_adapter_push (test_data_adapter, buffer);
+
+
+ testctx->rawaudioparse = rawaudioparse;
+ testctx->test_data_adapter = test_data_adapter;
+}
+
+static void
+cleanup_rawaudioparse (RawAudParseTestCtx * testctx)
+{
+ int num_buffers, i;
+
+ gst_pad_set_active (mysrcpad, FALSE);
+ gst_pad_set_active (mysinkpad, FALSE);
+ gst_check_teardown_src_pad (testctx->rawaudioparse);
+ gst_check_teardown_sink_pad (testctx->rawaudioparse);
+ gst_check_teardown_element (testctx->rawaudioparse);
+
+ g_object_unref (G_OBJECT (testctx->test_data_adapter));
+
+ if (buffers != NULL) {
+ num_buffers = g_list_length (buffers);
+ for (i = 0; i < num_buffers; ++i) {
+ GstBuffer *buf = GST_BUFFER (buffers->data);
+ buffers = g_list_remove (buffers, buf);
+ gst_buffer_unref (buf);
+ }
+
+ g_list_free (buffers);
+ buffers = NULL;
+ }
+}
+
+
+static void
+push_data_and_check_output (RawAudParseTestCtx * testctx, gsize num_in_bytes,
+ gsize expected_num_out_bytes, gint64 expected_pts, gint64 expected_dur,
+ guint expected_num_buffers_in_list, guint bpf, guint16 channel0_start,
+ guint16 channel1_start)
+{
+ GstBuffer *inbuf, *outbuf;
+ guint num_buffers;
+
+ /* Simulate upstream input by taking num_in_bytes bytes from the adapter */
+ inbuf = gst_adapter_take_buffer (testctx->test_data_adapter, num_in_bytes);
+ fail_unless (inbuf != NULL);
+
+ /* Push the input data and check that the output buffers list grew as
+ * expected */
+ fail_unless (gst_pad_push (mysrcpad, inbuf) == GST_FLOW_OK);
+ num_buffers = g_list_length (buffers);
+ fail_unless_equals_int (num_buffers, expected_num_buffers_in_list);
+
+ /* Take the latest output buffer */
+ outbuf = g_list_nth_data (buffers, num_buffers - 1);
+ fail_unless (outbuf != NULL);
+
+ /* Verify size, PTS, duration of the output buffer */
+ fail_unless_equals_uint64 (expected_num_out_bytes,
+ gst_buffer_get_size (outbuf));
+ fail_unless_equals_uint64 (expected_pts, GST_BUFFER_PTS (outbuf));
+ fail_unless_equals_uint64 (expected_dur, GST_BUFFER_DURATION (outbuf));
+
+ /* Go through all of the samples in the output buffer and check that they are
+ * valid. The samples are interleaved. The offsets specified by channel0_start
+ * and channel1_start are the expected values of the first sample for each
+ * channel in the buffer. So, if channel0_start is 512, then sample #0 in the
+ * buffer must have value 512, and if channel1_start is 700, then sample #1
+ * in the buffer must have value 700 etc. */
+ {
+ guint i, num_frames;
+ guint16 *s;
+ GstMapInfo map_info;
+ guint channel_starts[2] = { channel0_start, channel1_start };
+
+ gst_buffer_map (outbuf, &map_info, GST_MAP_READ);
+ num_frames = map_info.size / bpf;
+ s = (guint16 *) (map_info.data);
+
+ for (i = 0; i < num_frames; ++i) {
+ guint c;
+
+ for (c = 0; i < NUM_TEST_CHANNELS; ++i) {
+ guint16 expected = channel_starts[c] + i;
+ guint16 actual = s[i * NUM_TEST_CHANNELS + c];
+
+ fail_unless_equals_int (expected, actual);
+ }
+ }
+
+ gst_buffer_unmap (outbuf, &map_info);
+ }
+}
+
+
+GST_START_TEST (test_push_unaligned_data_properties_config)
+{
+ RawAudParseTestCtx testctx;
+
+ setup_rawaudioparse (&testctx, FALSE, TRUE, NULL, GST_FORMAT_BYTES);
+
+ /* Send in data buffers that are not aligned to multiples of the
+ * frame size (= sample size * num_channels). This tests if rawaudioparse
+ * aligns output data properly.
+ *
+ * The second line sends in 99 bytes, and expects 100 bytes in the
+ * output buffer. This is because the first buffer contains 45 bytes,
+ * and rawaudioparse is expected to output 44 bytes (which is an integer
+ * multiple of the frame size). The leftover 1 byte then gets prepended
+ * to the input buffer with 99 bytes, resulting in 100 bytes, which is
+ * an integer multiple of the frame size.
+ */
+
+ push_data_and_check_output (&testctx, 45, 44, GST_USECOND * 0,
+ GST_USECOND * 275, 1, 4, 0, 512);
+ push_data_and_check_output (&testctx, 99, 100, GST_USECOND * 275,
+ GST_USECOND * 625, 2, 4, 11, 523);
+ push_data_and_check_output (&testctx, 18, 16, GST_USECOND * 900,
+ GST_USECOND * 100, 3, 4, 36, 548);
+
+ cleanup_rawaudioparse (&testctx);
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_push_unaligned_data_sink_caps_config)
+{
+ RawAudParseTestCtx testctx;
+ GstAudioInfo ainfo;
+ GstCaps *caps;
+
+ /* This test is essentially the same as test_push_unaligned_data_properties_config,
+ * except that rawaudioparse uses the sink caps config instead of the property config. */
+
+ gst_audio_info_set_format (&ainfo, TEST_SAMPLE_FORMAT, TEST_SAMPLE_RATE,
+ NUM_TEST_CHANNELS, NULL);
+ caps = gst_audio_info_to_caps (&ainfo);
+
+ setup_rawaudioparse (&testctx, TRUE, FALSE, caps, GST_FORMAT_BYTES);
+
+ push_data_and_check_output (&testctx, 45, 44, GST_USECOND * 0,
+ GST_USECOND * 275, 1, 4, 0, 512);
+ push_data_and_check_output (&testctx, 99, 100, GST_USECOND * 275,
+ GST_USECOND * 625, 2, 4, 11, 523);
+ push_data_and_check_output (&testctx, 18, 16, GST_USECOND * 900,
+ GST_USECOND * 100, 3, 4, 36, 548);
+
+ cleanup_rawaudioparse (&testctx);
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_push_swapped_channels)
+{
+ RawAudParseTestCtx testctx;
+ GValueArray *valarray;
+ GValue val = G_VALUE_INIT;
+
+ /* Send in 40 bytes and use a nonstandard channel order (left and right channels
+ * swapped). Expected behavior is for rawaudioparse to reorder the samples inside
+ * output buffers to conform to the GStreamer channel order. For this reason,
+ * channel0 offset is 512 and channel1 offset is 0 in the check below. */
+
+ setup_rawaudioparse (&testctx, FALSE, TRUE, NULL, GST_FORMAT_BYTES);
+
+ valarray = g_value_array_new (2);
+ g_value_init (&val, GST_TYPE_AUDIO_CHANNEL_POSITION);
+ g_value_set_enum (&val, GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT);
+ g_value_array_insert (valarray, 0, &val);
+ g_value_set_enum (&val, GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT);
+ g_value_array_insert (valarray, 1, &val);
+ g_object_set (G_OBJECT (testctx.rawaudioparse), "channel-positions",
+ valarray, NULL);
+ g_value_array_free (valarray);
+ g_value_unset (&val);
+
+ push_data_and_check_output (&testctx, 40, 40, GST_USECOND * 0,
+ GST_USECOND * 250, 1, 4, 512, 0);
+
+ cleanup_rawaudioparse (&testctx);
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_config_switch)
+{
+ RawAudParseTestCtx testctx;
+ GstAudioInfo ainfo;
+ GstCaps *caps;
+
+ /* Start processing with the properties config active, then mid-stream switch to
+ * the sink caps config. The properties config is altered to have a different
+ * sample rate than the sink caps to be able to detect the switch. The net effect
+ * is that output buffer durations are altered. For example, 40 bytes equal
+ * 10 samples, and this equals 500 us with 20 kHz or 250 us with 40 kHz. */
+
+ gst_audio_info_set_format (&ainfo, TEST_SAMPLE_FORMAT, TEST_SAMPLE_RATE,
+ NUM_TEST_CHANNELS, NULL);
+ caps = gst_audio_info_to_caps (&ainfo);
+
+ setup_rawaudioparse (&testctx, FALSE, TRUE, caps, GST_FORMAT_BYTES);
+
+ g_object_set (G_OBJECT (testctx.rawaudioparse), "sample-rate", 20000, NULL);
+
+ /* Push in data with properties config active, expecting duration calculations
+ * to be based on the 20 kHz sample rate */
+ push_data_and_check_output (&testctx, 40, 40, GST_USECOND * 0,
+ GST_USECOND * 500, 1, 4, 0, 512);
+ push_data_and_check_output (&testctx, 20, 20, GST_USECOND * 500,
+ GST_USECOND * 250, 2, 4, 10, 522);
+
+ /* Perform the switch */
+ g_object_set (G_OBJECT (testctx.rawaudioparse), "use-sink-caps", TRUE, NULL);
+
+ /* Push in data with sink caps config active, expecting duration calculations
+ * to be based on the 40 kHz sample rate */
+ push_data_and_check_output (&testctx, 40, 40, GST_USECOND * 750,
+ GST_USECOND * 250, 3, 4, 15, 527);
+
+ cleanup_rawaudioparse (&testctx);
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_change_caps)
+{
+ RawAudParseTestCtx testctx;
+ GstAudioInfo ainfo;
+ GstCaps *caps;
+
+ /* Start processing with the sink caps config active, using the
+ * default channel count and sample format and 20 kHz sample rate
+ * for the caps. Push some data, then change caps (20 kHz -> 40 kHz).
+ * Check that the changed caps are handled properly. */
+
+ gst_audio_info_set_format (&ainfo, TEST_SAMPLE_FORMAT, 20000,
+ NUM_TEST_CHANNELS, NULL);
+ caps = gst_audio_info_to_caps (&ainfo);
+
+ setup_rawaudioparse (&testctx, TRUE, FALSE, caps, GST_FORMAT_BYTES);
+
+ /* Push in data with caps sink config active, expecting duration calculations
+ * to be based on the 20 kHz sample rate */
+ push_data_and_check_output (&testctx, 40, 40, GST_USECOND * 0,
+ GST_USECOND * 500, 1, 4, 0, 512);
+ push_data_and_check_output (&testctx, 20, 20, GST_USECOND * 500,
+ GST_USECOND * 250, 2, 4, 10, 522);
+
+ /* Change caps */
+ gst_audio_info_set_format (&ainfo, TEST_SAMPLE_FORMAT, 40000,
+ NUM_TEST_CHANNELS, NULL);
+ caps = gst_audio_info_to_caps (&ainfo);
+ fail_unless (gst_pad_push_event (mysrcpad, gst_event_new_caps (caps)));
+ gst_caps_unref (caps);
+
+ /* Push in data with the new caps, expecting duration calculations
+ * to be based on the 40 kHz sample rate */
+ push_data_and_check_output (&testctx, 40, 40, GST_USECOND * 750,
+ GST_USECOND * 250, 3, 4, 15, 527);
+
+ cleanup_rawaudioparse (&testctx);
+}
+
+GST_END_TEST;
+
+
+static Suite *
+rawaudioparse_suite (void)
+{
+ Suite *s = suite_create ("rawaudioparse");
+ TCase *tc_chain = tcase_create ("general");
+
+ suite_add_tcase (s, tc_chain);
+ tcase_add_test (tc_chain, test_push_unaligned_data_properties_config);
+ tcase_add_test (tc_chain, test_push_unaligned_data_sink_caps_config);
+ tcase_add_test (tc_chain, test_push_swapped_channels);
+ tcase_add_test (tc_chain, test_config_switch);
+ tcase_add_test (tc_chain, test_change_caps);
+
+ return s;
+}
+
+GST_CHECK_MAIN (rawaudioparse);
diff --git a/tests/check/elements/rawvideoparse.c b/tests/check/elements/rawvideoparse.c
new file mode 100644
index 0000000..477e767
--- /dev/null
+++ b/tests/check/elements/rawvideoparse.c
@@ -0,0 +1,628 @@
+/* GStreamer
+ *
+ * unit test for rawvideoparse
+ *
+ * Copyright (C) <2016> Carlos Rafael Giani <dv at pseudoterminal dot org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+/* FIXME: GValueArray is deprecated, but there is currently no viabla alternative
+ * See https://bugzilla.gnome.org/show_bug.cgi?id=667228 */
+#define GLIB_DISABLE_DEPRECATION_WARNINGS
+
+#include <gst/check/gstcheck.h>
+#include <gst/video/video.h>
+
+/* The checks use as test data an 8x8 Y444 image, with 25 Hz framerate. In the
+ * sink caps configuration, the stride is 8 bytes, and the frames are tightly
+ * packed together. In the properties configuration, the stride is 10 bytes, the
+ * planes aren't tightly packed (there are 20 bytes between the planes), and the
+ * frames overall have padding between them (the overall frame size is
+ * stride (10) * height (8) * num-planes (3) + bytes-between-planes (20) * 2
+ * = 280 bytes, and the frame stride is 500 bytes, so there are 220 bytes of
+ * extra padding between frames).
+ *
+ * In the test 8x8 frame, the pixels are all set to #000000, except for two
+ * pixels: (xofs+1 yofs+0) is set to #8899AA, (xofs+0 yofs+1) is set to #112233.
+ * The first frame uses the offsets xofs=0 yofs=0. The second frame uses
+ * xofs=1 yofs=0 etc. For each configuration, there is a separate set of frames,
+ * each stored in the GstAdapter in the Context struct.
+ *
+ * During the tests, as part of the checks, the pixels are verified to have the
+ * right values. The pattern of the pixels was chosen to easily detect stride
+ * errors, incorrect plane offsets etc.
+ */
+
+#define TEST_WIDTH 8
+#define TEST_HEIGHT 8
+#define TEST_FRAMERATE_N 25
+#define TEST_FRAMERATE_D 1
+#define TEST_FRAME_FORMAT GST_VIDEO_FORMAT_Y444
+#define NUM_TEST_PLANES 3
+
+#define PROP_CTX_PLANE_STRIDE 10
+#define PROP_CTX_FRAME_STRIDE 500
+#define PROP_CTX_PLANE_PADDING 20
+#define PROP_CTX_PLANE_SIZE (PROP_CTX_PLANE_STRIDE * TEST_HEIGHT + PROP_CTX_PLANE_PADDING)
+
+GstElement *rawvideoparse;
+
+/* For ease of programming we use globals to keep refs for our floating
+ * src and sink pads we create; otherwise we always have to do get_pad,
+ * get_peer, and then remove references in every test function */
+static GstPad *mysrcpad, *mysinkpad;
+
+typedef struct
+{
+ GstAdapter *data;
+ guint plane_stride;
+ guint plane_size;
+}
+Context;
+
+static Context properties_ctx, sinkcaps_ctx;
+
+static void
+set_pixel (Context const *ctx, guint8 * pixels, guint x, guint y, guint32 color)
+{
+ guint i;
+ guint ofs = y * ctx->plane_stride + x;
+ for (i = 0; i < NUM_TEST_PLANES; ++i)
+ pixels[ctx->plane_size * i + ofs] =
+ (color >> ((NUM_TEST_PLANES - 1 - i) * 8)) & 0xFF;
+}
+
+static guint32
+get_pixel (Context const *ctx, const guint8 * pixels, guint x, guint y)
+{
+ guint i;
+ guint ofs = y * ctx->plane_stride + x;
+ guint32 color = 0;
+ for (i = 0; i < NUM_TEST_PLANES; ++i)
+ color |=
+ ((guint32) (pixels[ctx->plane_size * i + ofs])) << ((NUM_TEST_PLANES -
+ 1 - i) * 8);
+ return color;
+}
+
+static void
+fill_test_pattern (Context const *ctx, GstBuffer * buffer, guint xofs,
+ guint yofs)
+{
+ guint8 *pixels;
+ GstMapInfo map_info;
+
+ gst_buffer_map (buffer, &map_info, GST_MAP_WRITE);
+ pixels = map_info.data;
+
+ memset (pixels, 0, ctx->plane_size * NUM_TEST_PLANES);
+ set_pixel (ctx, pixels, 1 + xofs, 0 + yofs, 0x8899AA);
+ set_pixel (ctx, pixels, 0 + xofs, 1 + yofs, 0x112233);
+
+ gst_buffer_unmap (buffer, &map_info);
+}
+
+static void
+check_test_pattern (Context const *ctx, GstBuffer * buffer, guint xofs,
+ guint yofs)
+{
+ guint x, y;
+ guint8 *pixels;
+ GstMapInfo map_info;
+
+ gst_buffer_map (buffer, &map_info, GST_MAP_READ);
+ pixels = map_info.data;
+
+ fail_unless_equals_uint64_hex (get_pixel (ctx, pixels, 1 + xofs, 0 + yofs),
+ 0x8899AA);
+ fail_unless_equals_uint64_hex (get_pixel (ctx, pixels, 0 + xofs, 1 + yofs),
+ 0x112233);
+
+ for (y = 0; y < TEST_HEIGHT; ++y) {
+ for (x = 0; x < TEST_WIDTH; ++x) {
+ if ((x == (1 + xofs) && y == (0 + yofs)) || (x == (0 + xofs)
+ && y == (1 + yofs)))
+ continue;
+
+ fail_unless_equals_uint64_hex (get_pixel (ctx, pixels, x, y), 0x000000);
+ }
+ }
+
+ gst_buffer_unmap (buffer, &map_info);
+}
+
+
+static void
+setup_rawvideoparse (gboolean use_sink_caps,
+ gboolean set_properties, GstCaps * incaps, GstFormat format)
+{
+ guint i;
+
+
+ /* Setup the rawvideoparse element and the pads */
+
+ static GstStaticPadTemplate sinktemplate = GST_STATIC_PAD_TEMPLATE ("sink",
+ GST_PAD_SINK,
+ GST_PAD_ALWAYS,
+ GST_STATIC_CAPS (GST_VIDEO_CAPS_MAKE (GST_VIDEO_FORMATS_ALL))
+ );
+ static GstStaticPadTemplate srctemplate = GST_STATIC_PAD_TEMPLATE ("src",
+ GST_PAD_SRC,
+ GST_PAD_ALWAYS,
+ GST_STATIC_CAPS_ANY);
+
+ rawvideoparse = gst_check_setup_element ("rawvideoparse");
+
+ properties_ctx.plane_stride = PROP_CTX_PLANE_STRIDE;
+ properties_ctx.plane_size = PROP_CTX_PLANE_SIZE;
+ properties_ctx.data = gst_adapter_new ();
+
+ sinkcaps_ctx.plane_stride = TEST_WIDTH;
+ sinkcaps_ctx.plane_size = TEST_WIDTH * TEST_HEIGHT;
+ sinkcaps_ctx.data = gst_adapter_new ();
+
+ g_object_set (G_OBJECT (rawvideoparse), "use-sink-caps", use_sink_caps, NULL);
+ if (set_properties) {
+ GValueArray *plane_offsets, *plane_strides;
+ GValue val = G_VALUE_INIT;
+
+ g_value_init (&val, G_TYPE_UINT);
+
+ plane_offsets = g_value_array_new (NUM_TEST_PLANES);
+ for (i = 0; i < NUM_TEST_PLANES; ++i) {
+ g_value_set_uint (&val, properties_ctx.plane_size * i);
+ g_value_array_insert (plane_offsets, i, &val);
+ }
+
+ plane_strides = g_value_array_new (NUM_TEST_PLANES);
+ for (i = 0; i < NUM_TEST_PLANES; ++i) {
+ g_value_set_uint (&val, properties_ctx.plane_stride);
+ g_value_array_insert (plane_strides, i, &val);
+ }
+
+ g_value_unset (&val);
+
+ g_object_set (G_OBJECT (rawvideoparse), "width", TEST_WIDTH, "height",
+ TEST_HEIGHT, "frame-stride", PROP_CTX_FRAME_STRIDE, "framerate",
+ TEST_FRAMERATE_N, TEST_FRAMERATE_D, "plane-offsets", plane_offsets,
+ "plane-strides", plane_strides, "format", TEST_FRAME_FORMAT, NULL);
+
+ g_value_array_free (plane_offsets);
+ g_value_array_free (plane_strides);
+ }
+
+ /* Check that the plane stride/offset values are correct */
+ {
+ GValueArray *plane_offsets_array;
+ GValueArray *plane_strides_array;
+ /* By default, 320x240 i420 is used as format */
+ guint plane_offsets[3] = { 0, 76800, 96000 };
+ guint plane_strides[3] = { 320, 160, 160 };
+
+ if (set_properties) {
+ /* When properties are explicitely set, we use Y444 as video format,
+ * so in that case, plane stride values are all the same */
+ plane_offsets[0] = properties_ctx.plane_size * 0;
+ plane_offsets[1] = properties_ctx.plane_size * 1;
+ plane_offsets[2] = properties_ctx.plane_size * 2;
+ plane_strides[0] = plane_strides[1] = plane_strides[2] =
+ properties_ctx.plane_stride;
+ }
+
+ g_object_get (G_OBJECT (rawvideoparse), "plane-offsets",
+ &plane_offsets_array, "plane-strides", &plane_strides_array, NULL);
+ fail_unless (plane_offsets_array != NULL);
+ fail_unless (plane_strides_array != NULL);
+ fail_unless (plane_offsets_array->n_values ==
+ plane_strides_array->n_values);
+
+ for (i = 0; i < plane_offsets_array->n_values; ++i) {
+ GValue *gvalue;
+
+ gvalue = g_value_array_get_nth (plane_offsets_array, i);
+ fail_unless (gvalue != NULL);
+ fail_unless_equals_uint64 (plane_offsets[i], g_value_get_uint (gvalue));
+
+ gvalue = g_value_array_get_nth (plane_strides_array, i);
+ fail_unless (gvalue != NULL);
+ fail_unless_equals_uint64 (plane_strides[i], g_value_get_uint (gvalue));
+ }
+
+ g_value_array_free (plane_offsets_array);
+ g_value_array_free (plane_strides_array);
+ }
+
+ fail_unless (gst_element_set_state (rawvideoparse,
+ GST_STATE_PAUSED) == GST_STATE_CHANGE_SUCCESS,
+ "could not set to paused");
+
+ mysrcpad = gst_check_setup_src_pad (rawvideoparse, &srctemplate);
+ mysinkpad = gst_check_setup_sink_pad (rawvideoparse, &sinktemplate);
+
+ gst_pad_set_active (mysrcpad, TRUE);
+ gst_pad_set_active (mysinkpad, TRUE);
+
+ gst_check_setup_events (mysrcpad, rawvideoparse, incaps, format);
+ if (incaps)
+ gst_caps_unref (incaps);
+
+
+ /* Fill the adapters with test frames */
+
+ for (i = 0; i < 10; ++i) {
+ GstBuffer *buffer =
+ gst_buffer_new_allocate (NULL, PROP_CTX_FRAME_STRIDE, NULL);
+ gst_buffer_memset (buffer, 0, 0xCC, gst_buffer_get_size (buffer));
+ fill_test_pattern (&properties_ctx, buffer, i, 0);
+ gst_adapter_push (properties_ctx.data, buffer);
+ }
+
+ for (i = 0; i < 10; ++i) {
+ GstBuffer *buffer =
+ gst_buffer_new_allocate (NULL, sinkcaps_ctx.plane_size * 3, NULL);
+ gst_buffer_memset (buffer, 0, 0xCC, gst_buffer_get_size (buffer));
+ fill_test_pattern (&sinkcaps_ctx, buffer, i, 0);
+ gst_adapter_push (sinkcaps_ctx.data, buffer);
+ }
+}
+
+static void
+cleanup_rawvideoparse (void)
+{
+ int num_buffers, i;
+
+ gst_pad_set_active (mysrcpad, FALSE);
+ gst_pad_set_active (mysinkpad, FALSE);
+ gst_check_teardown_src_pad (rawvideoparse);
+ gst_check_teardown_sink_pad (rawvideoparse);
+ gst_check_teardown_element (rawvideoparse);
+
+ g_object_unref (G_OBJECT (properties_ctx.data));
+ g_object_unref (G_OBJECT (sinkcaps_ctx.data));
+
+ if (buffers != NULL) {
+ num_buffers = g_list_length (buffers);
+ for (i = 0; i < num_buffers; ++i) {
+ GstBuffer *buf = GST_BUFFER (buffers->data);
+ buffers = g_list_remove (buffers, buf);
+ gst_buffer_unref (buf);
+ }
+
+ g_list_free (buffers);
+ buffers = NULL;
+ }
+}
+
+static void
+push_data_and_check_output (Context * ctx, gsize num_in_bytes,
+ gsize expected_num_out_bytes, gint64 expected_pts, gint64 expected_dur,
+ guint expected_num_buffers_in_list, guint buf_idx, guint xofs, guint yofs)
+{
+ GstBuffer *inbuf, *outbuf;
+ guint num_buffers;
+
+ /* Simulate upstream input by taking num_in_bytes bytes from the adapter */
+ inbuf = gst_adapter_take_buffer (ctx->data, num_in_bytes);
+ fail_unless (inbuf != NULL);
+
+ /* Push the input data and check that the output buffers list grew as
+ * expected */
+ fail_unless (gst_pad_push (mysrcpad, inbuf) == GST_FLOW_OK);
+ num_buffers = g_list_length (buffers);
+ fail_unless_equals_int (num_buffers, expected_num_buffers_in_list);
+
+ /* Take the output buffer */
+ outbuf = g_list_nth_data (buffers, buf_idx);
+ fail_unless (outbuf != NULL);
+
+ /* Verify size, PTS, duration of the output buffer */
+ fail_unless_equals_uint64 (expected_num_out_bytes,
+ gst_buffer_get_size (outbuf));
+ fail_unless_equals_uint64 (expected_pts, GST_BUFFER_PTS (outbuf));
+ fail_unless_equals_uint64 (expected_dur, GST_BUFFER_DURATION (outbuf));
+
+ /* Check that the pixels have the correct values */
+ check_test_pattern (ctx, outbuf, xofs, yofs);
+}
+
+
+GST_START_TEST (test_push_unaligned_data_properties_config)
+{
+ setup_rawvideoparse (FALSE, TRUE, NULL, GST_FORMAT_BYTES);
+
+ /* Send in data buffers that are not aligned to multiples of the
+ * frame size (= sample size * num_channels). This tests if rawvideoparse
+ * aligns output data properly.
+ *
+ * The second line sends a buffer with multiple frames inside.
+ * rawvideoparse will then parse this buffer repeatedly (and prepend
+ * leftover data from the earlier parse iteration), explaining why
+ * all of a sudden there are 4 output buffers, compared to just one
+ * earlier. The output data is expected to be 280 bytes large, since this
+ * is the size of the actual frame, without extra padding at the end.
+ */
+ push_data_and_check_output (&properties_ctx, 511, 280, GST_MSECOND * 0,
+ GST_MSECOND * 40, 1, 0, 0, 0);
+ push_data_and_check_output (&properties_ctx, 1940, 280, GST_MSECOND * 40,
+ GST_MSECOND * 40, 4, 1, 1, 0);
+ push_data_and_check_output (&properties_ctx, 10, 280, GST_MSECOND * 80,
+ GST_MSECOND * 40, 4, 2, 2, 0);
+
+ cleanup_rawvideoparse ();
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_push_unaligned_data_sink_caps_config)
+{
+ GstVideoInfo vinfo;
+ GstCaps *caps;
+
+ /* This test is essentially the same as test_push_unaligned_data_properties_config,
+ * except that rawvideoparse uses the sink caps config instead of the property config.
+ * Also, the input sizes are different, since the sink caps config does not use extra
+ * padding between planes and does use a stride that directly corresponds to the width,
+ * resulting in smaller frame size (192 bytes vs 280 bytes). */
+
+ gst_video_info_set_format (&vinfo, TEST_FRAME_FORMAT, TEST_WIDTH,
+ TEST_HEIGHT);
+ GST_VIDEO_INFO_FPS_N (&vinfo) = 25;
+ GST_VIDEO_INFO_FPS_D (&vinfo) = 1;
+ caps = gst_video_info_to_caps (&vinfo);
+
+ setup_rawvideoparse (TRUE, FALSE, caps, GST_FORMAT_BYTES);
+
+ push_data_and_check_output (&sinkcaps_ctx, 250, 192, GST_MSECOND * 0,
+ GST_MSECOND * 40, 1, 0, 0, 0);
+ push_data_and_check_output (&sinkcaps_ctx, 811, 192, GST_MSECOND * 40,
+ GST_MSECOND * 40, 5, 1, 1, 0);
+ push_data_and_check_output (&sinkcaps_ctx, 10, 192, GST_MSECOND * 80,
+ GST_MSECOND * 40, 5, 2, 2, 0);
+
+ cleanup_rawvideoparse ();
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_config_switch)
+{
+ GstVideoInfo vinfo;
+ GstCaps *caps;
+
+ /* Start processing with the properties config active, then mid-stream switch to
+ * the sink caps config. Since the sink caps config does not use padding, its
+ * frame size is smaller. The buffer duration stays the same (since it only depends
+ * on the framerate), but the expected output buffer size is different). */
+
+ gst_video_info_set_format (&vinfo, TEST_FRAME_FORMAT, TEST_WIDTH,
+ TEST_HEIGHT);
+ GST_VIDEO_INFO_FPS_N (&vinfo) = 25;
+ GST_VIDEO_INFO_FPS_D (&vinfo) = 1;
+ caps = gst_video_info_to_caps (&vinfo);
+
+ setup_rawvideoparse (FALSE, TRUE, caps, GST_FORMAT_BYTES);
+
+ /* Push in data with properties config active */
+ push_data_and_check_output (&properties_ctx, 500, 280, GST_MSECOND * 0,
+ GST_MSECOND * 40, 1, 0, 0, 0);
+ push_data_and_check_output (&properties_ctx, 500, 280, GST_MSECOND * 40,
+ GST_MSECOND * 40, 2, 1, 1, 0);
+
+ /* Perform the switch */
+ g_object_set (G_OBJECT (rawvideoparse), "use-sink-caps", TRUE, NULL);
+
+ /* Push in data with sink caps config active, expecting a different frame size */
+ push_data_and_check_output (&sinkcaps_ctx, 192, 192, GST_MSECOND * 80,
+ GST_MSECOND * 40, 3, 2, 0, 0);
+
+ cleanup_rawvideoparse ();
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_push_with_no_framerate)
+{
+ /* Test the special case when no framerate is set. The parser is expected to
+ * still work then, but without setting duration or PTS/DTS (it cannot do that,
+ * because these require a nonzero framerate). The output buffers have PTS 0,
+ * all subsequent ones have no set PTS. */
+
+ setup_rawvideoparse (FALSE, TRUE, NULL, GST_FORMAT_BYTES);
+ g_object_set (G_OBJECT (rawvideoparse), "framerate", 0, 1, NULL);
+
+ push_data_and_check_output (&properties_ctx, 500, 280, 0, GST_CLOCK_TIME_NONE,
+ 1, 0, 0, 0);
+ push_data_and_check_output (&properties_ctx, 500, 280, GST_CLOCK_TIME_NONE,
+ GST_CLOCK_TIME_NONE, 2, 1, 1, 0);
+
+ cleanup_rawvideoparse ();
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_computed_plane_strides)
+{
+ /* Test how plane strides & offsets are (re)computed if custom offsets/strides
+ * are disabled, and how they are preserved if they are enabled. */
+
+ GValueArray *plane_offsets_array;
+ GValueArray *plane_strides_array;
+ guint i;
+ guint const expected_comp_psize = TEST_WIDTH * TEST_HEIGHT;
+
+ setup_rawvideoparse (FALSE, TRUE, NULL, GST_FORMAT_BYTES);
+
+
+ /* The setup set a custom set of plane offsets and strides together with
+ * width=TEST_WIDTH and height=TEST_HEIGHT. Check that the offsets & strides
+ * are preserved even after setting new, different width & height values. */
+
+ g_object_set (G_OBJECT (rawvideoparse), "width", TEST_WIDTH * 2,
+ "height", TEST_HEIGHT * 2, NULL);
+
+ g_object_get (G_OBJECT (rawvideoparse), "plane-offsets",
+ &plane_offsets_array, "plane-strides", &plane_strides_array, NULL);
+
+ for (i = 0; i < plane_offsets_array->n_values; ++i) {
+ GValue *gvalue;
+
+ /* See setup_rawvideoparse() for how the offsets & strides are defined
+ * there. Offsets are set to plane_size*plane_index, and strides are
+ * set to the properties_ctx.plane_stride value. */
+
+ gvalue = g_value_array_get_nth (plane_offsets_array, i);
+ fail_unless (gvalue != NULL);
+ fail_unless_equals_uint64 (properties_ctx.plane_size * i,
+ g_value_get_uint (gvalue));
+
+ gvalue = g_value_array_get_nth (plane_strides_array, i);
+ fail_unless (gvalue != NULL);
+ fail_unless_equals_uint64 (properties_ctx.plane_stride,
+ g_value_get_uint (gvalue));
+ }
+
+ g_value_array_free (plane_offsets_array);
+ g_value_array_free (plane_strides_array);
+
+
+ /* Discard the custom planes&offsets, re-enabling computed values. */
+ g_object_set (G_OBJECT (rawvideoparse), "plane-offsets", (GValueArray *) NULL,
+ "plane-strides", (GValueArray *) NULL, NULL);
+
+
+ /* The strides & offsets should have been recomputed by now. Since the Y444
+ * format is used, all strides are the same, and should equal the frame width
+ * (which was set to TEST_WIDTH*2 earlier). Plane offsets should be
+ * plane_size*plane_index, with plane_size set to (TEST_WIDTH*2 * TEST_HEIGHT*2),
+ * or TEST_WIDTH*TEST_HEIGHT*4 (-> expected_comp_psize*4). */
+
+ g_object_get (G_OBJECT (rawvideoparse), "plane-offsets",
+ &plane_offsets_array, "plane-strides", &plane_strides_array, NULL);
+
+ for (i = 0; i < plane_offsets_array->n_values; ++i) {
+ GValue *gvalue;
+
+ gvalue = g_value_array_get_nth (plane_offsets_array, i);
+ fail_unless (gvalue != NULL);
+ fail_unless_equals_uint64 (expected_comp_psize * 4 * i,
+ g_value_get_uint (gvalue));
+
+ gvalue = g_value_array_get_nth (plane_strides_array, i);
+ fail_unless (gvalue != NULL);
+ fail_unless_equals_uint64 (TEST_WIDTH * 2, g_value_get_uint (gvalue));
+ }
+
+ g_value_array_free (plane_offsets_array);
+ g_value_array_free (plane_strides_array);
+
+
+ /* Again change the width & height values. width=TEST_WIDTH, height=TEST_HEIGHT.
+ * However, this time, offsets&strides are computed; the current values should
+ * not be preserved. Expected plane stride and offset values are similar to
+ * above, expect that no multiplications by 2 are present (since the TEST_WIDTH
+ * and TEST_HEIGHT values were passed without multiplying them). */
+
+ g_object_set (G_OBJECT (rawvideoparse), "width", TEST_WIDTH,
+ "height", TEST_HEIGHT, NULL);
+
+
+ g_object_get (G_OBJECT (rawvideoparse), "plane-offsets",
+ &plane_offsets_array, "plane-strides", &plane_strides_array, NULL);
+
+ for (i = 0; i < plane_offsets_array->n_values; ++i) {
+ GValue *gvalue;
+
+ gvalue = g_value_array_get_nth (plane_offsets_array, i);
+ fail_unless (gvalue != NULL);
+ fail_unless_equals_uint64 (expected_comp_psize * i,
+ g_value_get_uint (gvalue));
+
+ gvalue = g_value_array_get_nth (plane_strides_array, i);
+ fail_unless (gvalue != NULL);
+ fail_unless_equals_uint64 (TEST_WIDTH, g_value_get_uint (gvalue));
+ }
+
+ g_value_array_free (plane_offsets_array);
+ g_value_array_free (plane_strides_array);
+
+
+ cleanup_rawvideoparse ();
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_change_caps)
+{
+ GstVideoInfo vinfo;
+ GstCaps *caps;
+
+ /* Start processing with the sink caps config active, using the
+ * default width/height/format and 25 Hz frame rate for the caps.
+ * Push some data, then change caps (25 Hz -> 50 Hz).
+ * Check that the changed caps are handled properly. */
+
+ gst_video_info_set_format (&vinfo, TEST_FRAME_FORMAT, TEST_WIDTH,
+ TEST_HEIGHT);
+ GST_VIDEO_INFO_FPS_N (&vinfo) = 25;
+ GST_VIDEO_INFO_FPS_D (&vinfo) = 1;
+ caps = gst_video_info_to_caps (&vinfo);
+
+ setup_rawvideoparse (TRUE, FALSE, caps, GST_FORMAT_BYTES);
+
+ /* Push in data with sink config active, expecting duration calculations
+ * to be based on the 25 Hz frame rate */
+ push_data_and_check_output (&sinkcaps_ctx, 192, 192, GST_MSECOND * 0,
+ GST_MSECOND * 40, 1, 0, 0, 0);
+ push_data_and_check_output (&sinkcaps_ctx, 192, 192, GST_MSECOND * 40,
+ GST_MSECOND * 40, 2, 1, 1, 0);
+
+ /* Change caps */
+ GST_VIDEO_INFO_FPS_N (&vinfo) = 50;
+ GST_VIDEO_INFO_FPS_D (&vinfo) = 1;
+ caps = gst_video_info_to_caps (&vinfo);
+ fail_unless (gst_pad_push_event (mysrcpad, gst_event_new_caps (caps)));
+ gst_caps_unref (caps);
+
+ /* Push in data with sink config active, expecting duration calculations
+ * to be based on the 50 Hz frame rate */
+ push_data_and_check_output (&sinkcaps_ctx, 192, 192, GST_MSECOND * 80,
+ GST_MSECOND * 20, 3, 2, 2, 0);
+
+ cleanup_rawvideoparse ();
+}
+
+GST_END_TEST;
+
+
+static Suite *
+rawvideoparse_suite (void)
+{
+ Suite *s = suite_create ("rawvideoparse");
+ TCase *tc_chain = tcase_create ("general");
+
+ suite_add_tcase (s, tc_chain);
+ tcase_add_test (tc_chain, test_push_unaligned_data_properties_config);
+ tcase_add_test (tc_chain, test_push_unaligned_data_sink_caps_config);
+ tcase_add_test (tc_chain, test_config_switch);
+ tcase_add_test (tc_chain, test_push_with_no_framerate);
+ tcase_add_test (tc_chain, test_computed_plane_strides);
+ tcase_add_test (tc_chain, test_change_caps);
+
+ return s;
+}
+
+GST_CHECK_MAIN (rawvideoparse);
diff --git a/tests/check/libs/gstglcontext.c b/tests/check/libs/gstglcontext.c
index 662e3a7..25f3e00 100644
--- a/tests/check/libs/gstglcontext.c
+++ b/tests/check/libs/gstglcontext.c
@@ -43,7 +43,7 @@
}
static GstGLMemory *gl_tex;
-static GLuint vbo, vbo_indices, vao, fbo_id, rbo;
+static GLuint vbo, vbo_indices, vao;
static GstGLFramebuffer *fbo;
static GstGLShader *shader;
static GLint shader_attr_position_loc;
@@ -75,10 +75,9 @@
GST_GL_TEXTURE_TARGET_2D, GST_VIDEO_GL_TEXTURE_TYPE_RGBA);
/* has to be called in the thread that is going to use the framebuffer */
- fbo = gst_gl_framebuffer_new (context);
+ fbo = gst_gl_framebuffer_new_with_default_depth (context, 320, 240);
- gst_gl_framebuffer_generate (fbo, 320, 240, &fbo_id, &rbo);
- fail_if (fbo == NULL || fbo_id == 0, "failed to create framebuffer object");
+ fail_if (fbo == NULL, "failed to create framebuffer object");
gl_tex =
(GstGLMemory *) gst_gl_base_memory_alloc ((GstGLBaseMemoryAllocator *)
@@ -109,7 +108,7 @@
gst_memory_unref (GST_MEMORY_CAST (gl_tex));
}
-static void
+static gboolean
clear_tex (gpointer data)
{
GstGLContext *context = data;
@@ -122,13 +121,15 @@
r = r > 1.0 ? 0.0 : r + 0.03;
g = g > 1.0 ? 0.0 : g + 0.01;
b = b > 1.0 ? 0.0 : b + 0.015;
+
+ return TRUE;
}
static void
draw_tex (gpointer data)
{
- gst_gl_framebuffer_use_v2 (fbo, 320, 240, fbo_id, rbo,
- gst_gl_memory_get_texture_id (gl_tex), (GLCB_V2) clear_tex, data);
+ gst_gl_framebuffer_draw_to_texture (fbo, gl_tex,
+ (GstGLFramebufferFunc) clear_tex, data);
}
static void
@@ -275,7 +276,8 @@
gst_gl_window_set_preferred_size (window, 320, 240);
gst_gl_window_draw (window);
- gst_gl_window_send_message (other_window, GST_GL_WINDOW_CB (init), context);
+ gst_gl_window_send_message (other_window, GST_GL_WINDOW_CB (init),
+ other_context);
gst_gl_window_send_message (window, GST_GL_WINDOW_CB (init_blit), context);
while (i < 10) {
@@ -286,7 +288,8 @@
i++;
}
- gst_gl_window_send_message (other_window, GST_GL_WINDOW_CB (deinit), context);
+ gst_gl_window_send_message (other_window, GST_GL_WINDOW_CB (deinit),
+ other_context);
gst_gl_window_send_message (window, GST_GL_WINDOW_CB (deinit_blit), context);
gst_object_unref (window);
@@ -380,7 +383,8 @@
gst_gl_window_set_preferred_size (window, 320, 240);
gst_gl_window_draw (window);
- gst_gl_window_send_message (other_window, GST_GL_WINDOW_CB (init), context);
+ gst_gl_window_send_message (other_window, GST_GL_WINDOW_CB (init),
+ other_context);
gst_gl_window_send_message (window, GST_GL_WINDOW_CB (init_blit), context);
while (i < 10) {
@@ -394,7 +398,8 @@
gst_gl_window_send_message (window, GST_GL_WINDOW_CB (check_wrapped),
wrapped_context);
- gst_gl_window_send_message (other_window, GST_GL_WINDOW_CB (deinit), context);
+ gst_gl_window_send_message (other_window, GST_GL_WINDOW_CB (deinit),
+ other_context);
gst_gl_window_send_message (window, GST_GL_WINDOW_CB (deinit_blit), context);
gst_object_unref (other_context);
diff --git a/tests/check/libs/gstglmemory.c b/tests/check/libs/gstglmemory.c
index f8f9840..0cdd1dd 100644
--- a/tests/check/libs/gstglmemory.c
+++ b/tests/check/libs/gstglmemory.c
@@ -102,10 +102,6 @@
&gl_mem->info) == FALSE);
fail_if (gl_mem->mem.context != gl_mem2->mem.context);
- if (gst_gl_context_get_error ())
- printf ("%s\n", gst_gl_context_get_error ());
- fail_if (gst_gl_context_get_error () != NULL);
-
gst_gl_allocation_params_free ((GstGLAllocationParams *) params);
gst_memory_unref (mem);
gst_memory_unref (mem2);
@@ -272,10 +268,6 @@
fail_unless (GST_MEMORY_FLAG_IS_SET (mem3,
GST_GL_BASE_MEMORY_TRANSFER_NEED_DOWNLOAD));
- if (gst_gl_context_get_error ())
- printf ("%s\n", gst_gl_context_get_error ());
- fail_if (gst_gl_context_get_error () != NULL);
-
gst_memory_unref (mem);
gst_memory_unref (mem2);
gst_memory_unref (mem3);
@@ -334,10 +326,6 @@
/* FIXME: add download transfer */
- if (gst_gl_context_get_error ())
- printf ("%s\n", gst_gl_context_get_error ());
- fail_if (gst_gl_context_get_error () != NULL);
-
gst_memory_unref (mem);
gst_object_unref (gl_allocator);
}
diff --git a/tests/check/libs/gstglupload.c b/tests/check/libs/gstglupload.c
index 4f9e4b2..7c52a85 100644
--- a/tests/check/libs/gstglupload.c
+++ b/tests/check/libs/gstglupload.c
@@ -37,6 +37,16 @@
static GstGLShader *shader;
static GLint shader_attr_position_loc;
static GLint shader_attr_texture_loc;
+static guint vbo, vbo_indices, vao;
+
+static const GLfloat vertices[] = {
+ 1.0f, 1.0f, 0.0f, 1.0f, 0.0f,
+ -1.0f, 1.0f, 0.0f, 0.0f, 0.0f,
+ -1.0f, -1.0f, 0.0f, 0.0f, 1.0f,
+ 1.0f, -1.0f, 0.0f, 1.0f, 1.0f
+};
+
+static GLushort indices[] = { 0, 1, 2, 0, 2, 3 };
#define FORMAT GST_VIDEO_GL_TEXTURE_TYPE_RGBA
#define WIDTH 10
@@ -91,8 +101,41 @@
}
static void
+_bind_buffer (GstGLContext * context)
+{
+ const GstGLFuncs *gl = context->gl_vtable;
+
+ gl->BindBuffer (GL_ELEMENT_ARRAY_BUFFER, vbo_indices);
+ gl->BindBuffer (GL_ARRAY_BUFFER, vbo);
+
+ /* Load the vertex position */
+ gl->VertexAttribPointer (shader_attr_position_loc, 3, GL_FLOAT, GL_FALSE,
+ 5 * sizeof (GLfloat), (void *) 0);
+
+ /* Load the texture coordinate */
+ gl->VertexAttribPointer (shader_attr_texture_loc, 2, GL_FLOAT, GL_FALSE,
+ 5 * sizeof (GLfloat), (void *) (3 * sizeof (GLfloat)));
+
+ gl->EnableVertexAttribArray (shader_attr_position_loc);
+ gl->EnableVertexAttribArray (shader_attr_texture_loc);
+}
+
+static void
+_unbind_buffer (GstGLContext * context)
+{
+ const GstGLFuncs *gl = context->gl_vtable;
+
+ gl->BindBuffer (GL_ELEMENT_ARRAY_BUFFER, 0);
+ gl->BindBuffer (GL_ARRAY_BUFFER, 0);
+
+ gl->DisableVertexAttribArray (shader_attr_position_loc);
+ gl->DisableVertexAttribArray (shader_attr_texture_loc);
+}
+
+static void
init (gpointer data)
{
+ const GstGLFuncs *gl = context->gl_vtable;
GError *error = NULL;
shader = gst_gl_shader_new_default (context, &error);
@@ -101,7 +144,49 @@
shader_attr_position_loc =
gst_gl_shader_get_attribute_location (shader, "a_position");
shader_attr_texture_loc =
- gst_gl_shader_get_attribute_location (shader, "a_texCoord");
+ gst_gl_shader_get_attribute_location (shader, "a_texcoord");
+
+ if (!vbo) {
+ if (gl->GenVertexArrays) {
+ gl->GenVertexArrays (1, &vao);
+ gl->BindVertexArray (vao);
+ }
+
+ gl->GenBuffers (1, &vbo);
+ gl->BindBuffer (GL_ARRAY_BUFFER, vbo);
+ gl->BufferData (GL_ARRAY_BUFFER, 4 * 5 * sizeof (GLfloat), vertices,
+ GL_STATIC_DRAW);
+
+ gl->GenBuffers (1, &vbo_indices);
+ gl->BindBuffer (GL_ELEMENT_ARRAY_BUFFER, vbo_indices);
+ gl->BufferData (GL_ELEMENT_ARRAY_BUFFER, sizeof (indices), indices,
+ GL_STATIC_DRAW);
+
+ if (gl->GenVertexArrays) {
+ _bind_buffer (context);
+ gl->BindVertexArray (0);
+ }
+
+ gl->BindBuffer (GL_ARRAY_BUFFER, 0);
+ gl->BindBuffer (GL_ELEMENT_ARRAY_BUFFER, 0);
+ }
+}
+
+static void
+deinit (gpointer data)
+{
+ GstGLContext *context = data;
+ const GstGLFuncs *gl = context->gl_vtable;
+
+ if (vbo)
+ gl->DeleteBuffers (1, &vbo);
+ vbo = 0;
+ if (vbo_indices)
+ gl->DeleteBuffers (1, &vbo_indices);
+ vbo_indices = 0;
+ if (vao)
+ gl->DeleteVertexArrays (1, &vao);
+ vao = 0;
}
static void
@@ -110,32 +195,15 @@
GstGLContext *context = data;
GstGLContextClass *context_class = GST_GL_CONTEXT_GET_CLASS (context);
const GstGLFuncs *gl = context->gl_vtable;
- const GLfloat vVertices[] = { 1.0f, 1.0f, 0.0f,
- 1.0f, 0.0f,
- -1.0f, 1.0f, 0.0f,
- 0.0f, 0.0f,
- -1.0f, -1.0f, 0.0f,
- 0.0f, 1.0f,
- 1.0f, -1.0f, 0.0f,
- 1.0f, 1.0f
- };
-
- GLushort indices[] = { 0, 1, 2, 0, 2, 3 };
gl->Clear (GL_COLOR_BUFFER_BIT);
gst_gl_shader_use (shader);
- /* Load the vertex position */
- gl->VertexAttribPointer (shader_attr_position_loc, 3,
- GL_FLOAT, GL_FALSE, 5 * sizeof (GLfloat), vVertices);
-
- /* Load the texture coordinate */
- gl->VertexAttribPointer (shader_attr_texture_loc, 2,
- GL_FLOAT, GL_FALSE, 5 * sizeof (GLfloat), &vVertices[3]);
-
- gl->EnableVertexAttribArray (shader_attr_position_loc);
- gl->EnableVertexAttribArray (shader_attr_texture_loc);
+ if (gl->GenVertexArrays)
+ gl->BindVertexArray (vao);
+ else
+ _bind_buffer (context);
gl->ActiveTexture (GL_TEXTURE0);
gl->BindTexture (GL_TEXTURE_2D, tex_id);
@@ -143,6 +211,11 @@
gl->DrawElements (GL_TRIANGLES, 6, GL_UNSIGNED_SHORT, indices);
+ if (gl->GenVertexArrays)
+ gl->BindVertexArray (0);
+ else
+ _unbind_buffer (context);
+
context_class->swap_buffers (context);
}
@@ -165,8 +238,7 @@
0, WIDTH * HEIGHT * 4, NULL, NULL);
res = gst_gl_upload_perform_with_buffer (upload, inbuf, &outbuf);
- fail_if (res == FALSE, "Failed to upload buffer: %s\n",
- gst_gl_context_get_error ());
+ fail_if (res == FALSE, "Failed to upload buffer");
fail_unless (GST_IS_BUFFER (outbuf));
res = gst_buffer_map (outbuf, &map_info, GST_MAP_READ | GST_MAP_GL);
@@ -186,6 +258,7 @@
context);
i++;
}
+ gst_gl_window_send_message (window, GST_GL_WINDOW_CB (deinit), context);
gst_caps_unref (in_caps);
gst_caps_unref (out_caps);
@@ -195,13 +268,14 @@
GST_END_TEST;
-GST_START_TEST (test_upload_buffer)
+GST_START_TEST (test_upload_gl_memory)
{
GstGLBaseMemoryAllocator *base_mem_alloc;
GstGLVideoAllocationParams *params;
GstBuffer *buffer, *outbuf;
GstGLMemory *gl_mem;
GstCaps *in_caps, *out_caps;
+ GstStructure *out_s;
GstVideoInfo in_info;
GstMapInfo map_info;
gint i = 0;
@@ -232,14 +306,53 @@
gst_buffer_append_memory (buffer, (GstMemory *) gl_mem);
+ /* at this point glupload hasn't received any buffers so can output anything */
+ out_caps = gst_gl_upload_transform_caps (upload, context,
+ GST_PAD_SINK, in_caps, NULL);
+ out_s = gst_caps_get_structure (out_caps, 0);
+ fail_unless (gst_structure_has_field_typed (out_s, "texture-target",
+ GST_TYPE_LIST));
+ gst_caps_unref (out_caps);
+
+ /* set some output caps without setting texture-target: this should trigger RECONFIGURE */
out_caps = gst_caps_from_string ("video/x-raw(memory:GLMemory),"
"format=RGBA,width=10,height=10");
+ /* set caps with texture-target not fixed. This should trigger RECONFIGURE. */
gst_gl_upload_set_caps (upload, in_caps, out_caps);
+ gst_caps_unref (out_caps);
+
+ /* push a texture-target=2D buffer */
+ res = gst_gl_upload_perform_with_buffer (upload, buffer, &outbuf);
+ fail_unless (res == GST_GL_UPLOAD_RECONFIGURE);
+ fail_if (outbuf);
+
+ /* now glupload has seen a 2D buffer and so wants to transform to that */
+ out_caps = gst_gl_upload_transform_caps (upload, context,
+ GST_PAD_SINK, in_caps, NULL);
+ out_s = gst_caps_get_structure (out_caps, 0);
+ fail_unless_equals_string (gst_structure_get_string (out_s, "texture-target"),
+ "2D");
+ gst_caps_unref (out_caps);
+
+ /* try setting the wrong type first tho */
+ out_caps = gst_caps_from_string ("video/x-raw(memory:GLMemory),"
+ "format=RGBA,width=10,height=10,texture-target=RECTANGLE");
+ gst_gl_upload_set_caps (upload, in_caps, out_caps);
+ gst_caps_unref (out_caps);
res = gst_gl_upload_perform_with_buffer (upload, buffer, &outbuf);
- fail_if (res == FALSE, "Failed to upload buffer: %s\n",
- gst_gl_context_get_error ());
+ fail_unless (res == GST_GL_UPLOAD_RECONFIGURE);
+ fail_if (outbuf);
+
+ /* finally do set the correct texture-target */
+ out_caps = gst_caps_from_string ("video/x-raw(memory:GLMemory),"
+ "format=RGBA,width=10,height=10,texture-target=2D");
+ gst_gl_upload_set_caps (upload, in_caps, out_caps);
+ gst_caps_unref (out_caps);
+
+ res = gst_gl_upload_perform_with_buffer (upload, buffer, &outbuf);
+ fail_unless (res == GST_GL_UPLOAD_DONE, "Failed to upload buffer");
fail_unless (GST_IS_BUFFER (outbuf));
gst_gl_window_set_preferred_size (window, WIDTH, HEIGHT);
@@ -251,9 +364,9 @@
context);
i++;
}
+ gst_gl_window_send_message (window, GST_GL_WINDOW_CB (deinit), context);
gst_caps_unref (in_caps);
- gst_caps_unref (out_caps);
gst_buffer_unref (buffer);
gst_buffer_unref (outbuf);
gst_object_unref (base_mem_alloc);
@@ -271,7 +384,7 @@
suite_add_tcase (s, tc_chain);
tcase_add_checked_fixture (tc_chain, setup, teardown);
tcase_add_test (tc_chain, test_upload_data);
- tcase_add_test (tc_chain, test_upload_buffer);
+ tcase_add_test (tc_chain, test_upload_gl_memory);
return s;
}
diff --git a/tests/check/libs/player.c b/tests/check/libs/player.c
index 52a7ca0..e4c83fc 100644
--- a/tests/check/libs/player.c
+++ b/tests/check/libs/player.c
@@ -100,20 +100,17 @@
{
GstPlayer *player;
guint interval = 0;
+ GstStructure *config;
player = gst_player_new (NULL, NULL);
fail_unless (player != NULL);
- gst_player_set_position_update_interval (player, 500);
- interval = gst_player_get_position_update_interval (player);
-
+ config = gst_player_get_config (player);
+ gst_player_config_set_position_update_interval (config, 500);
+ interval = gst_player_config_get_position_update_interval (config);
fail_unless (interval == 500);
-
- g_object_set (player, "position-update-interval", 1000, NULL);
- g_object_get (player, "position-update-interval", &interval, NULL);
-
- fail_unless_equals_int (interval, 1000);
+ gst_player_set_config (player, config);
g_object_unref (player);
}
@@ -1476,7 +1473,6 @@
if (do_quit && position >= 2000 * GST_MSECOND) {
do_quit = FALSE;
- gst_player_set_position_update_interval (player, 0);
g_main_loop_quit (new_state->loop);
}
} else if (change == STATE_CHANGE_END_OF_STREAM ||
@@ -1499,6 +1495,7 @@
GstPlayer *player;
TestPlayerState state;
gchar *uri;
+ GstStructure *config;
memset (&state, 0, sizeof (state));
state.loop = g_main_loop_new (NULL, FALSE);
@@ -1506,7 +1503,10 @@
state.test_data = GINT_TO_POINTER (0);
player = test_player_new (&state);
- gst_player_set_position_update_interval (player, 600);
+
+ config = gst_player_get_config (player);
+ gst_player_config_set_position_update_interval (config, 600);
+ gst_player_set_config (player, config);
fail_unless (player != NULL);
@@ -1520,6 +1520,13 @@
fail_unless_equals_int (GPOINTER_TO_INT (state.test_data), 5);
+ /* Disable position updates */
+ gst_player_stop (player);
+
+ config = gst_player_get_config (player);
+ gst_player_config_set_position_update_interval (config, 0);
+ gst_player_set_config (player, config);
+
g_timeout_add (2000, quit_loop_cb, state.loop);
g_main_loop_run (state.loop);
@@ -1612,6 +1619,58 @@
END_TEST;
+#define TEST_USER_AGENT "test user agent"
+
+static void
+source_setup_cb (GstElement * playbin, GstElement * source, GMainLoop * loop)
+{
+ gchar *user_agent;
+
+ g_object_get (source, "user-agent", &user_agent, NULL);
+ fail_unless_equals_string (user_agent, TEST_USER_AGENT);
+ g_free (user_agent);
+
+ g_main_loop_quit (loop);
+}
+
+START_TEST (test_user_agent)
+{
+ GstPlayer *player;
+ GMainLoop *loop;
+ GstElement *pipeline;
+ GstStructure *config;
+ gchar *user_agent;
+
+ loop = g_main_loop_new (NULL, FALSE);
+ player = gst_player_new (NULL, NULL);
+ fail_unless (player != NULL);
+
+ gst_player_set_uri (player, "http://badger.com/test.mkv");
+
+ config = gst_player_get_config (player);
+ gst_player_config_set_user_agent (config, TEST_USER_AGENT);
+
+ user_agent = gst_player_config_get_user_agent (config);
+ fail_unless_equals_string (user_agent, TEST_USER_AGENT);
+ g_free (user_agent);
+
+ gst_player_set_config (player, config);
+
+ pipeline = gst_player_get_pipeline (player);
+ g_signal_connect (pipeline, "source-setup", G_CALLBACK (source_setup_cb),
+ loop);
+
+ gst_player_pause (player);
+ g_main_loop_run (loop);
+
+ gst_object_unref (pipeline);
+
+ g_object_unref (player);
+ g_main_loop_unref (loop);
+}
+
+END_TEST;
+
static Suite *
player_suite (void)
{
@@ -1654,6 +1713,7 @@
tcase_add_test (tc_general, test_play_backward_rate);
tcase_add_test (tc_general, test_play_audio_video_seek_done);
tcase_add_test (tc_general, test_restart);
+ tcase_add_test (tc_general, test_user_agent);
suite_add_tcase (s, tc_general);
diff --git a/tests/check/pipelines/simple-launch-lines.c b/tests/check/pipelines/simple-launch-lines.c
index 5cfc98c..f03fc94 100644
--- a/tests/check/pipelines/simple-launch-lines.c
+++ b/tests/check/pipelines/simple-launch-lines.c
@@ -188,6 +188,8 @@
}
GST_END_TEST
+#ifdef HAVE_PNG
+#if HAVE_JPEG
GST_START_TEST (test_gloverlay)
{
const gchar *s;
@@ -207,6 +209,8 @@
}
GST_END_TEST
+#endif
+#endif
#if GST_GL_HAVE_OPENGL
#define N_SRCS 13
GST_START_TEST (test_gltestsrc)
@@ -333,7 +337,7 @@
tcase_add_test (tc_chain, test_glshader);
tcase_add_test (tc_chain, test_glfilterapp);
#ifdef HAVE_PNG
-#ifdef HAVE_JPEG
+#if HAVE_JPEG
tcase_add_test (tc_chain, test_gloverlay);
#endif
#endif
@@ -346,7 +350,7 @@
#ifdef HAVE_PNG
tcase_add_test (tc_chain, test_gldifferencematte);
/* tcase_add_test (tc_chain, test_glbumper);*/
-#ifdef HAVE_JPEG
+#if HAVE_JPEG
#endif /* HAVE_JPEG */
#endif /* HAVE_PNG */
#endif /* GST_GL_HAVE_OPENGL */
diff --git a/tests/examples/Makefile.in b/tests/examples/Makefile.in
index 2063f5d..803ee0d 100644
--- a/tests/examples/Makefile.in
+++ b/tests/examples/Makefile.in
@@ -341,6 +341,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -390,6 +392,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/tests/examples/avsamplesink/Makefile.in b/tests/examples/avsamplesink/Makefile.in
index 4697408..b89b942 100644
--- a/tests/examples/avsamplesink/Makefile.in
+++ b/tests/examples/avsamplesink/Makefile.in
@@ -295,6 +295,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -344,6 +346,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/tests/examples/camerabin2/Makefile.in b/tests/examples/camerabin2/Makefile.in
index 6873f0a..1756f39 100644
--- a/tests/examples/camerabin2/Makefile.in
+++ b/tests/examples/camerabin2/Makefile.in
@@ -313,6 +313,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -362,6 +364,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/tests/examples/codecparsers/Makefile.in b/tests/examples/codecparsers/Makefile.in
index 9d1e72d..86bdf11 100644
--- a/tests/examples/codecparsers/Makefile.in
+++ b/tests/examples/codecparsers/Makefile.in
@@ -298,6 +298,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -347,6 +349,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/tests/examples/directfb/Makefile.in b/tests/examples/directfb/Makefile.in
index e0cd6bb..ff39816 100644
--- a/tests/examples/directfb/Makefile.in
+++ b/tests/examples/directfb/Makefile.in
@@ -292,6 +292,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -341,6 +343,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/tests/examples/gl/Makefile.in b/tests/examples/gl/Makefile.in
index d9dbcc5..533c7b6 100644
--- a/tests/examples/gl/Makefile.in
+++ b/tests/examples/gl/Makefile.in
@@ -303,6 +303,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -352,6 +354,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/tests/examples/gl/clutter/Makefile.in b/tests/examples/gl/clutter/Makefile.in
index e89fae1..6a290fd 100644
--- a/tests/examples/gl/clutter/Makefile.in
+++ b/tests/examples/gl/clutter/Makefile.in
@@ -335,6 +335,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -384,6 +386,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/tests/examples/gl/cocoa/Makefile.in b/tests/examples/gl/cocoa/Makefile.in
index 62c4dd4..8880a29 100644
--- a/tests/examples/gl/cocoa/Makefile.in
+++ b/tests/examples/gl/cocoa/Makefile.in
@@ -298,6 +298,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -347,6 +349,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/tests/examples/gl/generic/Makefile.in b/tests/examples/gl/generic/Makefile.in
index daad8f0..de99217 100644
--- a/tests/examples/gl/generic/Makefile.in
+++ b/tests/examples/gl/generic/Makefile.in
@@ -299,6 +299,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -348,6 +350,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/tests/examples/gl/generic/cube/Makefile.in b/tests/examples/gl/generic/cube/Makefile.in
index 4ebbb77..572dc66 100644
--- a/tests/examples/gl/generic/cube/Makefile.in
+++ b/tests/examples/gl/generic/cube/Makefile.in
@@ -294,6 +294,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -343,6 +345,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/tests/examples/gl/generic/cubeyuv/Makefile.in b/tests/examples/gl/generic/cubeyuv/Makefile.in
index ec151aa..ad626a9 100644
--- a/tests/examples/gl/generic/cubeyuv/Makefile.in
+++ b/tests/examples/gl/generic/cubeyuv/Makefile.in
@@ -294,6 +294,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -343,6 +345,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/tests/examples/gl/generic/doublecube/Makefile.in b/tests/examples/gl/generic/doublecube/Makefile.in
index c11d5a4..bc0e573 100644
--- a/tests/examples/gl/generic/doublecube/Makefile.in
+++ b/tests/examples/gl/generic/doublecube/Makefile.in
@@ -294,6 +294,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -343,6 +345,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/tests/examples/gl/generic/recordgraphic/Makefile.in b/tests/examples/gl/generic/recordgraphic/Makefile.in
index aee6f90..088e093 100644
--- a/tests/examples/gl/generic/recordgraphic/Makefile.in
+++ b/tests/examples/gl/generic/recordgraphic/Makefile.in
@@ -295,6 +295,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -344,6 +346,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/tests/examples/gl/gtk/3dvideo/Makefile.in b/tests/examples/gl/gtk/3dvideo/Makefile.in
index 7d1367f..ce5c4a6 100644
--- a/tests/examples/gl/gtk/3dvideo/Makefile.in
+++ b/tests/examples/gl/gtk/3dvideo/Makefile.in
@@ -318,6 +318,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -367,6 +369,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/tests/examples/gl/gtk/Makefile.in b/tests/examples/gl/gtk/Makefile.in
index 113dfb2..b7ab5fb 100644
--- a/tests/examples/gl/gtk/Makefile.in
+++ b/tests/examples/gl/gtk/Makefile.in
@@ -335,6 +335,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -384,6 +386,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/tests/examples/gl/gtk/filternovideooverlay/Makefile.in b/tests/examples/gl/gtk/filternovideooverlay/Makefile.in
index 7e3aac2..dd578f8 100644
--- a/tests/examples/gl/gtk/filternovideooverlay/Makefile.in
+++ b/tests/examples/gl/gtk/filternovideooverlay/Makefile.in
@@ -296,6 +296,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -345,6 +347,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/tests/examples/gl/gtk/filtervideooverlay/Makefile.in b/tests/examples/gl/gtk/filtervideooverlay/Makefile.in
index fdb9370..c90fe5e 100644
--- a/tests/examples/gl/gtk/filtervideooverlay/Makefile.in
+++ b/tests/examples/gl/gtk/filtervideooverlay/Makefile.in
@@ -297,6 +297,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -346,6 +348,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/tests/examples/gl/gtk/fxtest/Makefile.in b/tests/examples/gl/gtk/fxtest/Makefile.in
index 217bc45..e0f05af 100644
--- a/tests/examples/gl/gtk/fxtest/Makefile.in
+++ b/tests/examples/gl/gtk/fxtest/Makefile.in
@@ -303,6 +303,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -352,6 +354,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/tests/examples/gl/gtk/fxtest/fxtest.c b/tests/examples/gl/gtk/fxtest/fxtest.c
index 4b60b54..8b56b96 100644
--- a/tests/examples/gl/gtk/fxtest/fxtest.c
+++ b/tests/examples/gl/gtk/fxtest/fxtest.c
@@ -40,6 +40,9 @@
static GstBusSyncReply
create_window (GstBus * bus, GstMessage * message, GtkWidget * widget)
{
+ if (gst_gtk_handle_need_context (bus, message, NULL))
+ return GST_BUS_DROP;
+
/* ignore anything but 'prepare-window-handle' element messages */
if (GST_MESSAGE_TYPE (message) != GST_MESSAGE_ELEMENT)
return GST_BUS_PASS;
@@ -98,6 +101,22 @@
}
static gboolean
+resize_cb (GtkWidget * widget, GdkEvent * event, gpointer data)
+{
+ GtkAllocation allocation;
+ GstVideoOverlay *overlay =
+ GST_VIDEO_OVERLAY (gst_bin_get_by_interface (GST_BIN (data),
+ GST_TYPE_VIDEO_OVERLAY));
+
+ gtk_widget_get_allocation (widget, &allocation);
+ gst_video_overlay_set_render_rectangle (overlay, allocation.x, allocation.y,
+ allocation.width, allocation.height);
+ gst_object_unref (overlay);
+
+ return G_SOURCE_CONTINUE;
+}
+
+static gboolean
expose_cb (GtkWidget * widget, gpointer unused, gpointer data)
{
GstVideoOverlay *overlay =
@@ -330,7 +349,7 @@
gtk_container_add (GTK_CONTAINER (window), vbox);
g_signal_connect (screen, "draw", G_CALLBACK (expose_cb), pipeline);
- g_signal_connect (screen, "configure-event", G_CALLBACK (expose_cb),
+ g_signal_connect (screen, "configure-event", G_CALLBACK (resize_cb),
pipeline);
gtk_widget_realize (screen);
diff --git a/tests/examples/gl/gtk/switchvideooverlay/Makefile.in b/tests/examples/gl/gtk/switchvideooverlay/Makefile.in
index bc2c0d4..16a30de 100644
--- a/tests/examples/gl/gtk/switchvideooverlay/Makefile.in
+++ b/tests/examples/gl/gtk/switchvideooverlay/Makefile.in
@@ -297,6 +297,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -346,6 +348,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/tests/examples/gl/qt/Makefile.in b/tests/examples/gl/qt/Makefile.in
index a7e25cd..9cf080c 100644
--- a/tests/examples/gl/qt/Makefile.in
+++ b/tests/examples/gl/qt/Makefile.in
@@ -239,6 +239,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -288,6 +290,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/tests/examples/gl/sdl/Makefile.in b/tests/examples/gl/sdl/Makefile.in
index 02dea70..2301892 100644
--- a/tests/examples/gl/sdl/Makefile.in
+++ b/tests/examples/gl/sdl/Makefile.in
@@ -310,6 +310,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -359,6 +361,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/tests/examples/gtk/Makefile.in b/tests/examples/gtk/Makefile.in
index 9d0463a..c2bdbc2 100644
--- a/tests/examples/gtk/Makefile.in
+++ b/tests/examples/gtk/Makefile.in
@@ -322,6 +322,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -371,6 +373,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/tests/examples/mpegts/Makefile.in b/tests/examples/mpegts/Makefile.in
index 51a015b..311443f 100644
--- a/tests/examples/mpegts/Makefile.in
+++ b/tests/examples/mpegts/Makefile.in
@@ -292,6 +292,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -341,6 +343,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/tests/examples/mxf/Makefile.in b/tests/examples/mxf/Makefile.in
index f92839d..1dee61a 100644
--- a/tests/examples/mxf/Makefile.in
+++ b/tests/examples/mxf/Makefile.in
@@ -297,6 +297,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -346,6 +348,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/tests/examples/opencv/Makefile.in b/tests/examples/opencv/Makefile.in
index 1d004cb..6a00c49 100644
--- a/tests/examples/opencv/Makefile.in
+++ b/tests/examples/opencv/Makefile.in
@@ -314,6 +314,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -363,6 +365,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/tests/examples/uvch264/Makefile.in b/tests/examples/uvch264/Makefile.in
index 7c5a51a..06ae78a 100644
--- a/tests/examples/uvch264/Makefile.in
+++ b/tests/examples/uvch264/Makefile.in
@@ -300,6 +300,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -349,6 +351,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/tests/examples/waylandsink/Makefile.in b/tests/examples/waylandsink/Makefile.in
index 7eb31ae..3d773df 100644
--- a/tests/examples/waylandsink/Makefile.in
+++ b/tests/examples/waylandsink/Makefile.in
@@ -296,6 +296,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -345,6 +347,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/tests/files/Makefile.in b/tests/files/Makefile.in
index ccd7563..27e7cc2 100644
--- a/tests/files/Makefile.in
+++ b/tests/files/Makefile.in
@@ -239,6 +239,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -288,6 +290,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/tests/icles/Makefile.in b/tests/icles/Makefile.in
index f516851..814f147 100644
--- a/tests/icles/Makefile.in
+++ b/tests/icles/Makefile.in
@@ -297,6 +297,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -346,6 +348,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/tools/Makefile.in b/tools/Makefile.in
index f3442b6..869f9b8 100644
--- a/tools/Makefile.in
+++ b/tools/Makefile.in
@@ -239,6 +239,8 @@
EXIF_LIBS = @EXIF_LIBS@
FAAC_LIBS = @FAAC_LIBS@
FAAD_LIBS = @FAAD_LIBS@
+FDK_AAC_CFLAGS = @FDK_AAC_CFLAGS@
+FDK_AAC_LIBS = @FDK_AAC_LIBS@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLITE_CFLAGS = @FLITE_CFLAGS@
@@ -288,6 +290,8 @@
GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_API_VERSION = @GST_API_VERSION@
+GST_AUDIO_CFLAGS = @GST_AUDIO_CFLAGS@
+GST_AUDIO_LIBS = @GST_AUDIO_LIBS@
GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
GST_BASE_LIBS = @GST_BASE_LIBS@
GST_CFLAGS = @GST_CFLAGS@
diff --git a/win32/common/config.h b/win32/common/config.h
index 30f058b..0f7fa12 100644
--- a/win32/common/config.h
+++ b/win32/common/config.h
@@ -86,7 +86,7 @@
#define GST_PACKAGE_ORIGIN "Unknown package origin"
/* GStreamer package release date/time for plugins as YYYY-MM-DD */
-#define GST_PACKAGE_RELEASE_DATETIME "2016-06-06"
+#define GST_PACKAGE_RELEASE_DATETIME "2016-09-01"
/* Define if static plugins should be built */
#undef GST_PLUGIN_BUILD_STATIC
@@ -226,6 +226,9 @@
/* Define to enable DVB Source (used by dvb). */
#undef HAVE_DVB
+/* Define to 1 if the system has the type `EGLAttrib'. */
+#undef HAVE_EGLATTRIB
+
/* Define to enable building of experimental plug-ins. */
#undef HAVE_EXPERIMENTAL
@@ -244,6 +247,9 @@
/* Define to 1 if you have the <fcntl.h> header file. */
#undef HAVE_FCNTL_H
+/* Define to enable fdkaac plugin (used by fdkaac). */
+#undef HAVE_FDK_AAC
+
/* FIONREAD ioctl found in sys/filio.h */
#undef HAVE_FIONREAD_IN_SYS_FILIO
@@ -355,6 +361,9 @@
/* Define to enable libvisual visualization library (used by libvisual). */
#undef HAVE_LIBVISUAL
+/* Define if we have liblilv >= 0.22 */
+#undef HAVE_LILV_0_22
+
/* Define to enable Linear Systems SDI plugin (used by linsys). */
#undef HAVE_LINSYS
@@ -495,6 +504,9 @@
/* Define to enable Qt elements (used by qt). */
#undef HAVE_QT
+/* Define if building with QTKit */
+#undef HAVE_QTKIT
+
/* Define if Qt eglfs integration is installed */
#undef HAVE_QT_EGLFS
@@ -725,7 +737,7 @@
#define PACKAGE_NAME "GStreamer Bad Plug-ins"
/* Define to the full name and version of this package. */
-#define PACKAGE_STRING "GStreamer Bad Plug-ins 1.9.1"
+#define PACKAGE_STRING "GStreamer Bad Plug-ins 1.9.2"
/* Define to the one symbol short name of this package. */
#define PACKAGE_TARNAME "gst-plugins-bad"
@@ -734,7 +746,7 @@
#undef PACKAGE_URL
/* Define to the version of this package. */
-#define PACKAGE_VERSION "1.9.1"
+#define PACKAGE_VERSION "1.9.2"
/* directory where plugins are located */
#ifdef _DEBUG
@@ -778,7 +790,7 @@
#undef USE_EGL_RPI
/* Version number of package */
-#define VERSION "1.9.1"
+#define VERSION "1.9.2"
/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most
significant byte first (like Motorola and SPARC, unlike Intel). */